diff options
1784 files changed, 9249 insertions, 8044 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index a87293d..bf47314 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -102,6 +102,8 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew $(call add-clean-step, rm -rf $(OUT_DIR)target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/keystore/java/android/security/IKeyChainAliasResponse.java) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/nfc) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/SystemUI_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/R/com/android/systemui/R.java) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/api/current.txt b/api/current.txt index 72ba551..fee4df6 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23,6 +23,7 @@ package android { field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD"; field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS"; field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE"; + field public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE"; field public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER"; field public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH"; field public static final java.lang.String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN"; @@ -189,6 +190,8 @@ package android { field public static final int accountPreferences = 16843423; // 0x101029f field public static final int accountType = 16843407; // 0x101028f field public static final int action = 16842797; // 0x101002d + field public static final int actionBarDivider = 16843685; // 0x10103a5 + field public static final int actionBarItemBackground = 16843686; // 0x10103a6 field public static final int actionBarSize = 16843499; // 0x10102eb field public static final int actionBarSplitStyle = 16843666; // 0x1010392 field public static final int actionBarStyle = 16843470; // 0x10102ce @@ -208,6 +211,7 @@ package android { field public static final int actionModeCutDrawable = 16843537; // 0x1010311 field public static final int actionModePasteDrawable = 16843539; // 0x1010313 field public static final int actionModeSelectAllDrawable = 16843642; // 0x101037a + field public static final int actionModeSplitBackground = 16843687; // 0x10103a7 field public static final int actionModeStyle = 16843678; // 0x101039e field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6 field public static final int actionProviderClass = 16843667; // 0x1010393 @@ -2918,6 +2922,76 @@ package android.app { method public abstract void onActivityStopped(android.app.Activity); } + public class ApplicationErrorReport implements android.os.Parcelable { + ctor public ApplicationErrorReport(); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, java.lang.String, int); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_ANR = 2; // 0x2 + field public static final int TYPE_BATTERY = 3; // 0x3 + field public static final int TYPE_CRASH = 1; // 0x1 + field public static final int TYPE_NONE = 0; // 0x0 + field public static final int TYPE_RUNNING_SERVICE = 5; // 0x5 + field public android.app.ApplicationErrorReport.AnrInfo anrInfo; + field public android.app.ApplicationErrorReport.BatteryInfo batteryInfo; + field public android.app.ApplicationErrorReport.CrashInfo crashInfo; + field public java.lang.String installerPackageName; + field public java.lang.String packageName; + field public java.lang.String processName; + field public android.app.ApplicationErrorReport.RunningServiceInfo runningServiceInfo; + field public boolean systemApp; + field public long time; + field public int type; + } + + public static class ApplicationErrorReport.AnrInfo { + ctor public ApplicationErrorReport.AnrInfo(); + ctor public ApplicationErrorReport.AnrInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String activity; + field public java.lang.String cause; + field public java.lang.String info; + } + + public static class ApplicationErrorReport.BatteryInfo { + ctor public ApplicationErrorReport.BatteryInfo(); + ctor public ApplicationErrorReport.BatteryInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String checkinDetails; + field public long durationMicros; + field public java.lang.String usageDetails; + field public int usagePercent; + } + + public static class ApplicationErrorReport.CrashInfo { + ctor public ApplicationErrorReport.CrashInfo(); + ctor public ApplicationErrorReport.CrashInfo(java.lang.Throwable); + ctor public ApplicationErrorReport.CrashInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String exceptionClassName; + field public java.lang.String exceptionMessage; + field public java.lang.String stackTrace; + field public java.lang.String throwClassName; + field public java.lang.String throwFileName; + field public int throwLineNumber; + field public java.lang.String throwMethodName; + } + + public static class ApplicationErrorReport.RunningServiceInfo { + ctor public ApplicationErrorReport.RunningServiceInfo(); + ctor public ApplicationErrorReport.RunningServiceInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public long durationMillis; + field public java.lang.String serviceDetails; + } + public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener { ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int); ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int); @@ -3558,6 +3632,7 @@ package android.app { method public android.app.Notification.Builder setNumber(int); method public android.app.Notification.Builder setOngoing(boolean); method public android.app.Notification.Builder setOnlyAlertOnce(boolean); + method public android.app.Notification.Builder setProgress(int, int, boolean); method public android.app.Notification.Builder setSmallIcon(int); method public android.app.Notification.Builder setSmallIcon(int, int); method public android.app.Notification.Builder setSound(android.net.Uri); @@ -3655,6 +3730,7 @@ package android.app { field public static final java.lang.String EXTRA_DATA_KEY = "intent_extra_data_key"; field public static final java.lang.String EXTRA_NEW_SEARCH = "new_search"; field public static final java.lang.String EXTRA_SELECT_QUERY = "select_query"; + field public static final java.lang.String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent"; field public static final int FLAG_QUERY_REFINEMENT = 1; // 0x1 field public static final java.lang.String INTENT_ACTION_GLOBAL_SEARCH = "android.search.action.GLOBAL_SEARCH"; field public static final java.lang.String INTENT_ACTION_SEARCHABLES_CHANGED = "android.search.action.SEARCHABLES_CHANGED"; @@ -5267,6 +5343,7 @@ package android.content { field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER"; + field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED"; field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; @@ -5298,6 +5375,7 @@ package android.content { field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED"; field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT"; field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; + field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED"; field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN"; field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE"; @@ -5321,7 +5399,8 @@ package android.content { field public static final java.lang.String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; field public static final java.lang.String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED"; field public static final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH"; - field public static final java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; + field public static final java.lang.String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED"; + field public static final deprecated java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; @@ -5351,6 +5430,7 @@ package android.content { field public static final java.lang.String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED"; field public static final deprecated java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; field public static final deprecated java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED"; + field public static final java.lang.String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE"; field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW"; field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; @@ -5381,7 +5461,9 @@ package android.content { field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; + field public static final java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC"; + field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC"; field public static final deprecated java.lang.String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name"; field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list"; @@ -5397,12 +5479,15 @@ package android.content { field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; + field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT"; field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT"; field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY"; + field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE"; field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token"; field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING"; + field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT"; field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON"; field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE"; field public static final java.lang.String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT"; @@ -9097,6 +9182,7 @@ package android.hardware { method public final void release(); method public final void setDisplayOrientation(int); method public final void setErrorCallback(android.hardware.Camera.ErrorCallback); + method public final void setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener); method public final void setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback); method public void setParameters(android.hardware.Camera.Parameters); method public final void setPreviewCallback(android.hardware.Camera.PreviewCallback); @@ -9104,8 +9190,10 @@ package android.hardware { method public final void setPreviewDisplay(android.view.SurfaceHolder) throws java.io.IOException; method public final void setPreviewTexture(android.graphics.SurfaceTexture) throws java.io.IOException; method public final void setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener); + method public final void startFaceDetection(); method public final void startPreview(); method public final void startSmoothZoom(int); + method public final void stopFaceDetection(); method public final void stopPreview(); method public final void stopSmoothZoom(); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); @@ -9139,6 +9227,16 @@ package android.hardware { method public abstract void onError(int, android.hardware.Camera); } + public static class Camera.Face { + ctor public Camera.Face(); + field public android.graphics.Rect rect; + field public int score; + } + + public static abstract interface Camera.FaceDetectionListener { + method public abstract void onFaceDetection(android.hardware.Camera.Face[], android.hardware.Camera); + } + public static abstract interface Camera.OnZoomChangeListener { method public abstract void onZoomChange(int, boolean, android.hardware.Camera); } @@ -9163,6 +9261,7 @@ package android.hardware { method public int getJpegThumbnailQuality(); method public android.hardware.Camera.Size getJpegThumbnailSize(); method public int getMaxExposureCompensation(); + method public int getMaxNumDetectedFaces(); method public int getMaxNumFocusAreas(); method public int getMaxNumMeteringAreas(); method public int getMaxZoom(); @@ -11664,6 +11763,32 @@ package android.net { method public abstract java.lang.String sanitize(java.lang.String); } + public class VpnService extends android.app.Service { + ctor public VpnService(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onRevoke(); + method public static android.content.Intent prepare(android.content.Context); + method public boolean protect(int); + method public boolean protect(java.net.Socket); + method public boolean protect(java.net.DatagramSocket); + field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; + } + + public class VpnService.Builder { + ctor public VpnService.Builder(); + method public android.net.VpnService.Builder addAddress(java.net.InetAddress, int); + method public android.net.VpnService.Builder addAddress(java.lang.String, int); + method public android.net.VpnService.Builder addDnsServer(java.net.InetAddress); + method public android.net.VpnService.Builder addDnsServer(java.lang.String); + method public android.net.VpnService.Builder addRoute(java.net.InetAddress, int); + method public android.net.VpnService.Builder addRoute(java.lang.String, int); + method public android.net.VpnService.Builder addSearchDomain(java.lang.String); + method public android.os.ParcelFileDescriptor establish(); + method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); + method public android.net.VpnService.Builder setMtu(int); + method public android.net.VpnService.Builder setSession(java.lang.String); + } + } package android.net.http { @@ -17032,6 +17157,7 @@ package android.provider { field public static final deprecated java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth"; field public static final java.lang.String RADIO_CELL = "cell"; + field public static final java.lang.String RADIO_NFC = "nfc"; field public static final java.lang.String RADIO_WIFI = "wifi"; field public static final java.lang.String RINGTONE = "ringtone"; field public static final java.lang.String SCREEN_BRIGHTNESS = "screen_brightness"; @@ -17146,6 +17272,7 @@ package android.provider { } public class VoicemailContract { + field public static final java.lang.String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL"; field public static final java.lang.String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL"; field public static final java.lang.String AUTHORITY = "com.android.voicemail"; field public static final java.lang.String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE"; @@ -17929,7 +18056,7 @@ package android.renderscript { method public void destroyRenderScriptGL(); method public android.renderscript.RenderScriptGL getRenderScriptGL(); method public void onSurfaceTextureAvailable(android.graphics.SurfaceTexture, int, int); - method public void onSurfaceTextureDestroyed(android.graphics.SurfaceTexture); + method public boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture); method public void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture, int, int); method public void onSurfaceTextureUpdated(android.graphics.SurfaceTexture); method public void pause(); @@ -22350,7 +22477,7 @@ package android.view { public static abstract interface TextureView.SurfaceTextureListener { method public abstract void onSurfaceTextureAvailable(android.graphics.SurfaceTexture, int, int); - method public abstract void onSurfaceTextureDestroyed(android.graphics.SurfaceTexture); + method public abstract boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture); method public abstract void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture, int, int); method public abstract void onSurfaceTextureUpdated(android.graphics.SurfaceTexture); } @@ -26455,6 +26582,8 @@ package android.widget { method public void onActionViewExpanded(); method public void setIconified(boolean); method public void setIconifiedByDefault(boolean); + method public void setImeOptions(int); + method public void setInputType(int); method public void setMaxWidth(int); method public void setOnCloseListener(android.widget.SearchView.OnCloseListener); method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener); diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index 52b2d91..c2beb74 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c @@ -197,6 +197,8 @@ static void dumpstate() { dump_file(NULL, "/sys/class/leds/lcd-backlight/registers"); printf("\n"); + run_command("LIST OF OPEN FILES", 10, "su", "root", "lsof", NULL); + #ifdef BOARD_HAS_DUMPSTATE printf("========================================================\n"); printf("== Board\n"); diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java index 06d18ec..9e2b833 100644 --- a/core/java/android/animation/LayoutTransition.java +++ b/core/java/android/animation/LayoutTransition.java @@ -593,11 +593,13 @@ public class LayoutTransition { } } if (mAnimateParentHierarchy) { + Animator parentAnimator = (changeReason == APPEARING) ? + defaultChangeIn : defaultChangeOut; ViewGroup tempParent = parent; while (tempParent != null) { ViewParent parentParent = tempParent.getParent(); if (parentParent instanceof ViewGroup) { - setupChangeAnimation((ViewGroup)parentParent, changeReason, baseAnimator, + setupChangeAnimation((ViewGroup)parentParent, changeReason, parentAnimator, duration, tempParent); tempParent = (ViewGroup) parentParent; } else { @@ -626,12 +628,18 @@ public class LayoutTransition { /** * This flag controls whether CHANGE_APPEARING or CHANGE_DISAPPEARING animations will - * cause the same changing animation to be run on the parent hierarchy as well. This allows + * cause the default changing animation to be run on the parent hierarchy as well. This allows * containers of transitioning views to also transition, which may be necessary in situations * where the containers bounds change between the before/after states and may clip their * children during the transition animations. For example, layouts with wrap_content will * adjust their bounds according to the dimensions of their children. * + * <p>The default changing transitions animate the bounds and scroll positions of the + * target views. These are the animations that will run on the parent hierarchy, not + * the custom animations that happen to be set on the transition. This allows custom + * behavior for the children of the transitioning container, but uses standard behavior + * of resizing/rescrolling on any changing parents. + * * @param animateParentHierarchy A boolean value indicating whether the parents of * transitioning views should also be animated during the transition. Default value is true. */ diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index 5df8bdc..edd0fa3 100755 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -54,8 +54,8 @@ public class ValueAnimator extends Animator { * Messages sent to timing handler: START is sent when an animation first begins, FRAME is sent * by the handler to itself to process the next animation frame */ - private static final int ANIMATION_START = 0; - private static final int ANIMATION_FRAME = 1; + static final int ANIMATION_START = 0; + static final int ANIMATION_FRAME = 1; /** * Values used with internal variable mPlayingState to indicate the current state of an diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 98b867d..929867b 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -1445,10 +1445,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link Fragment} API - * {@link Fragment#setRetainInstance(boolean)} instead; this is also - * available on older platforms through the Android compatibility package. - * * Retrieve the non-configuration instance data that was previously * returned by {@link #onRetainNonConfigurationInstance()}. This will * be available from the initial {@link #onCreate} and @@ -1464,6 +1460,10 @@ public class Activity extends ContextThemeWrapper * * @return Returns the object previously returned by * {@link #onRetainNonConfigurationInstance()}. + * + * @deprecated Use the new {@link Fragment} API + * {@link Fragment#setRetainInstance(boolean)} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public Object getLastNonConfigurationInstance() { @@ -1472,10 +1472,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link Fragment} API - * {@link Fragment#setRetainInstance(boolean)} instead; this is also - * available on older platforms through the Android compatibility package. - * * Called by the system, as part of destroying an * activity due to a configuration change, when it is known that a new * instance will immediately be created for the new configuration. You @@ -1522,6 +1518,10 @@ public class Activity extends ContextThemeWrapper * * @return Return any Object holding the desired state to propagate to the * next activity instance. + * + * @deprecated Use the new {@link Fragment} API + * {@link Fragment#setRetainInstance(boolean)} instead; this is also + * available on older platforms through the Android compatibility package. */ public Object onRetainNonConfigurationInstance() { return null; @@ -1696,10 +1696,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link android.content.CursorLoader} class with - * {@link LoaderManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * This method allows the activity to take care of managing the given * {@link Cursor}'s lifecycle for you based on the activity's lifecycle. * That is, when the activity is stopped it will automatically call @@ -1715,6 +1711,10 @@ public class Activity extends ContextThemeWrapper * * @see #managedQuery(android.net.Uri , String[], String, String[], String) * @see #stopManagingCursor + * + * @deprecated Use the new {@link android.content.CursorLoader} class with + * {@link LoaderManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public void startManagingCursor(Cursor c) { @@ -1724,10 +1724,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link android.content.CursorLoader} class with - * {@link LoaderManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Given a Cursor that was previously given to * {@link #startManagingCursor}, stop the activity's management of that * cursor. @@ -1735,6 +1731,10 @@ public class Activity extends ContextThemeWrapper * @param c The Cursor that was being managed. * * @see #startManagingCursor + * + * @deprecated Use the new {@link android.content.CursorLoader} class with + * {@link LoaderManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public void stopManagingCursor(Cursor c) { @@ -2746,10 +2746,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Callback for creating dialogs that are managed (saved and restored) for you * by the activity. The default implementation calls through to * {@link #onCreateDialog(int)} for compatibility. @@ -2777,6 +2773,10 @@ public class Activity extends ContextThemeWrapper * @see #showDialog(int, Bundle) * @see #dismissDialog(int) * @see #removeDialog(int) + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated protected Dialog onCreateDialog(int id, Bundle args) { @@ -2793,10 +2793,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Provides an opportunity to prepare a managed dialog before it is being * shown. The default implementation calls through to * {@link #onPrepareDialog(int, Dialog)} for compatibility. @@ -2815,6 +2811,10 @@ public class Activity extends ContextThemeWrapper * @see #showDialog(int) * @see #dismissDialog(int) * @see #removeDialog(int) + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { @@ -2822,13 +2822,13 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Simple version of {@link #showDialog(int, Bundle)} that does not * take any arguments. Simply calls {@link #showDialog(int, Bundle)} * with null arguments. + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public final void showDialog(int id) { @@ -2836,10 +2836,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Show a dialog managed by this activity. A call to {@link #onCreateDialog(int, Bundle)} * will be made with the same id the first time this is called for a given * id. From thereafter, the dialog will be automatically saved and restored. @@ -2864,6 +2860,10 @@ public class Activity extends ContextThemeWrapper * @see #onPrepareDialog(int, Dialog, Bundle) * @see #dismissDialog(int) * @see #removeDialog(int) + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public final boolean showDialog(int id, Bundle args) { @@ -2887,10 +2887,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Dismiss a dialog that was previously shown via {@link #showDialog(int)}. * * @param id The id of the managed dialog. @@ -2902,6 +2898,10 @@ public class Activity extends ContextThemeWrapper * @see #onPrepareDialog(int, Dialog, Bundle) * @see #showDialog(int) * @see #removeDialog(int) + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public final void dismissDialog(int id) { @@ -2926,10 +2926,6 @@ public class Activity extends ContextThemeWrapper } /** - * @deprecated Use the new {@link DialogFragment} class with - * {@link FragmentManager} instead; this is also - * available on older platforms through the Android compatibility package. - * * Removes any internal references to a dialog managed by this Activity. * If the dialog is showing, it will dismiss it as part of the clean up. * @@ -2946,6 +2942,10 @@ public class Activity extends ContextThemeWrapper * @see #onPrepareDialog(int, Dialog, Bundle) * @see #showDialog(int) * @see #dismissDialog(int) + * + * @deprecated Use the new {@link DialogFragment} class with + * {@link FragmentManager} instead; this is also + * available on older platforms through the Android compatibility package. */ @Deprecated public final void removeDialog(int id) { diff --git a/core/java/android/app/ActivityGroup.java b/core/java/android/app/ActivityGroup.java index fbd78be..78a4dfd 100644 --- a/core/java/android/app/ActivityGroup.java +++ b/core/java/android/app/ActivityGroup.java @@ -20,18 +20,16 @@ import java.util.HashMap; import android.content.Intent; import android.os.Bundle; -import android.util.Log; /** + * A screen that contains and runs multiple embedded activities. + * * @deprecated Use the new {@link Fragment} and {@link FragmentManager} APIs * instead; these are also * available on older platforms through the Android compatibility package. - * - * A screen that contains and runs multiple embedded activities. */ @Deprecated public class ActivityGroup extends Activity { - private static final String TAG = "ActivityGroup"; private static final String STATES_KEY = "android:states"; static final String PARENT_NON_CONFIG_INSTANCE_KEY = "android:parent_non_config_instance"; diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index f7e5cf1..93e30af 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -18,6 +18,7 @@ package android.app; import com.android.internal.app.IUsageStats; import com.android.internal.os.PkgUsageStats; +import com.android.internal.util.MemInfoReader; import android.content.ComponentName; import android.content.Context; @@ -28,6 +29,7 @@ import android.content.pm.IPackageDataObserver; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Point; import android.os.Debug; import android.os.Handler; import android.os.Parcel; @@ -38,6 +40,8 @@ import android.os.SystemProperties; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; +import android.util.Slog; +import android.view.Display; import java.util.ArrayList; import java.util.HashMap; @@ -206,6 +210,31 @@ public class ActivityManager { } /** + * Used by persistent processes to determine if they are running on a + * higher-end device so should be okay using hardware drawing acceleration + * (which tends to consume a lot more RAM). + * @hide + */ + static public boolean isHighEndGfx(Display display) { + MemInfoReader reader = new MemInfoReader(); + reader.readMemInfo(); + if (reader.getTotalSize() >= (512*1024*1024)) { + // If the device has at least 512MB RAM available to the kernel, + // we can afford the overhead of graphics acceleration. + return true; + } + Point p = new Point(); + display.getRealSize(p); + int pixels = p.x * p.y; + if (pixels >= (1024*600)) { + // If this is a sufficiently large screen, then there are enough + // pixels on it that we'd really like to use hw drawing. + return true; + } + return false; + } + + /** * Information you can retrieve about tasks that the user has most recently * started or visited. */ diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java index 1e012eb..588125d 100644 --- a/core/java/android/app/ApplicationErrorReport.java +++ b/core/java/android/app/ApplicationErrorReport.java @@ -37,14 +37,17 @@ import java.io.StringWriter; * * A report has a type, which is one of * <ul> + * <li> {@link #TYPE_NONE} uninitialized instance of {@link ApplicationErrorReport}. * <li> {@link #TYPE_CRASH} application crash. Information about the crash * is stored in {@link #crashInfo}. * <li> {@link #TYPE_ANR} application not responding. Information about the * ANR is stored in {@link #anrInfo}. - * <li> {@link #TYPE_NONE} uninitialized instance of {@link ApplicationErrorReport}. + * <li> {@link #TYPE_BATTERY} user reported application is using too much + * battery. Information about the battery use is stored in {@link #batteryInfo}. + * <li> {@link #TYPE_RUNNING_SERVICE} user reported application is leaving an + * unneeded serive running. Information about the battery use is stored in + * {@link #runningServiceInfo}. * </ul> - * - * @hide */ public class ApplicationErrorReport implements Parcelable { @@ -329,20 +332,31 @@ public class ApplicationErrorReport implements Parcelable { exceptionMessage = tr.getMessage(); // Populate fields with the "root cause" exception + Throwable rootTr = tr; while (tr.getCause() != null) { tr = tr.getCause(); + if (tr.getStackTrace() != null && tr.getStackTrace().length > 0) { + rootTr = tr; + } String msg = tr.getMessage(); if (msg != null && msg.length() > 0) { exceptionMessage = msg; } } - exceptionClassName = tr.getClass().getName(); - StackTraceElement trace = tr.getStackTrace()[0]; - throwFileName = trace.getFileName(); - throwClassName = trace.getClassName(); - throwMethodName = trace.getMethodName(); - throwLineNumber = trace.getLineNumber(); + exceptionClassName = rootTr.getClass().getName(); + if (rootTr.getStackTrace().length > 0) { + StackTraceElement trace = rootTr.getStackTrace()[0]; + throwFileName = trace.getFileName(); + throwClassName = trace.getClassName(); + throwMethodName = trace.getMethodName(); + throwLineNumber = trace.getLineNumber(); + } else { + throwFileName = "unknown"; + throwClassName = "unknown"; + throwMethodName = "unknown"; + throwLineNumber = 0; + } } /** diff --git a/core/java/android/app/LocalActivityManager.java b/core/java/android/app/LocalActivityManager.java index 0a6b804..b654a6a 100644 --- a/core/java/android/app/LocalActivityManager.java +++ b/core/java/android/app/LocalActivityManager.java @@ -28,15 +28,15 @@ import java.util.HashMap; import java.util.Map; /** - * @deprecated Use the new {@link Fragment} and {@link FragmentManager} APIs - * instead; these are also - * available on older platforms through the Android compatibility package. - * * <p>Helper class for managing multiple running embedded activities in the same * process. This class is not normally used directly, but rather created for * you as part of the {@link android.app.ActivityGroup} implementation. * * @see ActivityGroup + * + * @deprecated Use the new {@link Fragment} and {@link FragmentManager} APIs + * instead; these are also + * available on older platforms through the Android compatibility package. */ @Deprecated public class LocalActivityManager { diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 170d2b5..9490b96 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -26,6 +26,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.view.View; +import android.widget.ProgressBar; import android.widget.RemoteViews; import java.text.NumberFormat; @@ -645,6 +646,9 @@ public class Notification implements Parcelable private int mLedOffMs; private int mDefaults; private int mFlags; + private int mProgressMax; + private int mProgress; + private boolean mProgressIndeterminate; /** * Constructor. @@ -736,6 +740,17 @@ public class Notification implements Parcelable } /** + * Set the progress this notification represents, which may be + * represented as a {@link ProgressBar}. + */ + public Builder setProgress(int max, int progress, boolean indeterminate) { + mProgressMax = max; + mProgress = progress; + mProgressIndeterminate = indeterminate; + return this; + } + + /** * Supply a custom RemoteViews to use instead of the standard one. */ public Builder setContent(RemoteViews views) { @@ -917,17 +932,24 @@ public class Notification implements Parcelable private RemoteViews makeRemoteViews(int resId) { RemoteViews contentView = new RemoteViews(mContext.getPackageName(), resId); + boolean hasLine3 = false; if (mSmallIcon != 0) { contentView.setImageViewResource(R.id.icon, mSmallIcon); + contentView.setViewVisibility(R.id.icon, View.VISIBLE); + } else { + contentView.setViewVisibility(R.id.icon, View.GONE); } if (mContentTitle != null) { contentView.setTextViewText(R.id.title, mContentTitle); } if (mContentText != null) { contentView.setTextViewText(R.id.text, mContentText); + hasLine3 = true; } if (mContentInfo != null) { contentView.setTextViewText(R.id.info, mContentInfo); + contentView.setViewVisibility(R.id.info, View.VISIBLE); + hasLine3 = true; } else if (mNumber > 0) { final int tooBig = mContext.getResources().getInteger( R.integer.status_bar_notification_info_maxnum); @@ -938,12 +960,22 @@ public class Notification implements Parcelable NumberFormat f = NumberFormat.getIntegerInstance(); contentView.setTextViewText(R.id.info, f.format(mNumber)); } + contentView.setViewVisibility(R.id.info, View.VISIBLE); + hasLine3 = true; } else { contentView.setViewVisibility(R.id.info, View.GONE); } + if (mProgressMax != 0 || mProgressIndeterminate) { + contentView.setProgressBar( + R.id.progress, mProgressMax, mProgress, mProgressIndeterminate); + contentView.setViewVisibility(R.id.progress, View.VISIBLE); + } else { + contentView.setViewVisibility(R.id.progress, View.GONE); + } if (mWhen != 0) { contentView.setLong(R.id.time, "setTime", mWhen); } + contentView.setViewVisibility(R.id.line3, hasLine3 ? View.VISIBLE : View.GONE); return contentView; } diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 7274362..5c4cc87 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -145,6 +145,14 @@ public class SearchManager public final static String EXTRA_NEW_SEARCH = "new_search"; /** + * Extra data key for {@link Intent#ACTION_WEB_SEARCH}. If set, the value must be a + * {@link PendingIntent}. The search activity handling the {@link Intent#ACTION_WEB_SEARCH} + * intent will fill in and launch the pending intent. The data URI will be filled in with an + * http or https URI, and {@link android.provider.Browser#EXTRA_HEADERS} may be filled in. + */ + public static final String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent"; + + /** * Boolean extra data key for a suggestion provider to return in {@link Cursor#getExtras} to * indicate that the search is not complete yet. This can be used by the search UI * to indicate that a search is in progress. The suggestion provider can return partial results diff --git a/core/java/android/app/TabActivity.java b/core/java/android/app/TabActivity.java index 0fd0c2c..882e55a 100644 --- a/core/java/android/app/TabActivity.java +++ b/core/java/android/app/TabActivity.java @@ -23,11 +23,6 @@ import android.widget.TabWidget; import android.widget.TextView; /** - * @deprecated New applications should use Fragments instead of this class; - * to continue to run on older devices, you can use the v4 support library - * which provides a version of the Fragment API that is compatible down to - * {@link android.os.Build.VERSION_CODES#DONUT}. - * * <p>For apps developing against {@link android.os.Build.VERSION_CODES#HONEYCOMB} * or later, tabs are typically presented in the UI using the new * {@link ActionBar#newTab() ActionBar.newTab()} and @@ -49,6 +44,11 @@ import android.widget.TextView; * <p>Also see the <a href="{@docRoot}resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html"> * Fragment Tabs Pager</a> sample for an example of using the support library's ViewPager to * allow the user to swipe the content to switch between tabs.</p> + * + * @deprecated New applications should use Fragments instead of this class; + * to continue to run on older devices, you can use the v4 support library + * which provides a version of the Fragment API that is compatible down to + * {@link android.os.Build.VERSION_CODES#DONUT}. */ @Deprecated public class TabActivity extends ActivityGroup { diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 2f9627a..2579ced 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1132,7 +1132,8 @@ public class Intent implements Parcelable, Cloneable { * <p>Input: No data is specified. The bug report is passed in using * an {@link #EXTRA_BUG_REPORT} field. * <p>Output: Nothing. - * @hide + * + * @see #EXTRA_BUG_REPORT */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; @@ -1169,6 +1170,80 @@ public class Intent implements Parcelable, Cloneable { "android.intent.action.MANAGE_NETWORK_USAGE"; /** + * Activity Action: Launch application installer. + * <p> + * Input: The data must be a content: or file: URI at which the application + * can be retrieved. You can optionally supply + * {@link #EXTRA_INSTALLER_PACKAGE_NAME}, {@link #EXTRA_NOT_UNKNOWN_SOURCE}, + * {@link #EXTRA_ALLOW_REPLACE}, and {@link #EXTRA_RETURN_RESULT}. + * <p> + * Output: If {@link #EXTRA_RETURN_RESULT}, returns whether the install + * succeeded. + * + * @see #EXTRA_INSTALLER_PACKAGE_NAME + * @see #EXTRA_NOT_UNKNOWN_SOURCE + * @see #EXTRA_RETURN_RESULT + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; + + /** + * Used as a string extra field with {@link #ACTION_INSTALL_PACKAGE} to install a + * package. Specifies the installer package name; this package will receive the + * {@link #ACTION_APP_ERROR} intent. + */ + public static final String EXTRA_INSTALLER_PACKAGE_NAME + = "android.intent.extra.INSTALLER_PACKAGE_NAME"; + + /** + * Used as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a + * package. Specifies that the application being installed should not be + * treated as coming from an unknown source, but as coming from the app + * invoking the Intent. For this to work you must start the installer with + * startActivityForResult(). + */ + public static final String EXTRA_NOT_UNKNOWN_SOURCE + = "android.intent.extra.NOT_UNKNOWN_SOURCE"; + + /** + * Used as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a + * package. Tells the installer UI to skip the confirmation with the user + * if the .apk is replacing an existing one. + */ + public static final String EXTRA_ALLOW_REPLACE + = "android.intent.extra.ALLOW_REPLACE"; + + /** + * Used as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} or + * {@link #ACTION_UNINSTALL_PACKAGE}. Specifies that the installer UI should + * return to the application the result code of the install/uninstall. The returned result + * code will be {@link android.app.Activity#RESULT_OK} on success or + * {@link android.app.Activity#RESULT_FIRST_USER} on failure. + */ + public static final String EXTRA_RETURN_RESULT + = "android.intent.extra.RETURN_RESULT"; + + /** + * Package manager install result code. @hide because result codes are not + * yet ready to be exposed. + */ + public static final String EXTRA_INSTALL_RESULT + = "android.intent.extra.INSTALL_RESULT"; + + /** + * Activity Action: Launch application uninstaller. + * <p> + * Input: The data must be a package: URI whose scheme specific part is + * the package name of the current installed package to be uninstalled. + * You can optionally supply {@link #EXTRA_RETURN_RESULT}. + * <p> + * Output: If {@link #EXTRA_RETURN_RESULT}, returns whether the install + * succeeded. + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE"; + + /** * A string associated with a {@link #ACTION_UPGRADE_SETUP} activity * describing the last run version of the platform that was setup. * @hide @@ -1287,7 +1362,10 @@ public class Intent implements Parcelable, Cloneable { * * <p class="note">This is a protected intent that can only be sent * by the system. + * + * @deprecated This constant has never been used. */ + @Deprecated @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; /** @@ -1350,6 +1428,24 @@ public class Intent implements Parcelable, Cloneable { @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; /** + * Broadcast Action: An existing application package has been completely + * removed from the device. The data contains the name of the package. + * This is like {@link #ACTION_PACKAGE_REMOVED}, but only set when + * {@link #EXTRA_DATA_REMOVED} is true and + * {@link #EXTRA_REPLACING} is false of that broadcast. + * + * <ul> + * <li> {@link #EXTRA_UID} containing the integer uid previously assigned + * to the package. + * </ul> + * + * <p class="note">This is a protected intent that can only be sent + * by the system. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_PACKAGE_FULLY_REMOVED + = "android.intent.action.PACKAGE_FULLY_REMOVED"; + /** * Broadcast Action: An existing application package has been changed (e.g. * a component has been enabled or disabled). The data contains the name of * the package. @@ -2380,22 +2476,10 @@ public class Intent implements Parcelable, Cloneable { /** * Used as a parcelable extra field in {@link #ACTION_APP_ERROR}, containing * the bug report. - * - * @hide */ public static final String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; /** - * Used as a string extra field when sending an intent to PackageInstaller to install a - * package. Specifies the installer package name; this package will receive the - * {@link #ACTION_APP_ERROR} intent. - * - * @hide - */ - public static final String EXTRA_INSTALLER_PACKAGE_NAME - = "android.intent.extra.INSTALLER_PACKAGE_NAME"; - - /** * Used in the extra field in the remote intent. It's astring token passed with the * remote intent. */ diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index f3b1d94..f9b3fd5 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -996,6 +996,8 @@ public class IntentFilter implements Parcelable { /** * Return an iterator over the filter's categories. + * + * @return Iterator if this filter has categories or {@code null} if none. */ public final Iterator<String> categoriesIterator() { return mCategories != null ? mCategories.iterator() : null; diff --git a/core/java/android/content/pm/ManifestDigest.aidl b/core/java/android/content/pm/ManifestDigest.aidl new file mode 100755 index 0000000..ebabab0 --- /dev/null +++ b/core/java/android/content/pm/ManifestDigest.aidl @@ -0,0 +1,19 @@ +/* + * Copyright 2011, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm; + +parcelable ManifestDigest; diff --git a/core/java/android/content/pm/ManifestDigest.java b/core/java/android/content/pm/ManifestDigest.java new file mode 100644 index 0000000..f5e72e0 --- /dev/null +++ b/core/java/android/content/pm/ManifestDigest.java @@ -0,0 +1,114 @@ +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Base64; + +import java.util.Arrays; +import java.util.jar.Attributes; + +/** + * Represents the manifest digest for a package. This is suitable for comparison + * of two packages to know whether the manifests are identical. + * + * @hide + */ +public class ManifestDigest implements Parcelable { + /** The digest of the manifest in our preferred order. */ + private final byte[] mDigest; + + /** Digest field names to look for in preferred order. */ + private static final String[] DIGEST_TYPES = { + "SHA1-Digest", "SHA-Digest", "MD5-Digest", + }; + + /** What we print out first when toString() is called. */ + private static final String TO_STRING_PREFIX = "ManifestDigest {mDigest="; + + ManifestDigest(byte[] digest) { + mDigest = digest; + } + + private ManifestDigest(Parcel source) { + mDigest = source.createByteArray(); + } + + static ManifestDigest fromAttributes(Attributes attributes) { + if (attributes == null) { + return null; + } + + String encodedDigest = null; + + for (int i = 0; i < DIGEST_TYPES.length; i++) { + final String value = attributes.getValue(DIGEST_TYPES[i]); + if (value != null) { + encodedDigest = value; + break; + } + } + + if (encodedDigest == null) { + return null; + } + + final byte[] digest = Base64.decode(encodedDigest, Base64.DEFAULT); + return new ManifestDigest(digest); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof ManifestDigest)) { + return false; + } + + final ManifestDigest other = (ManifestDigest) o; + + return this == other || Arrays.equals(mDigest, other.mDigest); + } + + @Override + public int hashCode() { + return Arrays.hashCode(mDigest); + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder(TO_STRING_PREFIX.length() + + (mDigest.length * 3) + 1); + + sb.append(TO_STRING_PREFIX); + + final int N = mDigest.length; + for (int i = 0; i < N; i++) { + final byte b = mDigest[i]; + IntegralToString.appendByteAsHex(sb, b, false); + sb.append(','); + } + sb.append('}'); + + return sb.toString(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeByteArray(mDigest); + } + + public static final Parcelable.Creator<ManifestDigest> CREATOR + = new Parcelable.Creator<ManifestDigest>() { + public ManifestDigest createFromParcel(Parcel source) { + return new ManifestDigest(source); + } + + public ManifestDigest[] newArray(int size) { + return new ManifestDigest[size]; + } + }; + +}
\ No newline at end of file diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 22fdc98..c61e32f 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -24,13 +24,12 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; -import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.PatternMatcher; import android.util.AttributeSet; import android.util.DisplayMetrics; -import android.util.Log; +import android.util.Slog; import android.util.TypedValue; import com.android.internal.util.XmlUtils; import org.xmlpull.v1.XmlPullParser; @@ -46,8 +45,10 @@ import java.security.cert.CertificateEncodingException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; +import java.util.jar.Attributes; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import java.util.jar.Manifest; /** * Package archive parsing @@ -55,6 +56,13 @@ import java.util.jar.JarFile; * {@hide} */ public class PackageParser { + private static final boolean DEBUG_JAR = false; + private static final boolean DEBUG_PARSER = false; + private static final boolean DEBUG_BACKUP = false; + + /** File name in an APK for the Android manifest. */ + private static final String ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml"; + /** @hide */ public static class NewPermissionInfo { public final String name; @@ -342,10 +350,10 @@ public class PackageParser { is.close(); return je != null ? je.getCertificates() : null; } catch (IOException e) { - Log.w(TAG, "Exception reading " + je.getName() + " in " + Slog.w(TAG, "Exception reading " + je.getName() + " in " + jarFile.getName(), e); } catch (RuntimeException e) { - Log.w(TAG, "Exception reading " + je.getName() + " in " + Slog.w(TAG, "Exception reading " + je.getName() + " in " + jarFile.getName(), e); } return null; @@ -369,7 +377,7 @@ public class PackageParser { mArchiveSourcePath = sourceFile.getPath(); if (!sourceFile.isFile()) { - Log.w(TAG, "Skipping dir: " + mArchiveSourcePath); + Slog.w(TAG, "Skipping dir: " + mArchiveSourcePath); mParseError = PackageManager.INSTALL_PARSE_FAILED_NOT_APK; return null; } @@ -378,14 +386,14 @@ public class PackageParser { if ((flags&PARSE_IS_SYSTEM) == 0) { // We expect to have non-.apk files in the system dir, // so don't warn about them. - Log.w(TAG, "Skipping non-package file: " + mArchiveSourcePath); + Slog.w(TAG, "Skipping non-package file: " + mArchiveSourcePath); } mParseError = PackageManager.INSTALL_PARSE_FAILED_NOT_APK; return null; } - if ((flags&PARSE_CHATTY) != 0 && false) Log.d( - TAG, "Scanning package: " + mArchiveSourcePath); + if (DEBUG_JAR) + Slog.d(TAG, "Scanning package: " + mArchiveSourcePath); XmlResourceParser parser = null; AssetManager assmgr = null; @@ -398,13 +406,13 @@ public class PackageParser { res = new Resources(assmgr, metrics, null); assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Build.VERSION.RESOURCES_SDK_INT); - parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml"); + parser = assmgr.openXmlResourceParser(cookie, ANDROID_MANIFEST_FILENAME); assetError = false; } else { - Log.w(TAG, "Failed adding asset path:"+mArchiveSourcePath); + Slog.w(TAG, "Failed adding asset path:"+mArchiveSourcePath); } } catch (Exception e) { - Log.w(TAG, "Unable to read AndroidManifest.xml of " + Slog.w(TAG, "Unable to read AndroidManifest.xml of " + mArchiveSourcePath, e); } if (assetError) { @@ -426,9 +434,9 @@ public class PackageParser { if (pkg == null) { if (errorException != null) { - Log.w(TAG, mArchiveSourcePath, errorException); + Slog.w(TAG, mArchiveSourcePath, errorException); } else { - Log.w(TAG, mArchiveSourcePath + " (at " + Slog.w(TAG, mArchiveSourcePath + " (at " + parser.getPositionDescription() + "): " + errorText[0]); } @@ -480,44 +488,54 @@ public class PackageParser { // can trust it... we'll just use the AndroidManifest.xml // to retrieve its signatures, not validating all of the // files. - JarEntry jarEntry = jarFile.getJarEntry("AndroidManifest.xml"); + JarEntry jarEntry = jarFile.getJarEntry(ANDROID_MANIFEST_FILENAME); certs = loadCertificates(jarFile, jarEntry, readBuffer); if (certs == null) { - Log.e(TAG, "Package " + pkg.packageName + Slog.e(TAG, "Package " + pkg.packageName + " has no certificates at entry " + jarEntry.getName() + "; ignoring!"); jarFile.close(); mParseError = PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES; return false; } - if (false) { - Log.i(TAG, "File " + mArchiveSourcePath + ": entry=" + jarEntry + if (DEBUG_JAR) { + Slog.i(TAG, "File " + mArchiveSourcePath + ": entry=" + jarEntry + " certs=" + (certs != null ? certs.length : 0)); if (certs != null) { final int N = certs.length; for (int i=0; i<N; i++) { - Log.i(TAG, " Public key: " + Slog.i(TAG, " Public key: " + certs[i].getPublicKey().getEncoded() + " " + certs[i].getPublicKey()); } } } - } else { - Enumeration entries = jarFile.entries(); + Enumeration<JarEntry> entries = jarFile.entries(); + final Manifest manifest = jarFile.getManifest(); while (entries.hasMoreElements()) { - JarEntry je = (JarEntry)entries.nextElement(); + final JarEntry je = entries.nextElement(); if (je.isDirectory()) continue; - if (je.getName().startsWith("META-INF/")) continue; - Certificate[] localCerts = loadCertificates(jarFile, je, - readBuffer); - if (false) { - Log.i(TAG, "File " + mArchiveSourcePath + " entry " + je.getName() + + final String name = je.getName(); + + if (name.startsWith("META-INF/")) + continue; + + if (ANDROID_MANIFEST_FILENAME.equals(name)) { + final Attributes attributes = manifest.getAttributes(name); + pkg.manifestDigest = ManifestDigest.fromAttributes(attributes); + } + + final Certificate[] localCerts = loadCertificates(jarFile, je, readBuffer); + if (DEBUG_JAR) { + Slog.i(TAG, "File " + mArchiveSourcePath + " entry " + je.getName() + ": certs=" + certs + " (" + (certs != null ? certs.length : 0) + ")"); } + if (localCerts == null) { - Log.e(TAG, "Package " + pkg.packageName + Slog.e(TAG, "Package " + pkg.packageName + " has no certificates at entry " + je.getName() + "; ignoring!"); jarFile.close(); @@ -537,7 +555,7 @@ public class PackageParser { } } if (!found || certs.length != localCerts.length) { - Log.e(TAG, "Package " + pkg.packageName + Slog.e(TAG, "Package " + pkg.packageName + " has mismatched certificates at entry " + je.getName() + "; ignoring!"); jarFile.close(); @@ -562,21 +580,21 @@ public class PackageParser { certs[i].getEncoded()); } } else { - Log.e(TAG, "Package " + pkg.packageName + Slog.e(TAG, "Package " + pkg.packageName + " has no certificates; ignoring!"); mParseError = PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES; return false; } } catch (CertificateEncodingException e) { - Log.w(TAG, "Exception reading " + mArchiveSourcePath, e); + Slog.w(TAG, "Exception reading " + mArchiveSourcePath, e); mParseError = PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING; return false; } catch (IOException e) { - Log.w(TAG, "Exception reading " + mArchiveSourcePath, e); + Slog.w(TAG, "Exception reading " + mArchiveSourcePath, e); mParseError = PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING; return false; } catch (RuntimeException e) { - Log.w(TAG, "Exception reading " + mArchiveSourcePath, e); + Slog.w(TAG, "Exception reading " + mArchiveSourcePath, e); mParseError = PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION; return false; } @@ -604,10 +622,10 @@ public class PackageParser { return null; } - parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml"); + parser = assmgr.openXmlResourceParser(cookie, ANDROID_MANIFEST_FILENAME); } catch (Exception e) { if (assmgr != null) assmgr.close(); - Log.w(TAG, "Unable to read AndroidManifest.xml of " + Slog.w(TAG, "Unable to read AndroidManifest.xml of " + packageFilePath, e); return null; } @@ -617,15 +635,15 @@ public class PackageParser { try { packageLite = parsePackageLite(parser, attrs, flags, errors); } catch (IOException e) { - Log.w(TAG, packageFilePath, e); + Slog.w(TAG, packageFilePath, e); } catch (XmlPullParserException e) { - Log.w(TAG, packageFilePath, e); + Slog.w(TAG, packageFilePath, e); } finally { if (parser != null) parser.close(); if (assmgr != null) assmgr.close(); } if (packageLite == null) { - Log.e(TAG, "parsePackageLite error: " + errors[0]); + Slog.e(TAG, "parsePackageLite error: " + errors[0]); return null; } return packageLite; @@ -662,17 +680,17 @@ public class PackageParser { throws IOException, XmlPullParserException { int type; - while ((type=parser.next()) != parser.START_TAG - && type != parser.END_DOCUMENT) { + while ((type = parser.next()) != XmlPullParser.START_TAG + && type != XmlPullParser.END_DOCUMENT) { ; } - if (type != parser.START_TAG) { + if (type != XmlPullParser.START_TAG) { outError[0] = "No start tag found"; return null; } - if ((flags&PARSE_CHATTY) != 0 && false) Log.v( - TAG, "Root element name: '" + parser.getName() + "'"); + if (DEBUG_PARSER) + Slog.v(TAG, "Root element name: '" + parser.getName() + "'"); if (!parser.getName().equals("manifest")) { outError[0] = "No <manifest> tag"; return null; @@ -697,17 +715,17 @@ public class PackageParser { throws IOException, XmlPullParserException { int type; - while ((type=parser.next()) != parser.START_TAG - && type != parser.END_DOCUMENT) { + while ((type = parser.next()) != XmlPullParser.START_TAG + && type != XmlPullParser.END_DOCUMENT) { ; } - if (type != parser.START_TAG) { + if (type != XmlPullParser.START_TAG) { outError[0] = "No start tag found"; return null; } - if ((flags&PARSE_CHATTY) != 0 && false) Log.v( - TAG, "Root element name: '" + parser.getName() + "'"); + if (DEBUG_PARSER) + Slog.v(TAG, "Root element name: '" + parser.getName() + "'"); if (!parser.getName().equals("manifest")) { outError[0] = "No <manifest> tag"; return null; @@ -806,9 +824,9 @@ public class PackageParser { int anyDensity = 1; int outerDepth = parser.getDepth(); - while ((type=parser.next()) != parser.END_DOCUMENT - && (type != parser.END_TAG || parser.getDepth() > outerDepth)) { - if (type == parser.END_TAG || type == parser.TEXT) { + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } @@ -820,7 +838,7 @@ public class PackageParser { mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return null; } else { - Log.w(TAG, "<manifest> has more than one <application>"); + Slog.w(TAG, "<manifest> has more than one <application>"); XmlUtils.skipCurrentTag(parser); continue; } @@ -1118,7 +1136,7 @@ public class PackageParser { return null; } else { - Log.w(TAG, "Unknown element under <manifest>: " + parser.getName() + Slog.w(TAG, "Unknown element under <manifest>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); @@ -1152,7 +1170,7 @@ public class PackageParser { } } if (implicitPerms != null) { - Log.i(TAG, implicitPerms.toString()); + Slog.i(TAG, implicitPerms.toString()); } if (supportsSmallScreens < 0 || (supportsSmallScreens > 0 @@ -1504,8 +1522,8 @@ public class PackageParser { com.android.internal.R.styleable.AndroidManifestApplication_backupAgent, 0); if (backupAgent != null) { ai.backupAgentName = buildClassName(pkgName, backupAgent, outError); - if (false) { - Log.v(TAG, "android:backupAgent = " + ai.backupAgentName + if (DEBUG_BACKUP) { + Slog.v(TAG, "android:backupAgent = " + ai.backupAgentName + " from " + pkgName + "+" + backupAgent); } @@ -1663,9 +1681,9 @@ public class PackageParser { final int innerDepth = parser.getDepth(); int type; - while ((type=parser.next()) != parser.END_DOCUMENT - && (type != parser.END_TAG || parser.getDepth() > innerDepth)) { - if (type == parser.END_TAG || type == parser.TEXT) { + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } @@ -1767,7 +1785,7 @@ public class PackageParser { } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <application>: " + tagName + Slog.w(TAG, "Unknown element under <application>: " + tagName + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); @@ -1990,7 +2008,7 @@ public class PackageParser { return null; } if (intent.countActions() == 0) { - Log.w(TAG, "No actions in intent filter at " + Slog.w(TAG, "No actions in intent filter at " + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { @@ -2003,25 +2021,26 @@ public class PackageParser { } } else { if (!RIGID_PARSER) { - Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":"); + Slog.w(TAG, "Problem in package " + mArchiveSourcePath + ":"); if (receiver) { - Log.w(TAG, "Unknown element under <receiver>: " + parser.getName() + Slog.w(TAG, "Unknown element under <receiver>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { - Log.w(TAG, "Unknown element under <activity>: " + parser.getName() + Slog.w(TAG, "Unknown element under <activity>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); } XmlUtils.skipCurrentTag(parser); continue; - } - if (receiver) { - outError[0] = "Bad element under <receiver>: " + parser.getName(); } else { - outError[0] = "Bad element under <activity>: " + parser.getName(); + if (receiver) { + outError[0] = "Bad element under <receiver>: " + parser.getName(); + } else { + outError[0] = "Bad element under <activity>: " + parser.getName(); + } + return null; } - return null; } } @@ -2146,7 +2165,7 @@ public class PackageParser { return null; } if (intent.countActions() == 0) { - Log.w(TAG, "No actions in intent filter at " + Slog.w(TAG, "No actions in intent filter at " + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { @@ -2159,14 +2178,15 @@ public class PackageParser { } } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <activity-alias>: " + parser.getName() + Slog.w(TAG, "Unknown element under <activity-alias>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "Bad element under <activity-alias>: " + parser.getName(); + return null; } - outError[0] = "Bad element under <activity-alias>: " + parser.getName(); - return null; } } @@ -2335,14 +2355,15 @@ public class PackageParser { outInfo.info.grantUriPermissions = true; } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <path-permission>: " + Slog.w(TAG, "Unknown element under <path-permission>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "No path, pathPrefix, or pathPattern for <path-permission>"; + return false; } - outError[0] = "No path, pathPrefix, or pathPattern for <path-permission>"; - return false; } XmlUtils.skipCurrentTag(parser); @@ -2377,14 +2398,15 @@ public class PackageParser { if (!havePerm) { if (!RIGID_PARSER) { - Log.w(TAG, "No readPermission or writePermssion for <path-permission>: " + Slog.w(TAG, "No readPermission or writePermssion for <path-permission>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "No readPermission or writePermssion for <path-permission>"; + return false; } - outError[0] = "No readPermission or writePermssion for <path-permission>"; - return false; } String path = sa.getNonConfigurationString( @@ -2423,7 +2445,7 @@ public class PackageParser { } } else { if (!RIGID_PARSER) { - Log.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>: " + Slog.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); @@ -2436,15 +2458,15 @@ public class PackageParser { } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <provider>: " + Slog.w(TAG, "Unknown element under <provider>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "Bad element under <provider>: " + parser.getName(); + return false; } - outError[0] = "Bad element under <provider>: " - + parser.getName(); - return false; } } return true; @@ -2534,15 +2556,15 @@ public class PackageParser { } } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <service>: " + Slog.w(TAG, "Unknown element under <service>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "Bad element under <service>: " + parser.getName(); + return null; } - outError[0] = "Bad element under <service>: " - + parser.getName(); - return null; } } @@ -2573,15 +2595,15 @@ public class PackageParser { } } else { if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under " + tag + ": " + Slog.w(TAG, "Unknown element under " + tag + ": " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); continue; + } else { + outError[0] = "Bad element under " + tag + ": " + parser.getName(); + return false; } - outError[0] = "Bad element under " + tag + ": " - + parser.getName(); - return false; } } return true; @@ -2612,12 +2634,12 @@ public class PackageParser { TypedValue v = sa.peekValue( com.android.internal.R.styleable.AndroidManifestMetaData_resource); if (v != null && v.resourceId != 0) { - //Log.i(TAG, "Meta data ref " + name + ": " + v); + //Slog.i(TAG, "Meta data ref " + name + ": " + v); data.putInt(name, v.resourceId); } else { v = sa.peekValue( com.android.internal.R.styleable.AndroidManifestMetaData_value); - //Log.i(TAG, "Meta data " + name + ": " + v); + //Slog.i(TAG, "Meta data " + name + ": " + v); if (v != null) { if (v.type == TypedValue.TYPE_STRING) { CharSequence cs = v.coerceToString(); @@ -2631,7 +2653,7 @@ public class PackageParser { data.putFloat(name, v.getFloat()); } else { if (!RIGID_PARSER) { - Log.w(TAG, "<meta-data> only supports string, integer, float, color, boolean, and resource reference types: " + Slog.w(TAG, "<meta-data> only supports string, integer, float, color, boolean, and resource reference types: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { @@ -2683,9 +2705,9 @@ public class PackageParser { int outerDepth = parser.getDepth(); int type; - while ((type=parser.next()) != parser.END_DOCUMENT - && (type != parser.END_TAG || parser.getDepth() > outerDepth)) { - if (type == parser.END_TAG || type == parser.TEXT) { + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } @@ -2762,7 +2784,7 @@ public class PackageParser { sa.recycle(); XmlUtils.skipCurrentTag(parser); } else if (!RIGID_PARSER) { - Log.w(TAG, "Unknown element under <intent-filter>: " + Slog.w(TAG, "Unknown element under <intent-filter>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); XmlUtils.skipCurrentTag(parser); @@ -2773,14 +2795,20 @@ public class PackageParser { } outInfo.hasDefault = outInfo.hasCategory(Intent.CATEGORY_DEFAULT); - if (false) { - String cats = ""; - Iterator<String> it = outInfo.categoriesIterator(); - while (it != null && it.hasNext()) { - cats += " " + it.next(); + + if (DEBUG_PARSER) { + final StringBuilder cats = new StringBuilder("Intent d="); + cats.append(outInfo.hasDefault); + cats.append(", cat="); + + final Iterator<String> it = outInfo.categoriesIterator(); + if (it != null) { + while (it.hasNext()) { + cats.append(' '); + cats.append(it.next()); + } } - System.out.println("Intent d=" + - outInfo.hasDefault + ", cat=" + cats); + Slog.d(TAG, cats.toString()); } return true; @@ -2869,6 +2897,12 @@ public class PackageParser { public int installLocation; + /** + * Digest suitable for comparing whether this package's manifest is the + * same as another. + */ + public ManifestDigest manifestDigest; + public Package(String _name) { packageName = _name; applicationInfo.packageName = _name; diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 931cb18..ffefaa2 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -62,7 +62,7 @@ public final class AssetManager { private static final boolean DEBUG_REFS = false; private static final Object sSync = new Object(); - private static AssetManager sSystem = null; + /*package*/ static AssetManager sSystem = null; private final TypedValue mValue = new TypedValue(); private final long[] mOffsets = new long[2]; @@ -252,7 +252,7 @@ public final class AssetManager { } } - private final void makeStringBlocks(boolean copyFromSystem) { + /*package*/ final void makeStringBlocks(boolean copyFromSystem) { final int sysNum = copyFromSystem ? sSystem.mStringBlocks.length : 0; final int num = getStringBlockCount(); mStringBlocks = new StringBlock[num]; diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 324c9fd..f526923 100755 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -77,7 +77,7 @@ public class Resources { private static final int ID_OTHER = 0x01000004; private static final Object mSync = new Object(); - private static Resources mSystem = null; + /*package*/ static Resources mSystem = null; // Information about preloaded resources. Note that they are not // protected by a lock, because while preloading in zygote we are all diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java index 37fdeb6..2df492e 100644 --- a/core/java/android/content/res/TypedArray.java +++ b/core/java/android/content/res/TypedArray.java @@ -42,7 +42,7 @@ public class TypedArray { /*package*/ int[] mData; /*package*/ int[] mIndices; /*package*/ int mLength; - private TypedValue mValue = new TypedValue(); + /*package*/ TypedValue mValue = new TypedValue(); /** * Return the number of values in this array. diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 8d3750a..cab8457 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -167,22 +167,13 @@ public class Camera { /** * Hardware face detection. It does not use much CPU. - * - * @see #startFaceDetection(int) - * @see Parameters#getMaxNumDetectedFaces(int) - * @see #CAMERA_FACE_DETECTION_SW - * @hide */ - public static final int CAMERA_FACE_DETECTION_HW = 0; + private static final int CAMERA_FACE_DETECTION_HW = 0; /** - * Software face detection. It uses some CPU. Applications must use - * {@link #setPreviewTexture(SurfaceTexture)} for preview in this mode. - * - * @see #CAMERA_FACE_DETECTION_HW - * @hide + * Software face detection. It uses some CPU. */ - public static final int CAMERA_FACE_DETECTION_SW = 1; + private static final int CAMERA_FACE_DETECTION_SW = 1; /** * Returns the number of physical cameras available on this device. @@ -1071,7 +1062,6 @@ public class Camera { /** * Callback interface for face detected in the preview frame. * - * @hide */ public interface FaceDetectionListener { @@ -1086,12 +1076,11 @@ public class Camera { } /** - * Registers a listener to be notified about the face detected of the + * Registers a listener to be notified about the faces detected in the * preview frame. * * @param listener the listener to notify - * @see #startFaceDetection(int) - * @hide + * @see #startFaceDetection() */ public final void setFaceDetectionListener(FaceDetectionListener listener) { @@ -1099,48 +1088,37 @@ public class Camera { } /** - * Start the face detection. This should be called after preview is started. + * Starts the face detection. This should be called after preview is started. * The camera will notify {@link FaceDetectionListener} of the detected * faces in the preview frame. The detected faces may be the same as the * previous ones. Applications should call {@link #stopFaceDetection} to * stop the face detection. This method is supported if {@link - * Parameters#getMaxNumDetectedFaces(int)} returns a number larger than 0. - * Hardware and software face detection cannot be used at the same time. + * Parameters#getMaxNumDetectedFaces()} returns a number larger than 0. * If the face detection has started, apps should not call this again. * - * In hardware face detection mode, {@link Parameters#setWhiteBalance(String)}, + * When the face detection is running, {@link Parameters#setWhiteBalance(String)}, * {@link Parameters#setFocusAreas(List)}, and {@link Parameters#setMeteringAreas(List)} * have no effect. * - * @param type face detection type. This can be either {@link - * #CAMERA_FACE_DETECTION_HW} or {@link #CAMERA_FACE_DETECTION_SW} - * @throws IllegalArgumentException if the face detection type is - * unsupported or invalid. + * @throws IllegalArgumentException if the face detection is unsupported. * @throws RuntimeException if the method fails or the face detection is * already running. - * @see #CAMERA_FACE_DETECTION_HW - * @see #CAMERA_FACE_DETECTION_SW * @see FaceDetectionListener * @see #stopFaceDetection() - * @see Parameters#getMaxNumDetectedFaces(int) - * @hide + * @see Parameters#getMaxNumDetectedFaces() */ - public final void startFaceDetection(int type) { - if (type != CAMERA_FACE_DETECTION_HW && type != CAMERA_FACE_DETECTION_SW) { - throw new IllegalArgumentException("Invalid face detection type " + type); - } + public final void startFaceDetection() { if (mFaceDetectionRunning) { throw new RuntimeException("Face detection is already running"); } - _startFaceDetection(type); + _startFaceDetection(CAMERA_FACE_DETECTION_HW); mFaceDetectionRunning = true; } /** - * Stop the face detection. + * Stops the face detection. * * @see #startFaceDetection(int) - * @hide */ public final void stopFaceDetection() { _stopFaceDetection(); @@ -1153,17 +1131,21 @@ public class Camera { /** * The information of a face from camera face detection. * - * @hide */ public static class Face { + /** + * Create an empty face. + */ public Face() { } /** * Bounds of the face. (-1000, -1000) represents the top-left of the * camera field of view, and (1000, 1000) represents the bottom-right of - * the field of view. The width and height cannot be 0 or negative. This - * is supported by both hardware and software face detection. + * the field of view. For example, suppose the size of the viewfinder UI + * is 800x480. The rect passed from the driver is (-1000, -1000, 0, 0). + * The corresponding viewfinder rect should be (0, 0, 400, 240). The + * width and height of the rect will not be 0 or negative. * * <p>The direction is relative to the sensor orientation, that is, what * the sensor sees. The direction is not affected by the rotation or @@ -1175,37 +1157,11 @@ public class Camera { /** * The confidence level of the face. The range is 1 to 100. 100 is the - * highest confidence. This is supported by both hardware and software - * face detction. + * highest confidence. * * @see #startFaceDetection(int) */ public int score; - - /** - * An unique id per face while the face is visible to the tracker. If - * the face leaves the field-of-view and comes back, it will get a new - * id. If the value is 0, id is not supported. - */ - public int id; - - /** - * The coordinates of the center of the left eye. The range is -1000 to - * 1000. null if this is not supported. - */ - public Point leftEye; - - /** - * The coordinates of the center of the right eye. The range is -1000 to - * 1000. null if this is not supported. - */ - public Point rightEye; - - /** - * The coordinates of the center of the mouth. The range is -1000 to - * 1000. null if this is not supported. - */ - public Point mouth; } // Error codes match the enum in include/ui/Camera.h @@ -3167,15 +3123,9 @@ public class Camera { * * @return the maximum number of detected face supported by the camera. * @see #startFaceDetection(int) - * @hide */ - public int getMaxNumDetectedFaces(int type) { - if (type == CAMERA_FACE_DETECTION_HW) { - return getInt(KEY_MAX_NUM_DETECTED_FACES_HW, 0); - } else if (type == CAMERA_FACE_DETECTION_SW){ - return getInt(KEY_MAX_NUM_DETECTED_FACES_SW, 0); - } - throw new IllegalArgumentException("Invalid face detection type " + type); + public int getMaxNumDetectedFaces() { + return getInt(KEY_MAX_NUM_DETECTED_FACES_HW, 0); } /** diff --git a/core/java/android/net/DnsPinger.java b/core/java/android/net/DnsPinger.java index 81738f3..6115fef 100644 --- a/core/java/android/net/DnsPinger.java +++ b/core/java/android/net/DnsPinger.java @@ -147,8 +147,9 @@ public final class DnsPinger extends Handler { DatagramPacket packet = new DatagramPacket(buf, buf.length, dnsAddress, DNS_PORT); if (V) { - Slog.v(TAG, "Sending a ping to " + dnsAddress.getHostAddress() - + " with ID " + newActivePing.packetId + "."); + Slog.v(TAG, "Sending a ping " + newActivePing.internalId + + " to " + dnsAddress.getHostAddress() + + " with packetId " + newActivePing.packetId + "."); } newActivePing.socket.send(packet); @@ -157,7 +158,7 @@ public final class DnsPinger extends Handler { sendMessageDelayed(obtainMessage(ACTION_LISTEN_FOR_RESPONSE, mEventCounter, 0), RECEIVE_POLL_INTERVAL_MS); } catch (IOException e) { - sendResponse((short) msg.arg1, SOCKET_EXCEPTION); + sendResponse(msg.arg1, -9999, SOCKET_EXCEPTION); } break; case ACTION_LISTEN_FOR_RESPONSE: @@ -193,12 +194,12 @@ public final class DnsPinger extends Handler { while (iter.hasNext()) { ActivePing curPing = iter.next(); if (curPing.result != null) { - sendResponse(curPing.internalId, curPing.result); + sendResponse(curPing.internalId, curPing.packetId, curPing.result); curPing.socket.close(); iter.remove(); } else if (SystemClock.elapsedRealtime() > curPing.start + curPing.timeout) { - sendResponse(curPing.internalId, TIMEOUT); + sendResponse(curPing.internalId, curPing.packetId, TIMEOUT); curPing.socket.close(); iter.remove(); } @@ -255,9 +256,11 @@ public final class DnsPinger extends Handler { obtainMessage(ACTION_CANCEL_ALL_PINGS).sendToTarget(); } - private void sendResponse(int internalId, int responseVal) { + private void sendResponse(int internalId, int externalId, int responseVal) { if(V) { - Slog.v(TAG, "Responding with id " + internalId + " and val " + responseVal); + Slog.d(TAG, "Responding to packet " + internalId + + " externalId " + externalId + + " and val " + responseVal); } mTarget.sendMessage(obtainMessage(DNS_PING_RESULT, internalId, responseVal)); } @@ -288,7 +291,7 @@ public final class DnsPinger extends Handler { private static final byte[] mDnsQuery = new byte[] { 0, 0, // [0-1] is for ID (will set each time) - 0, 0, // [2-3] are flags. Set byte[2] = 1 for recursion desired (RD) on. Currently off. + 1, 0, // [2-3] are flags. Set byte[2] = 1 for recursion desired (RD) on. Currently on. 0, 1, // [4-5] bytes are for number of queries (QCOUNT) 0, 0, // [6-7] unused count field for dns response packets 0, 0, // [8-9] unused count field for dns response packets diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java index c917af9..4ba44ca 100644 --- a/core/java/android/net/NetworkStatsHistory.java +++ b/core/java/android/net/NetworkStatsHistory.java @@ -424,8 +424,8 @@ public class NetworkStatsHistory implements Parcelable { final NetworkStats.Entry entry = new NetworkStats.Entry( IFACE_ALL, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0L); final Random r = new Random(); - while (rxBytes > 1024 && rxPackets > 128 && txBytes > 1024 && txPackets > 128 - && operations > 32) { + while (rxBytes > 1024 || rxPackets > 128 || txBytes > 1024 || txPackets > 128 + || operations > 32) { final long curStart = randomLong(r, start, end); final long curEnd = randomLong(r, curStart, end); diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java index 3b21590..2c875c8 100644 --- a/core/java/android/net/Uri.java +++ b/core/java/android/net/Uri.java @@ -1689,7 +1689,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { return HierarchicalUri.readFrom(in); } - throw new AssertionError("Unknown URI type: " + type); + throw new IllegalArgumentException("Unknown URI type: " + type); } public Uri[] newArray(int size) { @@ -1996,7 +1996,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { parcel.writeInt(Representation.DECODED); parcel.writeString(decoded); } else { - throw new AssertionError(); + throw new IllegalArgumentException("Neither encoded nor decoded"); } } } @@ -2037,7 +2037,8 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { case Representation.DECODED: return fromDecoded(parcel.readString()); default: - throw new AssertionError(); + throw new IllegalArgumentException("Unknown representation: " + + representation); } } @@ -2221,7 +2222,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { case Representation.DECODED: return fromDecoded(parcel.readString()); default: - throw new AssertionError(); + throw new IllegalArgumentException("Bad representation: " + representation); } } diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 3e1b512..fb5263d 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -101,7 +101,6 @@ import java.util.ArrayList; * </service></pre> * * @see Builder - * @hide */ public class VpnService extends Service { diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl index 83a055c..4fc248f 100644 --- a/core/java/android/nfc/INfcAdapter.aidl +++ b/core/java/android/nfc/INfcAdapter.aidl @@ -35,7 +35,7 @@ interface INfcAdapter INfcAdapterExtras getNfcAdapterExtrasInterface(); // NfcAdapter-class related methods - boolean isEnabled(); + int getState(); void enableForegroundDispatch(in ComponentName activity, in PendingIntent intent, in IntentFilter[] filters, in TechListParcel techLists); void disableForegroundDispatch(in ComponentName activity); @@ -48,5 +48,5 @@ interface INfcAdapter boolean enable(); boolean enableZeroClick(); boolean disableZeroClick(); - boolean zeroClickEnabled(); + boolean isZeroClickEnabled(); } diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java index 4d04027..6a904ae 100644 --- a/core/java/android/nfc/NfcAdapter.java +++ b/core/java/android/nfc/NfcAdapter.java @@ -157,23 +157,35 @@ public final class NfcAdapter { public static final String EXTRA_ID = "android.nfc.extra.ID"; /** - * Broadcast Action: an adapter's state changed between enabled and disabled. - * - * The new value is stored in the extra EXTRA_NEW_BOOLEAN_STATE and just contains - * whether it's enabled or disabled, not including any information about whether it's - * actively enabling or disabling. - * + * Broadcast Action: The state of the local NFC adapter has been + * changed. + * <p>For example, NFC has been turned on or off. + * <p>Always contains the extra field {@link #EXTRA_STATE} * @hide */ - public static final String ACTION_ADAPTER_STATE_CHANGE = - "android.nfc.action.ADAPTER_STATE_CHANGE"; + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_ADAPTER_STATE_CHANGED = + "android.nfc.action.ADAPTER_STATE_CHANGED"; /** - * The Intent extra for ACTION_ADAPTER_STATE_CHANGE, saying what the new state is. - * + * Used as an int extra field in {@link #ACTION_STATE_CHANGED} + * intents to request the current power state. Possible values are: + * {@link #STATE_OFF}, + * {@link #STATE_TURNING_ON}, + * {@link #STATE_ON}, + * {@link #STATE_TURNING_OFF}, * @hide */ - public static final String EXTRA_NEW_BOOLEAN_STATE = "android.nfc.isEnabled"; + public static final String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE"; + + /** @hide */ + public static final int STATE_OFF = 1; + /** @hide */ + public static final int STATE_TURNING_ON = 2; + /** @hide */ + public static final int STATE_ON = 3; + /** @hide */ + public static final int STATE_TURNING_OFF = 4; /** * LLCP link status: The LLCP link is activated. @@ -430,7 +442,7 @@ public final class NfcAdapter { */ public boolean isEnabled() { try { - return sService.isEnabled(); + return sService.getState() == STATE_ON; } catch (RemoteException e) { attemptDeadServiceRecovery(e); return false; @@ -438,10 +450,40 @@ public final class NfcAdapter { } /** + * Return the state of this NFC Adapter. + * + * <p>Returns one of {@link #STATE_ON}, {@link #STATE_TURNING_ON}, + * {@link #STATE_OFF}, {@link #STATE_TURNING_OFF}. + * + * <p>{@link #isEnabled()} is equivalent to + * <code>{@link #getAdapterState()} == {@link #STATE_ON}</code> + * + * @return the current state of this NFC adapter + * + * @hide + */ + public int getAdapterState() { + try { + return sService.getState(); + } catch (RemoteException e) { + attemptDeadServiceRecovery(e); + return NfcAdapter.STATE_OFF; + } + } + + /** * Enable NFC hardware. - * <p> - * NOTE: may block for ~second or more. Poor API. Avoid - * calling from the UI thread. + * + * <p>This call is asynchronous. Listen for + * {@link #ACTION_ADAPTER_STATE_CHANGED} broadcasts to find out when the + * operation is complete. + * + * <p>If this returns true, then either NFC is already on, or + * a {@link #ACTION_ADAPTER_STATE_CHANGED} broadcast will be sent + * to indicate a state transition. If this returns false, then + * there is some problem that prevents an attempt to turn + * NFC on (for example we are in airplane mode and NFC is not + * toggleable in airplane mode on this platform). * * @hide */ @@ -456,11 +498,19 @@ public final class NfcAdapter { /** * Disable NFC hardware. - * No NFC features will work after this call, and the hardware + * + * <p>No NFC features will work after this call, and the hardware * will not perform or respond to any NFC communication. - * <p> - * NOTE: may block for ~second or more. Poor API. Avoid - * calling from the UI thread. + * + * <p>This call is asynchronous. Listen for + * {@link #ACTION_ADAPTER_STATE_CHANGED} broadcasts to find out when the + * operation is complete. + * + * <p>If this returns true, then either NFC is already off, or + * a {@link #ACTION_ADAPTER_STATE_CHANGED} broadcast will be sent + * to indicate a state transition. If this returns false, then + * there is some problem that prevents an attempt to turn + * NFC off. * * @hide */ @@ -712,14 +762,20 @@ public final class NfcAdapter { } /** - * Return true if zero-click sharing is enabled. + * Return true if zero-click sharing feature is enabled. + * <p>This function can return true even if NFC is currently turned-off. + * This indicates that zero-click is not currently active, but it has + * been requested by the user and will be active as soon as NFC is turned + * on. + * <p>If you want to check if zero-click sharing is currently active, use + * <code>{@link #isEnabled()} && {@link #isZeroClickEnabled()}</code> * * @return true if zero-click sharing is enabled * @hide */ - public boolean zeroClickEnabled() { + public boolean isZeroClickEnabled() { try { - return sService.zeroClickEnabled(); + return sService.isZeroClickEnabled(); } catch (RemoteException e) { attemptDeadServiceRecovery(e); return false; diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java index bc37244..af2fa9b 100644 --- a/core/java/android/os/Handler.java +++ b/core/java/android/os/Handler.java @@ -567,7 +567,7 @@ public class Handler { @Override public String toString() { - return "Handler{" + return "Handler (" + getClass().getName() + ") {" + Integer.toHexString(System.identityHashCode(this)) + "}"; } diff --git a/core/java/android/os/HandlerThread.java b/core/java/android/os/HandlerThread.java index 911439a..d61b3b4 100644 --- a/core/java/android/os/HandlerThread.java +++ b/core/java/android/os/HandlerThread.java @@ -21,9 +21,9 @@ package android.os; * used to create handler classes. Note that start() must still be called. */ public class HandlerThread extends Thread { - private int mPriority; - private int mTid = -1; - private Looper mLooper; + int mPriority; + int mTid = -1; + Looper mLooper; public HandlerThread(String name) { super(name); diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index bc4e00c..0440923 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -64,6 +64,16 @@ interface INetworkManagementService void clearInterfaceAddresses(String iface); /** + * Set interface down + */ + void setInterfaceDown(String iface); + + /** + * Set interface up + */ + void setInterfaceUp(String iface); + + /** * Retrieves the network routes currently configured on the specified * interface */ @@ -173,6 +183,12 @@ interface INetworkManagementService void detachPppd(String tty); /** + * Load firmware for operation in the given mode. Currently the three + * modes supported are "AP", "STA" and "P2P". + */ + void wifiFirmwareReload(String wlanIface, String mode); + + /** * Start Wifi Access Point */ void startAccessPoint(in WifiConfiguration wifiConfig, String wlanIface, String softapIface); diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java index c61f28a..5607f7f 100644 --- a/core/java/android/os/Looper.java +++ b/core/java/android/os/Looper.java @@ -54,7 +54,7 @@ public class Looper { private static final String TAG = "Looper"; // sThreadLocal.get() will return null unless you've called prepare(). - private static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); + static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); final MessageQueue mQueue; final Thread mThread; diff --git a/core/java/android/preference/RingtonePreference.java b/core/java/android/preference/RingtonePreference.java index cf14097..2ebf294 100644 --- a/core/java/android/preference/RingtonePreference.java +++ b/core/java/android/preference/RingtonePreference.java @@ -164,6 +164,7 @@ public class RingtonePreference extends Preference implements ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, mShowSilent); ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, mRingtoneType); + ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getTitle()); } /** diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index b8ef7be..c5a924b 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -193,6 +193,15 @@ public class CallLog { public static final String IS_READ = "is_read"; /** + * A geocoded location for the number associated with this call. + * <p> + * The string represents a city, state, or country associated with the number. + * <P>Type: TEXT</P> + * @hide + */ + public static final String GEOCODED_LOCATION = "geocoded_location"; + + /** * Adds a call to the call log. * * @param ci the CallerInfo object to get the target contact from. Can be null @@ -232,6 +241,9 @@ public class CallLog { values.put(DATE, Long.valueOf(start)); values.put(DURATION, Long.valueOf(duration)); values.put(NEW, Integer.valueOf(1)); + if (callType == MISSED_TYPE) { + values.put(IS_READ, Integer.valueOf(0)); + } if (ci != null) { values.put(CACHED_NAME, ci.name); values.put(CACHED_NUMBER_TYPE, ci.numberType); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 1ecdfce..f8702b9 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1169,6 +1169,11 @@ public final class Settings { public static final String RADIO_CELL = "cell"; /** + * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio. + */ + public static final String RADIO_NFC = "nfc"; + + /** * A comma separated list of radios that need to be disabled when airplane mode * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are * included in the comma separated list. diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java index 814f50b..6787fd0 100644 --- a/core/java/android/provider/VoicemailContract.java +++ b/core/java/android/provider/VoicemailContract.java @@ -78,6 +78,18 @@ public class VoicemailContract { /** Broadcast intent when a new voicemail record is inserted. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL"; + + /** + * Broadcast intent to request a voicemail source to fetch voicemail content of a specific + * voicemail from the remote server. The voicemail to fetch is specified by the data uri + * of the intent. + * <p> + * All voicemail sources are expected to handle this event. After storing the content + * the application should also set {@link Voicemails#HAS_CONTENT} to 1; + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL"; + /** * Extra included in {@link Intent#ACTION_PROVIDER_CHANGED} broadcast intents to indicate if the * receiving package made this change. diff --git a/core/java/android/server/BluetoothBondState.java b/core/java/android/server/BluetoothBondState.java index 4e2608e..6710aab 100644 --- a/core/java/android/server/BluetoothBondState.java +++ b/core/java/android/server/BluetoothBondState.java @@ -134,6 +134,7 @@ class BluetoothBondState { /** reason is ignored unless state == BOND_NOT_BONDED */ public synchronized void setBondState(String address, int state, int reason) { if (DBG) Log.d(TAG, "setBondState " + "address" + " " + state + "reason: " + reason); + if (!mService.isEnabled()) return; int oldState = getBondState(address); if (oldState == state) { diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java index c114c37..376e4f5 100644 --- a/core/java/android/text/TextLine.java +++ b/core/java/android/text/TextLine.java @@ -16,8 +16,6 @@ package android.text; -import com.android.internal.util.ArrayUtils; - import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; @@ -30,6 +28,8 @@ import android.text.style.MetricAffectingSpan; import android.text.style.ReplacementSpan; import android.util.Log; +import com.android.internal.util.ArrayUtils; + /** * Represents a line of styled text, for measuring in visual order and * for rendering. @@ -720,7 +720,7 @@ class TextLine { float ret = 0; int contextLen = contextEnd - contextStart; - if (needWidth || (c != null && (wp.bgColor != 0 || runIsRtl))) { + if (needWidth || (c != null && (wp.bgColor != 0 || wp.underlineColor !=0 || runIsRtl))) { int flags = runIsRtl ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR; if (mCharsValid) { ret = wp.getTextRunAdvances(mChars, start, runLen, @@ -739,15 +739,32 @@ class TextLine { } if (wp.bgColor != 0) { - int color = wp.getColor(); - Paint.Style s = wp.getStyle(); + int previousColor = wp.getColor(); + Paint.Style previousStyle = wp.getStyle(); + wp.setColor(wp.bgColor); wp.setStyle(Paint.Style.FILL); - c.drawRect(x, top, x + ret, bottom, wp); - wp.setStyle(s); - wp.setColor(color); + wp.setStyle(previousStyle); + wp.setColor(previousColor); + } + + if (wp.underlineColor != 0) { + // kStdUnderline_Offset = 1/9, defined in SkTextFormatParams.h + float middle = y + wp.baselineShift + (1.0f / 9.0f) * wp.getTextSize(); + // kStdUnderline_Thickness = 1/18, defined in SkTextFormatParams.h + float halfHeight = wp.underlineThickness * (1.0f / 18.0f / 2.0f) * wp.getTextSize(); + + int previousColor = wp.getColor(); + Paint.Style previousStyle = wp.getStyle(); + + wp.setColor(wp.underlineColor); + wp.setStyle(Paint.Style.FILL); + c.drawRect(x, middle - halfHeight, x + ret, middle + halfHeight, wp); + + wp.setStyle(previousStyle); + wp.setColor(previousColor); } drawTextRun(c, wp, start, end, contextStart, contextEnd, runIsRtl, @@ -828,7 +845,10 @@ class TextLine { if (start == measureLimit) { TextPaint wp = mWorkPaint; wp.set(mPaint); - return handleText(wp, 0, 0, 0, 0, runIsRtl, c, x, top, y, bottom, fmi, needWidth); + if (fmi != null) { + expandMetricsFromPaint(fmi, wp); + } + return 0f; } // Shaping needs to take into account context up to metric boundaries, diff --git a/core/java/android/text/TextPaint.java b/core/java/android/text/TextPaint.java index f9e7cac..de57dfa 100644 --- a/core/java/android/text/TextPaint.java +++ b/core/java/android/text/TextPaint.java @@ -23,11 +23,22 @@ import android.graphics.Paint; * data used during text measuring and drawing. */ public class TextPaint extends Paint { + // Special value 0 means no background paint public int bgColor; public int baselineShift; public int linkColor; public int[] drawableState; public float density = 1.0f; + /** + * Special value 0 means no custom underline + * @hide + */ + public int underlineColor; + /** + * Defined as a multiplier of the default underline thickness. Use 1.0f for default thickness. + * @hide + */ + public float underlineThickness; public TextPaint() { super(); @@ -53,5 +64,24 @@ public class TextPaint extends Paint { linkColor = tp.linkColor; drawableState = tp.drawableState; density = tp.density; + underlineColor = tp.underlineColor; + underlineThickness = tp.underlineThickness; + } + + /** + * Defines a custom underline for this Paint. + * @param color underline solid color + * @param thickness underline thickness, defined as a multiplier of the default underline + * thickness. + * @hide + */ + public void setUnderlineText(boolean isUnderlined, int color, float thickness) { + setUnderlineText(false); + if (isUnderlined) { + underlineColor = color; + underlineThickness = thickness; + } else { + underlineColor = 0; + } } } diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java index deed713..5fd7c57 100644 --- a/core/java/android/text/style/TextAppearanceSpan.java +++ b/core/java/android/text/style/TextAppearanceSpan.java @@ -205,7 +205,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl } if (mTextColorLink != null) { - ds.linkColor = mTextColor.getColorForState(ds.drawableState, 0); + ds.linkColor = mTextColorLink.getColorForState(ds.drawableState, 0); } } diff --git a/core/java/android/util/XmlPullAttributes.java b/core/java/android/util/XmlPullAttributes.java index ecedbe1..6c8bb39 100644 --- a/core/java/android/util/XmlPullAttributes.java +++ b/core/java/android/util/XmlPullAttributes.java @@ -143,5 +143,5 @@ class XmlPullAttributes implements AttributeSet { return getAttributeResourceValue(null, "style", 0); } - private XmlPullParser mParser; + /*package*/ XmlPullParser mParser; } diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index d9efe0c..85e990a 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -366,9 +366,9 @@ public class Display { // Following fields are initialized from native code private int mPixelFormat; private float mRefreshRate; - private float mDensity; - private float mDpiX; - private float mDpiY; + /*package*/ float mDensity; + /*package*/ float mDpiX; + /*package*/ float mDpiY; private final Point mTmpPoint = new Point(); private final DisplayMetrics mTmpMetrics = new DisplayMetrics(); diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index a7fe95d..e586370 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -509,13 +509,6 @@ class GLES20Canvas extends HardwareCanvas { private static native void nSetMatrix(int renderer, int matrix); @Override - public int getNativeMatrix() { - return nGetMatrix(mRenderer); - } - - private static native int nGetMatrix(int renderer); - - @Override public void getMatrix(Matrix matrix) { nGetMatrix(mRenderer, matrix.native_instance); } diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java index 332a0fa..9628d6b 100644 --- a/core/java/android/view/LayoutInflater.java +++ b/core/java/android/view/LayoutInflater.java @@ -75,9 +75,9 @@ public abstract class LayoutInflater { private Factory2 mPrivateFactory; private Filter mFilter; - private final Object[] mConstructorArgs = new Object[2]; + final Object[] mConstructorArgs = new Object[2]; - private static final Class<?>[] mConstructorSignature = new Class[] { + static final Class<?>[] mConstructorSignature = new Class[] { Context.class, AttributeSet.class}; private static final HashMap<String, Constructor<? extends View>> sConstructorMap = @@ -705,7 +705,7 @@ public abstract class LayoutInflater { * Recursive method used to descend down the xml hierarchy and instantiate * views, instantiate their children, and then call onFinishInflate(). */ - private void rInflate(XmlPullParser parser, View parent, final AttributeSet attrs, + void rInflate(XmlPullParser parser, View parent, final AttributeSet attrs, boolean finishInflate) throws XmlPullParserException, IOException { final int depth = parser.getDepth(); diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 76aa21f..53a6bcb 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -73,9 +73,10 @@ import android.util.Log; * // Ignored, Camera does all the work for us * } * - * public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + * public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { * mCamera.stopPreview(); * mCamera.release(); + * return true; * } * * public void onSurfaceTextureUpdated(SurfaceTexture surface) { @@ -195,8 +196,9 @@ public class TextureView extends View { super.onDetachedFromWindow(); if (mLayer != null) { + boolean shouldRelease = true; if (mListener != null) { - mListener.onSurfaceTextureDestroyed(mSurface); + shouldRelease = mListener.onSurfaceTextureDestroyed(mSurface); } synchronized (mNativeWindowLock) { @@ -204,7 +206,7 @@ public class TextureView extends View { } mLayer.destroy(); - mSurface.release(); + if (shouldRelease) mSurface.release(); mSurface = null; mLayer = null; } @@ -578,12 +580,12 @@ public class TextureView extends View { /** * Invoked when the specified {@link SurfaceTexture} is about to be destroyed. - * After this method is invoked, no rendering should happen inside the surface - * texture. + * If returns true, no rendering should happen inside the surface texture after this method + * is invoked. If returns false, the client needs to call {@link SurfaceTexture#release()}. * * @param surface The surface about to be destroyed */ - public void onSurfaceTextureDestroyed(SurfaceTexture surface); + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface); /** * Invoked when the specified {@link SurfaceTexture} is updated through diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index ad76928..5b77cf7 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8318,8 +8318,11 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Causes the Runnable to be added to the message queue. - * The runnable will be run on the user interface thread. + * <p>Causes the Runnable to be added to the message queue. + * The runnable will be run on the user interface thread.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param action The Runnable that will be executed. * @@ -8342,9 +8345,12 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Causes the Runnable to be added to the message queue, to be run + * <p>Causes the Runnable to be added to the message queue, to be run * after the specified amount of time elapses. - * The runnable will be run on the user interface thread. + * The runnable will be run on the user interface thread.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param action The Runnable that will be executed. * @param delayMillis The delay (in milliseconds) until the Runnable @@ -8372,7 +8378,10 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Removes the specified Runnable from the message queue. + * <p>Removes the specified Runnable from the message queue.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param action The Runnable to remove from the message handling queue * @@ -8397,9 +8406,12 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Cause an invalidate to happen on a subsequent cycle through the event loop. - * Use this to invalidate the View from a non-UI thread. + * <p>Cause an invalidate to happen on a subsequent cycle through the event loop. + * Use this to invalidate the View from a non-UI thread.</p> * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> + * * @see #invalidate() */ public void postInvalidate() { @@ -8407,8 +8419,11 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Cause an invalidate of the specified area to happen on a subsequent cycle - * through the event loop. Use this to invalidate the View from a non-UI thread. + * <p>Cause an invalidate of the specified area to happen on a subsequent cycle + * through the event loop. Use this to invalidate the View from a non-UI thread.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param left The left coordinate of the rectangle to invalidate. * @param top The top coordinate of the rectangle to invalidate. @@ -8423,8 +8438,11 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Cause an invalidate to happen on a subsequent cycle through the event - * loop. Waits for the specified amount of time. + * <p>Cause an invalidate to happen on a subsequent cycle through the event + * loop. Waits for the specified amount of time.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param delayMilliseconds the duration in milliseconds to delay the * invalidation by @@ -8442,8 +8460,11 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit } /** - * Cause an invalidate of the specified area to happen on a subsequent cycle - * through the event loop. Waits for the specified amount of time. + * <p>Cause an invalidate of the specified area to happen on a subsequent cycle + * through the event loop. Waits for the specified amount of time.</p> + * + * <p>This method can be invoked from outside of the UI thread + * only when this View is attached to a window.</p> * * @param delayMilliseconds the duration in milliseconds to delay the * invalidation by diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 9520958..5e104f9 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -225,7 +225,7 @@ public class ViewConfiguration { private boolean sHasPermanentMenuKey; private boolean sHasPermanentMenuKeySet; - private static final SparseArray<ViewConfiguration> sConfigurations = + static final SparseArray<ViewConfiguration> sConfigurations = new SparseArray<ViewConfiguration>(2); /** diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e7d7747..380fc15 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -96,7 +96,7 @@ import java.util.List; @SuppressWarnings({"EmptyCatchBlock", "PointlessBooleanExpression"}) public final class ViewRootImpl extends Handler implements ViewParent, View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks { - private static final String TAG = "ViewAncestor"; + private static final String TAG = "ViewRootImpl"; private static final boolean DBG = false; private static final boolean LOCAL_LOGV = false; /** @noinspection PointlessBooleanExpression*/ diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java index 662137a..cb85e5f 100644 --- a/core/java/android/view/VolumePanel.java +++ b/core/java/android/view/VolumePanel.java @@ -35,6 +35,8 @@ import android.net.Uri; import android.os.Handler; import android.os.Message; import android.os.Vibrator; +import android.provider.Settings; +import android.provider.Settings.System; import android.util.Log; import android.widget.ImageView; import android.widget.SeekBar; @@ -233,6 +235,10 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie } private void createSliders() { + final int silentableStreams = System.getInt(mContext.getContentResolver(), + System.MODE_RINGER_STREAMS_AFFECTED, + ((1 << AudioSystem.STREAM_NOTIFICATION) | (1 << AudioSystem.STREAM_RING))); + LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mStreamControls = new HashMap<Integer,StreamControl>(STREAM_TYPES.length); @@ -243,7 +249,9 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie sc.group = (ViewGroup) inflater.inflate(R.layout.volume_adjust_item, null); sc.group.setTag(sc); sc.icon = (ImageView) sc.group.findViewById(R.id.stream_icon); - sc.icon.setOnClickListener(this); + if ((silentableStreams & (1 << sc.streamType)) != 0) { + sc.icon.setOnClickListener(this); + } sc.icon.setTag(sc); sc.icon.setContentDescription(res.getString(CONTENT_DESCRIPTIONS[i])); sc.iconRes = STREAM_ICONS_NORMAL[i]; diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index ff378a6..6b09049 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1336,8 +1336,10 @@ public interface WindowManager extends ViewManager { sb.append(type); sb.append(" fl=#"); sb.append(Integer.toHexString(flags)); - sb.append(" fmt="); - sb.append(format); + if (format != PixelFormat.OPAQUE) { + sb.append(" fmt="); + sb.append(format); + } if (windowAnimations != 0) { sb.append(" wanim=0x"); sb.append(Integer.toHexString(windowAnimations)); @@ -1373,7 +1375,9 @@ public interface WindowManager extends ViewManager { sb.append(" sysuil="); sb.append(hasSystemUiListeners); } - sb.append(" if=0x").append(Integer.toHexString(inputFeatures)); + if (inputFeatures != 0) { + sb.append(" if=0x").append(Integer.toHexString(inputFeatures)); + } sb.append('}'); return sb.toString(); } diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index 9fbc4a7..f89d490 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -1129,7 +1129,8 @@ class BrowserFrame extends Handler { * synchronous call and unable to pump our MessageQueue. */ private void didReceiveAuthenticationChallenge( - final int handle, String host, String realm, final boolean useCachedCredentials) { + final int handle, String host, String realm, final boolean useCachedCredentials, + final boolean suppressDialog) { HttpAuthHandler handler = new HttpAuthHandler() { @@ -1147,6 +1148,11 @@ class BrowserFrame extends Handler { public void cancel() { nativeAuthenticationCancel(handle); } + + @Override + public boolean suppressDialog() { + return suppressDialog; + } }; mCallbackProxy.onReceivedHttpAuthRequest(handler, host, realm); } diff --git a/core/java/android/webkit/HttpAuthHandler.java b/core/java/android/webkit/HttpAuthHandler.java index 1797eb4..2fbd1d0 100644 --- a/core/java/android/webkit/HttpAuthHandler.java +++ b/core/java/android/webkit/HttpAuthHandler.java @@ -50,4 +50,12 @@ public class HttpAuthHandler extends Handler { */ public void proceed(String username, String password) { } + + /** + * return true if the prompt dialog should be suppressed. + * @hide + */ + public boolean suppressDialog() { + return false; + } } diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index b8c4e22..2a79caa 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -1023,7 +1023,8 @@ import junit.framework.Assert; break; case NUMBER: // inputType needs to be overwritten because of the different class. - inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL; + inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL + | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL; // Number and telephone do not have both a Tab key and an // action, so set the action to NEXT imeOptions |= EditorInfo.IME_ACTION_NEXT; diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 7620a63..2bb9da1 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -537,7 +537,10 @@ public class WebView extends AbsoluteLayout // This should be ViewConfiguration.getTapTimeout() // But system time out is 100ms, which is too short for the browser. // In the browser, if it switches out of tap too soon, jump tap won't work. - private static final int TAP_TIMEOUT = 200; + // In addition, a double tap on a trackpad will always have a duration of + // 300ms, so this value must be at least that (otherwise we will timeout the + // first tap and convert it to a long press). + private static final int TAP_TIMEOUT = 300; // This should be ViewConfiguration.getLongPressTimeout() // But system time out is 500ms, which is too short for the browser. // With a short timeout, it's difficult to treat trigger a short press. diff --git a/core/java/android/webkit/webdriver/By.java b/core/java/android/webkit/webdriver/By.java deleted file mode 100644 index fa4fe74..0000000 --- a/core/java/android/webkit/webdriver/By.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -import java.util.List; - -/** - * Mechanism to locate elements within the DOM of the page. - * @hide - */ -public abstract class By { - public abstract WebElement findElement(WebElement element); - public abstract List<WebElement> findElements(WebElement element); - - /** - * Locates an element by its HTML id attribute. - * - * @param id The HTML id attribute to look for. - * @return A By instance that locates elements by their HTML id attributes. - */ - public static By id(final String id) { - throwIfNull(id); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementById(id); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsById(id); // Yes, it happens a lot. - } - - @Override - public String toString() { - return "By.id: " + id; - } - }; - } - - /** - * Locates an element by the matching the exact text on the HTML link. - * - * @param linkText The exact text to match against. - * @return A By instance that locates elements by the text displayed by - * the link. - */ - public static By linkText(final String linkText) { - throwIfNull(linkText); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByLinkText(linkText); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByLinkText(linkText); - } - - @Override - public String toString() { - return "By.linkText: " + linkText; - } - }; - } - - /** - * Locates an element by matching partial part of the text displayed by an - * HTML link. - * - * @param linkText The text that should be contained by the text displayed - * on the link. - * @return A By instance that locates elements that contain the given link - * text. - */ - public static By partialLinkText(final String linkText) { - throwIfNull(linkText); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByPartialLinkText(linkText); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByPartialLinkText(linkText); - } - - @Override - public String toString() { - return "By.partialLinkText: " + linkText; - } - }; - } - - /** - * Locates an element by matching its HTML name attribute. - * - * @param name The value of the HTML name attribute. - * @return A By instance that locates elements by the HTML name attribute. - */ - public static By name(final String name) { - throwIfNull(name); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByName(name); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByName(name); - } - - @Override - public String toString() { - return "By.name: " + name; - } - }; - } - - /** - * Locates an element by matching its class name. - * @param className The class name - * @return A By instance that locates elements by their class name attribute. - */ - public static By className(final String className) { - throwIfNull(className); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByClassName(className); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByClassName(className); - } - - @Override - public String toString() { - return "By.className: " + className; - } - }; - } - - /** - * Locates an element by matching its css property. - * - * @param css The css property. - * @return A By instance that locates elements by their css property. - */ - public static By css(final String css) { - throwIfNull(css); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByCss(css); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByCss(css); - } - - @Override - public String toString() { - return "By.css: " + css; - } - }; - } - - /** - * Locates an element by matching its HTML tag name. - * - * @param tagName The HTML tag name to look for. - * @return A By instance that locates elements using the name of the - * HTML tag. - */ - public static By tagName(final String tagName) { - throwIfNull(tagName); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByTagName(tagName); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByTagName(tagName); - } - - @Override - public String toString() { - return "By.tagName: " + tagName; - } - }; - } - - /** - * Locates an element using an XPath expression. - * - * <p>When using XPath, be aware that this follows standard conventions: a - * search prefixed with "//" will search the entire document, not just the - * children of the current node. Use ".//" to limit your search to the - * children of this {@link android.webkit.webdriver.WebElement}. - * - * @param xpath The XPath expression to use. - * @return A By instance that locates elements using the given XPath. - */ - public static By xpath(final String xpath) { - throwIfNull(xpath); - return new By() { - @Override - public WebElement findElement(WebElement element) { - return element.findElementByXPath(xpath); - } - - @Override - public List<WebElement> findElements(WebElement element) { - return element.findElementsByXPath(xpath); - } - - @Override - public String toString() { - return "By.xpath: " + xpath; - } - }; - } - - private static void throwIfNull(String argument) { - if (argument == null) { - throw new IllegalArgumentException( - "Cannot find elements with null locator."); - } - } -} diff --git a/core/java/android/webkit/webdriver/WebDriver.java b/core/java/android/webkit/webdriver/WebDriver.java deleted file mode 100644 index 79e6523..0000000 --- a/core/java/android/webkit/webdriver/WebDriver.java +++ /dev/null @@ -1,843 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -import android.graphics.Point; -import android.os.Handler; -import android.os.Message; -import android.os.SystemClock; -import android.view.InputDevice; -import android.view.KeyCharacterMap; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.webkit.WebView; -import android.webkit.WebViewCore; - -import com.google.android.collect.Lists; -import com.google.android.collect.Maps; - -import com.android.internal.R; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Drives a web application by controlling the WebView. This class - * provides a DOM-like API allowing to get information about the page, - * navigate, and interact with the web application. This is particularly useful - * for testing a web application. - * - * <p/>{@link android.webkit.webdriver.WebDriver} should be created in the main - * thread, and invoked from another thread. Here is a sample usage: - * - * public class WebDriverStubActivity extends Activity { - * private WebDriver mDriver; - * - * public void onCreate(Bundle savedInstanceState) { - * super.onCreate(savedInstanceState); - * WebView view = new WebView(this); - * mDriver = new WebDriver(view); - * setContentView(view); - * } - * - * - * public WebDriver getDriver() { - * return mDriver; - * } - *} - * - * public class WebDriverTest extends - * ActivityInstrumentationTestCase2<WebDriverStubActivity>{ - * private WebDriver mDriver; - * - * public WebDriverTest() { - * super(WebDriverStubActivity.class); - * } - * - * protected void setUp() throws Exception { - * super.setUp(); - * mDriver = getActivity().getDriver(); - * } - * - * public void testGoogle() { - * mDriver.get("http://google.com"); - * WebElement searchBox = mDriver.findElement(By.name("q")); - * q.sendKeys("Cheese!"); - * q.submit(); - * assertTrue(mDriver.findElements(By.partialLinkText("Cheese")).size() > 0); - * } - *} - * - * @hide - */ -public class WebDriver { - // Timeout for page load in milliseconds. - private static final int LOADING_TIMEOUT = 30000; - // Timeout for executing JavaScript in the WebView in milliseconds. - private static final int JS_EXECUTION_TIMEOUT = 10000; - // Timeout for the MotionEvent to be completely handled - private static final int MOTION_EVENT_TIMEOUT = 1000; - // Timeout for detecting a new page load - private static final int PAGE_STARTED_LOADING = 500; - // Timeout for handling KeyEvents - private static final int KEY_EVENT_TIMEOUT = 2000; - - // Commands posted to the handler - private static final int CMD_GET_URL = 1; - private static final int CMD_EXECUTE_SCRIPT = 2; - private static final int CMD_SEND_TOUCH = 3; - private static final int CMD_SEND_KEYS = 4; - private static final int CMD_NAV_REFRESH = 5; - private static final int CMD_NAV_BACK = 6; - private static final int CMD_NAV_FORWARD = 7; - private static final int CMD_SEND_KEYCODE = 8; - private static final int CMD_MOVE_CURSOR_RIGHTMOST_POS = 9; - private static final int CMD_MESSAGE_RELAY_ECHO = 10; - - private static final String ELEMENT_KEY = "ELEMENT"; - private static final String STATUS = "status"; - private static final String VALUE = "value"; - - private static final long MAIN_THREAD = Thread.currentThread().getId(); - - // This is updated by a callabck from JavaScript when the result is ready. - private String mJsResult; - - // Used for synchronization - private final Object mSyncObject; - private final Object mSyncPageLoad; - - // Updated when the command is done executing in the main thread. - private volatile boolean mCommandDone; - // Used by WebViewClientWrapper.onPageStarted() to notify that - // a page started loading. - private volatile boolean mPageStartedLoading; - // Used by WebChromeClientWrapper.onProgressChanged to notify when - // a page finished loading. - private volatile boolean mPageFinishedLoading; - private WebView mWebView; - private Navigation mNavigation; - // This WebElement represents the object document.documentElement - private WebElement mDocumentElement; - - - // This Handler runs in the main UI thread. - private final Handler mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case CMD_GET_URL: - final String url = (String) msg.obj; - mWebView.loadUrl(url); - break; - case CMD_EXECUTE_SCRIPT: - mWebView.loadUrl("javascript:" + (String) msg.obj); - break; - case CMD_MESSAGE_RELAY_ECHO: - notifyCommandDone(); - break; - case CMD_SEND_TOUCH: - touchScreen((Point) msg.obj); - notifyCommandDone(); - break; - case CMD_SEND_KEYS: - dispatchKeys((CharSequence[]) msg.obj); - notifyCommandDone(); - break; - case CMD_NAV_REFRESH: - mWebView.reload(); - break; - case CMD_NAV_BACK: - mWebView.goBack(); - break; - case CMD_NAV_FORWARD: - mWebView.goForward(); - break; - case CMD_SEND_KEYCODE: - dispatchKeyCodes((int[]) msg.obj); - notifyCommandDone(); - break; - case CMD_MOVE_CURSOR_RIGHTMOST_POS: - moveCursorToLeftMostPos((String) msg.obj); - notifyCommandDone(); - break; - } - } - }; - - /** - * Error codes from the WebDriver wire protocol - * http://code.google.com/p/selenium/wiki/JsonWireProtocol#Response_Status_Codes - */ - private enum ErrorCode { - SUCCESS(0), - NO_SUCH_ELEMENT(7), - NO_SUCH_FRAME(8), - UNKNOWN_COMMAND(9), - UNSUPPORTED_OPERATION(9), // Alias - STALE_ELEMENT_REFERENCE(10), - ELEMENT_NOT_VISISBLE(11), - INVALID_ELEMENT_STATE(12), - UNKNOWN_ERROR(13), - ELEMENT_NOT_SELECTABLE(15), - XPATH_LOOKUP_ERROR(19), - NO_SUCH_WINDOW(23), - INVALID_COOKIE_DOMAIN(24), - UNABLE_TO_SET_COOKIE(25), - MODAL_DIALOG_OPENED(26), - MODAL_DIALOG_OPEN(27), - SCRIPT_TIMEOUT(28); - - private final int mCode; - private static ErrorCode[] values = ErrorCode.values(); - - ErrorCode(int code) { - this.mCode = code; - } - - public int getCode() { - return mCode; - } - - public static ErrorCode get(final int intValue) { - for (int i = 0; i < values.length; i++) { - if (values[i].getCode() == intValue) { - return values[i]; - } - } - return UNKNOWN_ERROR; - } - } - - public WebDriver(WebView webview) { - this.mWebView = webview; - mWebView.requestFocus(); - if (mWebView == null) { - throw new IllegalArgumentException("WebView cannot be null"); - } - if (!mWebView.getSettings().getJavaScriptEnabled()) { - throw new RuntimeException("Javascript is disabled in the WebView. " - + "Enable it to use WebDriver"); - } - shouldRunInMainThread(true); - - mSyncObject = new Object(); - mSyncPageLoad = new Object(); - this.mWebView = webview; - WebChromeClientWrapper chromeWrapper = new WebChromeClientWrapper( - webview.getWebChromeClient(), this); - mWebView.setWebChromeClient(chromeWrapper); - WebViewClientWrapper viewWrapper = new WebViewClientWrapper( - webview.getWebViewClient(), this); - mWebView.setWebViewClient(viewWrapper); - mWebView.addJavascriptInterface(new JavascriptResultReady(), - "webdriver"); - mDocumentElement = new WebElement(this, ""); - mNavigation = new Navigation(); - } - - /** - * @return The title of the current page, null if not set. - */ - public String getTitle() { - return mWebView.getTitle(); - } - - /** - * Loads a URL in the WebView. This function is blocking and will return - * when the page has finished loading. - * - * @param url The URL to load. - */ - public void get(String url) { - mNavigation.to(url); - } - - /** - * @return The source page of the currently loaded page in WebView. - */ - public String getPageSource() { - return (String) executeScript("return new XMLSerializer()." - + "serializeToString(document);"); - } - - /** - * Find the first {@link android.webkit.webdriver.WebElement} using the - * given method. - * - * @param by The locating mechanism to use. - * @return The first matching element on the current context. - * @throws {@link android.webkit.webdriver.WebElementNotFoundException} if - * no matching element was found. - */ - public WebElement findElement(By by) { - checkNotNull(mDocumentElement, "Load a page using WebDriver.get() " - + "before looking for elements."); - return by.findElement(mDocumentElement); - } - - /** - * Finds all {@link android.webkit.webdriver.WebElement} within the page - * using the given method. - * - * @param by The locating mechanism to use. - * @return A list of all {@link android.webkit.webdriver.WebElement} found, - * or an empty list if nothing matches. - */ - public List<WebElement> findElements(By by) { - checkNotNull(mDocumentElement, "Load a page using WebDriver.get() " - + "before looking for elements."); - return by.findElements(mDocumentElement); - } - - /** - * Clears the WebView's state and closes associated views. - */ - public void quit() { - mWebView.clearCache(true); - mWebView.clearFormData(); - mWebView.clearHistory(); - mWebView.clearSslPreferences(); - mWebView.clearView(); - mWebView.removeAllViewsInLayout(); - } - - /** - * Executes javascript in the context of the main frame. - * - * If the script has a return value the following happens: - * <ul> - * <li>For an HTML element, this method returns a WebElement</li> - * <li>For a decimal, a Double is returned</li> - * <li>For non-decimal number, a Long is returned</li> - * <li>For a boolean, a Boolean is returned</li> - * <li>For all other cases, a String is returned</li> - * <li>For an array, this returns a List<Object> with each object - * following the rules above.</li> - * <li>For an object literal this returns a Map<String, Object>. Note that - * Object literals keys can only be Strings. Non Strings keys will - * be filtered out.</li> - * </ul> - * - * <p> Arguments must be a number, a boolean, a string a WebElement or - * a list of any combination of the above. The arguments will be made - * available to the javascript via the "arguments" magic variable, - * as if the function was called via "Function.apply". - * - * @param script The JavaScript to execute. - * @param args The arguments to the script. Can be any of a number, boolean, - * string, WebElement or a List of those. - * @return A Boolean, Long, Double, String, WebElement, List or null. - */ - public Object executeScript(final String script, final Object... args) { - String scriptArgs = "[" + convertToJsArgs(args) + "]"; - String injectScriptJs = getResourceAsString(R.raw.execute_script_android); - return executeRawJavascript("(" + injectScriptJs + - ")(" + escapeAndQuote(script) + ", " + scriptArgs + ", true)"); - } - - public Navigation navigate() { - return mNavigation; - } - - - /** - * @hide - */ - public class Navigation { - /* package */ Navigation () {} - - public void back() { - navigate(CMD_NAV_BACK, null); - } - - public void forward() { - navigate(CMD_NAV_FORWARD, null); - } - - public void to(String url) { - navigate(CMD_GET_URL, url); - } - - public void refresh() { - navigate(CMD_NAV_REFRESH, null); - } - - private void navigate(int command, String url) { - synchronized (mSyncPageLoad) { - mPageFinishedLoading = false; - Message msg = mHandler.obtainMessage(command); - msg.obj = url; - mHandler.sendMessage(msg); - waitForPageLoad(); - } - } - } - - /** - * Converts the arguments passed to a JavaScript friendly format. - * - * @param args The arguments to convert. - * @return Comma separated Strings containing the arguments. - */ - /* package */ String convertToJsArgs(final Object... args) { - StringBuilder toReturn = new StringBuilder(); - int length = args.length; - for (int i = 0; i < length; i++) { - toReturn.append((i > 0) ? "," : ""); - if (args[i] instanceof List<?>) { - toReturn.append("["); - List<Object> aList = (List<Object>) args[i]; - for (int j = 0 ; j < aList.size(); j++) { - String comma = ((j == 0) ? "" : ","); - toReturn.append(comma + convertToJsArgs(aList.get(j))); - } - toReturn.append("]"); - } else if (args[i] instanceof Map<?, ?>) { - Map<Object, Object> aMap = (Map<Object, Object>) args[i]; - String toAdd = "{"; - for (Object key: aMap.keySet()) { - toAdd += key + ":" - + convertToJsArgs(aMap.get(key)) + ","; - } - toReturn.append(toAdd.substring(0, toAdd.length() -1) + "}"); - } else if (args[i] instanceof WebElement) { - // WebElement are represented in JavaScript by Objects as - // follow: {ELEMENT:"id"} where "id" refers to the id - // of the HTML element in the javascript cache that can - // be accessed throught bot.inject.cache.getCache_() - toReturn.append("{\"" + ELEMENT_KEY + "\":\"" - + ((WebElement) args[i]).getId() + "\"}"); - } else if (args[i] instanceof Number || args[i] instanceof Boolean) { - toReturn.append(String.valueOf(args[i])); - } else if (args[i] instanceof String) { - toReturn.append(escapeAndQuote((String) args[i])); - } else { - throw new IllegalArgumentException( - "Javascript arguments can be " - + "a Number, a Boolean, a String, a WebElement, " - + "or a List or a Map of those. Got: " - + ((args[i] == null) ? "null" : args[i].getClass() - + ", value: " + args[i].toString())); - } - } - return toReturn.toString(); - } - - /* package */ Object executeRawJavascript(final String script) { - if (mWebView.getUrl() == null) { - throw new WebDriverException("Cannot operate on a blank page. " - + "Load a page using WebDriver.get()."); - } - String result = executeCommand(CMD_EXECUTE_SCRIPT, - "if (!window.webdriver || !window.webdriver.resultReady) {" + - " return;" + - "}" + - "window.webdriver.resultReady(" + script + ")", - JS_EXECUTION_TIMEOUT); - if (result == null || "undefined".equals(result)) { - return null; - } - try { - JSONObject json = new JSONObject(result); - throwIfError(json); - Object value = json.get(VALUE); - return convertJsonToJavaObject(value); - } catch (JSONException e) { - throw new RuntimeException("Failed to parse JavaScript result: " - + result.toString(), e); - } - } - - /* package */ String getResourceAsString(final int resourceId) { - InputStream is = mWebView.getResources().openRawResource(resourceId); - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - StringBuilder sb = new StringBuilder(); - String line = null; - try { - while ((line = br.readLine()) != null) { - sb.append(line); - } - br.close(); - is.close(); - } catch (IOException e) { - throw new RuntimeException("Failed to open JavaScript resource.", e); - } - return sb.toString(); - } - - /* package */ void sendTouchScreen(Point coords) { - // Reset state - resetPageLoadState(); - executeCommand(CMD_SEND_TOUCH, coords,LOADING_TIMEOUT); - // Wait for the events to be fully handled - waitForMessageRelay(MOTION_EVENT_TIMEOUT); - - // If a page started loading, block until page finishes loading - waitForPageLoadIfNeeded(); - } - - /* package */ void resetPageLoadState() { - synchronized (mSyncPageLoad) { - mPageStartedLoading = false; - mPageFinishedLoading = false; - } - } - - /* package */ void waitForPageLoadIfNeeded() { - synchronized (mSyncPageLoad) { - Long end = System.currentTimeMillis() + PAGE_STARTED_LOADING; - // Wait PAGE_STARTED_LOADING milliseconds to see if we detect a - // page load. - while (!mPageStartedLoading && (System.currentTimeMillis() <= end)) { - try { - // This is notified by WebChromeClientWrapper#onProgressChanged - // when the page finished loading. - mSyncPageLoad.wait(PAGE_STARTED_LOADING); - } catch (InterruptedException e) { - new RuntimeException(e); - } - } - if (mPageStartedLoading) { - waitForPageLoad(); - } - } - } - - private void touchScreen(Point coords) { - // Convert to screen coords - // screen = JS x zoom - offset - float zoom = mWebView.getScale(); - float xOffset = mWebView.getX(); - float yOffset = mWebView.getY(); - Point screenCoords = new Point( (int)(coords.x*zoom - xOffset), - (int)(coords.y*zoom - yOffset)); - - long downTime = SystemClock.uptimeMillis(); - MotionEvent down = MotionEvent.obtain(downTime, - SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, screenCoords.x, - screenCoords.y, 0); - down.setSource(InputDevice.SOURCE_TOUCHSCREEN); - MotionEvent up = MotionEvent.obtain(downTime, - SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, screenCoords.x, - screenCoords.y, 0); - up.setSource(InputDevice.SOURCE_TOUCHSCREEN); - // Dispatch the events to WebView - mWebView.dispatchTouchEvent(down); - mWebView.dispatchTouchEvent(up); - } - - /* package */ void notifyPageStartedLoading() { - synchronized (mSyncPageLoad) { - mPageStartedLoading = true; - mSyncPageLoad.notify(); - } - } - - /* package */ void notifyPageFinishedLoading() { - synchronized (mSyncPageLoad) { - mPageFinishedLoading = true; - mSyncPageLoad.notify(); - } - } - - /** - * - * @param keys The first element of the CharSequence should be the - * existing value in the text input, or the empty string if none. - */ - /* package */ void sendKeys(CharSequence[] keys) { - executeCommand(CMD_SEND_KEYS, keys, KEY_EVENT_TIMEOUT); - // Wait for all KeyEvents to be handled - waitForMessageRelay(KEY_EVENT_TIMEOUT); - } - - /* package */ void sendKeyCodes(int[] keycodes) { - executeCommand(CMD_SEND_KEYCODE, keycodes, KEY_EVENT_TIMEOUT); - // Wait for all KeyEvents to be handled - waitForMessageRelay(KEY_EVENT_TIMEOUT); - } - - /* package */ void moveCursorToRightMostPosition(String value) { - executeCommand(CMD_MOVE_CURSOR_RIGHTMOST_POS, value, KEY_EVENT_TIMEOUT); - waitForMessageRelay(KEY_EVENT_TIMEOUT); - } - - private void moveCursorToLeftMostPos(String value) { - // If there is text, move the cursor to the rightmost position - if (value != null && !value.equals("")) { - long downTime = SystemClock.uptimeMillis(); - KeyEvent down = new KeyEvent(downTime, SystemClock.uptimeMillis(), - KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT, 0); - KeyEvent up = new KeyEvent(downTime, SystemClock.uptimeMillis(), - KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT, - value.length()); - mWebView.dispatchKeyEvent(down); - mWebView.dispatchKeyEvent(up); - } - } - - private void dispatchKeyCodes(int[] keycodes) { - for (int i = 0; i < keycodes.length; i++) { - KeyEvent down = new KeyEvent(KeyEvent.ACTION_DOWN, keycodes[i]); - KeyEvent up = new KeyEvent(KeyEvent.ACTION_UP, keycodes[i]); - mWebView.dispatchKeyEvent(down); - mWebView.dispatchKeyEvent(up); - } - } - - private void dispatchKeys(CharSequence[] keys) { - KeyCharacterMap chararcterMap = KeyCharacterMap.load( - KeyCharacterMap.VIRTUAL_KEYBOARD); - for (int i = 0; i < keys.length; i++) { - CharSequence s = keys[i]; - for (int j = 0; j < s.length(); j++) { - KeyEvent[] events = - chararcterMap.getEvents(new char[]{s.charAt(j)}); - for (KeyEvent e : events) { - mWebView.dispatchKeyEvent(e); - } - } - } - } - - private void waitForMessageRelay(long timeout) { - synchronized (mSyncObject) { - mCommandDone = false; - } - Message msg = Message.obtain(); - msg.what = WebViewCore.EventHub.MESSAGE_RELAY; - Message echo = mHandler.obtainMessage(CMD_MESSAGE_RELAY_ECHO); - msg.obj = echo; - - mWebView.getWebViewCore().sendMessage(msg); - synchronized (mSyncObject) { - long end = System.currentTimeMillis() + timeout; - while (!mCommandDone && (System.currentTimeMillis() <= end)) { - try { - // This is notifed by the mHandler when it receives the - // MESSAGE_RELAY back - mSyncObject.wait(timeout); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } - } - - private void waitForPageLoad() { - long endLoad = System.currentTimeMillis() + LOADING_TIMEOUT; - while (!mPageFinishedLoading - && (System.currentTimeMillis() <= endLoad)) { - try { - mSyncPageLoad.wait(LOADING_TIMEOUT); - } catch (InterruptedException e) { - throw new RuntimeException(); - } - } - } - - /** - * Wraps the given string into quotes and escape existing quotes - * and backslashes. - * "foo" -> "\"foo\"" - * "foo\"" -> "\"foo\\\"\"" - * "fo\o" -> "\"fo\\o\"" - * - * @param toWrap The String to wrap in quotes - * @return a String wrapping the original String in quotes - */ - private static String escapeAndQuote(final String toWrap) { - StringBuilder toReturn = new StringBuilder("\""); - for (int i = 0; i < toWrap.length(); i++) { - char c = toWrap.charAt(i); - if (c == '\"') { - toReturn.append("\\\""); - } else if (c == '\\') { - toReturn.append("\\\\"); - } else { - toReturn.append(c); - } - } - toReturn.append("\""); - return toReturn.toString(); - } - - private Object convertJsonToJavaObject(final Object toConvert) { - try { - if (toConvert == null - || toConvert.equals(null) - || "undefined".equals(toConvert) - || "null".equals(toConvert)) { - return null; - } else if (toConvert instanceof Boolean) { - return toConvert; - } else if (toConvert instanceof Double - || toConvert instanceof Float) { - return Double.valueOf(String.valueOf(toConvert)); - } else if (toConvert instanceof Integer - || toConvert instanceof Long) { - return Long.valueOf(String.valueOf(toConvert)); - } else if (toConvert instanceof JSONArray) { // List - return convertJsonArrayToList((JSONArray) toConvert); - } else if (toConvert instanceof JSONObject) { // Map or WebElment - JSONObject map = (JSONObject) toConvert; - if (map.opt(ELEMENT_KEY) != null) { // WebElement - return new WebElement(this, (String) map.get(ELEMENT_KEY)); - } else { // Map - return convertJsonObjectToMap(map); - } - } else { - return toConvert.toString(); - } - } catch (JSONException e) { - throw new RuntimeException("Failed to parse JavaScript result: " - + toConvert.toString(), e); - } - } - - private List<Object> convertJsonArrayToList(final JSONArray json) { - List<Object> toReturn = Lists.newArrayList(); - for (int i = 0; i < json.length(); i++) { - try { - toReturn.add(convertJsonToJavaObject(json.get(i))); - } catch (JSONException e) { - throw new RuntimeException("Failed to parse JSON: " - + json.toString(), e); - } - } - return toReturn; - } - - private Map<Object, Object> convertJsonObjectToMap(final JSONObject json) { - Map<Object, Object> toReturn = Maps.newHashMap(); - for (Iterator it = json.keys(); it.hasNext();) { - String key = (String) it.next(); - try { - Object value = json.get(key); - toReturn.put(convertJsonToJavaObject(key), - convertJsonToJavaObject(value)); - } catch (JSONException e) { - throw new RuntimeException("Failed to parse JSON:" - + json.toString(), e); - } - } - return toReturn; - } - - private void throwIfError(final JSONObject jsonObject) { - ErrorCode status; - String errorMsg; - try { - status = ErrorCode.get((Integer) jsonObject.get(STATUS)); - errorMsg = String.valueOf(jsonObject.get(VALUE)); - } catch (JSONException e) { - throw new RuntimeException("Failed to parse JSON Object: " - + jsonObject, e); - } - switch (status) { - case SUCCESS: - return; - case NO_SUCH_ELEMENT: - throw new WebElementNotFoundException("Could not find " - + "WebElement."); - case STALE_ELEMENT_REFERENCE: - throw new WebElementStaleException("WebElement is stale."); - default: - throw new WebDriverException("Error: " + errorMsg); - } - } - - private void shouldRunInMainThread(boolean value) { - assert (value == (MAIN_THREAD == Thread.currentThread().getId())); - } - - /** - * Interface called from JavaScript when the result is ready. - */ - private class JavascriptResultReady { - - /** - * A callback from JavaScript to Java that passes the result as a - * parameter. This method is available from the WebView's - * JavaScript DOM as window.webdriver.resultReady(). - * - * @param result The result that should be sent to Java from Javascript. - */ - public void resultReady(final String result) { - synchronized (mSyncObject) { - mJsResult = result; - mCommandDone = true; - mSyncObject.notify(); - } - } - } - - /* package */ void notifyCommandDone() { - synchronized (mSyncObject) { - mCommandDone = true; - mSyncObject.notify(); - } - } - - /** - * Executes the given command by posting a message to mHandler. This thread - * will block until the command which runs in the main thread is done. - * - * @param command The command to run. - * @param arg The argument for that command. - * @param timeout A timeout in milliseconds. - */ - private String executeCommand(int command, final Object arg, long timeout) { - shouldRunInMainThread(false); - synchronized (mSyncObject) { - mCommandDone = false; - Message msg = mHandler.obtainMessage(command); - msg.obj = arg; - mHandler.sendMessage(msg); - - long end = System.currentTimeMillis() + timeout; - while (!mCommandDone) { - if (System.currentTimeMillis() >= end) { - throw new RuntimeException("Timeout executing command: " - + command); - } - try { - mSyncObject.wait(timeout); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } - return mJsResult; - } - - private void checkNotNull(Object obj, String errosMsg) { - if (obj == null) { - throw new NullPointerException(errosMsg); - } - } -} diff --git a/core/java/android/webkit/webdriver/WebDriverException.java b/core/java/android/webkit/webdriver/WebDriverException.java deleted file mode 100644 index 1a579c2..0000000 --- a/core/java/android/webkit/webdriver/WebDriverException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -/** - * @hide - */ -public class WebDriverException extends RuntimeException { - public WebDriverException() { - super(); - } - - public WebDriverException(String reason) { - super(reason); - } - - public WebDriverException(String reason, Throwable cause) { - super(reason, cause); - } - - public WebDriverException(Throwable cause) { - super(cause); - } -} diff --git a/core/java/android/webkit/webdriver/WebElement.java b/core/java/android/webkit/webdriver/WebElement.java deleted file mode 100644 index 02c1595..0000000 --- a/core/java/android/webkit/webdriver/WebElement.java +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -import android.graphics.Point; -import android.view.KeyEvent; - -import com.android.internal.R; - -import java.util.List; -import java.util.Map; - -/** - * Represents an HTML element. Typically most interactions with a web page - * will be performed through this class. - * - * @hide - */ -public class WebElement { - private final String mId; - private final WebDriver mDriver; - - private static final String LOCATOR_ID = "id"; - private static final String LOCATOR_LINK_TEXT = "linkText"; - private static final String LOCATOR_PARTIAL_LINK_TEXT = "partialLinkText"; - private static final String LOCATOR_NAME = "name"; - private static final String LOCATOR_CLASS_NAME = "className"; - private static final String LOCATOR_CSS = "css"; - private static final String LOCATOR_TAG_NAME = "tagName"; - private static final String LOCATOR_XPATH = "xpath"; - - /** - * Package constructor to prevent clients from creating a new WebElement - * instance. - * - * <p> A WebElement represents an HTML element on the page. - * The corresponding HTML element is stored in a JS cache in the page - * that can be accessed through JavaScript using "bot.inject.cache". - * - * @param driver The WebDriver instance to use. - * @param id The index of the HTML element in the JavaSctipt cache. - * document.documentElement object. - */ - /* package */ WebElement(final WebDriver driver, final String id) { - this.mId = id; - this.mDriver = driver; - } - - /** - * Finds the first {@link android.webkit.webdriver.WebElement} using the - * given method. - * - * @param by The locating mechanism to use. - * @return The first matching element on the current context. - */ - public WebElement findElement(final By by) { - return by.findElement(this); - } - - /** - * Finds all {@link android.webkit.webdriver.WebElement} within the page - * using the given method. - * - * @param by The locating mechanism to use. - * @return A list of all {@link android.webkit.webdriver.WebElement} found, - * or an empty list if nothing matches. - */ - public List<WebElement> findElements(final By by) { - return by.findElements(this); - } - - /** - * Gets the visisble (i.e. not hidden by CSS) innerText of this element, - * inlcuding sub-elements. - * - * @return the innerText of this element. - * @throws {@link android.webkit.webdriver.WebElementStaleException} if this - * element is stale, i.e. not on the current DOM. - */ - public String getText() { - String getText = mDriver.getResourceAsString(R.raw.get_text_android); - return (String) executeAtom(getText, this); - } - - /** - * Gets the value of an HTML attribute for this element or the value of the - * property with the same name if the attribute is not present. If neither - * is set, null is returned. - * - * @param attribute the HTML attribute. - * @return the value of that attribute or the value of the property with the - * same name if the attribute is not set, or null if neither are set. For - * boolean attribute values this will return the string "true" or "false". - */ - public String getAttribute(String attribute) { - String getAttribute = mDriver.getResourceAsString( - R.raw.get_attribute_value_android); - return (String) executeAtom(getAttribute, this, attribute); - } - - /** - * @return the tag name of this element. - */ - public String getTagName() { - return (String) mDriver.executeScript("return arguments[0].tagName;", - this); - } - - /** - * @return true if this element is enabled, false otherwise. - */ - public boolean isEnabled() { - String isEnabled = mDriver.getResourceAsString( - R.raw.is_enabled_android); - return (Boolean) executeAtom(isEnabled, this); - } - - /** - * Determines whether this element is selected or not. This applies to input - * elements such as checkboxes, options in a select, and radio buttons. - * - * @return True if this element is selected, false otherwise. - */ - public boolean isSelected() { - String isSelected = mDriver.getResourceAsString( - R.raw.is_selected_android); - return (Boolean) executeAtom(isSelected, this); - } - - /** - * Selects an element on the page. This works for selecting checkboxes, - * options in a select, and radio buttons. - */ - public void setSelected() { - String setSelected = mDriver.getResourceAsString( - R.raw.set_selected_android); - executeAtom(setSelected, this); - } - - /** - * This toggles the checkboxe state from selected to not selected, or - * from not selected to selected. - * - * @return True if the toggled element is selected, false otherwise. - */ - public boolean toggle() { - String toggle = mDriver.getResourceAsString(R.raw.toggle_android); - return (Boolean) executeAtom(toggle, this); - } - - /** - * Sends the KeyEvents for the given sequence of characters to the - * WebElement to simulate typing. The KeyEvents are generated using the - * device's {@link android.view.KeyCharacterMap.VIRTUAL_KEYBOARD}. - * - * @param keys The keys to send to this WebElement - */ - public void sendKeys(CharSequence... keys) { - if (keys == null || keys.length == 0) { - return; - } - click(); - mDriver.moveCursorToRightMostPosition(getAttribute("value")); - mDriver.sendKeys(keys); - } - - /** - * Use this to send one of the key code constants defined in - * {@link android.view.KeyEvent} - * - * @param keys - */ - public void sendKeyCodes(int... keys) { - if (keys == null || keys.length == 0) { - return; - } - click(); - mDriver.moveCursorToRightMostPosition(getAttribute("value")); - mDriver.sendKeyCodes(keys); - } - - /** - * Sends a touch event to the center coordinates of this WebElement. - */ - public void click() { - Point topLeft = getLocation(); - Point size = getSize(); - int jsX = topLeft.x + size.x/2; - int jsY = topLeft.y + size.y/2; - Point center = new Point(jsX, jsY); - mDriver.sendTouchScreen(center); - } - - /** - * Submits the form containing this WebElement. - */ - public void submit() { - mDriver.resetPageLoadState(); - String submit = mDriver.getResourceAsString(R.raw.submit_android); - executeAtom(submit, this); - mDriver.waitForPageLoadIfNeeded(); - } - - /** - * Clears the text value if this is a text entry element. Does nothing - * otherwise. - */ - public void clear() { - String value = getAttribute("value"); - if (value == null || value.equals("")) { - return; - } - int length = value.length(); - int[] keys = new int[length]; - for (int i = 0; i < length; i++) { - keys[i] = KeyEvent.KEYCODE_DEL; - } - sendKeyCodes(keys); - } - - /** - * @return the value of the given CSS property if found, null otherwise. - */ - public String getCssValue(String cssProperty) { - String getCssProp = mDriver.getResourceAsString( - R.raw.get_value_of_css_property_android); - return (String) executeAtom(getCssProp, this, cssProperty); - } - - /** - * Gets the width and height of the rendered element. - * - * @return a {@link android.graphics.Point}, where Point.x represents the - * width, and Point.y represents the height of the element. - */ - public Point getSize() { - String getSize = mDriver.getResourceAsString(R.raw.get_size_android); - Map<String, Long> map = (Map<String, Long>) executeAtom(getSize, this); - return new Point(map.get("width").intValue(), - map.get("height").intValue()); - } - - /** - * Gets the location of the top left corner of this element on the screen. - * If the element is not visisble, this will scroll to get the element into - * the visisble screen. - * - * @return a {@link android.graphics.Point} containing the x and y - * coordinates of the top left corner of this element. - */ - public Point getLocation() { - String getLocation = mDriver.getResourceAsString( - R.raw.get_top_left_coordinates_android); - Map<String,Long> map = (Map<String, Long>) executeAtom(getLocation, - this); - return new Point(map.get("x").intValue(), map.get("y").intValue()); - } - - /** - * @return True if the WebElement is displayed on the screen, - * false otherwise. - */ - public boolean isDisplayed() { - String isDisplayed = mDriver.getResourceAsString( - R.raw.is_displayed_android); - return (Boolean) executeAtom(isDisplayed, this); - } - - /*package*/ String getId() { - return mId; - } - - /* package */ WebElement findElementById(final String locator) { - return findElement(LOCATOR_ID, locator); - } - - /* package */ WebElement findElementByLinkText(final String linkText) { - return findElement(LOCATOR_LINK_TEXT, linkText); - } - - /* package */ WebElement findElementByPartialLinkText( - final String linkText) { - return findElement(LOCATOR_PARTIAL_LINK_TEXT, linkText); - } - - /* package */ WebElement findElementByName(final String name) { - return findElement(LOCATOR_NAME, name); - } - - /* package */ WebElement findElementByClassName(final String className) { - return findElement(LOCATOR_CLASS_NAME, className); - } - - /* package */ WebElement findElementByCss(final String css) { - return findElement(LOCATOR_CSS, css); - } - - /* package */ WebElement findElementByTagName(final String tagName) { - return findElement(LOCATOR_TAG_NAME, tagName); - } - - /* package */ WebElement findElementByXPath(final String xpath) { - return findElement(LOCATOR_XPATH, xpath); - } - - /* package */ List<WebElement> findElementsById(final String locator) { - return findElements(LOCATOR_ID, locator); - } - - /* package */ List<WebElement> findElementsByLinkText(final String linkText) { - return findElements(LOCATOR_LINK_TEXT, linkText); - } - - /* package */ List<WebElement> findElementsByPartialLinkText( - final String linkText) { - return findElements(LOCATOR_PARTIAL_LINK_TEXT, linkText); - } - - /* package */ List<WebElement> findElementsByName(final String name) { - return findElements(LOCATOR_NAME, name); - } - - /* package */ List<WebElement> findElementsByClassName(final String className) { - return findElements(LOCATOR_CLASS_NAME, className); - } - - /* package */ List<WebElement> findElementsByCss(final String css) { - return findElements(LOCATOR_CSS, css); - } - - /* package */ List<WebElement> findElementsByTagName(final String tagName) { - return findElements(LOCATOR_TAG_NAME, tagName); - } - - /* package */ List<WebElement> findElementsByXPath(final String xpath) { - return findElements(LOCATOR_XPATH, xpath); - } - - private Object executeAtom(final String atom, final Object... args) { - String scriptArgs = mDriver.convertToJsArgs(args); - return mDriver.executeRawJavascript("(" + - atom + ")(" + scriptArgs + ")"); - } - - private List<WebElement> findElements(String strategy, String locator) { - String findElements = mDriver.getResourceAsString( - R.raw.find_elements_android); - if (mId.equals("")) { - return (List<WebElement>) executeAtom(findElements, - strategy, locator); - } else { - return (List<WebElement>) executeAtom(findElements, - strategy, locator, this); - } - } - - private WebElement findElement(String strategy, String locator) { - String findElement = mDriver.getResourceAsString( - R.raw.find_element_android); - WebElement el; - if (mId.equals("")) { - el = (WebElement) executeAtom(findElement, - strategy, locator); - } else { - el = (WebElement) executeAtom(findElement, - strategy, locator, this); - } - if (el == null) { - throw new WebElementNotFoundException("Could not find element " - + "with " + strategy + ": " + locator); - } - return el; - } -} diff --git a/core/java/android/webkit/webdriver/WebElementNotFoundException.java b/core/java/android/webkit/webdriver/WebElementNotFoundException.java deleted file mode 100644 index e66d279..0000000 --- a/core/java/android/webkit/webdriver/WebElementNotFoundException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -/** - * Thrown when a {@link android.webkit.webdriver.WebElement} is not found in the - * DOM of the page. - * @hide - */ -public class WebElementNotFoundException extends RuntimeException { - - public WebElementNotFoundException() { - super(); - } - - public WebElementNotFoundException(String reason) { - super(reason); - } - - public WebElementNotFoundException(String reason, Throwable cause) { - super(reason, cause); - } - - public WebElementNotFoundException(Throwable cause) { - super(cause); - } -} diff --git a/core/java/android/webkit/webdriver/WebElementStaleException.java b/core/java/android/webkit/webdriver/WebElementStaleException.java deleted file mode 100644 index c59e794..0000000 --- a/core/java/android/webkit/webdriver/WebElementStaleException.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -/** - * Thrown when trying to access a {@link android.webkit.webdriver.WebElement} - * that is stale. This mean that the {@link android.webkit.webdriver.WebElement} - * is no longer present on the DOM of the page. - * @hide - */ -public class WebElementStaleException extends RuntimeException { - - public WebElementStaleException() { - super(); - } - - public WebElementStaleException(String reason) { - super(reason); - } - - public WebElementStaleException(String reason, Throwable cause) { - super(reason, cause); - } - - public WebElementStaleException(Throwable cause) { - super(cause); - } -} diff --git a/core/java/android/webkit/webdriver/WebViewClient.java b/core/java/android/webkit/webdriver/WebViewClient.java deleted file mode 100644 index c582b24..0000000 --- a/core/java/android/webkit/webdriver/WebViewClient.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -import android.graphics.Bitmap; -import android.net.http.SslError; -import android.os.Message; -import android.view.KeyEvent; -import android.webkit.HttpAuthHandler; -import android.webkit.SslErrorHandler; -import android.webkit.WebResourceResponse; -import android.webkit.WebView; -import android.webkit.WebViewClient; - -/* package */ class WebViewClientWrapper extends WebViewClient { - private final WebViewClient mDelegate; - private final WebDriver mDriver; - - public WebViewClientWrapper(WebViewClient delegate, WebDriver driver) { - if (delegate == null) { - mDelegate = new WebViewClient(); - } else { - mDelegate = delegate; - } - this.mDriver = driver; - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - return mDelegate.shouldOverrideUrlLoading(view, url); - } - - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - mDriver.notifyPageStartedLoading(); - mDelegate.onPageStarted(view, url, favicon); - } - - @Override - public void onPageFinished(WebView view, String url) { - mDelegate.onPageFinished(view, url); - } - - @Override - public void onLoadResource(WebView view, String url) { - mDelegate.onLoadResource(view, url); - } - - @Override - public WebResourceResponse shouldInterceptRequest(WebView view, - String url) { - return mDelegate.shouldInterceptRequest(view, url); - } - - @Override - public void onTooManyRedirects(WebView view, Message cancelMsg, - Message continueMsg) { - mDelegate.onTooManyRedirects(view, cancelMsg, continueMsg); - } - - @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { - mDelegate.onReceivedError(view, errorCode, description, failingUrl); - } - - @Override - public void onFormResubmission(WebView view, Message dontResend, - Message resend) { - mDelegate.onFormResubmission(view, dontResend, resend); - } - - @Override - public void doUpdateVisitedHistory(WebView view, String url, - boolean isReload) { - mDelegate.doUpdateVisitedHistory(view, url, isReload); - } - - @Override - public void onReceivedSslError(WebView view, SslErrorHandler handler, - SslError error) { - mDelegate.onReceivedSslError(view, handler, error); - } - - @Override - public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, - String host, String realm) { - mDelegate.onReceivedHttpAuthRequest(view, handler, host, realm); - } - - @Override - public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { - return mDelegate.shouldOverrideKeyEvent(view, event); - } - - @Override - public void onUnhandledKeyEvent(WebView view, KeyEvent event) { - mDelegate.onUnhandledKeyEvent(view, event); - } - - @Override - public void onScaleChanged(WebView view, float oldScale, float newScale) { - mDelegate.onScaleChanged(view, oldScale, newScale); - } - - @Override - public void onReceivedLoginRequest(WebView view, String realm, - String account, String args) { - mDelegate.onReceivedLoginRequest(view, realm, account, args); - } -} diff --git a/core/java/android/webkit/webdriver/WebchromeClientWrapper.java b/core/java/android/webkit/webdriver/WebchromeClientWrapper.java deleted file mode 100644 index a9e5d19..0000000 --- a/core/java/android/webkit/webdriver/WebchromeClientWrapper.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.webkit.webdriver; - -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Message; -import android.view.View; -import android.webkit.ConsoleMessage; -import android.webkit.GeolocationPermissions; -import android.webkit.JsPromptResult; -import android.webkit.JsResult; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient; -import android.webkit.WebStorage; -import android.webkit.WebView; - -/* package */ class WebChromeClientWrapper extends WebChromeClient { - - private final WebChromeClient mDelegate; - private final WebDriver mDriver; - - public WebChromeClientWrapper(WebChromeClient delegate, WebDriver driver) { - if (delegate == null) { - this.mDelegate = new WebChromeClient(); - } else { - this.mDelegate = delegate; - } - this.mDriver = driver; - } - - @Override - public void onProgressChanged(WebView view, int newProgress) { - if (newProgress == 100) { - mDriver.notifyPageFinishedLoading(); - } - mDelegate.onProgressChanged(view, newProgress); - } - - @Override - public void onReceivedTitle(WebView view, String title) { - mDelegate.onReceivedTitle(view, title); - } - - @Override - public void onReceivedIcon(WebView view, Bitmap icon) { - mDelegate.onReceivedIcon(view, icon); - } - - @Override - public void onReceivedTouchIconUrl(WebView view, String url, - boolean precomposed) { - mDelegate.onReceivedTouchIconUrl(view, url, precomposed); - } - - @Override - public void onShowCustomView(View view, - CustomViewCallback callback) { - mDelegate.onShowCustomView(view, callback); - } - - @Override - public void onHideCustomView() { - mDelegate.onHideCustomView(); - } - - @Override - public boolean onCreateWindow(WebView view, boolean dialog, - boolean userGesture, Message resultMsg) { - return mDelegate.onCreateWindow(view, dialog, userGesture, resultMsg); - } - - @Override - public void onRequestFocus(WebView view) { - mDelegate.onRequestFocus(view); - } - - @Override - public void onCloseWindow(WebView window) { - mDelegate.onCloseWindow(window); - } - - @Override - public boolean onJsAlert(WebView view, String url, String message, - JsResult result) { - return mDelegate.onJsAlert(view, url, message, result); - } - - @Override - public boolean onJsConfirm(WebView view, String url, String message, - JsResult result) { - return mDelegate.onJsConfirm(view, url, message, result); - } - - @Override - public boolean onJsPrompt(WebView view, String url, String message, - String defaultValue, JsPromptResult result) { - return mDelegate.onJsPrompt(view, url, message, defaultValue, result); - } - - @Override - public boolean onJsBeforeUnload(WebView view, String url, String message, - JsResult result) { - return mDelegate.onJsBeforeUnload(view, url, message, result); - } - - @Override - public void onExceededDatabaseQuota(String url, String databaseIdentifier, - long currentQuota, long estimatedSize, long totalUsedQuota, - WebStorage.QuotaUpdater quotaUpdater) { - mDelegate.onExceededDatabaseQuota(url, databaseIdentifier, currentQuota, - estimatedSize, totalUsedQuota, quotaUpdater); - } - - @Override - public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, - WebStorage.QuotaUpdater quotaUpdater) { - mDelegate.onReachedMaxAppCacheSize(spaceNeeded, totalUsedQuota, - quotaUpdater); - } - - @Override - public void onGeolocationPermissionsShowPrompt(String origin, - GeolocationPermissions.Callback callback) { - mDelegate.onGeolocationPermissionsShowPrompt(origin, callback); - } - - @Override - public void onGeolocationPermissionsHidePrompt() { - mDelegate.onGeolocationPermissionsHidePrompt(); - } - - @Override - public boolean onJsTimeout() { - return mDelegate.onJsTimeout(); - } - - @Override - public void onConsoleMessage(String message, int lineNumber, - String sourceID) { - mDelegate.onConsoleMessage(message, lineNumber, sourceID); - } - - @Override - public boolean onConsoleMessage(ConsoleMessage consoleMessage) { - return mDelegate.onConsoleMessage(consoleMessage); - } - - @Override - public Bitmap getDefaultVideoPoster() { - return mDelegate.getDefaultVideoPoster(); - } - - @Override - public View getVideoLoadingProgressView() { - return mDelegate.getVideoLoadingProgressView(); - } - - @Override - public void getVisitedHistory(ValueCallback<String[]> callback) { - mDelegate.getVisitedHistory(callback); - } - - @Override - public void openFileChooser(ValueCallback<Uri> uploadFile, - String acceptType) { - mDelegate.openFileChooser(uploadFile, acceptType); - } - - @Override - public void setInstallableWebApp() { - mDelegate.setInstallableWebApp(); - } - - @Override - public void setupAutoFill(Message msg) { - mDelegate.setupAutoFill(msg); - } -} diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java index 6b845b0..6e6e4af 100644 --- a/core/java/android/widget/DateTimeView.java +++ b/core/java/android/widget/DateTimeView.java @@ -78,7 +78,7 @@ public class DateTimeView extends TextView { @Override protected void onAttachedToWindow() { - super.onDetachedFromWindow(); + super.onAttachedToWindow(); registerReceivers(); mAttachedToWindow = true; } diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index 8c288d1..4eecd64 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -37,6 +37,7 @@ import android.net.Uri; import android.os.Bundle; import android.speech.RecognizerIntent; import android.text.Editable; +import android.text.InputType; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -49,6 +50,7 @@ import android.view.CollapsibleActionView; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; @@ -79,6 +81,8 @@ import java.util.WeakHashMap; * * @see android.view.MenuItem#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW * @attr ref android.R.styleable#SearchView_iconifiedByDefault + * @attr ref android.R.styleable#SearchView_imeOptions + * @attr ref android.R.styleable#SearchView_inputType * @attr ref android.R.styleable#SearchView_maxWidth * @attr ref android.R.styleable#SearchView_queryHint */ @@ -254,8 +258,6 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } }); - boolean focusable = true; - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SearchView, 0, 0); setIconifiedByDefault(a.getBoolean(R.styleable.SearchView_iconifiedByDefault, true)); int maxWidth = a.getDimensionPixelSize(R.styleable.SearchView_maxWidth, -1); @@ -266,8 +268,19 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (!TextUtils.isEmpty(queryHint)) { setQueryHint(queryHint); } + int imeOptions = a.getInt(R.styleable.SearchView_imeOptions, -1); + if (imeOptions != -1) { + setImeOptions(imeOptions); + } + int inputType = a.getInt(R.styleable.SearchView_inputType, -1); + if (inputType != -1) { + setInputType(inputType); + } + a.recycle(); + boolean focusable = true; + a = context.obtainStyledAttributes(attrs, R.styleable.View, 0, 0); focusable = a.getBoolean(R.styleable.View_focusable, focusable); a.recycle(); @@ -326,6 +339,30 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { mAppSearchData = appSearchData; } + /** + * Sets the IME options on the query text field. + * + * @see TextView#setImeOptions(int) + * @param imeOptions the options to set on the query text field + * + * @attr ref android.R.styleable#SearchView_imeOptions + */ + public void setImeOptions(int imeOptions) { + mQueryTextView.setImeOptions(imeOptions); + } + + /** + * Sets the input type on the query text field. + * + * @see TextView#setInputType(int) + * @param inputType the input type to set on the query text field + * + * @attr ref android.R.styleable#SearchView_inputType + */ + public void setInputType(int inputType) { + mQueryTextView.setInputType(inputType); + } + /** @hide */ @Override public boolean requestFocus(int direction, Rect previouslyFocusedRect) { @@ -918,11 +955,21 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * Updates the auto-complete text view. */ private void updateSearchAutoComplete() { - // close any existing suggestions adapter - //closeSuggestionsAdapter(); - mQueryTextView.setDropDownAnimationStyle(0); // no animation mQueryTextView.setThreshold(mSearchable.getSuggestThreshold()); + mQueryTextView.setImeOptions(mSearchable.getImeOptions()); + int inputType = mSearchable.getInputType(); + // We only touch this if the input type is set up for text (which it almost certainly + // should be, in the case of search!) + if ((inputType & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT) { + // The existence of a suggestions authority is the proxy for "suggestions + // are available here" + inputType &= ~InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE; + if (mSearchable.getSuggestAuthority() != null) { + inputType |= InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE; + } + } + mQueryTextView.setInputType(inputType); // attach the suggestions adapter, if suggestions are available // The existence of a suggestions authority is the proxy for "suggestions available here" diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java index 9ac170d..4143383 100644 --- a/core/java/android/widget/Switch.java +++ b/core/java/android/widget/Switch.java @@ -489,7 +489,7 @@ public class Switch extends CompoundButton { mVelocityTracker.computeCurrentVelocity(1000); float xvel = mVelocityTracker.getXVelocity(); if (Math.abs(xvel) > mMinFlingVelocity) { - newState = xvel < 0; + newState = xvel > 0; } else { newState = getTargetCheckedState(); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 04cf69b..d78050a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -2493,12 +2493,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_scrollHorizontally */ public void setHorizontallyScrolling(boolean whether) { - mHorizontallyScrolling = whether; + if (mHorizontallyScrolling != whether) { + mHorizontallyScrolling = whether; - if (mLayout != null) { - nullLayouts(); - requestLayout(); - invalidate(); + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } } @@ -2699,13 +2701,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_lineSpacingMultiplier */ public void setLineSpacing(float add, float mult) { - mSpacingMult = mult; - mSpacingAdd = add; + if (mSpacingAdd != add || mSpacingMult != mult) { + mSpacingAdd = add; + mSpacingMult = mult; - if (mLayout != null) { - nullLayouts(); - requestLayout(); - invalidate(); + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } } @@ -4969,18 +4973,42 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return; } - int sel = getSelectionEnd(); - if (sel < 0) { + int selEnd = getSelectionEnd(); + if (selEnd < 0) { super.getFocusedRect(r); return; } - int line = mLayout.getLineForOffset(sel); - r.top = mLayout.getLineTop(line); - r.bottom = mLayout.getLineBottom(line); - - r.left = (int) mLayout.getPrimaryHorizontal(sel); - r.right = r.left + 1; + int selStart = getSelectionStart(); + if (selStart < 0 || selStart >= selEnd) { + int line = mLayout.getLineForOffset(selEnd); + r.top = mLayout.getLineTop(line); + r.bottom = mLayout.getLineBottom(line); + r.left = (int) mLayout.getPrimaryHorizontal(selEnd) - 2; + r.right = r.left + 4; + } else { + int lineStart = mLayout.getLineForOffset(selStart); + int lineEnd = mLayout.getLineForOffset(selEnd); + r.top = mLayout.getLineTop(lineStart); + r.bottom = mLayout.getLineBottom(lineEnd); + if (lineStart == lineEnd) { + r.left = (int) mLayout.getPrimaryHorizontal(selStart); + r.right = (int) mLayout.getPrimaryHorizontal(selEnd); + } else { + // Selection extends across multiple lines -- the focused + // rect covers the entire width. + if (mHighlightPathBogus) { + mHighlightPath.reset(); + mLayout.getSelectionPath(selStart, selEnd, mHighlightPath); + mHighlightPathBogus = false; + } + synchronized (sTempRect) { + mHighlightPath.computeBounds(sTempRect, true); + r.left = (int)sTempRect.left-1; + r.right = (int)sTempRect.right+1; + } + } + } // Adjust for padding and gravity. int paddingLeft = getCompoundPaddingLeft(); @@ -6252,12 +6280,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_includeFontPadding */ public void setIncludeFontPadding(boolean includepad) { - mIncludePad = includepad; + if (mIncludePad != includepad) { + mIncludePad = includepad; - if (mLayout != null) { - nullLayouts(); - requestLayout(); - invalidate(); + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } } @@ -6581,7 +6611,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else { // Dynamic width, so we have no choice but to request a new // view layout with a new text layout. - nullLayouts(); requestLayout(); invalidate(); @@ -6812,7 +6841,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // requestRectangleOnScreen() is in terms of content coordinates. if (mTempRect == null) mTempRect = new Rect(); - mTempRect.set(x, top, x + 1, bottom); + // The offsets here are to ensure the rectangle we are using is + // within our view bounds, in case the cursor is on the far left + // or right. If it isn't withing the bounds, then this request + // will be ignored. + mTempRect.set(x - 2, top, x + 2, bottom); getInterestingRect(mTempRect, line); mTempRect.offset(mScrollX, mScrollY); @@ -7070,12 +7103,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_ellipsize */ public void setEllipsize(TextUtils.TruncateAt where) { - mEllipsize = where; + // TruncateAt is an enum. != comparison is ok between these singleton objects. + if (mEllipsize != where) { + mEllipsize = where; - if (mLayout != null) { - nullLayouts(); - requestLayout(); - invalidate(); + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } } @@ -9657,8 +9693,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener com.android.internal.R.layout.text_edit_action_popup_text; private TextView mPasteTextView; private TextView mReplaceTextView; - // Whether or not the Paste action should be available when the action popup is displayed - private boolean mWithPaste; @Override protected void createPopupWindow() { @@ -9694,7 +9728,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @Override public void show() { - mPasteTextView.setVisibility(mWithPaste && canPaste() ? View.VISIBLE : View.GONE); + mPasteTextView.setVisibility(canPaste() ? View.VISIBLE : View.GONE); + mReplaceTextView.setVisibility(mSuggestionsEnabled ? View.VISIBLE : View.GONE); + + if (!canPaste() && !mSuggestionsEnabled) return; + super.show(); } @@ -9733,10 +9771,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return positionY; } - - public void setShowWithPaste(boolean withPaste) { - mWithPaste = withPaste; - } } private abstract class HandleView extends View implements TextViewPositionListener { @@ -9851,7 +9885,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener TextView.this.getPositionListener().removeSubscriber(this); } - void showActionPopupWindow(int delay, boolean withPaste) { + void showActionPopupWindow(int delay) { if (mActionPopupWindow == null) { mActionPopupWindow = new ActionPopupWindow(); } @@ -9864,7 +9898,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else { TextView.this.removeCallbacks(mActionPopupShower); } - mActionPopupWindow.setShowWithPaste(withPaste); TextView.this.postDelayed(mActionPopupShower, delay); } @@ -9926,6 +9959,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } public void updatePosition(int parentPositionX, int parentPositionY, boolean modified) { + positionAtCursorOffset(getCurrentCursorOffset()); if (modified || mPositionHasChanged) { if (mIsDragging) { // Update touchToWindow offset in case of parent scrolling while dragging @@ -10049,7 +10083,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) { delayBeforeShowActionPopup = 0; } - showActionPopupWindow(delayBeforeShowActionPopup, true); + showActionPopupWindow(delayBeforeShowActionPopup); } private void hideAfterDelay() { @@ -10325,7 +10359,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // Make sure both left and right handles share the same ActionPopupWindow (so that // moving any of the handles hides the action popup). - mStartHandle.showActionPopupWindow(DELAY_BEFORE_REPLACE_ACTION, false); + mStartHandle.showActionPopupWindow(DELAY_BEFORE_REPLACE_ACTION); mEndHandle.setActionPopupWindow(mStartHandle.getActionPopupWindow()); hideInsertionPointCursorController(); @@ -10791,9 +10825,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private boolean mDPadCenterIsDown = false; private boolean mEnterKeyIsDown = false; private boolean mContextMenuTriggeredByKey = false; - // Created once and shared by different CursorController helper methods. - // Only one cursor controller is active at any time which prevent race conditions. - private static Rect sCursorControllerTempRect = new Rect(); private boolean mSelectAllOnFocus = false; diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 008f400..31360e1 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -156,8 +156,6 @@ public class ActionBarImpl extends ActionBar { "with a compatible window decor layout"); } - mHasEmbeddedTabs = mContext.getResources().getBoolean( - com.android.internal.R.bool.action_bar_embed_tabs); mActionView.setContextView(mContextView); mContextDisplayMode = mActionView.isSplitActionBar() ? CONTEXT_DISPLAY_SPLIT : CONTEXT_DISPLAY_NORMAL; @@ -166,25 +164,31 @@ public class ActionBarImpl extends ActionBar { // Newer apps need to enable it explicitly. setHomeButtonEnabled(mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH); + + setHasEmbeddedTabs(mContext.getResources().getBoolean( + com.android.internal.R.bool.action_bar_embed_tabs)); } public void onConfigurationChanged(Configuration newConfig) { - mHasEmbeddedTabs = mContext.getResources().getBoolean( - com.android.internal.R.bool.action_bar_embed_tabs); + setHasEmbeddedTabs(mContext.getResources().getBoolean( + com.android.internal.R.bool.action_bar_embed_tabs)); + } + private void setHasEmbeddedTabs(boolean hasEmbeddedTabs) { + mHasEmbeddedTabs = hasEmbeddedTabs; // Switch tab layout configuration if needed if (!mHasEmbeddedTabs) { mActionView.setEmbeddedTabView(null); mContainerView.setTabContainer(mTabScrollView); } else { mContainerView.setTabContainer(null); - if (mTabScrollView != null) { - mTabScrollView.setVisibility(View.VISIBLE); - } mActionView.setEmbeddedTabView(mTabScrollView); } - mActionView.setCollapsable(!mHasEmbeddedTabs && - getNavigationMode() == NAVIGATION_MODE_TABS); + final boolean isInTabMode = getNavigationMode() == NAVIGATION_MODE_TABS; + if (mTabScrollView != null) { + mTabScrollView.setVisibility(isInTabMode ? View.VISIBLE : View.GONE); + } + mActionView.setCollapsable(!mHasEmbeddedTabs && isInTabMode); } private void ensureTabsExist() { @@ -192,7 +196,7 @@ public class ActionBarImpl extends ActionBar { return; } - ScrollingTabContainerView tabScroller = mActionView.createTabContainer(); + ScrollingTabContainerView tabScroller = new ScrollingTabContainerView(mContext); if (mHasEmbeddedTabs) { tabScroller.setVisibility(View.VISIBLE); @@ -249,7 +253,7 @@ public class ActionBarImpl extends ActionBar { @Override public void setCustomView(int resId) { - setCustomView(LayoutInflater.from(mContext).inflate(resId, mActionView, false)); + setCustomView(LayoutInflater.from(getThemedContext()).inflate(resId, mActionView, false)); } @Override @@ -626,14 +630,14 @@ public class ActionBarImpl extends ActionBar { public ActionModeImpl(ActionMode.Callback callback) { mCallback = callback; - mMenu = new MenuBuilder(mActionView.getContext()) + mMenu = new MenuBuilder(getThemedContext()) .setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); mMenu.setCallback(this); } @Override public MenuInflater getMenuInflater() { - return new MenuInflater(mContext); + return new MenuInflater(getThemedContext()); } @Override @@ -751,7 +755,7 @@ public class ActionBarImpl extends ActionBar { return true; } - new MenuPopupHelper(mContext, subMenu).show(); + new MenuPopupHelper(getThemedContext(), subMenu).show(); return true; } @@ -815,7 +819,8 @@ public class ActionBarImpl extends ActionBar { @Override public Tab setCustomView(int layoutResId) { - return setCustomView(LayoutInflater.from(mContext).inflate(layoutResId, null)); + return setCustomView(LayoutInflater.from(getThemedContext()) + .inflate(layoutResId, null)); } @Override @@ -925,18 +930,14 @@ public class ActionBarImpl extends ActionBar { case NAVIGATION_MODE_TABS: mSavedTabPosition = getSelectedNavigationIndex(); selectTab(null); - if (!mActionView.hasEmbeddedTabs()) { - mTabScrollView.setVisibility(View.GONE); - } + mTabScrollView.setVisibility(View.GONE); break; } mActionView.setNavigationMode(mode); switch (mode) { case NAVIGATION_MODE_TABS: ensureTabsExist(); - if (!mActionView.hasEmbeddedTabs()) { - mTabScrollView.setVisibility(View.VISIBLE); - } + mTabScrollView.setVisibility(View.VISIBLE); if (mSavedTabPosition != INVALID_POSITION) { setSelectedNavigationItem(mSavedTabPosition); mSavedTabPosition = INVALID_POSITION; diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl index dd22e25..d407080 100755 --- a/core/java/com/android/internal/app/IMediaContainerService.aidl +++ b/core/java/com/android/internal/app/IMediaContainerService.aidl @@ -25,7 +25,7 @@ interface IMediaContainerService { String copyResourceToContainer(in Uri packageURI, String containerId, String key, String resFileName); - boolean copyResource(in Uri packageURI, + int copyResource(in Uri packageURI, in ParcelFileDescriptor outStream); PackageInfoLite getMinimalPackageInfo(in Uri fileUri, in int flags, in long threshold); boolean checkInternalFreeStorage(in Uri fileUri, in long threshold); diff --git a/core/java/com/android/internal/os/ProcessStats.java b/core/java/com/android/internal/os/ProcessStats.java index ea5ce09..e0e9a29 100644 --- a/core/java/com/android/internal/os/ProcessStats.java +++ b/core/java/com/android/internal/os/ProcessStats.java @@ -19,6 +19,7 @@ package com.android.internal.os; import static android.os.Process.*; import android.os.Process; +import android.os.StrictMode; import android.os.SystemClock; import android.util.Slog; @@ -798,6 +799,10 @@ public class ProcessStats { } private String readFile(String file, char endChar) { + // Permit disk reads here, as /proc/meminfo isn't really "on + // disk" and should be fast. TODO: make BlockGuard ignore + // /proc/ and /sys/ files perhaps? + StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads(); FileInputStream is = null; try { is = new FileInputStream(file); @@ -822,6 +827,7 @@ public class ProcessStats { } catch (java.io.IOException e) { } } + StrictMode.setThreadPolicy(savedPolicy); } return null; } diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java index a2d492b..fd9ee08 100644 --- a/core/java/com/android/internal/widget/ActionBarContainer.java +++ b/core/java/com/android/internal/widget/ActionBarContainer.java @@ -25,6 +25,7 @@ import android.util.AttributeSet; import android.view.ActionMode; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import android.widget.FrameLayout; /** @@ -102,14 +103,17 @@ public class ActionBarContainer extends FrameLayout { return true; } - public void setTabContainer(View tabView) { + public void setTabContainer(ScrollingTabContainerView tabView) { if (mTabContainer != null) { removeView(mTabContainer); } mTabContainer = tabView; if (tabView != null) { addView(tabView); - tabView.getLayoutParams().width = LayoutParams.MATCH_PARENT; + final ViewGroup.LayoutParams lp = tabView.getLayoutParams(); + lp.width = LayoutParams.MATCH_PARENT; + lp.height = LayoutParams.WRAP_CONTENT; + tabView.setAllowCollapse(false); } } diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java index 3e3eeab..5645a6f 100644 --- a/core/java/com/android/internal/widget/ActionBarContextView.java +++ b/core/java/com/android/internal/widget/ActionBarContextView.java @@ -15,12 +15,18 @@ */ package com.android.internal.widget; +import com.android.internal.R; +import com.android.internal.view.menu.ActionMenuPresenter; +import com.android.internal.view.menu.ActionMenuView; +import com.android.internal.view.menu.MenuBuilder; + import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.ActionMode; @@ -30,11 +36,6 @@ import android.view.animation.DecelerateInterpolator; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.internal.R; -import com.android.internal.view.menu.ActionMenuPresenter; -import com.android.internal.view.menu.ActionMenuView; -import com.android.internal.view.menu.MenuBuilder; - /** * @hide */ @@ -53,6 +54,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi private TextView mSubtitleView; private int mTitleStyleRes; private int mSubtitleStyleRes; + private Drawable mSplitBackground; private Animator mCurrentAnimation; private boolean mAnimateInOnLayout; @@ -83,6 +85,10 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi mContentHeight = a.getLayoutDimension( com.android.internal.R.styleable.ActionMode_height, 0); + + mSplitBackground = a.getDrawable( + com.android.internal.R.styleable.ActionMode_backgroundSplit); + a.recycle(); } @@ -175,6 +181,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi if (mSplitView == null) { menu.addMenuPresenter(mActionMenuPresenter); mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(null); addView(mMenuView, layoutParams); } else { // Allow full screen width in split mode. @@ -187,6 +194,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi layoutParams.height = mContentHeight; menu.addMenuPresenter(mActionMenuPresenter); mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(mSplitBackground); mSplitView.addView(mMenuView, layoutParams); } @@ -256,7 +264,12 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi protected LayoutParams generateDefaultLayoutParams() { // Used by custom views if they don't supply layout params. Everything else // added to an ActionBarContextView should have them already. - return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + } + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new MarginLayoutParams(getContext(), attrs); } @Override @@ -285,6 +298,8 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi if (mClose != null) { availableWidth = measureChildView(mClose, availableWidth, childSpecHeight, 0); + MarginLayoutParams lp = (MarginLayoutParams) mClose.getLayoutParams(); + availableWidth -= lp.leftMargin + lp.rightMargin; } if (mMenuView != null && mMenuView.getParent() == this) { @@ -327,7 +342,8 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi } private Animator makeInAnimation() { - mClose.setTranslationX(-mClose.getWidth()); + mClose.setTranslationX(-mClose.getWidth() - + ((MarginLayoutParams) mClose.getLayoutParams()).leftMargin); ObjectAnimator buttonAnimator = ObjectAnimator.ofFloat(mClose, "translationX", 0); buttonAnimator.setDuration(200); buttonAnimator.addListener(this); @@ -355,7 +371,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi private Animator makeOutAnimation() { ObjectAnimator buttonAnimator = ObjectAnimator.ofFloat(mClose, "translationX", - -mClose.getWidth()); + -mClose.getWidth() - ((MarginLayoutParams) mClose.getLayoutParams()).leftMargin); buttonAnimator.setDuration(200); buttonAnimator.addListener(this); buttonAnimator.setInterpolator(new DecelerateInterpolator()); @@ -387,7 +403,10 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); if (mClose != null && mClose.getVisibility() != GONE) { + MarginLayoutParams lp = (MarginLayoutParams) mClose.getLayoutParams(); + x += lp.leftMargin; x += positionChild(mClose, x, y, contentHeight); + x += lp.rightMargin; if (mAnimateInOnLayout) { mAnimationMode = ANIMATE_IN; diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index 61df5c7..83f3294 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -332,7 +332,10 @@ public class ActionBarView extends AbsActionBarView { mIncludeTabs = tabs != null; if (mIncludeTabs && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) { addView(mTabScrollView); - mTabScrollView.getLayoutParams().width = LayoutParams.WRAP_CONTENT; + ViewGroup.LayoutParams lp = mTabScrollView.getLayoutParams(); + lp.width = LayoutParams.WRAP_CONTENT; + lp.height = LayoutParams.MATCH_PARENT; + tabs.setAllowCollapse(true); } } @@ -459,8 +462,10 @@ public class ActionBarView extends AbsActionBarView { mTitle = title; if (mTitleView != null) { mTitleView.setText(title); - mTitleLayout.setVisibility(TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle) ? - GONE : VISIBLE); + final boolean visible = mExpandedActionView == null && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0 && + (!TextUtils.isEmpty(mTitle) || !TextUtils.isEmpty(mSubtitle)); + mTitleLayout.setVisibility(visible ? VISIBLE : GONE); } if (mLogoNavItem != null) { mLogoNavItem.setTitle(title); @@ -476,8 +481,10 @@ public class ActionBarView extends AbsActionBarView { if (mSubtitleView != null) { mSubtitleView.setText(subtitle); mSubtitleView.setVisibility(subtitle != null ? VISIBLE : GONE); - mTitleLayout.setVisibility(TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle) ? - GONE : VISIBLE); + final boolean visible = mExpandedActionView == null && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0 && + (!TextUtils.isEmpty(mTitle) || !TextUtils.isEmpty(mSubtitle)); + mTitleLayout.setVisibility(visible ? VISIBLE : GONE); } } @@ -572,7 +579,7 @@ public class ActionBarView extends AbsActionBarView { } public void setIcon(int resId) { - setIcon(mContext.getResources().getDrawableForDensity(resId, getPreferredIconDensity())); + setIcon(mContext.getResources().getDrawable(resId)); } public void setLogo(Drawable logo) { @@ -586,25 +593,6 @@ public class ActionBarView extends AbsActionBarView { setLogo(mContext.getResources().getDrawable(resId)); } - /** - * @return Drawable density to load that will best fit the available height. - */ - private int getPreferredIconDensity() { - final Resources res = mContext.getResources(); - final int availableHeight = getLayoutParams().height - - mHomeLayout.getVerticalIconPadding(); - int iconSize = res.getDimensionPixelSize(android.R.dimen.app_icon_size); - - if (iconSize * DisplayMetrics.DENSITY_LOW >= availableHeight) { - return DisplayMetrics.DENSITY_LOW; - } else if (iconSize * DisplayMetrics.DENSITY_MEDIUM >= availableHeight) { - return DisplayMetrics.DENSITY_MEDIUM; - } else if (iconSize * DisplayMetrics.DENSITY_HIGH >= availableHeight) { - return DisplayMetrics.DENSITY_HIGH; - } - return DisplayMetrics.DENSITY_XHIGH; - } - public void setNavigationMode(int mode) { final int oldMode = mNavigationMode; if (mode != oldMode) { @@ -649,18 +637,6 @@ public class ActionBarView extends AbsActionBarView { } } - public ScrollingTabContainerView createTabContainer() { - final LinearLayout tabLayout = new LinearLayout(getContext(), null, - com.android.internal.R.attr.actionBarTabBarStyle); - tabLayout.setMeasureWithLargestChildEnabled(true); - tabLayout.setLayoutParams(new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, mContentHeight)); - - final ScrollingTabContainerView scroller = new ScrollingTabContainerView(mContext); - scroller.setTabLayout(tabLayout); - return scroller; - } - public void setDropdownAdapter(SpinnerAdapter adapter) { mSpinnerAdapter = adapter; if (mSpinner != null) { @@ -748,7 +724,12 @@ public class ActionBarView extends AbsActionBarView { mTitleLayout.setEnabled(titleUp); } - addView(mTitleLayout); + addView(mTitleLayout, new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT)); + if (mExpandedActionView != null) { + // Don't show while in expanded mode + mTitleLayout.setVisibility(GONE); + } } public void setContextView(ActionBarContextView view) { @@ -1351,6 +1332,7 @@ public class ActionBarView extends AbsActionBarView { removeView(mExpandedActionView); removeView(mExpandedHomeLayout); + mExpandedActionView = null; if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0) { mHomeLayout.setVisibility(VISIBLE); } @@ -1370,7 +1352,6 @@ public class ActionBarView extends AbsActionBarView { if (mCustomNavView != null && (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { mCustomNavView.setVisibility(VISIBLE); } - mExpandedActionView = null; mExpandedHomeLayout.setIcon(null); mCurrentExpandedItem = null; requestLayout(); diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java index 718d249..71f9364 100644 --- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java +++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java @@ -30,18 +30,32 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; +import android.widget.AdapterView; +import android.widget.BaseAdapter; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.Spinner; import android.widget.TextView; -public class ScrollingTabContainerView extends HorizontalScrollView { +/** + * This widget implements the dynamic action bar tab behavior that can change + * across different configurations or circumstances. + */ +public class ScrollingTabContainerView extends HorizontalScrollView + implements AdapterView.OnItemSelectedListener { + private static final String TAG = "ScrollingTabContainerView"; Runnable mTabSelector; private TabClickListener mTabClickListener; private LinearLayout mTabLayout; + private Spinner mTabSpinner; + private boolean mAllowCollapse; int mMaxTabWidth; + private int mContentHeight; + private int mSelectedTabIndex; protected Animator mVisibilityAnim; protected final VisibilityAnimListener mVisAnimListener = new VisibilityAnimListener(); @@ -53,14 +67,24 @@ public class ScrollingTabContainerView extends HorizontalScrollView { public ScrollingTabContainerView(Context context) { super(context); setHorizontalScrollBarEnabled(false); + + TypedArray a = getContext().obtainStyledAttributes(null, R.styleable.ActionBar, + com.android.internal.R.attr.actionBarStyle, 0); + setContentHeight(a.getLayoutDimension(R.styleable.ActionBar_height, 0)); + a.recycle(); + + mTabLayout = createTabLayout(); + addView(mTabLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthMode = MeasureSpec.getMode(widthMeasureSpec); - setFillViewport(widthMode == MeasureSpec.EXACTLY); + final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY; + setFillViewport(lockedExpanded); - final int childCount = getChildCount(); + final int childCount = mTabLayout.getChildCount(); if (childCount > 1 && (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) { if (childCount > 2) { @@ -72,14 +96,76 @@ public class ScrollingTabContainerView extends HorizontalScrollView { mMaxTabWidth = -1; } + heightMeasureSpec = MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY); + + final boolean canCollapse = !lockedExpanded && mAllowCollapse; + + if (canCollapse) { + // See if we should expand + mTabLayout.measure(MeasureSpec.UNSPECIFIED, heightMeasureSpec); + if (mTabLayout.getMeasuredWidth() > MeasureSpec.getSize(widthMeasureSpec)) { + performCollapse(); + } else { + performExpand(); + } + } else { + performExpand(); + } + + final int oldWidth = getMeasuredWidth(); super.onMeasure(widthMeasureSpec, heightMeasureSpec); + final int newWidth = getMeasuredWidth(); + + if (lockedExpanded && oldWidth != newWidth) { + // Recenter the tab display if we're at a new (scrollable) size. + setTabSelected(mSelectedTabIndex); + } } - public void setTabSelected(int position) { - if (mTabLayout == null) { - return; + /** + * Indicates whether this view is collapsed into a dropdown menu instead + * of traditional tabs. + * @return true if showing as a spinner + */ + private boolean isCollapsed() { + return mTabSpinner != null && mTabSpinner.getParent() == this; + } + + public void setAllowCollapse(boolean allowCollapse) { + mAllowCollapse = allowCollapse; + } + + private void performCollapse() { + if (isCollapsed()) return; + + if (mTabSpinner == null) { + mTabSpinner = createSpinner(); + } + removeView(mTabLayout); + addView(mTabSpinner, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + if (mTabSpinner.getAdapter() == null) { + mTabSpinner.setAdapter(new TabAdapter()); + } + if (mTabSelector != null) { + removeCallbacks(mTabSelector); + mTabSelector = null; } + mTabSpinner.setSelection(mSelectedTabIndex); + } + + private boolean performExpand() { + if (!isCollapsed()) return false; + + removeView(mTabSpinner); + addView(mTabLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + setTabSelected(mTabSpinner.getSelectedItemPosition()); + return false; + } + public void setTabSelected(int position) { + mSelectedTabIndex = position; final int tabCount = mTabLayout.getChildCount(); for (int i = 0; i < tabCount; i++) { final View child = mTabLayout.getChildAt(i); @@ -92,10 +178,28 @@ public class ScrollingTabContainerView extends HorizontalScrollView { } public void setContentHeight(int contentHeight) { - mTabLayout.getLayoutParams().height = contentHeight; + mContentHeight = contentHeight; requestLayout(); } + private LinearLayout createTabLayout() { + final LinearLayout tabLayout = new LinearLayout(getContext(), null, + com.android.internal.R.attr.actionBarTabBarStyle); + tabLayout.setMeasureWithLargestChildEnabled(true); + tabLayout.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); + return tabLayout; + } + + private Spinner createSpinner() { + final Spinner spinner = new Spinner(getContext(), null, + com.android.internal.R.attr.actionDropDownStyle); + spinner.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); + spinner.setOnItemSelectedListener(this); + return spinner; + } + @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -132,7 +236,7 @@ public class ScrollingTabContainerView extends HorizontalScrollView { } } - public void animateToTab(int position) { + public void animateToTab(final int position) { final View tabView = mTabLayout.getChildAt(position); if (mTabSelector != null) { removeCallbacks(mTabSelector); @@ -147,22 +251,15 @@ public class ScrollingTabContainerView extends HorizontalScrollView { post(mTabSelector); } - public void setTabLayout(LinearLayout tabLayout) { - if (mTabLayout != tabLayout) { - if (mTabLayout != null) { - ((ViewGroup) mTabLayout.getParent()).removeView(mTabLayout); - } - if (tabLayout != null) { - addView(tabLayout); - } - mTabLayout = tabLayout; + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + if (mTabSelector != null) { + // Re-post the selector we saved + post(mTabSelector); } } - public LinearLayout getTabLayout() { - return mTabLayout; - } - @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -171,61 +268,112 @@ public class ScrollingTabContainerView extends HorizontalScrollView { } } - private TabView createTabView(ActionBar.Tab tab) { - final TabView tabView = new TabView(getContext(), tab); - tabView.setFocusable(true); + private TabView createTabView(ActionBar.Tab tab, boolean forAdapter) { + final TabView tabView = new TabView(getContext(), tab, forAdapter); + if (forAdapter) { + tabView.setBackgroundDrawable(null); + tabView.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, + mContentHeight)); + } else { + tabView.setFocusable(true); - if (mTabClickListener == null) { - mTabClickListener = new TabClickListener(); + if (mTabClickListener == null) { + mTabClickListener = new TabClickListener(); + } + tabView.setOnClickListener(mTabClickListener); } - tabView.setOnClickListener(mTabClickListener); return tabView; } public void addTab(ActionBar.Tab tab, boolean setSelected) { - View tabView = createTabView(tab); + TabView tabView = createTabView(tab, false); mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1)); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } if (setSelected) { tabView.setSelected(true); } + if (mAllowCollapse) { + requestLayout(); + } } public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { - final TabView tabView = createTabView(tab); + final TabView tabView = createTabView(tab, false); mTabLayout.addView(tabView, position, new LinearLayout.LayoutParams( 0, LayoutParams.MATCH_PARENT, 1)); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } if (setSelected) { tabView.setSelected(true); } + if (mAllowCollapse) { + requestLayout(); + } } public void updateTab(int position) { ((TabView) mTabLayout.getChildAt(position)).update(); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); + } } public void removeTabAt(int position) { - if (mTabLayout != null) { - mTabLayout.removeViewAt(position); + mTabLayout.removeViewAt(position); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); } } public void removeAllTabs() { - if (mTabLayout != null) { - mTabLayout.removeAllViews(); + mTabLayout.removeAllViews(); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); } } + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { + TabView tabView = (TabView) view; + tabView.getTab().select(); + } + + @Override + public void onNothingSelected(AdapterView<?> parent) { + } + private class TabView extends LinearLayout { private ActionBar.Tab mTab; private TextView mTextView; private ImageView mIconView; private View mCustomView; - public TabView(Context context, ActionBar.Tab tab) { + public TabView(Context context, ActionBar.Tab tab, boolean forList) { super(context, null, com.android.internal.R.attr.actionBarTabStyle); mTab = tab; + if (forList) { + setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); + } + + update(); + } + + public void bindTab(ActionBar.Tab tab) { + mTab = tab; update(); } @@ -303,6 +451,33 @@ public class ScrollingTabContainerView extends HorizontalScrollView { } } + private class TabAdapter extends BaseAdapter { + @Override + public int getCount() { + return mTabLayout.getChildCount(); + } + + @Override + public Object getItem(int position) { + return ((TabView) mTabLayout.getChildAt(position)).getTab(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = createTabView((ActionBar.Tab) getItem(position), true); + } else { + ((TabView) convertView).bindTab((ActionBar.Tab) getItem(position)); + } + return convertView; + } + } + private class TabClickListener implements OnClickListener { public void onClick(View view) { TabView tabView = (TabView) view; diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 6e73889..aece5f0 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -104,7 +104,6 @@ LOCAL_SRC_FILES:= \ android/graphics/NinePatchImpl.cpp \ android/graphics/NinePatchPeeker.cpp \ android/graphics/Paint.cpp \ - android/graphics/ParcelSurfaceTexture.cpp \ android/graphics/Path.cpp \ android/graphics/PathMeasure.cpp \ android/graphics/PathEffect.cpp \ @@ -178,6 +177,7 @@ LOCAL_C_INCLUDES += \ external/icu4c/i18n \ external/icu4c/common \ external/jpeg \ + external/harfbuzz/contrib \ external/harfbuzz/src \ external/zlib \ frameworks/opt/emoji \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 9e46d80..dd7dd86 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -105,7 +105,6 @@ extern int register_android_graphics_ColorFilter(JNIEnv* env); extern int register_android_graphics_DrawFilter(JNIEnv* env); extern int register_android_graphics_Matrix(JNIEnv* env); extern int register_android_graphics_Paint(JNIEnv* env); -extern int register_android_graphics_ParcelSurfaceTexture(JNIEnv* env); extern int register_android_graphics_Path(JNIEnv* env); extern int register_android_graphics_PathMeasure(JNIEnv* env); extern int register_android_graphics_Picture(JNIEnv*); @@ -1125,7 +1124,6 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_graphics_Movie), REG_JNI(register_android_graphics_NinePatch), REG_JNI(register_android_graphics_Paint), - REG_JNI(register_android_graphics_ParcelSurfaceTexture), REG_JNI(register_android_graphics_Path), REG_JNI(register_android_graphics_PathMeasure), REG_JNI(register_android_graphics_PathEffect), diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp index 64749e9..98d7fce 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/core/jni/android/graphics/Paint.cpp @@ -325,11 +325,13 @@ public: NPE_CHECK_RETURN_ZERO(env, text); size_t textLength = env->GetArrayLength(text); - if ((index | count) < 0 || (size_t)(index + count) > textLength) { doThrowAIOOBE(env); return 0; } + if (count == 0) { + return 0; + } SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); const jchar* textArray = env->GetCharArrayElements(text, NULL); @@ -350,15 +352,22 @@ public: NPE_CHECK_RETURN_ZERO(env, jpaint); NPE_CHECK_RETURN_ZERO(env, text); - SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); - const jchar* textArray = env->GetStringChars(text, NULL); - int count = end - start; + if ((start | count) < 0) { + doThrowAIOOBE(env); + return 0; + } + if (count == 0) { + return 0; + } size_t textLength = env->GetStringLength(text); - if ((start | count) < 0 || (size_t)count > textLength) { + if ((size_t)count > textLength) { doThrowAIOOBE(env); return 0; } + + const jchar* textArray = env->GetStringChars(text, NULL); + SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); jfloat width = 0; #if RTL_USE_HARFBUZZ @@ -376,10 +385,15 @@ public: NPE_CHECK_RETURN_ZERO(env, jpaint); NPE_CHECK_RETURN_ZERO(env, text); - SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); - const jchar* textArray = env->GetStringChars(text, NULL); size_t textLength = env->GetStringLength(text); + if (textLength == 0) { + return 0; + } + + const jchar* textArray = env->GetStringChars(text, NULL); + SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); jfloat width = 0; + #if RTL_USE_HARFBUZZ TextLayout::getTextRunAdvances(paint, textArray, 0, textLength, textLength, paint->getFlags(), NULL /* dont need all advances */, width); @@ -391,8 +405,25 @@ public: } static int dotextwidths(JNIEnv* env, SkPaint* paint, const jchar text[], int count, jfloatArray widths) { + NPE_CHECK_RETURN_ZERO(env, paint); + NPE_CHECK_RETURN_ZERO(env, text); + + if (count < 0 || !widths) { + doThrowAIOOBE(env); + return 0; + } + if (count == 0) { + return 0; + } + size_t widthsLength = env->GetArrayLength(widths); + if ((size_t)count > widthsLength) { + doThrowAIOOBE(env); + return 0; + } + AutoJavaFloatArray autoWidths(env, widths, count); jfloat* widthsArray = autoWidths.ptr(); + #if RTL_USE_HARFBUZZ jfloat totalAdvance; @@ -427,6 +458,22 @@ public: static int doTextGlyphs(JNIEnv* env, SkPaint* paint, const jchar* text, jint start, jint count, jint contextCount, jint flags, jcharArray glyphs) { + NPE_CHECK_RETURN_ZERO(env, paint); + NPE_CHECK_RETURN_ZERO(env, text); + + if ((start | count | contextCount) < 0 || contextCount < count || !glyphs) { + doThrowAIOOBE(env); + return 0; + } + if (count == 0) { + return 0; + } + size_t glypthsLength = env->GetArrayLength(glyphs); + if ((size_t)count > glypthsLength) { + doThrowAIOOBE(env); + return 0; + } + jchar* glyphsArray = env->GetCharArrayElements(glyphs, NULL); HB_ShaperItem shaperItem; HB_FontRec font; @@ -455,8 +502,25 @@ public: static jfloat doTextRunAdvances(JNIEnv *env, SkPaint *paint, const jchar *text, jint start, jint count, jint contextCount, jint flags, jfloatArray advances, jint advancesIndex) { + NPE_CHECK_RETURN_ZERO(env, paint); + NPE_CHECK_RETURN_ZERO(env, text); + + if ((start | count | contextCount | advancesIndex) < 0 || contextCount < count) { + doThrowAIOOBE(env); + return 0; + } + if (count == 0) { + return 0; + } + if (advances) { + size_t advancesLength = env->GetArrayLength(advances); + if ((size_t)count > advancesLength) { + doThrowAIOOBE(env); + return 0; + } + } jfloat advancesArray[count]; - jfloat totalAdvance; + jfloat totalAdvance = 0; TextLayout::getTextRunAdvances(paint, text, start, count, contextCount, flags, advancesArray, totalAdvance); @@ -470,8 +534,26 @@ public: static jfloat doTextRunAdvancesICU(JNIEnv *env, SkPaint *paint, const jchar *text, jint start, jint count, jint contextCount, jint flags, jfloatArray advances, jint advancesIndex) { + NPE_CHECK_RETURN_ZERO(env, paint); + NPE_CHECK_RETURN_ZERO(env, text); + + if ((start | count | contextCount | advancesIndex) < 0 || contextCount < count) { + doThrowAIOOBE(env); + return 0; + } + if (count == 0) { + return 0; + } + if (advances) { + size_t advancesLength = env->GetArrayLength(advances); + if ((size_t)count > advancesLength) { + doThrowAIOOBE(env); + return 0; + } + } + jfloat advancesArray[count]; - jfloat totalAdvance; + jfloat totalAdvance = 0; TextLayout::getTextRunAdvancesICU(paint, text, start, count, contextCount, flags, advancesArray, totalAdvance); @@ -512,7 +594,7 @@ public: jint count, jint flags, jint offset, jint opt) { #if RTL_USE_HARFBUZZ jfloat scalarArray[count]; - jfloat totalAdvance; + jfloat totalAdvance = 0; TextLayout::getTextRunAdvances(paint, text, start, count, count, flags, scalarArray, totalAdvance); diff --git a/core/jni/android/graphics/ParcelSurfaceTexture.cpp b/core/jni/android/graphics/ParcelSurfaceTexture.cpp deleted file mode 100644 index 754485f..0000000 --- a/core/jni/android/graphics/ParcelSurfaceTexture.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "ParcelSurfaceTexture" - -#include <gui/SurfaceTextureClient.h> -#include <surfaceflinger/Surface.h> - -#include <android_runtime/AndroidRuntime.h> -#include <android_runtime/android_graphics_SurfaceTexture.h> -#include <android_runtime/android_view_Surface.h> - -#include <utils/Log.h> - -#include <binder/Parcel.h> - -#include "android_util_Binder.h" -#include "jni.h" -#include "JNIHelp.h" - -// ---------------------------------------------------------------------------- - -namespace android { - -const char* const kParcelSurfaceTextureClassPathName = - "android/graphics/ParcelSurfaceTexture"; - -struct fields_t { - jfieldID iSurfaceTexture; -}; -static fields_t fields; - -#define ANDROID_GRAPHICS_ISURFACETEXTURE_JNI_ID "mISurfaceTexture" - -// ---------------------------------------------------------------------------- - -static void ParcelSurfaceTexture_setISurfaceTexture( - JNIEnv* env, jobject thiz, const sp<ISurfaceTexture>& iSurfaceTexture) -{ - ISurfaceTexture* const p = - (ISurfaceTexture*)env->GetIntField(thiz, fields.iSurfaceTexture); - if (iSurfaceTexture.get()) { - iSurfaceTexture->incStrong(thiz); - } - if (p) { - p->decStrong(thiz); - } - env->SetIntField(thiz, fields.iSurfaceTexture, (int)iSurfaceTexture.get()); -} - -sp<ISurfaceTexture> ParcelSurfaceTexture_getISurfaceTexture( - JNIEnv* env, jobject thiz) -{ - sp<ISurfaceTexture> iSurfaceTexture( - (ISurfaceTexture*)env->GetIntField(thiz, fields.iSurfaceTexture)); - return iSurfaceTexture; -} - -sp<ANativeWindow> android_ParcelSurfaceTexture_getNativeWindow( - JNIEnv* env, jobject thiz) -{ - sp<ISurfaceTexture> iSurfaceTexture( - ParcelSurfaceTexture_getISurfaceTexture(env, thiz)); - sp<SurfaceTextureClient> surfaceTextureClient(iSurfaceTexture != NULL ? - new SurfaceTextureClient(iSurfaceTexture) : NULL); - return surfaceTextureClient; -} - -bool android_ParcelSurfaceTexture_isInstanceOf(JNIEnv* env, jobject thiz) -{ - jclass parcelSurfaceTextureClass = env->FindClass( - kParcelSurfaceTextureClassPathName); - return env->IsInstanceOf(thiz, parcelSurfaceTextureClass); -} - -// ---------------------------------------------------------------------------- - -static void ParcelSurfaceTexture_classInit(JNIEnv* env, jclass clazz) -{ - fields.iSurfaceTexture = - env->GetFieldID(clazz, ANDROID_GRAPHICS_ISURFACETEXTURE_JNI_ID, "I"); - if (fields.iSurfaceTexture == NULL) { - LOGE("can't find android/graphics/ParcelSurfaceTexture.%s", - ANDROID_GRAPHICS_ISURFACETEXTURE_JNI_ID); - } -} - -static void ParcelSurfaceTexture_initFromSurface( - JNIEnv* env, jobject thiz, jobject jSurface) -{ - sp<Surface> surface(Surface_getSurface(env, jSurface)); - sp<ISurfaceTexture> iSurfaceTexture(surface->getSurfaceTexture()); - ParcelSurfaceTexture_setISurfaceTexture(env, thiz, iSurfaceTexture); -} - -static void ParcelSurfaceTexture_initFromSurfaceTexture( - JNIEnv* env, jobject thiz, jobject jSurfaceTexture) -{ - sp<ISurfaceTexture> iSurfaceTexture( - SurfaceTexture_getSurfaceTexture(env, jSurfaceTexture)); - ParcelSurfaceTexture_setISurfaceTexture(env, thiz, iSurfaceTexture); -} - -static void ParcelSurfaceTexture_finalize(JNIEnv* env, jobject thiz) -{ - ParcelSurfaceTexture_setISurfaceTexture(env, thiz, 0); -} - -static void ParcelSurfaceTexture_writeToParcel( - JNIEnv* env, jobject thiz, jobject jParcel, jint flags) -{ - Parcel* parcel = parcelForJavaObject(env, jParcel); - sp<ISurfaceTexture> iSurfaceTexture( - ParcelSurfaceTexture_getISurfaceTexture(env, thiz)); - sp<IBinder> b(iSurfaceTexture->asBinder()); - parcel->writeStrongBinder(b); -} - -static void ParcelSurfaceTexture_readFromParcel( - JNIEnv* env, jobject thiz, jobject jParcel) -{ - Parcel* parcel = parcelForJavaObject(env, jParcel); - sp<ISurfaceTexture> iSurfaceTexture( - interface_cast<ISurfaceTexture>(parcel->readStrongBinder())); - ParcelSurfaceTexture_setISurfaceTexture(env, thiz, iSurfaceTexture); -} - -// ---------------------------------------------------------------------------- - -static JNINativeMethod gParcelSurfaceTextureMethods[] = { - {"nativeClassInit", "()V", (void*)ParcelSurfaceTexture_classInit }, - {"nativeInitFromSurface", "(Landroid/view/Surface;)V", - (void *)ParcelSurfaceTexture_initFromSurface }, - {"nativeInitFromSurfaceTexture", "(Landroid/graphics/SurfaceTexture;)V", - (void *)ParcelSurfaceTexture_initFromSurfaceTexture }, - { "nativeFinalize", "()V", (void *)ParcelSurfaceTexture_finalize }, - { "nativeWriteToParcel", "(Landroid/os/Parcel;I)V", - (void *)ParcelSurfaceTexture_writeToParcel }, - { "nativeReadFromParcel", "(Landroid/os/Parcel;)V", - (void *)ParcelSurfaceTexture_readFromParcel }, -}; - - -int register_android_graphics_ParcelSurfaceTexture(JNIEnv* env) -{ - int err = 0; - err = AndroidRuntime::registerNativeMethods(env, kParcelSurfaceTextureClassPathName, - gParcelSurfaceTextureMethods, NELEM(gParcelSurfaceTextureMethods)); - return err; -} - -} // namespace android diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp index 30fe298..23a4ec7 100644 --- a/core/jni/android/graphics/TextLayoutCache.cpp +++ b/core/jni/android/graphics/TextLayoutCache.cpp @@ -17,6 +17,10 @@ #include "TextLayoutCache.h" #include "TextLayout.h" +extern "C" { + #include "harfbuzz-unicode.h" +} + namespace android { TextLayoutCache::TextLayoutCache() : @@ -355,7 +359,32 @@ void TextLayoutCacheValue::setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec shaperItem->item.pos = start; shaperItem->item.length = count; shaperItem->item.bidiLevel = isRTL; - shaperItem->item.script = isRTL ? HB_Script_Arabic : HB_Script_Common; + + ssize_t nextCodePoint = 0; + uint32_t codePoint = utf16_to_code_point(chars, count, &nextCodePoint); + + HB_Script script = code_point_to_script(codePoint); + + if (script == HB_Script_Inherited) { +#if DEBUG_GLYPHS + LOGD("Cannot find a correct script for code point=%d " + " Need to look at the next code points.", codePoint); +#endif + while (script == HB_Script_Inherited && nextCodePoint < count) { + codePoint = utf16_to_code_point(chars, count, &nextCodePoint); + script = code_point_to_script(codePoint); + } + } + + if (script == HB_Script_Inherited) { +#if DEBUG_GLYPHS + LOGD("Cannot find a correct script from the text." + " Need to select a default script depending on the passed text direction."); +#endif + script = isRTL ? HB_Script_Arabic : HB_Script_Common; + } + + shaperItem->item.script = script; shaperItem->string = chars; shaperItem->stringLength = contextCount; diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 8f84b81..45b7f27 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -229,6 +229,13 @@ static jboolean setUpEventLoop(native_data_t *nat) { DBusError err; dbus_error_init(&err); + const char *agent_path = "/android/bluetooth/agent"; + const char *capabilities = "DisplayYesNo"; + if (register_agent(nat, agent_path, capabilities) < 0) { + dbus_connection_unregister_object_path (nat->conn, agent_path); + return JNI_FALSE; + } + // Add a filter for all incoming messages if (!dbus_connection_add_filter(nat->conn, event_filter, nat, NULL)){ return JNI_FALSE; @@ -294,12 +301,6 @@ static jboolean setUpEventLoop(native_data_t *nat) { return JNI_FALSE; } - const char *agent_path = "/android/bluetooth/agent"; - const char *capabilities = "DisplayYesNo"; - if (register_agent(nat, agent_path, capabilities) < 0) { - dbus_connection_unregister_object_path (nat->conn, agent_path); - return JNI_FALSE; - } return JNI_TRUE; } return JNI_FALSE; diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index b3f2d51..039c5ba 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -289,11 +289,6 @@ static void android_view_GLES20Canvas_setMatrix(JNIEnv* env, jobject clazz, renderer->setMatrix(matrix); } -static const float* android_view_GLES20Canvas_getNativeMatrix(JNIEnv* env, - jobject clazz, OpenGLRenderer* renderer) { - return renderer->getMatrix(); -} - static void android_view_GLES20Canvas_getMatrix(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, SkMatrix* matrix) { renderer->getMatrix(matrix); @@ -776,7 +771,6 @@ static JNINativeMethod gMethods[] = { { "nSkew", "(IFF)V", (void*) android_view_GLES20Canvas_skew }, { "nSetMatrix", "(II)V", (void*) android_view_GLES20Canvas_setMatrix }, - { "nGetMatrix", "(I)I", (void*) android_view_GLES20Canvas_getNativeMatrix }, { "nGetMatrix", "(II)V", (void*) android_view_GLES20Canvas_getMatrix }, { "nConcatMatrix", "(II)V", (void*) android_view_GLES20Canvas_concatMatrix }, diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index d54f852..dc0106c 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -37,6 +37,7 @@ <protected-broadcast android:name="android.intent.action.PACKAGE_REPLACED" /> <protected-broadcast android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <protected-broadcast android:name="android.intent.action.PACKAGE_REMOVED" /> + <protected-broadcast android:name="android.intent.action.PACKAGE_FULLY_REMOVED" /> <protected-broadcast android:name="android.intent.action.PACKAGE_CHANGED" /> <protected-broadcast android:name="android.intent.action.PACKAGE_RESTARTED" /> <protected-broadcast android:name="android.intent.action.PACKAGE_DATA_CLEARED" /> @@ -91,8 +92,6 @@ <protected-broadcast android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> <protected-broadcast android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> - <protected-broadcast android:name="android.net.vpn.action.REVOKED" /> - <protected-broadcast android:name="android.nfc.action.LLCP_LINK_STATE_CHANGED" /> <protected-broadcast android:name="com.android.nfc_extras.action.RF_FIELD_ON_DETECTED" /> <protected-broadcast android:name="com.android.nfc_extras.action.RF_FIELD_OFF_DETECTED" /> @@ -1119,8 +1118,7 @@ android:protectionLevel="signature" /> <!-- Must be required by an {@link android.net.VpnService}, - to ensure that only the system can bind to it. - @hide --> + to ensure that only the system can bind to it. --> <permission android:name="android.permission.BIND_VPN_SERVICE" android:label="@string/permlab_bindVpnService" android:description="@string/permdesc_bindVpnService" diff --git a/core/res/res/anim-sw600dp/activity_close_enter.xml b/core/res/res/anim-sw600dp/activity_close_enter.xml new file mode 100644 index 0000000..c17786f --- /dev/null +++ b/core/res/res/anim-sw600dp/activity_close_enter.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/activity_close_exit.xml b/core/res/res/anim-sw600dp/activity_close_exit.xml new file mode 100644 index 0000000..ba33640 --- /dev/null +++ b/core/res/res/anim-sw600dp/activity_close_exit.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:shareInterpolator="false" + android:zAdjustment="top"> + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> + <scale android:fromXScale="1.0" android:toXScale="1.1" + android:fromYScale="1.0" android:toYScale="1.1" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/activity_open_enter.xml b/core/res/res/anim-sw600dp/activity_open_enter.xml new file mode 100644 index 0000000..c4b5ed7 --- /dev/null +++ b/core/res/res/anim-sw600dp/activity_open_enter.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:shareInterpolator="false" + android:zAdjustment="top"> + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> + <scale android:fromXScale="1.1" android:toXScale="1.0" + android:fromYScale="1.1" android:toYScale="1.0" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/activity_open_exit.xml b/core/res/res/anim-sw600dp/activity_open_exit.xml new file mode 100644 index 0000000..b386b8b --- /dev/null +++ b/core/res/res/anim-sw600dp/activity_open_exit.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:fillEnabled="true" android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/wallpaper_close_enter.xml b/core/res/res/anim-sw600dp/wallpaper_close_enter.xml new file mode 100644 index 0000000..b65ecf4 --- /dev/null +++ b/core/res/res/anim-sw600dp/wallpaper_close_enter.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="top"> + + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:interpolator="@interpolator/decelerate_cubic" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> + + <scale android:fromXScale="2.0" android:toXScale="1.0" + android:fromYScale="0.1" android:toYScale="1.0" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/decelerate_quint" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> + +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/wallpaper_close_exit.xml b/core/res/res/anim-sw600dp/wallpaper_close_exit.xml new file mode 100644 index 0000000..fabfacc --- /dev/null +++ b/core/res/res/anim-sw600dp/wallpaper_close_exit.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:detachWallpaper="false" android:shareInterpolator="false" + android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:interpolator="@interpolator/decelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/wallpaper_open_enter.xml b/core/res/res/anim-sw600dp/wallpaper_open_enter.xml new file mode 100644 index 0000000..96bdf42 --- /dev/null +++ b/core/res/res/anim-sw600dp/wallpaper_open_enter.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:detachWallpaper="false" android:shareInterpolator="false" + android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> +</set>
\ No newline at end of file diff --git a/core/res/res/anim-sw600dp/wallpaper_open_exit.xml b/core/res/res/anim-sw600dp/wallpaper_open_exit.xml new file mode 100644 index 0000000..d7bcc5c --- /dev/null +++ b/core/res/res/anim-sw600dp/wallpaper_open_exit.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="top"> + + + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> + + + <scale android:fromXScale="1.0" android:toXScale="2.0" + android:fromYScale="1.0" android:toYScale="0.1" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_quint" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime" /> + +</set>
\ No newline at end of file diff --git a/core/res/res/anim/activity_close_enter.xml b/core/res/res/anim/activity_close_enter.xml index 4260c08..c17786f 100644 --- a/core/res/res/anim/activity_close_enter.xml +++ b/core/res/res/anim/activity_close_enter.xml @@ -3,29 +3,22 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top" - android:shareInterpolator="false"> - <scale android:fromXScale="0.975" android:toXScale="1.0" - android:fromYScale="0.975" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/decelerate_quint" - android:duration="@android:integer/config_activityDefaultDur" /> - <alpha android:fromAlpha="0.0" android:toAlpha="1.0" - android:interpolator="@interpolator/decelerate_cubic" - android:duration="@android:integer/config_activityDefaultDur"/> +<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/activity_close_exit.xml b/core/res/res/anim/activity_close_exit.xml index 8c97ee8..e560a41 100644 --- a/core/res/res/anim/activity_close_exit.xml +++ b/core/res/res/anim/activity_close_exit.xml @@ -3,26 +3,31 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal" - android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="1.075" - android:fromYScale="1.0" android:toYScale="1.075" + android:shareInterpolator="false" + android:zAdjustment="top"> + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> + <scale android:fromXScale="1.0" android:toXScale="1.15" + android:fromYScale="1.0" android:toYScale="1.15" android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/decelerate_quint" - android:duration="@android:integer/config_activityDefaultDur" /> + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/activity_open_enter.xml b/core/res/res/anim/activity_open_enter.xml index 5f6ac68..55fcc0d 100644 --- a/core/res/res/anim/activity_open_enter.xml +++ b/core/res/res/anim/activity_open_enter.xml @@ -3,26 +3,33 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal" - android:shareInterpolator="false"> - <scale android:fromXScale="1.125" android:toXScale="1.0" - android:fromYScale="1.125" android:toYScale="1.0" + android:shareInterpolator="false" + android:zAdjustment="top"> + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> + <scale android:fromXScale="1.15" android:toXScale="1.0" + android:fromYScale="1.15" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/decelerate_quint" - android:duration="@android:integer/config_activityDefaultDur" /> + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/activity_open_exit.xml b/core/res/res/anim/activity_open_exit.xml index 08b22b9..b386b8b 100644 --- a/core/res/res/anim/activity_open_exit.xml +++ b/core/res/res/anim/activity_open_exit.xml @@ -3,29 +3,22 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top" - android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="0.975" - android:fromYScale="1.0" android:toYScale="0.975" - android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/linear" - android:duration="@android:integer/config_activityDefaultDur" /> - <alpha android:fromAlpha="1.0" android:toAlpha="0.0" - android:interpolator="@interpolator/decelerate_cubic" - android:duration="@android:integer/config_activityDefaultDur"/> +<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:fillEnabled="true" android:fillBefore="false" android:fillAfter="false" + android:duration="@android:integer/config_shortAnimTime"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/app_starting_exit.xml b/core/res/res/anim/app_starting_exit.xml index 6c255d0..ee8d80b 100644 --- a/core/res/res/anim/app_starting_exit.xml +++ b/core/res/res/anim/app_starting_exit.xml @@ -19,6 +19,6 @@ --> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@interpolator/decelerate_quad"> - <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_mediumAnimTime" /> + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="160" /> </set> diff --git a/core/res/res/anim/lock_screen_behind_enter.xml b/core/res/res/anim/lock_screen_behind_enter.xml index 6c7782e..232096c 100644 --- a/core/res/res/anim/lock_screen_behind_enter.xml +++ b/core/res/res/anim/lock_screen_behind_enter.xml @@ -19,18 +19,10 @@ <set xmlns:android="http://schemas.android.com/apk/res/android" android:detachWallpaper="true" android:shareInterpolator="false"> - <scale - android:fromXScale="0.9" android:toXScale="1.0" - android:fromYScale="0.9" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_cubic" - android:startOffset="@android:integer/config_mediumAnimTime" - android:duration="@android:integer/config_mediumAnimTime" /> <alpha android:fromAlpha="0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:interpolator="@interpolator/decelerate_quad" - android:startOffset="@android:integer/config_mediumAnimTime" - android:duration="@android:integer/config_mediumAnimTime"/> + android:startOffset="@android:integer/config_shortAnimTime" + android:duration="300"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/lock_screen_exit.xml b/core/res/res/anim/lock_screen_exit.xml index d9c3a33..c4b6fcb 100644 --- a/core/res/res/anim/lock_screen_exit.xml +++ b/core/res/res/anim/lock_screen_exit.xml @@ -17,19 +17,18 @@ */ --> + <set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top" - android:shareInterpolator="false"> - <scale - android:fromXScale="1.0" android:toXScale="1.2" - android:fromYScale="1.0" android:toYScale="1.2" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/accelerate_quint" - android:duration="@android:integer/config_mediumAnimTime" /> - <alpha - android:fromAlpha="1.0" android:toAlpha="0" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/accelerate_quad" - android:duration="@android:integer/config_mediumAnimTime"/> + android:shareInterpolator="false" + android:zAdjustment="top"> + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> + <scale android:fromXScale="1.0" android:toXScale="1.15" + android:fromYScale="1.0" android:toYScale="1.15" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_decelerate" + android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" + android:duration="@android:integer/config_shortAnimTime"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/task_close_enter.xml b/core/res/res/anim/task_close_enter.xml index 66d982f..2cc3943 100644 --- a/core/res/res/anim/task_close_enter.xml +++ b/core/res/res/anim/task_close_enter.xml @@ -3,17 +3,17 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> @@ -24,11 +24,11 @@ android:pivotX="50%p" android:pivotY="50%p" android:fillEnabled="true" android:fillBefore="true" android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300" /> + android:startOffset="150" + android:duration="250" /> <alpha android:fromAlpha="0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300"/> + android:startOffset="150" + android:duration="250"/> </set> diff --git a/core/res/res/anim/task_close_exit.xml b/core/res/res/anim/task_close_exit.xml index 312946b..fded0be 100644 --- a/core/res/res/anim/task_close_exit.xml +++ b/core/res/res/anim/task_close_exit.xml @@ -3,17 +3,17 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> @@ -24,9 +24,9 @@ android:pivotX="50%p" android:pivotY="50%p" android:fillEnabled="true" android:fillAfter="true" android:interpolator="@interpolator/accelerate_cubic" - android:duration="160" /> + android:duration="150" /> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:fillEnabled="true" android:fillAfter="true" android:interpolator="@interpolator/decelerate_cubic" - android:duration="160"/> + android:duration="150"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/task_open_enter.xml b/core/res/res/anim/task_open_enter.xml index 3dda797..c8ffaaf 100644 --- a/core/res/res/anim/task_open_enter.xml +++ b/core/res/res/anim/task_open_enter.xml @@ -3,17 +3,17 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> @@ -24,11 +24,11 @@ android:pivotX="50%p" android:pivotY="50%p" android:fillEnabled="true" android:fillBefore="true" android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300" /> + android:startOffset="150" + android:duration="250" /> <alpha android:fromAlpha="0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300"/> + android:startOffset="150" + android:duration="250"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/task_open_exit.xml b/core/res/res/anim/task_open_exit.xml index e377c2a..06f3fc4 100644 --- a/core/res/res/anim/task_open_exit.xml +++ b/core/res/res/anim/task_open_exit.xml @@ -3,17 +3,17 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ --> @@ -24,9 +24,9 @@ android:pivotX="50%p" android:pivotY="50%p" android:fillEnabled="true" android:fillAfter="true" android:interpolator="@interpolator/accelerate_cubic" - android:duration="160" /> + android:duration="150" /> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:fillEnabled="true" android:fillAfter="true" android:interpolator="@interpolator/decelerate_cubic" - android:duration="160"/> + android:duration="150"/> </set>
\ No newline at end of file diff --git a/core/res/res/anim/wallpaper_close_enter.xml b/core/res/res/anim/wallpaper_close_enter.xml index e05345d..1cbe3ec 100644 --- a/core/res/res/anim/wallpaper_close_enter.xml +++ b/core/res/res/anim/wallpaper_close_enter.xml @@ -3,32 +3,50 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="1.0" - android:fromYScale=".9" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_quint" - android:startOffset="200" - android:duration="300" /> - <alpha android:fromAlpha="0" android:toAlpha="1.0" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_quint" - android:startOffset="200" - android:duration="300"/> -</set> + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="top"> + + <alpha android:fromAlpha="0.0" android:toAlpha="0.5" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="140"/> + <alpha android:fromAlpha="0.5" android:toAlpha="1.0" + android:interpolator="@interpolator/decelerate_cubic" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:startOffset="140" + android:duration="140"/> + + <scale android:fromXScale="2.0" android:toXScale="1.5" + android:fromYScale="0.01" android:toYScale="0.495" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_quint" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="140"/> + <scale android:fromXScale="1.5" android:toXScale="1.0" + android:fromYScale="0.495" android:toYScale="1.0" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/decelerate_quint" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:startOffset="140" + android:duration="140"/> + +</set>
\ No newline at end of file diff --git a/core/res/res/anim/wallpaper_close_exit.xml b/core/res/res/anim/wallpaper_close_exit.xml index df7acc9..ebeae6e 100644 --- a/core/res/res/anim/wallpaper_close_exit.xml +++ b/core/res/res/anim/wallpaper_close_exit.xml @@ -3,30 +3,26 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="0.9" - android:fromYScale="1.0" android:toYScale="0.9" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/decelerate_quint" - android:duration="300" /> - <alpha android:fromAlpha="1.0" android:toAlpha="0" - android:fillEnabled="true" android:fillAfter="true" + android:detachWallpaper="false" android:shareInterpolator="false" + android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" android:interpolator="@interpolator/decelerate_cubic" - android:duration="150"/> + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> </set> diff --git a/core/res/res/anim/wallpaper_enter.xml b/core/res/res/anim/wallpaper_enter.xml index b28dbd4..2993a2d 100644 --- a/core/res/res/anim/wallpaper_enter.xml +++ b/core/res/res/anim/wallpaper_enter.xml @@ -25,4 +25,4 @@ android:duration="@android:integer/config_longAnimTime" /> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_longAnimTime" /> -</set> +</set>
\ No newline at end of file diff --git a/core/res/res/anim/wallpaper_exit.xml b/core/res/res/anim/wallpaper_exit.xml index 87ed20b..5d5b38a 100644 --- a/core/res/res/anim/wallpaper_exit.xml +++ b/core/res/res/anim/wallpaper_exit.xml @@ -25,4 +25,4 @@ android:duration="@android:integer/config_longAnimTime" /> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_longAnimTime"/> -</set> +</set>
\ No newline at end of file diff --git a/core/res/res/anim/wallpaper_intra_close_enter.xml b/core/res/res/anim/wallpaper_intra_close_enter.xml index a499a09..caeb820 100644 --- a/core/res/res/anim/wallpaper_intra_close_enter.xml +++ b/core/res/res/anim/wallpaper_intra_close_enter.xml @@ -3,32 +3,26 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale=".95" android:toXScale="1.0" - android:fromYScale=".95" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300" /> - <alpha android:fromAlpha="0" android:toAlpha="1.0" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_cubic" - android:startOffset="160" - android:duration="300"/> -</set>
\ No newline at end of file + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="normal"> + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> +</set> diff --git a/core/res/res/anim/wallpaper_intra_close_exit.xml b/core/res/res/anim/wallpaper_intra_close_exit.xml index 12a8df5..c61587e 100644 --- a/core/res/res/anim/wallpaper_intra_close_exit.xml +++ b/core/res/res/anim/wallpaper_intra_close_exit.xml @@ -3,30 +3,28 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="1.0" - android:fromYScale="1.0" android:toYScale="0.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/linear" - android:duration="300" /> - <alpha android:fromAlpha="1.0" android:toAlpha="0" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/decelerate_cubic" - android:duration="120"/> -</set>
\ No newline at end of file + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="top"> + + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> + +</set> diff --git a/core/res/res/anim/wallpaper_intra_open_enter.xml b/core/res/res/anim/wallpaper_intra_open_enter.xml index a499a09..939e240 100644 --- a/core/res/res/anim/wallpaper_intra_open_enter.xml +++ b/core/res/res/anim/wallpaper_intra_open_enter.xml @@ -3,32 +3,28 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale=".95" android:toXScale="1.0" - android:fromYScale=".95" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_quint" - android:startOffset="160" - android:duration="300" /> - <alpha android:fromAlpha="0" android:toAlpha="1.0" - android:fillEnabled="true" android:fillBefore="true" - android:interpolator="@interpolator/decelerate_cubic" - android:startOffset="160" - android:duration="300"/> + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="top"> + + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:interpolator="@interpolator/decelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> + </set>
\ No newline at end of file diff --git a/core/res/res/anim/wallpaper_intra_open_exit.xml b/core/res/res/anim/wallpaper_intra_open_exit.xml index 12a8df5..6edd83a 100644 --- a/core/res/res/anim/wallpaper_intra_open_exit.xml +++ b/core/res/res/anim/wallpaper_intra_open_exit.xml @@ -3,30 +3,27 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale="1.0" android:toXScale="1.0" - android:fromYScale="1.0" android:toYScale="0.0" - android:pivotX="50%p" android:pivotY="50%p" - android:fillEnabled="true" android:fillAfter="true" - android:interpolator="@interpolator/linear" - android:duration="300" /> - <alpha android:fromAlpha="1.0" android:toAlpha="0" - android:fillEnabled="true" android:fillAfter="true" + android:detachWallpaper="true" android:shareInterpolator="false" + android:zAdjustment="normal"> + + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:interpolator="@interpolator/decelerate_cubic" - android:duration="120"/> -</set>
\ No newline at end of file + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> +</set> diff --git a/core/res/res/anim/wallpaper_open_enter.xml b/core/res/res/anim/wallpaper_open_enter.xml index ff310a1..411ecd6 100644 --- a/core/res/res/anim/wallpaper_open_enter.xml +++ b/core/res/res/anim/wallpaper_open_enter.xml @@ -3,30 +3,26 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:detachWallpaper="true" android:shareInterpolator="false"> - <scale android:fromXScale="0.95" android:toXScale="1.0" - android:fromYScale="0.95" android:toYScale="1.0" - android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/decelerate_quint" - android:startOffset="200" - android:duration="300" /> - <alpha android:fromAlpha="0" android:toAlpha="1.0" - android:interpolator="@interpolator/decelerate_cubic" - android:startOffset="200" - android:duration="300"/> + android:detachWallpaper="false" android:shareInterpolator="false" + android:zAdjustment="normal"> + <alpha android:fromAlpha="1.0" android:toAlpha="1.0" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="true" + android:duration="280"/> </set> diff --git a/core/res/res/anim/wallpaper_open_exit.xml b/core/res/res/anim/wallpaper_open_exit.xml index 0aeb550..f9e0996 100644 --- a/core/res/res/anim/wallpaper_open_exit.xml +++ b/core/res/res/anim/wallpaper_open_exit.xml @@ -3,16 +3,16 @@ /* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ --> @@ -20,12 +20,33 @@ <set xmlns:android="http://schemas.android.com/apk/res/android" android:detachWallpaper="true" android:shareInterpolator="false" android:zAdjustment="top"> - <scale android:fromXScale="1.0" android:toXScale="1.0" - android:fromYScale="1.0" android:toYScale="0.0" - android:pivotX="50%p" android:pivotY="50%p" - android:interpolator="@interpolator/linear" - android:duration="300" /> - <alpha android:fromAlpha="1.0" android:toAlpha="0" - android:interpolator="@interpolator/decelerate_cubic" - android:duration="160"/> -</set> + + + <alpha android:fromAlpha="1.0" android:toAlpha="0.5" + android:interpolator="@interpolator/accelerate_cubic" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="140"/> + <alpha android:fromAlpha="0.5" android:toAlpha="0.0" + android:interpolator="@interpolator/decelerate_cubic" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:startOffset="140" android:duration="140"/> + + + <scale android:fromXScale="1.0" android:toXScale="1.5" + android:fromYScale="1.0" android:toYScale="0.495" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/accelerate_quint" + android:fillEnabled="true" + android:fillBefore="true" android:fillAfter="false" + android:duration="140" /> + <scale android:fromXScale="1.5" android:toXScale="2.0" + android:fromYScale="0.495" android:toYScale="0.0" + android:pivotX="50%p" android:pivotY="50%p" + android:interpolator="@interpolator/decelerate_quint" + android:fillEnabled="true" + android:fillBefore="false" android:fillAfter="true" + android:startOffset="140" android:duration="140" /> + +</set>
\ No newline at end of file diff --git a/core/res/res/drawable-hdpi/btn_cab_done_default_holo.9.png b/core/res/res/drawable-hdpi/btn_cab_done_default_holo.9.png Binary files differdeleted file mode 100644 index f5e6054..0000000 --- a/core/res/res/drawable-hdpi/btn_cab_done_default_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..769f570 --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..74cefd6 --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo.9.png b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo.9.png Binary files differdeleted file mode 100644 index 1121070..0000000 --- a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..4450f11 --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..93b7b17 --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_cab_done_holo.9.png b/core/res/res/drawable-hdpi/btn_cab_done_holo.9.png Binary files differdeleted file mode 100644 index ec9faae..0000000 --- a/core/res/res/drawable-hdpi/btn_cab_done_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo.9.png b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo.9.png Binary files differdeleted file mode 100644 index 1a072a9..0000000 --- a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..3ada1be --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png Binary files differnew file mode 100644 index 0000000..749ea56 --- /dev/null +++ b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png Binary files differindex 3239dd2..f57126b 100644 --- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png Binary files differindex 3239dd2..f57126b 100644 --- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png Binary files differindex 6840962..1b65492 100644 --- a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png +++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png Binary files differindex 45c957b..05cb4e4 100644 --- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png Binary files differindex 45c957b..05cb4e4 100644 --- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png Binary files differindex 6549253..70c1e262 100644 --- a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png +++ b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png Binary files differindex ef3ec7a..3b9d734 100644 --- a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png Binary files differindex ef3ec7a..3b9d734 100644 --- a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png Binary files differindex f4f657b..9fa19ef 100644 --- a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png Binary files differindex ef12e72..b285183 100644 --- a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png Binary files differindex ef12e72..b285183 100644 --- a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png Binary files differindex ec7fa78..8384797 100644 --- a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png +++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png Binary files differindex 93a30e3..13d154f 100644 --- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png Binary files differindex 93a30e3..13d154f 100644 --- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png Binary files differindex 3ecf008..15b9fb9 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png Binary files differindex 6e1f0dd..4d83d65 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png Binary files differindex 90b35b8..e06aef0 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png Binary files differindex 6b4b388..d81d346 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png Binary files differindex c0ed2c6..9f027b7 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png Binary files differindex fa386b8..a7582d6 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_holo.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_holo.9.png Binary files differdeleted file mode 100755 index f903bdb..0000000 --- a/core/res/res/drawable-hdpi/btn_toggle_off_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png Binary files differindex 9fbd1e9..21be9f4 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png Binary files differindex 1800eb4..791b318 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png Binary files differindex 45d99ee..8cf35b2 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png Binary files differindex 8929825..e475b49 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png Binary files differindex 5fc3fbd..7996db4 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png Binary files differindex 5fc3fbd..7996db4 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png Binary files differindex b0cfa4b..906a229 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png Binary files differindex b0cfa4b..906a229 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png Binary files differindex 054c18b..56bd325 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png Binary files differindex 054c18b..56bd325 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png Binary files differindex a858836..61b2efc 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png Binary files differindex a858836..61b2efc 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png Binary files differindex b5aa5c1..d2e4ca8 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png Binary files differindex b5aa5c1..d2e4ca8 100644 --- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png +++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/cab_background_bottom_holo_dark.9.png b/core/res/res/drawable-hdpi/cab_background_bottom_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..269def4 --- /dev/null +++ b/core/res/res/drawable-hdpi/cab_background_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/cab_background_bottom_holo_light.9.png b/core/res/res/drawable-hdpi/cab_background_bottom_holo_light.9.png Binary files differnew file mode 100644 index 0000000..49bcfb4 --- /dev/null +++ b/core/res/res/drawable-hdpi/cab_background_bottom_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/cab_background_holo_dark.9.png b/core/res/res/drawable-hdpi/cab_background_holo_dark.9.png Binary files differdeleted file mode 100644 index 1a916b3..0000000 --- a/core/res/res/drawable-hdpi/cab_background_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_background_holo_light.9.png b/core/res/res/drawable-hdpi/cab_background_holo_light.9.png Binary files differdeleted file mode 100644 index e8c9c60..0000000 --- a/core/res/res/drawable-hdpi/cab_background_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_background_opaque_holo_dark.9.png b/core/res/res/drawable-hdpi/cab_background_opaque_holo_dark.9.png Binary files differdeleted file mode 100644 index 0f4c3c3..0000000 --- a/core/res/res/drawable-hdpi/cab_background_opaque_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_background_opaque_holo_light.9.png b/core/res/res/drawable-hdpi/cab_background_opaque_holo_light.9.png Binary files differdeleted file mode 100644 index fb9b831..0000000 --- a/core/res/res/drawable-hdpi/cab_background_opaque_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_background_top_holo_dark.9.png b/core/res/res/drawable-hdpi/cab_background_top_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..b7ddc14 --- /dev/null +++ b/core/res/res/drawable-hdpi/cab_background_top_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/cab_background_top_holo_light.9.png b/core/res/res/drawable-hdpi/cab_background_top_holo_light.9.png Binary files differnew file mode 100644 index 0000000..af80ad5 --- /dev/null +++ b/core/res/res/drawable-hdpi/cab_background_top_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/cab_divider_holo_dark.png b/core/res/res/drawable-hdpi/cab_divider_holo_dark.png Binary files differdeleted file mode 100755 index e2c2119..0000000 --- a/core/res/res/drawable-hdpi/cab_divider_holo_dark.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_divider_holo_light.png b/core/res/res/drawable-hdpi/cab_divider_holo_light.png Binary files differdeleted file mode 100755 index 51e2295..0000000 --- a/core/res/res/drawable-hdpi/cab_divider_holo_light.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_divider_vertical_dark.png b/core/res/res/drawable-hdpi/cab_divider_vertical_dark.png Binary files differdeleted file mode 100755 index b1f035c..0000000 --- a/core/res/res/drawable-hdpi/cab_divider_vertical_dark.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_divider_vertical_light.png b/core/res/res/drawable-hdpi/cab_divider_vertical_light.png Binary files differdeleted file mode 100755 index 2183b12..0000000 --- a/core/res/res/drawable-hdpi/cab_divider_vertical_light.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_holo_light.9.png b/core/res/res/drawable-hdpi/cab_holo_light.9.png Binary files differdeleted file mode 100755 index 4f2afcf..0000000 --- a/core/res/res/drawable-hdpi/cab_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_ic_close_focused_holo.png b/core/res/res/drawable-hdpi/cab_ic_close_focused_holo.png Binary files differdeleted file mode 100755 index 9d7f932..0000000 --- a/core/res/res/drawable-hdpi/cab_ic_close_focused_holo.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_ic_close_normal_holo.png b/core/res/res/drawable-hdpi/cab_ic_close_normal_holo.png Binary files differdeleted file mode 100755 index 641507d..0000000 --- a/core/res/res/drawable-hdpi/cab_ic_close_normal_holo.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/cab_ic_close_pressed_holo.png b/core/res/res/drawable-hdpi/cab_ic_close_pressed_holo.png Binary files differdeleted file mode 100755 index ebb0fc8..0000000 --- a/core/res/res/drawable-hdpi/cab_ic_close_pressed_holo.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png Binary files differindex acbbb38..256067d 100644 --- a/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png Binary files differindex 6009528..2338175 100644 --- a/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png Binary files differindex 30727d7..79e56f5 100644 --- a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png Binary files differindex 7cea5e1..e029f21 100644 --- a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png Binary files differindex ba0d612..8ee0072 100644 --- a/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png Binary files differindex e8646b9..df030c1 100644 --- a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png Binary files differindex 14cb4c9..50534a1 100644 --- a/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png Binary files differindex 80fd218..0b84155 100644 --- a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/ic_cab_close_holo.png b/core/res/res/drawable-hdpi/ic_cab_close_holo.png Binary files differdeleted file mode 100644 index 0dcd54c..0000000 --- a/core/res/res/drawable-hdpi/ic_cab_close_holo.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/ic_cab_done_holo_dark.png b/core/res/res/drawable-hdpi/ic_cab_done_holo_dark.png Binary files differnew file mode 100644 index 0000000..d8662e3 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_cab_done_holo_dark.png diff --git a/core/res/res/drawable-hdpi/ic_cab_done_holo_light.png b/core/res/res/drawable-hdpi/ic_cab_done_holo_light.png Binary files differnew file mode 100644 index 0000000..ed03f62 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_cab_done_holo_light.png diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png Binary files differindex 1014d8a..4d3d208 100644 --- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png Binary files differindex 18cd171..924a99d 100644 --- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png +++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png Binary files differindex 595e0a4..1d33e47 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png Binary files differindex 75ad3d6..81fe085 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png Binary files differindex 74e90fd..cf864d2 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png Binary files differindex 7e6948a..583e0c9 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png Binary files differindex 38b376c..357b660 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png Binary files differindex 7cbdcf8..0add340 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png Binary files differindex b362b20..e1a8a63 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png Binary files differindex 45f4f59..934d6d1 100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png Binary files differindex f2266a2..3c4a50e 100644 --- a/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png Binary files differindex 03e412b..222c776 100644 --- a/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png +++ b/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png Binary files differindex 822da81..a231195 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_holo.png b/core/res/res/drawable-hdpi/scrubber_control_holo.png Binary files differindex 9957851..fae05e5 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png Binary files differnew file mode 100644 index 0000000..ff4d710 --- /dev/null +++ b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png Binary files differindex 8c93779..01f4278 100644 --- a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png +++ b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png Binary files differindex d272f93..20fc20a 100644 --- a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png +++ b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png Binary files differindex 3c371b2d..4c9849f 100644 --- a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png +++ b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png Binary files differindex 2820b5f..82b5671 100644 --- a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png +++ b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png Binary files differindex a992251..5d15e74 100644 --- a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png +++ b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png Binary files differindex 27452b1..5648af0 100644 --- a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png +++ b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png Binary files differindex 3d426e0..cc8affe 100644 --- a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png +++ b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png Binary files differindex 92f77a3..1efa5eb 100644 --- a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png +++ b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_activated_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_activated_holo_dark.9.png Binary files differdeleted file mode 100644 index d471c30..0000000 --- a/core/res/res/drawable-hdpi/spinner_ab_activated_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/spinner_ab_activated_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_activated_holo_light.9.png Binary files differdeleted file mode 100644 index d471c30..0000000 --- a/core/res/res/drawable-hdpi/spinner_ab_activated_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png Binary files differindex 001cfbb..15a7aa1 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png Binary files differindex 5e278c8..a0f7e3e 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png Binary files differindex cf2e149..03f0254 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png Binary files differindex 63f212d..54c4f17 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png Binary files differindex 85663e6..7f062fe 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png Binary files differindex 85663e6..7f062fe 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png Binary files differindex afddbe8..5b0958b 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png Binary files differindex 0ad6476..6d34b40 100644 --- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png Binary files differindex ac36c06..80bba6b 100644 --- a/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png Binary files differindex 6821599..ffd9e37 100644 --- a/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png Binary files differindex adde694..ea20276 100644 --- a/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png Binary files differindex fdb4bdf..c2b031c 100644 --- a/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png Binary files differindex d40d165..a3fc804 100644 --- a/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png Binary files differindex 096b977..a3fc804 100644 --- a/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png Binary files differindex 3b26017..86aa7da 100644 --- a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png Binary files differindex 33b661b..c8ec05d 100644 --- a/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png +++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_activated_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_activated_holo_dark.9.png Binary files differindex 8bb4048..a32dc0d 100644 --- a/core/res/res/drawable-hdpi/textfield_activated_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_activated_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_activated_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_activated_holo_light.9.png Binary files differindex fdd3ee7..a32dc0d 100644 --- a/core/res/res/drawable-hdpi/textfield_activated_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_activated_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_default_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_default_holo_dark.9.png Binary files differindex ab6abdc..1f71467 100644 --- a/core/res/res/drawable-hdpi/textfield_default_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_default_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_default_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_default_holo_light.9.png Binary files differindex dbdfc79..00fe8c7 100644 --- a/core/res/res/drawable-hdpi/textfield_default_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_default_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png Binary files differindex 4eba040..b988435 100644 --- a/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_light.9.png Binary files differindex b186730..0419273 100644 --- a/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_disabled_holo_dark.9.png Binary files differindex 06190a1..b26accb 100644 --- a/core/res/res/drawable-hdpi/textfield_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_disabled_holo_light.9.png Binary files differindex 8c16566..1eb5e3a 100644 --- a/core/res/res/drawable-hdpi/textfield_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_dark.9.png Binary files differindex 33e6dc8..a32dc0d 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_light.9.png Binary files differindex eb0d90f..a32dc0d 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_activated_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_default_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_multiline_default_holo_dark.9.png Binary files differindex 74c02c2..1f71467 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_default_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_default_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_default_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_multiline_default_holo_light.9.png Binary files differindex 345f4f5..00fe8c7 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_default_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_default_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_dark.9.png Binary files differindex 40e5db3..b988435 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_light.9.png Binary files differindex 0cbf6d2..0419273 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_dark.9.png Binary files differindex bc56916..b26accb 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_light.9.png Binary files differindex 84adf68..1eb5e3a 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_disabled_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_dark.9.png Binary files differindex 4a98e57..03a81d9 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_light.9.png Binary files differindex 5cf6bf3..03a81d9 100644 --- a/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_light.9.png +++ b/core/res/res/drawable-hdpi/textfield_multiline_focused_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/toast_frame_holo.9.png b/core/res/res/drawable-hdpi/toast_frame_holo.9.png Binary files differindex ad2cb5a..f8f75db 100644 --- a/core/res/res/drawable-hdpi/toast_frame_holo.9.png +++ b/core/res/res/drawable-hdpi/toast_frame_holo.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_default_holo.9.png b/core/res/res/drawable-mdpi/btn_cab_done_default_holo.9.png Binary files differdeleted file mode 100644 index 7af26ca..0000000 --- a/core/res/res/drawable-mdpi/btn_cab_done_default_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/btn_cab_done_default_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_cab_done_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..d00d235 --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_default_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_default_holo_light.9.png b/core/res/res/drawable-mdpi/btn_cab_done_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..d7b2049 --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_default_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_focused_holo.9.png b/core/res/res/drawable-mdpi/btn_cab_done_focused_holo.9.png Binary files differdeleted file mode 100644 index 486c37a..0000000 --- a/core/res/res/drawable-mdpi/btn_cab_done_focused_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..59c1580 --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..143564a --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_holo.9.png b/core/res/res/drawable-mdpi/btn_cab_done_holo.9.png Binary files differdeleted file mode 100644 index 517242c..0000000 --- a/core/res/res/drawable-mdpi/btn_cab_done_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo.9.png b/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo.9.png Binary files differdeleted file mode 100644 index 3cfb4bd..0000000 --- a/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..e5b9cfd --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_light.9.png Binary files differnew file mode 100644 index 0000000..ec43f85 --- /dev/null +++ b/core/res/res/drawable-mdpi/btn_cab_done_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png Binary files differindex e5197e6..74ed9b5 100644 --- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png Binary files differindex e5197e6..74ed9b5 100644 --- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png Binary files differindex 9a24b9c..86debc4 100644 --- a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png +++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png Binary files differindex c832855..3b5d850 100644 --- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png Binary files differindex c832855..3b5d850 100644 --- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png Binary files differindex 8838414..b403e67 100644 --- a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png +++ b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png Binary files differindex e0a1e0d..215002b 100644 --- a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png Binary files differindex e0a1e0d..215002b 100644 --- a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png Binary files differindex e4864c9..d06361a 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png Binary files differindex 3d9310a..dd8ee9d 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png Binary files differindex 3d9310a..dd8ee9d 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png Binary files differindex 18ec722..a4dae66 100644 --- a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png +++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png Binary files differindex 1e3314e..2ca4c3b 100644 --- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png Binary files differindex 1e3314e..2ca4c3b 100644 --- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png Binary files differindex 5f2017d..0fa2859 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png Binary files differindex eab31e8..bdc0330 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png Binary files differindex 29f9e23..35aca07 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png Binary files differindex 2d3574d..3a07479 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png Binary files differindex deea02d..5755584 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png Binary files differindex d480b2e..b0af68f 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_holo.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_holo.9.png Binary files differdeleted file mode 100755 index 0ca659e..0000000 --- a/core/res/res/drawable-mdpi/btn_toggle_off_holo.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png Binary files differindex 7f9d813..7c725b2 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png Binary files differindex 848621a..93696aa 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png Binary files differindex 2a94003..6dc4f1e 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png Binary files differindex 75983d8..3a7e25c 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png Binary files differindex 909586a..5ddcc42 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png Binary files differindex 909586a..5ddcc42 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png Binary files differindex d64e60a..6f19f49 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png Binary files differindex d64e60a..6f19f49 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png Binary files differindex 3b64aa1..1087fe3 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png Binary files differindex 3b64aa1..1087fe3 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png Binary files differindex 6039850..7db7486 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png Binary files differindex 6039850..7db7486 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png Binary files differindex 21b655b..842d967 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png Binary files differindex 21b655b..842d967 100644 --- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png +++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/cab_background_bottom_holo_dark.9.png b/core/res/res/drawable-mdpi/cab_background_bottom_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..0e4b28e --- /dev/null +++ b/core/res/res/drawable-mdpi/cab_background_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/cab_background_bottom_holo_light.9.png b/core/res/res/drawable-mdpi/cab_background_bottom_holo_light.9.png Binary files differnew file mode 100644 index 0000000..e449090 --- /dev/null +++ b/core/res/res/drawable-mdpi/cab_background_bottom_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/cab_background_holo_dark.9.png b/core/res/res/drawable-mdpi/cab_background_holo_dark.9.png Binary files differdeleted file mode 100644 index 38f44ce..0000000 --- a/core/res/res/drawable-mdpi/cab_background_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_background_holo_light.9.png b/core/res/res/drawable-mdpi/cab_background_holo_light.9.png Binary files differdeleted file mode 100644 index 2a4deea..0000000 --- a/core/res/res/drawable-mdpi/cab_background_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_background_opaque_holo_dark.9.png b/core/res/res/drawable-mdpi/cab_background_opaque_holo_dark.9.png Binary files differdeleted file mode 100644 index 013319c..0000000 --- a/core/res/res/drawable-mdpi/cab_background_opaque_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_background_opaque_holo_light.9.png b/core/res/res/drawable-mdpi/cab_background_opaque_holo_light.9.png Binary files differdeleted file mode 100644 index 6d8861a..0000000 --- a/core/res/res/drawable-mdpi/cab_background_opaque_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_background_top_holo_dark.9.png b/core/res/res/drawable-mdpi/cab_background_top_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..d0ebc1a --- /dev/null +++ b/core/res/res/drawable-mdpi/cab_background_top_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/cab_background_top_holo_light.9.png b/core/res/res/drawable-mdpi/cab_background_top_holo_light.9.png Binary files differnew file mode 100644 index 0000000..c2dd608 --- /dev/null +++ b/core/res/res/drawable-mdpi/cab_background_top_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/cab_divider_holo_dark.png b/core/res/res/drawable-mdpi/cab_divider_holo_dark.png Binary files differdeleted file mode 100755 index 317263a..0000000 --- a/core/res/res/drawable-mdpi/cab_divider_holo_dark.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_divider_holo_light.png b/core/res/res/drawable-mdpi/cab_divider_holo_light.png Binary files differdeleted file mode 100755 index 824ad27..0000000 --- a/core/res/res/drawable-mdpi/cab_divider_holo_light.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_divider_vertical_dark.png b/core/res/res/drawable-mdpi/cab_divider_vertical_dark.png Binary files differdeleted file mode 100755 index f7ed6df..0000000 --- a/core/res/res/drawable-mdpi/cab_divider_vertical_dark.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_divider_vertical_light.png b/core/res/res/drawable-mdpi/cab_divider_vertical_light.png Binary files differdeleted file mode 100755 index 73ac0d9..0000000 --- a/core/res/res/drawable-mdpi/cab_divider_vertical_light.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_holo_light.9.png b/core/res/res/drawable-mdpi/cab_holo_light.9.png Binary files differdeleted file mode 100755 index 0e64c5c..0000000 --- a/core/res/res/drawable-mdpi/cab_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_ic_close_focused_holo.png b/core/res/res/drawable-mdpi/cab_ic_close_focused_holo.png Binary files differdeleted file mode 100755 index 59149e4..0000000 --- a/core/res/res/drawable-mdpi/cab_ic_close_focused_holo.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_ic_close_normal_holo.png b/core/res/res/drawable-mdpi/cab_ic_close_normal_holo.png Binary files differdeleted file mode 100755 index b378885..0000000 --- a/core/res/res/drawable-mdpi/cab_ic_close_normal_holo.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/cab_ic_close_pressed_holo.png b/core/res/res/drawable-mdpi/cab_ic_close_pressed_holo.png Binary files differdeleted file mode 100755 index 29b0407..0000000 --- a/core/res/res/drawable-mdpi/cab_ic_close_pressed_holo.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png Binary files differindex 4836da1..611d538 100644 --- a/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png Binary files differindex c299931..cf2f01b 100644 --- a/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png Binary files differindex 86edad7..fb3660e 100644 --- a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png Binary files differindex 53ee68b..f18050e 100644 --- a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png Binary files differindex 606adaf..b620341 100644 --- a/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png Binary files differindex 14d2e5e..4035428 100644 --- a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png Binary files differindex 2646332..4d99748 100644 --- a/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png Binary files differindex 48ec0a4..6f5f149 100644 --- a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/ic_cab_close_holo.png b/core/res/res/drawable-mdpi/ic_cab_close_holo.png Binary files differdeleted file mode 100644 index 135577e..0000000 --- a/core/res/res/drawable-mdpi/ic_cab_close_holo.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/ic_cab_done_holo_dark.png b/core/res/res/drawable-mdpi/ic_cab_done_holo_dark.png Binary files differnew file mode 100644 index 0000000..a17b6a7 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_cab_done_holo_dark.png diff --git a/core/res/res/drawable-mdpi/ic_cab_done_holo_light.png b/core/res/res/drawable-mdpi/ic_cab_done_holo_light.png Binary files differnew file mode 100644 index 0000000..b28b3b5 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_cab_done_holo_light.png diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png Binary files differindex dd5dd39..460ec46 100644 --- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png Binary files differindex 12d65be..e84adf2 100644 --- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png +++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png Binary files differindex c22a53a..4cab1a1 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png Binary files differindex c288541..2692bd1 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png Binary files differindex 25df6b9..d83cad9 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png Binary files differindex 65718e1..4ef84a1 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png Binary files differindex 39148e0..f661b11 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png Binary files differindex 8ff7b24..69df8e0 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png Binary files differindex a7302c1..c34f0a5 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png Binary files differindex 70bf210..2258b20 100644 --- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png +++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png Binary files differindex d3e3a38..9407756 100644 --- a/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png Binary files differindex d0ec4dd..d2d0292 100644 --- a/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png +++ b/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png Binary files differindex 66dc001..9d7b77c 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_holo.png b/core/res/res/drawable-mdpi/scrubber_control_holo.png Binary files differindex 6e0e85a..832fa07 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png Binary files differnew file mode 100644 index 0000000..4a518f2 --- /dev/null +++ b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png Binary files differindex 392e1f8..a322a02 100644 --- a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png +++ b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png Binary files differindex d862a25..07df4cb 100644 --- a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png +++ b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png Binary files differindex f5e7f73..538788a 100644 --- a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png +++ b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png Binary files differindex b7ecfff..f345311 100644 --- a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png +++ b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png Binary files differindex 5231a5b..b59dc64 100644 --- a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png +++ b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png Binary files differindex e1e5b52..024f0f2 100644 --- a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png +++ b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png Binary files differindex 982f037..e7d654c 100644 --- a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png +++ b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png Binary files differindex 01b6ab3..e81bb06 100644 --- a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png +++ b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_activated_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_activated_holo_dark.9.png Binary files differdeleted file mode 100644 index 34c9188..0000000 --- a/core/res/res/drawable-mdpi/spinner_ab_activated_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/spinner_ab_activated_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_activated_holo_light.9.png Binary files differdeleted file mode 100644 index 34c9188..0000000 --- a/core/res/res/drawable-mdpi/spinner_ab_activated_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png Binary files differindex b92abaf..8cedc02 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png Binary files differindex 91f0e87..b5af0f7 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png Binary files differindex dab7eda..ffb97a5 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png Binary files differindex bf14605..1d7948c 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png Binary files differindex c733260..fb6a0a0 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png Binary files differindex c733260..fb6a0a0 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png Binary files differindex 6d290a6..556b106 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png Binary files differindex 6dae484..fcca39f 100644 --- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png Binary files differindex 99b1605..ddc2b22 100644 --- a/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png Binary files differindex c820e40..eb0d501 100644 --- a/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png Binary files differindex 95d7c86..8ba2a42 100644 --- a/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png Binary files differindex 2dba270..cf50964 100644 --- a/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png Binary files differindex 2e2fadd..7ab9428 100644 --- a/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png Binary files differindex 5bbbf63..7ab9428 100644 --- a/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png Binary files differindex 083194a..5654920 100644 --- a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png Binary files differindex 29cbc46..655339d 100644 --- a/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png +++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_activated_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_activated_holo_dark.9.png Binary files differindex 8bb4048..c97cff4 100644 --- a/core/res/res/drawable-mdpi/textfield_activated_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_activated_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_activated_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_activated_holo_light.9.png Binary files differindex fdd3ee7..c97cff4 100644 --- a/core/res/res/drawable-mdpi/textfield_activated_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_activated_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_default_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_default_holo_dark.9.png Binary files differindex ab6abdc..bf7df17 100644 --- a/core/res/res/drawable-mdpi/textfield_default_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_default_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_default_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_default_holo_light.9.png Binary files differindex dbdfc79..6aa64c6 100644 --- a/core/res/res/drawable-mdpi/textfield_default_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_default_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png Binary files differindex 500ede3..c5f098c 100644 --- a/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_light.9.png Binary files differindex 99f7f38..8a63152 100644 --- a/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_disabled_holo_dark.9.png Binary files differindex 06190a1..7f15e1e 100644 --- a/core/res/res/drawable-mdpi/textfield_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_disabled_holo_light.9.png Binary files differindex 8c16566..8bdbb2e 100644 --- a/core/res/res/drawable-mdpi/textfield_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_dark.9.png Binary files differindex 33e6dc8..c97cff4 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_light.9.png Binary files differindex eb0d90f..c97cff4 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_activated_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_default_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_multiline_default_holo_dark.9.png Binary files differindex 74c02c2..bf7df17 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_default_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_default_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_default_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_multiline_default_holo_light.9.png Binary files differindex 345f4f5..6aa64c6 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_default_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_default_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_dark.9.png Binary files differindex 5f0ad56..c5f098c 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_light.9.png Binary files differindex df03a15..8a63152 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_dark.9.png Binary files differindex bc56916..7f15e1e 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_light.9.png Binary files differindex 84adf68..8bdbb2e 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_disabled_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_dark.9.png Binary files differindex 4a98e57..efbaef8 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_light.9.png Binary files differindex 5cf6bf3..efbaef8 100644 --- a/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_light.9.png +++ b/core/res/res/drawable-mdpi/textfield_multiline_focused_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/toast_frame_holo.9.png b/core/res/res/drawable-mdpi/toast_frame_holo.9.png Binary files differindex b9105de..da2d52d 100755..100644 --- a/core/res/res/drawable-mdpi/toast_frame_holo.9.png +++ b/core/res/res/drawable-mdpi/toast_frame_holo.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..a338924 --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..6f2d3e5 --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_default_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..faa36b0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..c57f3ff --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..9d6402f --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_light.9.png Binary files differnew file mode 100644 index 0000000..bfd966c --- /dev/null +++ b/core/res/res/drawable-xhdpi/btn_cab_done_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png Binary files differindex 8a30fab..b534256 100644 --- a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png Binary files differindex 8a30fab..b534256 100644 --- a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png Binary files differindex bb4e7f6..a364792 100644 --- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png Binary files differindex 842ea9c..137d726 100644 --- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png Binary files differindex 842ea9c..137d726 100644 --- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png Binary files differindex 5aa02c8..5a52ad6 100644 --- a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png Binary files differindex 025fc00..c5bc3ec 100644 --- a/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png Binary files differindex 025fc00..c5bc3ec 100644 --- a/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png Binary files differindex 02360bd..e34ed85 100644 --- a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png Binary files differindex 5c4a2d1..ed7e0f4 100644 --- a/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png Binary files differindex 5c4a2d1..ed7e0f4 100644 --- a/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png Binary files differindex 1833ffe..f76d56b 100644 --- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png Binary files differindex 7fc5980..61f5f6f 100644 --- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png Binary files differindex 7fc5980..61f5f6f 100644 --- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png Binary files differindex 9d9c6f2..18aeac6 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png Binary files differindex 7d9bfd1..471b6ea 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png Binary files differindex 0cddd2d..393f967 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png Binary files differindex 1109fe1..87193af 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png Binary files differindex ec33f17..0ad8f35 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png Binary files differindex 0b562cc..fc21be1 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png Binary files differindex 93f565f..5ff338d 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png Binary files differindex aee803d..1321473 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png Binary files differindex 2f56666..9c914b0 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png Binary files differindex d636569..fe28238 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png Binary files differindex 9ec3fe0..455fdb4 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png Binary files differindex 9ec3fe0..455fdb4 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png Binary files differindex 5b8bf7b..ee8329d 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png Binary files differindex 5b8bf7b..ee8329d 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png Binary files differindex 5c3318b..ccfb2d0 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png Binary files differindex 5c3318b..ccfb2d0 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png Binary files differindex ef7310a..ad1f4f0 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png Binary files differindex ef7310a..ad1f4f0 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png Binary files differindex c55389e..97304af 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png Binary files differindex c55389e..97304af 100644 --- a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/cab_background_bottom_holo_dark.9.png b/core/res/res/drawable-xhdpi/cab_background_bottom_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..2bd8cee --- /dev/null +++ b/core/res/res/drawable-xhdpi/cab_background_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/cab_background_bottom_holo_light.9.png b/core/res/res/drawable-xhdpi/cab_background_bottom_holo_light.9.png Binary files differnew file mode 100644 index 0000000..d254e77 --- /dev/null +++ b/core/res/res/drawable-xhdpi/cab_background_bottom_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/cab_background_opaque_holo_dark.9.png b/core/res/res/drawable-xhdpi/cab_background_opaque_holo_dark.9.png Binary files differdeleted file mode 100644 index e2b604b..0000000 --- a/core/res/res/drawable-xhdpi/cab_background_opaque_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/cab_background_opaque_holo_light.9.png b/core/res/res/drawable-xhdpi/cab_background_opaque_holo_light.9.png Binary files differdeleted file mode 100644 index 0c1aeaa..0000000 --- a/core/res/res/drawable-xhdpi/cab_background_opaque_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/cab_background_top_holo_dark.9.png b/core/res/res/drawable-xhdpi/cab_background_top_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..919eac0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/cab_background_top_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/cab_background_top_holo_light.9.png b/core/res/res/drawable-xhdpi/cab_background_top_holo_light.9.png Binary files differnew file mode 100644 index 0000000..1357105 --- /dev/null +++ b/core/res/res/drawable-xhdpi/cab_background_top_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_bottom_holo_dark.9.png b/core/res/res/drawable-xhdpi/dialog_bottom_holo_dark.9.png Binary files differindex 077e4d3..94bb8e1 100644 --- a/core/res/res/drawable-xhdpi/dialog_bottom_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/dialog_bottom_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_bottom_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_bottom_holo_light.9.png Binary files differindex 357c17f..ef58e29 100644 --- a/core/res/res/drawable-xhdpi/dialog_bottom_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_bottom_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-xhdpi/dialog_full_holo_dark.9.png Binary files differindex 5b51072..f4970ad 100644 --- a/core/res/res/drawable-xhdpi/dialog_full_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/dialog_full_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_full_holo_light.9.png Binary files differindex 2705a39..172fc3b 100644 --- a/core/res/res/drawable-xhdpi/dialog_full_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_full_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_middle_holo_dark.9.png b/core/res/res/drawable-xhdpi/dialog_middle_holo_dark.9.png Binary files differindex 101876f..2bab67a 100644 --- a/core/res/res/drawable-xhdpi/dialog_middle_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/dialog_middle_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png Binary files differindex 0df1503..6b5f467 100644 --- a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_top_holo_dark.9.png b/core/res/res/drawable-xhdpi/dialog_top_holo_dark.9.png Binary files differindex 344a4e2..e1c602f 100644 --- a/core/res/res/drawable-xhdpi/dialog_top_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/dialog_top_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png Binary files differindex 249848f..59db99c 100644 --- a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/ic_cab_done_holo_dark.png b/core/res/res/drawable-xhdpi/ic_cab_done_holo_dark.png Binary files differnew file mode 100644 index 0000000..2e06dd0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_cab_done_holo_dark.png diff --git a/core/res/res/drawable-xhdpi/ic_cab_done_holo_light.png b/core/res/res/drawable-xhdpi/ic_cab_done_holo_light.png Binary files differnew file mode 100644 index 0000000..bb19810 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_cab_done_holo_light.png diff --git a/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_dark.9.png Binary files differindex 92acc47..e2aff72 100644 --- a/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_light.9.png Binary files differindex 4e54b4b6..93066c8 100644 --- a/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/menu_dropdown_panel_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png Binary files differnew file mode 100644 index 0000000..f96a4a6 --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png Binary files differnew file mode 100644 index 0000000..3a6554f --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png Binary files differnew file mode 100644 index 0000000..30bd7ad --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png Binary files differnew file mode 100644 index 0000000..209036b --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png Binary files differnew file mode 100644 index 0000000..830820b --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png Binary files differnew file mode 100644 index 0000000..39eb204 --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png Binary files differnew file mode 100644 index 0000000..a2d4dc2 --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png Binary files differnew file mode 100644 index 0000000..1772aea --- /dev/null +++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png Binary files differindex 664cc85..948072f 100644 --- a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png Binary files differindex f463f39..461be3f 100644 --- a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_horizontal.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_horizontal.9.png Binary files differnew file mode 100644 index 0000000..be3e90e --- /dev/null +++ b/core/res/res/drawable-xhdpi/scrollbar_handle_horizontal.9.png diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png Binary files differnew file mode 100644 index 0000000..4f6391f --- /dev/null +++ b/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png Binary files differindex c3b9bb4..0b0bf24 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_holo.png Binary files differindex f72e48c..45060cb 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png Binary files differnew file mode 100644 index 0000000..d1fe115 --- /dev/null +++ b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png Binary files differindex f5e9164..d49d67a 100644 --- a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png Binary files differindex 6f977a2..583e4a2 100644 --- a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png Binary files differindex 16c8430..5eec6f3 100644 --- a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png Binary files differindex 9593616..34fbbf0 100644 --- a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png Binary files differindex cebf1d8..6f82402 100644 --- a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png Binary files differindex 5a9e001..fd202f4 100644 --- a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png Binary files differindex c68cc37..af88495 100644 --- a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png Binary files differindex 611dc5a..a416478 100644 --- a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png +++ b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_dark.9.png Binary files differdeleted file mode 100644 index 85d8540..0000000 --- a/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_dark.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_light.9.png Binary files differdeleted file mode 100644 index 85d8540..0000000 --- a/core/res/res/drawable-xhdpi/spinner_ab_activated_holo_light.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png Binary files differindex 31b39d7..074f2d4 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png Binary files differindex 1527c5c..f8c12cf 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png Binary files differindex e4cef9a..cf01901 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png Binary files differindex 1c37ece..71f4f11 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png Binary files differindex 6aae46b..c591620 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png Binary files differindex 6aae46b..c591620 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png Binary files differindex db2e034..30caa29 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png Binary files differindex 77bb433..7ee4c7f 100644 --- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..06b6dc7 --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..aa32bcf --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..ba25eb0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png Binary files differnew file mode 100644 index 0000000..7a015ba --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..c6aad24 --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..c6aad24 --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..a0a7867 --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png Binary files differnew file mode 100644 index 0000000..85a3cae --- /dev/null +++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_activated_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_activated_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..4c4e02c --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_activated_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_activated_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_activated_holo_light.9.png Binary files differnew file mode 100644 index 0000000..4c4e02c --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_activated_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..86221f0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_default_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_default_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..a604537 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_default_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..cf1b79f --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..d1ecc73 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..e97c5d7 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_disabled_holo_light.9.png Binary files differnew file mode 100644 index 0000000..5c52dd5 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..4c4e02c --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_light.9.png Binary files differnew file mode 100644 index 0000000..4c4e02c --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_activated_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..86221f0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_light.9.png Binary files differnew file mode 100644 index 0000000..a604537 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_default_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..cf1b79f --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..d1ecc73 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..e97c5d7 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_light.9.png Binary files differnew file mode 100644 index 0000000..5c52dd5 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_disabled_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_dark.9.png Binary files differnew file mode 100644 index 0000000..3ed03f3 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_light.9.png Binary files differnew file mode 100644 index 0000000..3ed03f3 --- /dev/null +++ b/core/res/res/drawable-xhdpi/textfield_multiline_focused_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/toast_frame_holo.9.png b/core/res/res/drawable-xhdpi/toast_frame_holo.9.png Binary files differindex 9f39a77..9cb7c10 100644 --- a/core/res/res/drawable-xhdpi/toast_frame_holo.9.png +++ b/core/res/res/drawable-xhdpi/toast_frame_holo.9.png diff --git a/core/res/res/drawable/btn_cab_done.xml b/core/res/res/drawable/btn_cab_done.xml deleted file mode 100644 index e3cf461..0000000 --- a/core/res/res/drawable/btn_cab_done.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2008 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_window_focused="false" android:state_enabled="true" - android:drawable="@drawable/btn_cab_done_default_holo" /> - <item android:state_pressed="true" - android:drawable="@drawable/btn_cab_done_pressed_holo" /> - <item android:state_focused="true" android:state_enabled="true" - android:drawable="@drawable/btn_cab_done_focused_holo" /> - <item android:state_enabled="true" - android:drawable="@drawable/btn_cab_done_default_holo" /> -</selector> diff --git a/core/res/res/drawable/btn_cab_done_holo_dark.xml b/core/res/res/drawable/btn_cab_done_holo_dark.xml new file mode 100644 index 0000000..2cdb605 --- /dev/null +++ b/core/res/res/drawable/btn_cab_done_holo_dark.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_window_focused="false" android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_default_holo_dark" /> + <item android:state_pressed="true" + android:drawable="@drawable/btn_cab_done_pressed_holo_dark" /> + <item android:state_focused="true" android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_focused_holo_dark" /> + <item android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_default_holo_dark" /> +</selector> diff --git a/core/res/res/drawable/btn_cab_done_holo_light.xml b/core/res/res/drawable/btn_cab_done_holo_light.xml new file mode 100644 index 0000000..81add4c --- /dev/null +++ b/core/res/res/drawable/btn_cab_done_holo_light.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_window_focused="false" android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_default_holo_light" /> + <item android:state_pressed="true" + android:drawable="@drawable/btn_cab_done_pressed_holo_light" /> + <item android:state_focused="true" android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_focused_holo_light" /> + <item android:state_enabled="true" + android:drawable="@drawable/btn_cab_done_default_holo_light" /> +</selector> diff --git a/core/res/res/drawable/cab_ic_close_holo.xml b/core/res/res/drawable/cab_ic_close_holo.xml deleted file mode 100644 index 1baf7cc..0000000 --- a/core/res/res/drawable/cab_ic_close_holo.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2010 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_pressed="true" - android:drawable="@drawable/cab_ic_close_pressed_holo" /> - <item android:state_focused="true" - android:drawable="@drawable/cab_ic_close_focused_holo" /> - <item android:drawable="@drawable/cab_ic_close_normal_holo" /> -</selector> diff --git a/core/res/res/drawable/scrubber_control_selector_holo.xml b/core/res/res/drawable/scrubber_control_selector_holo.xml index c7b8854..d146eee 100644 --- a/core/res/res/drawable/scrubber_control_selector_holo.xml +++ b/core/res/res/drawable/scrubber_control_selector_holo.xml @@ -15,6 +15,7 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true" android:state_enabled="true" android:drawable="@android:drawable/scrubber_control_pressed_holo" /> <item android:state_enabled="true" android:drawable="@android:drawable/scrubber_control_holo" /> <item android:drawable="@android:drawable/scrubber_control_disabled_holo" /> </selector> diff --git a/core/res/res/drawable/spinner_ab_holo_dark.xml b/core/res/res/drawable/spinner_ab_holo_dark.xml index 708b6ab..0932eff 100644 --- a/core/res/res/drawable/spinner_ab_holo_dark.xml +++ b/core/res/res/drawable/spinner_ab_holo_dark.xml @@ -21,7 +21,5 @@ android:drawable="@drawable/spinner_ab_pressed_holo_dark" /> <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/spinner_ab_focused_holo_dark" /> - <item android:state_activated="true" - android:drawable="@drawable/spinner_ab_activated_holo_dark" /> <item android:drawable="@drawable/spinner_ab_default_holo_dark" /> </selector> diff --git a/core/res/res/drawable/spinner_ab_holo_light.xml b/core/res/res/drawable/spinner_ab_holo_light.xml index c4901ca..e785cf4 100644 --- a/core/res/res/drawable/spinner_ab_holo_light.xml +++ b/core/res/res/drawable/spinner_ab_holo_light.xml @@ -21,7 +21,5 @@ android:drawable="@drawable/spinner_ab_pressed_holo_light" /> <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/spinner_ab_focused_holo_light" /> - <item android:state_activated="true" - android:drawable="@drawable/spinner_ab_activated_holo_light" /> <item android:drawable="@drawable/spinner_ab_default_holo_light" /> </selector> diff --git a/core/res/res/layout-large/action_mode_close_item.xml b/core/res/res/layout-large/action_mode_close_item.xml index 321622e..a7b3fbb 100644 --- a/core/res/res/layout-large/action_mode_close_item.xml +++ b/core/res/res/layout-large/action_mode_close_item.xml @@ -16,23 +16,23 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/action_mode_close_button" - android:background="@drawable/btn_cab_done" android:focusable="true" android:clickable="true" android:paddingLeft="16dip" + style="?android:attr/actionModeCloseButtonStyle" android:layout_width="wrap_content" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_marginRight="16dip"> <ImageView android:layout_width="48dip" android:layout_height="wrap_content" android:layout_gravity="center" android:scaleType="center" - android:src="@drawable/ic_cab_close_holo" /> + android:src="?android:attr/actionModeCloseDrawable" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="8dip" android:layout_marginRight="16dip" - android:textAppearance="@android:style/TextAppearance.Holo.Medium" - android:textColor="@android:color/white" + android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/action_mode_done" /> </LinearLayout> diff --git a/core/res/res/layout/action_bar_home.xml b/core/res/res/layout/action_bar_home.xml index 9612710..96467d0 100644 --- a/core/res/res/layout/action_bar_home.xml +++ b/core/res/res/layout/action_bar_home.xml @@ -18,7 +18,7 @@ class="com.android.internal.widget.ActionBarView$HomeView" android:layout_width="wrap_content" android:layout_height="match_parent" - android:background="?android:attr/selectableItemBackground" > + android:background="?android:attr/actionBarItemBackground" > <ImageView android:id="@android:id/up" android:src="?android:attr/homeAsUpIndicator" android:layout_gravity="center_vertical|left" diff --git a/core/res/res/layout/action_mode_close_item.xml b/core/res/res/layout/action_mode_close_item.xml index 2a4d8e0..57c0f1d 100644 --- a/core/res/res/layout/action_mode_close_item.xml +++ b/core/res/res/layout/action_mode_close_item.xml @@ -16,15 +16,16 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/action_mode_close_button" - android:background="@drawable/btn_cab_done" android:focusable="true" android:clickable="true" - android:paddingLeft="8dip" + android:paddingLeft="16dip" + style="?android:attr/actionModeCloseButtonStyle" android:layout_width="wrap_content" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_marginRight="16dip"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:scaleType="fitCenter" - android:src="@drawable/ic_cab_close_holo" /> + android:src="?android:attr/actionModeCloseDrawable" /> </LinearLayout> diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml index 452b982..4c44049 100644 --- a/core/res/res/layout/keyguard_screen_password_landscape.xml +++ b/core/res/res/layout/keyguard_screen_password_landscape.xml @@ -66,13 +66,15 @@ <TextView android:id="@+id/date" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:layout_below="@id/time" android:layout_marginTop="6dip" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" - android:layout_gravity="right" /> <TextView @@ -88,22 +90,26 @@ <TextView android:id="@+id/status1" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:layout_marginTop="4dip" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:drawablePadding="4dip" - android:layout_gravity="right" /> <Space android:layout_gravity="fill" /> <TextView android:id="@+id/carrier" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:singleLine="true" android:ellipsize="marquee" - android:layout_gravity="right" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:textColor="?android:attr/textColorSecondary" @@ -144,6 +150,7 @@ android:background="@drawable/lockscreen_password_field_dark" android:textColor="?android:attr/textColorPrimary" android:imeOptions="flagNoFullscreen|actionDone" + android:suggestionsEnabled="false" /> </LinearLayout> diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml index cd33275..1d0ea54 100644 --- a/core/res/res/layout/keyguard_screen_password_portrait.xml +++ b/core/res/res/layout/keyguard_screen_password_portrait.xml @@ -109,7 +109,8 @@ android:background="@drawable/lockscreen_password_field_dark" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#ffffffff" - android:imeOptions="actionDone"/> + android:imeOptions="actionDone" + android:suggestionsEnabled="false"/> <!-- Numeric keyboard --> <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard" 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 168bd1a..0568dd9 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -64,13 +64,14 @@ <TextView android:id="@+id/date" - android:layout_below="@id/time" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:layout_marginTop="6dip" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" - android:layout_gravity="right" /> <TextView @@ -86,22 +87,24 @@ <TextView android:id="@+id/status1" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:layout_marginTop="4dip" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:drawablePadding="4dip" - android:layout_gravity="right" /> <Space android:layout_gravity="fill" /> <TextView android:id="@+id/carrier" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="right" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml index c425b73..9b28731 100644 --- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml +++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml @@ -64,11 +64,13 @@ <TextView android:id="@+id/date" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" - android:layout_gravity="right" /> <TextView @@ -83,17 +85,21 @@ <TextView android:id="@+id/status1" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" - android:layout_gravity="right" /> <Space android:layout_gravity="fill" /> <TextView android:id="@+id/carrier" - android:layout_gravity="right" + android:layout_width="0dip" + android:layout_gravity="fill_horizontal" + android:gravity="right" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceMedium" diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml index f6b5b53..673c96c 100644 --- a/core/res/res/layout/search_bar.xml +++ b/core/res/res/layout/search_bar.xml @@ -75,5 +75,5 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" - android:src="@drawable/title_bar_shadow"/> + android:src="@drawable/ab_solid_shadow_holo"/> </view> diff --git a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml index d937392..ac4d1e4 100644 --- a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml +++ b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml @@ -28,6 +28,7 @@ android:alpha="0.7" /> <LinearLayout + android:id="@+id/line3" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" @@ -60,6 +61,14 @@ android:layout_weight="0" android:scaleType="center" android:paddingLeft="8dp" + android:visibility="gone" /> </LinearLayout> + <ProgressBar + android:id="@android:id/progress" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="gone" + style="?android:attr/progressBarStyleHorizontal" + /> </LinearLayout> diff --git a/core/res/res/layout/text_edit_no_paste_window.xml b/core/res/res/layout/text_edit_no_paste_window.xml index 5e9acc2..c4c0b8a 100644 --- a/core/res/res/layout/text_edit_no_paste_window.xml +++ b/core/res/res/layout/text_edit_no_paste_window.xml @@ -30,7 +30,6 @@ android:textAppearance="?android:attr/textAppearanceMediumInverse" android:textColor="@android:color/dim_foreground_dark_inverse_disabled" android:background="@android:drawable/text_edit_paste_window" - android:text="@android:string/pasteDisabled" android:layout_marginBottom="12dip" /> diff --git a/core/res/res/layout/text_edit_side_no_paste_window.xml b/core/res/res/layout/text_edit_side_no_paste_window.xml index dc411a1..78423a7 100644 --- a/core/res/res/layout/text_edit_side_no_paste_window.xml +++ b/core/res/res/layout/text_edit_side_no_paste_window.xml @@ -30,7 +30,6 @@ android:textAppearance="?android:attr/textAppearanceMediumInverse" android:textColor="@android:color/dim_foreground_dark_inverse_disabled" android:background="@android:drawable/text_edit_side_paste_window" - android:text="@android:string/pasteDisabled" android:layout_marginBottom="12dip" /> diff --git a/core/res/res/layout/volume_adjust.xml b/core/res/res/layout/volume_adjust.xml index 8c580c2..7303003 100644 --- a/core/res/res/layout/volume_adjust.xml +++ b/core/res/res/layout/volume_adjust.xml @@ -54,7 +54,6 @@ android:padding="16dip" android:background="?attr/selectableItemBackground" android:src="@drawable/ic_sysbar_quicksettings" - android:contentDescription="@string/volume_panel_more_description" /> </LinearLayout> diff --git a/core/res/res/layout/volume_adjust_item.xml b/core/res/res/layout/volume_adjust_item.xml index beb511d..fb900f7 100644 --- a/core/res/res/layout/volume_adjust_item.xml +++ b/core/res/res/layout/volume_adjust_item.xml @@ -38,7 +38,6 @@ android:layout_height="wrap_content" android:layout_weight="1" android:padding="16dip" - android:layout_marginLeft="8dip" android:layout_marginRight="8dip" /> </LinearLayout> diff --git a/core/res/res/raw/execute_script_android.js b/core/res/res/raw/execute_script_android.js deleted file mode 100644 index 84fcbd4..0000000 --- a/core/res/res/raw/execute_script_android.js +++ /dev/null @@ -1,8 +0,0 @@ -function(){return function(){function h(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function i(a){var b=h(a);return b=="array"||b=="object"&&typeof a.length=="number"}function j(a){a=h(a);return a=="object"||a=="array"||a=="function"}var k=Date.now||function(){return+new Date};function l(a,b){function c(){}c.prototype=b.prototype;a.c=b.prototype;a.prototype=new c};function m(a){this.stack=Error().stack||"";if(a)this.message=String(a)}l(m,Error);m.prototype.name="CustomError";function n(a,b,c){var d={};for(var e in a)if(b.call(c,a[e],e,a))d[e]=a[e];return d}function o(a,b,c){var d={};for(var e in a)d[e]=b.call(c,a[e],e,a);return d}function p(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function q(a,b){m.call(this,b);this.code=a;this.name=r[a]||r[13]}l(q,m);var r,s={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},t={};for(var u in s)t[s[u]]=u;r=t; -q.prototype.toString=function(){return"["+this.name+"] "+this.message};function v(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a};function w(a,b){b.unshift(a);m.call(this,v.apply(null,b));b.shift();this.b=a}l(w,m);w.prototype.name="AssertionError";function x(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}throw new w(""+d,e||[]);}return a};var y=Array.prototype,z=y.map?function(a,b,c){x(a.length!=null);return y.map.call(a,b,c)}:function(a,b,c){var d=a.length,e=Array(d),f=typeof a=="string"?a.split(""):a;for(var g=0;g<d;g++)if(g in f)e[g]=b.call(c,f[g],g,a);return e};var A="",B;if(B=/WebKit\/(\S+)/){var C=B.exec(this.navigator?this.navigator.userAgent:null);A=C?C[1]:""};function D(){} -function E(a,b,c){switch(typeof b){case "string":F(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(h(b)=="array"){var d=b.length;c.push("[");var e="";for(var f=0;f<d;f++){c.push(e);E(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(Object.prototype.hasOwnProperty.call(b,e)){f=b[e];if(typeof f!="function"){c.push(d);F(a,e,c);c.push(":");E(a, -f,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var G={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},H=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function F(a,b,c){c.push('"',b.replace(H,function(d){if(d in G)return G[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return G[d]=f+e.toString(16)}),'"')};function I(a){switch(h(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return z(a,I);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=J(a);return b}if(i(a))return z(a,I);a=n(a,function(c,d){return typeof d=="number"||typeof d=="string"});return o(a,I);default:return null}} -function K(a,b){if(h(a)=="array")return z(a,function(c){return K(c,b)});else if(j(a))return"ELEMENT"in a?L(a.ELEMENT,b):o(a,function(c){return K(c,b)});return a}function M(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.a=k()}return b}function J(a){var b=M(a.ownerDocument),c=p(b,function(d){return d==a});if(!c){c=":wdc:"+b.a++;b[c]=a}return c} -function L(a,b){a=decodeURIComponent(a);var c=b||document,d=M(c);if(!(a in d))throw new q(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==c.documentElement)return e;f=f.parentNode}delete d[a];throw new q(10,"Element is no longer attached to the DOM");};function N(a,b,c){var d;try{if(typeof a=="string")a=new Function(a);var e=K(b),f=a.apply(null,e);d={status:0,value:I(f)}}catch(g){d={status:"code"in g?g.code:13,value:{message:g.message}}}if(c){a=[];E(new D,d,a);d=a.join("")}else d=d;return d}var O="_".split("."),P=this;!(O[0]in P)&&P.execScript&&P.execScript("var "+O[0]);for(var Q;O.length&&(Q=O.shift());)if(!O.length&&N!==undefined)P[Q]=N;else P=P[Q]?P[Q]:P[Q]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/find_element_android.js b/core/res/res/raw/find_element_android.js deleted file mode 100644 index c62f851..0000000 --- a/core/res/res/raw/find_element_android.js +++ /dev/null @@ -1,27 +0,0 @@ -function(){return function(){var i=this; -function j(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function aa(a){var b=j(a);return b=="array"||b=="object"&&typeof a.length=="number"}function k(a){return typeof a=="string"}function l(a){return j(a)=="function"}function ba(a){a=j(a);return a=="object"||a=="array"||a=="function"}var ca=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.n=b.prototype;a.prototype=new c};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function da(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function ea(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function fa(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function o(a,b){n.call(this,b);this.code=a;this.name=p[a]||p[13]}m(o,n);var p,ga={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ha={};for(var ia in ga)ha[ga[ia]]=ia;p=ha; -o.prototype.toString=function(){return"["+this.name+"] "+this.message};function ja(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}function q(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}function r(a,b){if(a<b)return-1;else if(a>b)return 1;return 0}var ka={};function la(a){return ka[a]||(ka[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function s(a,b){b.unshift(a);n.call(this,ja.apply(null,b));b.shift();this.q=a}m(s,n);s.prototype.name="AssertionError";function t(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new s(""+d,f||[]);}return a};var u=Array.prototype,ma=u.indexOf?function(a,b,c){t(a.length!=null);return u.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(k(a)){if(!k(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},na=u.forEach?function(a,b,c){t(a.length!=null);u.forEach.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)e in f&&b.call(c,f[e],e,a)},v=u.filter?function(a,b,c){t(a.length!=null);return u.filter.call(a, -b,c)}:function(a,b,c){var d=a.length,f=[],e=0,g=k(a)?a.split(""):a;for(var h=0;h<d;h++)if(h in g){var G=g[h];if(b.call(c,G,h,a))f[e++]=G}return f},w=u.map?function(a,b,c){t(a.length!=null);return u.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=k(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f},oa=u.some?function(a,b,c){t(a.length!=null);return u.some.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c, -f[e],e,a))return true;return false};function x(a,b,c){a:{var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c,f[e],e,a)){b=e;break a}b=-1}return b<0?null:k(a)?a.charAt(b):a[b]};var A=true,pa,qa="",B;if(A)B=/WebKit\/(\S+)/;if(B){var ra=B.exec(i.navigator?i.navigator.userAgent:null);qa=ra?ra[1]:""}pa=qa;var sa={};var ta;function C(a,b){this.width=a;this.height=b}C.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};function D(a){return a?new E(F(a)):ta||(ta=new E)}function H(a,b){if(a.contains&&b.nodeType==1)return a==b||a.contains(b);if(typeof a.compareDocumentPosition!="undefined")return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}function F(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ua(a,b){var c=[];return va(a,b,c,true)?c[0]:undefined} -function va(a,b,c,d){if(a!=null){var f=0;for(var e;e=a.childNodes[f];f++){if(b(e)){c.push(e);if(d)return true}if(va(e,b,c,d))return true}}return false}function wa(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null}function E(a){this.g=a||i.document||document} -function I(a,b,c,d){a=d||a.g;b=b&&b!="*"?b.toUpperCase():"";if(d=a.querySelectorAll){if(d=a.querySelector){if(!(d=!A)){if(!(d=document.compatMode=="CSS1Compat")){if(!(d=sa["528"])){d=0;var f=q(String(pa)).split("."),e=q(String("528")).split("."),g=Math.max(f.length,e.length);for(var h=0;d==0&&h<g;h++){var G=f[h]||"",Oa=e[h]||"",Pa=RegExp("(\\d*)(\\D*)","g"),Qa=RegExp("(\\d*)(\\D*)","g");do{var y=Pa.exec(G)||["","",""],z=Qa.exec(Oa)||["","",""];if(y[0].length==0&&z[0].length==0)break;d=r(y[1].length== -0?0:parseInt(y[1],10),z[1].length==0?0:parseInt(z[1],10))||r(y[2].length==0,z[2].length==0)||r(y[2],z[2])}while(d==0)}d=sa["528"]=d>=0}d=d}d=d}d=d}d=d}if(d&&(b||c))c=a.querySelectorAll(b+(c?"."+c:""));else if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};e=f=0;for(;g=a[e];e++)if(b==g.nodeName)d[f++]=g;d.length=f;c=d}else c=a}else{a=a.getElementsByTagName(b||"*");if(c){d={};f=0;for(e=0;g=a[e];e++){b=g.className;if(typeof b.split=="function"&&ma(b.split(/\s+/),c)>=0)d[f++]=g}d.length= -f;c=d}else c=a}return c}E.prototype.contains=H;function xa(){} -function J(a,b,c){switch(typeof b){case "string":ya(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(j(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);J(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);ya(a,f,c);c.push(":");J(a, -e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var K={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},za=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function ya(a,b,c){c.push('"',b.replace(za,function(d){if(d in K)return K[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return K[d]=e+f.toString(16)}),'"')};function L(a){switch(j(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return w(a,L);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Aa(a);return b}if(aa(a))return w(a,L);a=da(a,function(c,d){return typeof d=="number"||k(d)});return ea(a,L);default:return null}} -function M(a,b){if(j(a)=="array")return w(a,function(c){return M(c,b)});else if(ba(a))return"ELEMENT"in a?Ba(a.ELEMENT,b):ea(a,function(c){return M(c,b)});return a}function Ca(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.m=ca()}return b}function Aa(a){var b=Ca(a.ownerDocument),c=fa(b,function(d){return d==a});if(!c){c=":wdc:"+b.m++;b[c]=a}return c} -function Ba(a,b){a=decodeURIComponent(a);var c=b||document,d=Ca(c);if(!(a in d))throw new o(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new o(10,"Element is no longer attached to the DOM");};var Da=window;function Ea(){var a=i.Components;if(!a)return false;try{a.o["@mozilla.org/uuid-generator;1"].p(a.l.s);return true}catch(b){return false}};var N={};N.b=function(a,b){if(!a)throw Error("No class name specified");a=q(a);if(a.split(/\s+/).length>1)throw Error("Compound class names not permitted");var c=I(D(b),"*",a,b);return c.length?c[0]:null};N.e=function(a,b){if(!a)throw Error("No class name specified");a=q(a);if(a.split(/\s+/).length>1)throw Error("Compound class names not permitted");return I(D(b),"*",a,b)};var O={};O.b=function(a,b){if(!l(b.querySelector)&&0)throw Error("CSS selection is not supported");if(!a)throw Error("No selector specified");if(a.split(/,/).length>1)throw Error("Compound selectors not permitted");a=q(a);var c=b.querySelector(a);return c&&c.nodeType==1?c:null};O.e=function(a,b){if(!l(b.querySelectorAll)&&0)throw Error("CSS selection is not supported");if(!a)throw Error("No selector specified");if(a.split(/,/).length>1)throw Error("Compound selectors not permitted");a=q(a);return b.querySelectorAll(a)};function Fa(a,b){if(typeof a.selectNodes!="undefined"){var c=F(a);typeof c.setProperty!="undefined"&&c.setProperty("SelectionLanguage","XPath");return a.selectNodes(b)}else if(document.implementation.hasFeature("XPath","3.0")){c=F(a);var d=c.createNSResolver(c.documentElement);c=c.evaluate(b,a,d,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);d=[];var f=c.snapshotLength;for(var e=0;e<f;e++)d.push(c.snapshotItem(e));return d}else return[]};var P={}; -P.b=function(a,b){var c=function(d,f){var e=F(d);if(d.selectSingleNode){e.setProperty&&e.setProperty("SelectionLanguage","XPath");return d.selectSingleNode(f)}else if(e.implementation.hasFeature("XPath","3.0")){var g=e.createNSResolver(e.documentElement),h;if(typeof XPathResult!="undefined")h=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!Ea())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");h=Components.l.r.FIRST_ORDERED_NODE_TYPE}return e.evaluate(f,d, -g,h,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};P.e=function(a,b){var c=Fa(b,a);na(c,function(d){if(d.nodeType!=1)throw Error("Returned nodes must be elements: "+a);});return c};var Ga="StopIteration"in i?i.StopIteration:Error("StopIteration");function Ha(){}Ha.prototype.next=function(){throw Ga;};function Q(a,b,c,d,f){this.a=!!b;a&&R(this,a,d);this.f=f!=undefined?f:this.d||0;if(this.a)this.f*=-1;this.k=!c}m(Q,Ha);Q.prototype.c=null;Q.prototype.d=0;Q.prototype.j=false;function R(a,b,c,d){if(a.c=b)a.d=typeof c=="number"?c:a.c.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.f=d} -Q.prototype.next=function(){var a;if(this.j){if(!this.c||this.k&&this.f==0)throw Ga;a=this.c;var b=this.a?-1:1;if(this.d==b){var c=this.a?a.lastChild:a.firstChild;c?R(this,c):R(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?R(this,c):R(this,a.parentNode,b*-1);this.f+=this.d*(this.a?-1:1)}else this.j=true;a=this.c;if(!this.c)throw Ga;return a}; -Q.prototype.splice=function(){var a=this.c,b=this.a?1:-1;if(this.d==b){this.d=b*-1;this.f+=this.d*(this.a?-1:1)}this.a=!this.a;Q.prototype.next.call(this);this.a=!this.a;b=aa(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function Ia(a,b,c,d){Q.call(this,a,b,c,null,d)}m(Ia,Q);Ia.prototype.next=function(){do Ia.n.next.call(this);while(this.d==-1);return this.c};function Ja(a,b){var c=F(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""};function S(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var Ka=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"]; -function T(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=q(a.style.cssText).toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(ma(Ka,b)>=0)return"true";return c.specified?c.value:null}function U(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return S(a)?a:null}function V(a,b){b=la(String(b));return Ja(a,b)||La(a,b)} -function La(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=U(a))?La(c,b):null} -function Ma(a){if(l(a.getBBox))return a.getBBox();var b;if((Ja(a,"display")||(a.currentStyle?a.currentStyle.display:null)||a.style.display)!="none")b=new C(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var e;e=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=d;b=new C(e,a)}return b} -function W(a,b){function c(e){if(V(e,"display")=="none")return false;e=U(e);return!e||c(e)}function d(e){var g=Ma(e);if(g.height>0&&g.width>0)return true;if(e.innerText||e.textContent)if(Na.test(e.innerText||e.textContent))return true;return A&&oa(e.childNodes,function(h){return S(h)&&d(h)})}if(!S(a))throw Error("Argument to isShown must be of type Element");if(S(a,"TITLE"))return(F(a)?F(a).parentWindow||F(a).defaultView:window)==Da;if(S(a,"OPTION")||S(a,"OPTGROUP")){var f=wa(a,function(e){return S(e, -"SELECT")});return!!f&&W(f)}if(S(a,"MAP")){if(!a.name)return false;f=F(a);f=f.evaluate?P.b('/descendant::*[@usemap = "#'+a.name+'"]',f):ua(f,function(e){return S(e)&&T(e,"usemap")=="#"+a.name});return!!f&&W(f)}if(S(a,"AREA")){f=wa(a,function(e){return S(e,"MAP")});return!!f&&W(f)}if(S(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(V(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&Ra(a)==0)return false;if(!d(a))return false;return true} -function Sa(a){var b=[];Ta(a,b);b=w(b,q);return q(b.join("\n"))}function Ta(a,b){if(S(a,"BR"))b.push("");else{var c=Ua(a);c&&b[b.length-1]&&b.push("");na(a.childNodes,function(d){if(d.nodeType==3){var f=U(d);if(f){W(f);if(f&&W(f)){d=d.nodeValue.replace(Va," ");f=b.pop()||"";var e=f.length-1;if(e>=0&&f.indexOf(" ",e)==e&&d.lastIndexOf(" ",0)==0)d=d.substr(1);b.push(f+d)}}}else S(d)&&Ta(d,b)});c&&b[b.length-1]&&b.push("")}}function Ua(a){a=V(a,"display");return a=="block"||a=="list-item"} -var Wa="[\\s\\xa0"+String.fromCharCode(160)+"]+",Va=RegExp(Wa,"g"),Na=RegExp("^"+Wa+"$");function Ra(a){var b=1,c=V(a,"opacity");if(c)b=Number(c);if(a=U(a))b*=Ra(a);return b};var Xa={};Xa.b=function(a,b){var c=D(b),d=k(a)?c.g.getElementById(a):a;if(!d)return null;if(T(d,"id")==a&&H(b,d))return d;c=I(c,"*");return x(c,function(f){return T(f,"id")==a&&H(b,f)})};Xa.e=function(a,b){var c=I(D(b),"*",null,b);return v(c,function(d){return T(d,"id")==a})};var X={},Ya={};X.i=function(a,b,c){b=I(D(b),"A",null,b);return x(b,function(d){d=Sa(d);return c&&d.indexOf(a)!=-1||d==a})};X.h=function(a,b,c){b=I(D(b),"A",null,b);return v(b,function(d){d=Sa(d);return c&&d.indexOf(a)!=-1||d==a})};X.b=function(a,b){return X.i(a,b,false)};X.e=function(a,b){return X.h(a,b,false)};Ya.b=function(a,b){return X.i(a,b,true)};Ya.e=function(a,b){return X.h(a,b,true)};var Za={};Za.b=function(a,b){var c=I(D(b),"*",null,b);return x(c,function(d){return T(d,"name")==a})};Za.e=function(a,b){var c=I(D(b),"*",null,b);return v(c,function(d){return T(d,"name")==a})};var $a={};$a.b=function(a,b){return I(D(b),a,null,b)[0]||null};$a.e=function(a,b){return I(D(b),a,null,b)};var ab={className:N,css:O,id:Xa,linkText:X,name:Za,partialLinkText:Ya,tagName:$a,xpath:P};function bb(a,b){var c;a:{for(c in a)if(!Object.prototype[c]){c=c;break a}c=null}if(c){var d=ab[c];if(d&&l(d.b))return d.b(a[c],b||F(Da))}throw Error("Unsupported locator strategy: "+c);};function cb(a,b,c){var d={};d[a]=b;a=bb;c=[d,c];var f;try{if(k(a))a=new Function(a);var e=M(c),g=a.apply(null,e);f={status:0,value:L(g)}}catch(h){f={status:"code"in h?h.code:13,value:{message:h.message}}}e=[];J(new xa,f,e);return e.join("")}var Y="_".split("."),Z=i;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&cb!==undefined)Z[$]=cb;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/find_elements_android.js b/core/res/res/raw/find_elements_android.js deleted file mode 100644 index 3a57689..0000000 --- a/core/res/res/raw/find_elements_android.js +++ /dev/null @@ -1,27 +0,0 @@ -function(){return function(){var i=this; -function j(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function aa(a){var b=j(a);return b=="array"||b=="object"&&typeof a.length=="number"}function k(a){return typeof a=="string"}function l(a){return j(a)=="function"}function ba(a){a=j(a);return a=="object"||a=="array"||a=="function"}var ca=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.n=b.prototype;a.prototype=new c};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function da(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function ea(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function fa(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function o(a,b){n.call(this,b);this.code=a;this.name=p[a]||p[13]}m(o,n);var p,ga={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ha={};for(var ia in ga)ha[ga[ia]]=ia;p=ha; -o.prototype.toString=function(){return"["+this.name+"] "+this.message};function ja(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}function q(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}function r(a,b){if(a<b)return-1;else if(a>b)return 1;return 0}var ka={};function la(a){return ka[a]||(ka[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function s(a,b){b.unshift(a);n.call(this,ja.apply(null,b));b.shift();this.q=a}m(s,n);s.prototype.name="AssertionError";function t(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new s(""+d,f||[]);}return a};var u=Array.prototype,ma=u.indexOf?function(a,b,c){t(a.length!=null);return u.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(k(a)){if(!k(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},na=u.forEach?function(a,b,c){t(a.length!=null);u.forEach.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)e in f&&b.call(c,f[e],e,a)},v=u.filter?function(a,b,c){t(a.length!=null);return u.filter.call(a, -b,c)}:function(a,b,c){var d=a.length,f=[],e=0,g=k(a)?a.split(""):a;for(var h=0;h<d;h++)if(h in g){var G=g[h];if(b.call(c,G,h,a))f[e++]=G}return f},w=u.map?function(a,b,c){t(a.length!=null);return u.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=k(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f},oa=u.some?function(a,b,c){t(a.length!=null);return u.some.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c, -f[e],e,a))return true;return false};function x(a,b,c){a:{var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c,f[e],e,a)){b=e;break a}b=-1}return b<0?null:k(a)?a.charAt(b):a[b]};var A=true,pa,qa="",B;if(A)B=/WebKit\/(\S+)/;if(B){var ra=B.exec(i.navigator?i.navigator.userAgent:null);qa=ra?ra[1]:""}pa=qa;var sa={};var ta;function C(a,b){this.width=a;this.height=b}C.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};function D(a){return a?new E(F(a)):ta||(ta=new E)}function H(a,b){if(a.contains&&b.nodeType==1)return a==b||a.contains(b);if(typeof a.compareDocumentPosition!="undefined")return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}function F(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ua(a,b){var c=[];return va(a,b,c,true)?c[0]:undefined} -function va(a,b,c,d){if(a!=null){var f=0;for(var e;e=a.childNodes[f];f++){if(b(e)){c.push(e);if(d)return true}if(va(e,b,c,d))return true}}return false}function wa(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null}function E(a){this.g=a||i.document||document} -function I(a,b,c,d){a=d||a.g;b=b&&b!="*"?b.toUpperCase():"";if(d=a.querySelectorAll){if(d=a.querySelector){if(!(d=!A)){if(!(d=document.compatMode=="CSS1Compat")){if(!(d=sa["528"])){d=0;var f=q(String(pa)).split("."),e=q(String("528")).split("."),g=Math.max(f.length,e.length);for(var h=0;d==0&&h<g;h++){var G=f[h]||"",Oa=e[h]||"",Pa=RegExp("(\\d*)(\\D*)","g"),Qa=RegExp("(\\d*)(\\D*)","g");do{var y=Pa.exec(G)||["","",""],z=Qa.exec(Oa)||["","",""];if(y[0].length==0&&z[0].length==0)break;d=r(y[1].length== -0?0:parseInt(y[1],10),z[1].length==0?0:parseInt(z[1],10))||r(y[2].length==0,z[2].length==0)||r(y[2],z[2])}while(d==0)}d=sa["528"]=d>=0}d=d}d=d}d=d}d=d}if(d&&(b||c))c=a.querySelectorAll(b+(c?"."+c:""));else if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};e=f=0;for(;g=a[e];e++)if(b==g.nodeName)d[f++]=g;d.length=f;c=d}else c=a}else{a=a.getElementsByTagName(b||"*");if(c){d={};f=0;for(e=0;g=a[e];e++){b=g.className;if(typeof b.split=="function"&&ma(b.split(/\s+/),c)>=0)d[f++]=g}d.length= -f;c=d}else c=a}return c}E.prototype.contains=H;function xa(){} -function J(a,b,c){switch(typeof b){case "string":ya(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(j(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);J(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);ya(a,f,c);c.push(":");J(a, -e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var K={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},za=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function ya(a,b,c){c.push('"',b.replace(za,function(d){if(d in K)return K[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return K[d]=e+f.toString(16)}),'"')};function L(a){switch(j(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return w(a,L);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Aa(a);return b}if(aa(a))return w(a,L);a=da(a,function(c,d){return typeof d=="number"||k(d)});return ea(a,L);default:return null}} -function M(a,b){if(j(a)=="array")return w(a,function(c){return M(c,b)});else if(ba(a))return"ELEMENT"in a?Ba(a.ELEMENT,b):ea(a,function(c){return M(c,b)});return a}function Ca(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.m=ca()}return b}function Aa(a){var b=Ca(a.ownerDocument),c=fa(b,function(d){return d==a});if(!c){c=":wdc:"+b.m++;b[c]=a}return c} -function Ba(a,b){a=decodeURIComponent(a);var c=b||document,d=Ca(c);if(!(a in d))throw new o(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new o(10,"Element is no longer attached to the DOM");};var Da=window;function Ea(){var a=i.Components;if(!a)return false;try{a.o["@mozilla.org/uuid-generator;1"].p(a.l.s);return true}catch(b){return false}};var N={};N.d=function(a,b){if(!a)throw Error("No class name specified");a=q(a);if(a.split(/\s+/).length>1)throw Error("Compound class names not permitted");var c=I(D(b),"*",a,b);return c.length?c[0]:null};N.b=function(a,b){if(!a)throw Error("No class name specified");a=q(a);if(a.split(/\s+/).length>1)throw Error("Compound class names not permitted");return I(D(b),"*",a,b)};var O={};O.d=function(a,b){if(!l(b.querySelector)&&0)throw Error("CSS selection is not supported");if(!a)throw Error("No selector specified");if(a.split(/,/).length>1)throw Error("Compound selectors not permitted");a=q(a);var c=b.querySelector(a);return c&&c.nodeType==1?c:null};O.b=function(a,b){if(!l(b.querySelectorAll)&&0)throw Error("CSS selection is not supported");if(!a)throw Error("No selector specified");if(a.split(/,/).length>1)throw Error("Compound selectors not permitted");a=q(a);return b.querySelectorAll(a)};function Fa(a,b){if(typeof a.selectNodes!="undefined"){var c=F(a);typeof c.setProperty!="undefined"&&c.setProperty("SelectionLanguage","XPath");return a.selectNodes(b)}else if(document.implementation.hasFeature("XPath","3.0")){c=F(a);var d=c.createNSResolver(c.documentElement);c=c.evaluate(b,a,d,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);d=[];var f=c.snapshotLength;for(var e=0;e<f;e++)d.push(c.snapshotItem(e));return d}else return[]};var P={}; -P.d=function(a,b){var c=function(d,f){var e=F(d);if(d.selectSingleNode){e.setProperty&&e.setProperty("SelectionLanguage","XPath");return d.selectSingleNode(f)}else if(e.implementation.hasFeature("XPath","3.0")){var g=e.createNSResolver(e.documentElement),h;if(typeof XPathResult!="undefined")h=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!Ea())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");h=Components.l.r.FIRST_ORDERED_NODE_TYPE}return e.evaluate(f,d, -g,h,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};P.b=function(a,b){var c=Fa(b,a);na(c,function(d){if(d.nodeType!=1)throw Error("Returned nodes must be elements: "+a);});return c};var Ga="StopIteration"in i?i.StopIteration:Error("StopIteration");function Ha(){}Ha.prototype.next=function(){throw Ga;};function Q(a,b,c,d,f){this.a=!!b;a&&R(this,a,d);this.f=f!=undefined?f:this.e||0;if(this.a)this.f*=-1;this.k=!c}m(Q,Ha);Q.prototype.c=null;Q.prototype.e=0;Q.prototype.j=false;function R(a,b,c,d){if(a.c=b)a.e=typeof c=="number"?c:a.c.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.f=d} -Q.prototype.next=function(){var a;if(this.j){if(!this.c||this.k&&this.f==0)throw Ga;a=this.c;var b=this.a?-1:1;if(this.e==b){var c=this.a?a.lastChild:a.firstChild;c?R(this,c):R(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?R(this,c):R(this,a.parentNode,b*-1);this.f+=this.e*(this.a?-1:1)}else this.j=true;a=this.c;if(!this.c)throw Ga;return a}; -Q.prototype.splice=function(){var a=this.c,b=this.a?1:-1;if(this.e==b){this.e=b*-1;this.f+=this.e*(this.a?-1:1)}this.a=!this.a;Q.prototype.next.call(this);this.a=!this.a;b=aa(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function Ia(a,b,c,d){Q.call(this,a,b,c,null,d)}m(Ia,Q);Ia.prototype.next=function(){do Ia.n.next.call(this);while(this.e==-1);return this.c};function Ja(a,b){var c=F(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""};function S(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var Ka=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"]; -function T(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=q(a.style.cssText).toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(ma(Ka,b)>=0)return"true";return c.specified?c.value:null}function U(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return S(a)?a:null}function V(a,b){b=la(String(b));return Ja(a,b)||La(a,b)} -function La(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=U(a))?La(c,b):null} -function Ma(a){if(l(a.getBBox))return a.getBBox();var b;if((Ja(a,"display")||(a.currentStyle?a.currentStyle.display:null)||a.style.display)!="none")b=new C(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var e;e=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=d;b=new C(e,a)}return b} -function W(a,b){function c(e){if(V(e,"display")=="none")return false;e=U(e);return!e||c(e)}function d(e){var g=Ma(e);if(g.height>0&&g.width>0)return true;if(e.innerText||e.textContent)if(Na.test(e.innerText||e.textContent))return true;return A&&oa(e.childNodes,function(h){return S(h)&&d(h)})}if(!S(a))throw Error("Argument to isShown must be of type Element");if(S(a,"TITLE"))return(F(a)?F(a).parentWindow||F(a).defaultView:window)==Da;if(S(a,"OPTION")||S(a,"OPTGROUP")){var f=wa(a,function(e){return S(e, -"SELECT")});return!!f&&W(f)}if(S(a,"MAP")){if(!a.name)return false;f=F(a);f=f.evaluate?P.d('/descendant::*[@usemap = "#'+a.name+'"]',f):ua(f,function(e){return S(e)&&T(e,"usemap")=="#"+a.name});return!!f&&W(f)}if(S(a,"AREA")){f=wa(a,function(e){return S(e,"MAP")});return!!f&&W(f)}if(S(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(V(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&Ra(a)==0)return false;if(!d(a))return false;return true} -function Sa(a){var b=[];Ta(a,b);b=w(b,q);return q(b.join("\n"))}function Ta(a,b){if(S(a,"BR"))b.push("");else{var c=Ua(a);c&&b[b.length-1]&&b.push("");na(a.childNodes,function(d){if(d.nodeType==3){var f=U(d);if(f){W(f);if(f&&W(f)){d=d.nodeValue.replace(Va," ");f=b.pop()||"";var e=f.length-1;if(e>=0&&f.indexOf(" ",e)==e&&d.lastIndexOf(" ",0)==0)d=d.substr(1);b.push(f+d)}}}else S(d)&&Ta(d,b)});c&&b[b.length-1]&&b.push("")}}function Ua(a){a=V(a,"display");return a=="block"||a=="list-item"} -var Wa="[\\s\\xa0"+String.fromCharCode(160)+"]+",Va=RegExp(Wa,"g"),Na=RegExp("^"+Wa+"$");function Ra(a){var b=1,c=V(a,"opacity");if(c)b=Number(c);if(a=U(a))b*=Ra(a);return b};var Xa={};Xa.d=function(a,b){var c=D(b),d=k(a)?c.g.getElementById(a):a;if(!d)return null;if(T(d,"id")==a&&H(b,d))return d;c=I(c,"*");return x(c,function(f){return T(f,"id")==a&&H(b,f)})};Xa.b=function(a,b){var c=I(D(b),"*",null,b);return v(c,function(d){return T(d,"id")==a})};var X={},Ya={};X.i=function(a,b,c){b=I(D(b),"A",null,b);return x(b,function(d){d=Sa(d);return c&&d.indexOf(a)!=-1||d==a})};X.h=function(a,b,c){b=I(D(b),"A",null,b);return v(b,function(d){d=Sa(d);return c&&d.indexOf(a)!=-1||d==a})};X.d=function(a,b){return X.i(a,b,false)};X.b=function(a,b){return X.h(a,b,false)};Ya.d=function(a,b){return X.i(a,b,true)};Ya.b=function(a,b){return X.h(a,b,true)};var Za={};Za.d=function(a,b){var c=I(D(b),"*",null,b);return x(c,function(d){return T(d,"name")==a})};Za.b=function(a,b){var c=I(D(b),"*",null,b);return v(c,function(d){return T(d,"name")==a})};var $a={};$a.d=function(a,b){return I(D(b),a,null,b)[0]||null};$a.b=function(a,b){return I(D(b),a,null,b)};var ab={className:N,css:O,id:Xa,linkText:X,name:Za,partialLinkText:Ya,tagName:$a,xpath:P};function bb(a,b){var c;a:{for(c in a)if(!Object.prototype[c]){c=c;break a}c=null}if(c){var d=ab[c];if(d&&l(d.b))return d.b(a[c],b||F(Da))}throw Error("Unsupported locator strategy: "+c);};function cb(a,b,c){var d={};d[a]=b;a=bb;c=[d,c];var f;try{if(k(a))a=new Function(a);var e=M(c),g=a.apply(null,e);f={status:0,value:L(g)}}catch(h){f={status:"code"in h?h.code:13,value:{message:h.message}}}e=[];J(new xa,f,e);return e.join("")}var Y="_".split("."),Z=i;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&cb!==undefined)Z[$]=cb;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/get_attribute_value_android.js b/core/res/res/raw/get_attribute_value_android.js deleted file mode 100644 index dc43fa7..0000000 --- a/core/res/res/raw/get_attribute_value_android.js +++ /dev/null @@ -1,26 +0,0 @@ -function(){return function(){var h,n=this;function p(){} -function q(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function aa(a){var b=q(a);return b=="array"||b=="object"&&typeof a.length=="number"}function r(a){return typeof a=="string"}function s(a){a=q(a);return a=="object"||a=="array"||a=="function"}function u(a){return a[ba]||(a[ba]=++ca)}var ba="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36),ca=0,da=Date.now||function(){return+new Date}; -function v(a,b){function c(){}c.prototype=b.prototype;a.q=b.prototype;a.prototype=new c};function w(a){this.stack=Error().stack||"";if(a)this.message=String(a)}v(w,Error);w.prototype.name="CustomError";function ea(a,b,c){var d={};for(var e in a)if(b.call(c,a[e],e,a))d[e]=a[e];return d}function fa(a,b,c){var d={};for(var e in a)d[e]=b.call(c,a[e],e,a);return d}function ga(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function x(a,b){w.call(this,b);this.code=a;this.name=y[a]||y[13]}v(x,w);var y,ha={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ia={};for(var ja in ha)ia[ha[ja]]=ja;y=ia; -x.prototype.toString=function(){return"["+this.name+"] "+this.message};function ka(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}function z(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")} -function la(a,b){var c=0,d=z(String(a)).split("."),e=z(String(b)).split("."),f=Math.max(d.length,e.length);for(var g=0;c==0&&g<f;g++){var i=d[g]||"",l=e[g]||"",j=RegExp("(\\d*)(\\D*)","g"),t=RegExp("(\\d*)(\\D*)","g");do{var m=j.exec(i)||["","",""],k=t.exec(l)||["","",""];if(m[0].length==0&&k[0].length==0)break;c=A(m[1].length==0?0:parseInt(m[1],10),k[1].length==0?0:parseInt(k[1],10))||A(m[2].length==0,k[2].length==0)||A(m[2],k[2])}while(c==0)}return c} -function A(a,b){if(a<b)return-1;else if(a>b)return 1;return 0};function B(a,b){b.unshift(a);w.call(this,ka.apply(null,b));b.shift();this.J=a}v(B,w);B.prototype.name="AssertionError";function C(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}throw new B(""+d,e||[]);}return a};var D=Array.prototype,E=D.indexOf?function(a,b,c){C(a.length!=null);return D.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(r(a)){if(!r(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},F=D.map?function(a,b,c){C(a.length!=null);return D.map.call(a,b,c)}:function(a,b,c){var d=a.length,e=Array(d),f=r(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in f)e[g]=b.call(c,f[g],g,a);return e};var ma=n.navigator,na=(ma&&ma.platform||"").indexOf("Mac")!=-1,oa="",pa;if(pa=/WebKit\/(\S+)/){var qa=pa.exec(n.navigator?n.navigator.userAgent:null);oa=qa?qa[1]:""};var G="StopIteration"in n?n.StopIteration:Error("StopIteration");function ra(){}ra.prototype.next=function(){throw G;};function H(a,b,c,d,e){this.a=!!b;a&&I(this,a,d);this.h=e!=undefined?e:this.d||0;if(this.a)this.h*=-1;this.C=!c}v(H,ra);h=H.prototype;h.c=null;h.d=0;h.B=false;function I(a,b,c,d){if(a.c=b)a.d=typeof c=="number"?c:a.c.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.h=d} -h.next=function(){var a;if(this.B){if(!this.c||this.C&&this.h==0)throw G;a=this.c;var b=this.a?-1:1;if(this.d==b){var c=this.a?a.lastChild:a.firstChild;c?I(this,c):I(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?I(this,c):I(this,a.parentNode,b*-1);this.h+=this.d*(this.a?-1:1)}else this.B=true;a=this.c;if(!this.c)throw G;return a}; -h.splice=function(){var a=this.c,b=this.a?1:-1;if(this.d==b){this.d=b*-1;this.h+=this.d*(this.a?-1:1)}this.a=!this.a;H.prototype.next.call(this);this.a=!this.a;b=aa(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function J(a,b,c,d){H.call(this,a,b,c,null,d)}v(J,H);J.prototype.next=function(){do J.q.next.call(this);while(this.d==-1);return this.c};var sa={"class":"className",readonly:"readOnly"},ta=["checked","disabled","draggable","hidden"],ua=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking", -"selected","spellcheck","truespeed","willvalidate"];function va(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=z(a.style.cssText).toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(E(ua,b)>=0)return"true";return c.specified?c.value:null}String.fromCharCode(160);var K;var wa=[];function L(){if(xa)M[u(this)]=this}var xa=false,M={};L.prototype.t=false;L.prototype.k=function(){if(!this.t){this.t=true;this.g();if(xa){var a=u(this);if(!M.hasOwnProperty(a))throw Error(this+" did not call the goog.Disposable base constructor or was disposed of after a clearUndisposedObjects call");delete M[a]}}};L.prototype.g=function(){};function N(a,b){L.call(this);this.type=a;this.currentTarget=this.target=b}v(N,L);N.prototype.g=function(){delete this.type;delete this.target;delete this.currentTarget};N.prototype.p=false;N.prototype.G=true;new Function("a","return a");function O(a,b){a&&this.m(a,b)}v(O,N);h=O.prototype;h.target=null;h.relatedTarget=null;h.offsetX=0;h.offsetY=0;h.clientX=0;h.clientY=0;h.screenX=0;h.screenY=0;h.button=0;h.keyCode=0;h.charCode=0;h.ctrlKey=false;h.altKey=false;h.shiftKey=false;h.metaKey=false;h.F=false;h.u=null; -h.m=function(a,b){var c=this.type=a.type;N.call(this,c);this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;if(!d)if(c=="mouseover")d=a.fromElement;else if(c=="mouseout")d=a.toElement;this.relatedTarget=d;this.offsetX=a.offsetX!==undefined?a.offsetX:a.layerX;this.offsetY=a.offsetY!==undefined?a.offsetY:a.layerY;this.clientX=a.clientX!==undefined?a.clientX:a.pageX;this.clientY=a.clientY!==undefined?a.clientY:a.pageY;this.screenX=a.screenX||0;this.screenY=a.screenY||0;this.button= -a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||(c=="keypress"?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.F=na?a.metaKey:a.ctrlKey;this.H=a.H;this.u=a;delete this.G;delete this.p};h.g=function(){O.q.g.call(this);this.relatedTarget=this.currentTarget=this.target=this.u=null};function ya(){}var za=0;h=ya.prototype;h.key=0;h.j=false;h.r=false;h.m=function(a,b,c,d,e,f){if(q(a)=="function")this.v=true;else if(a&&a.handleEvent&&q(a.handleEvent)=="function")this.v=false;else throw Error("Invalid listener argument");this.n=a;this.A=b;this.src=c;this.type=d;this.capture=!!e;this.D=f;this.r=false;this.key=++za;this.j=false};h.handleEvent=function(a){if(this.v)return this.n.call(this.D||this.src,a);return this.n.handleEvent.call(this.n,a)};function P(a,b){L.call(this);this.w=b;this.e=[];if(a>this.w)throw Error("[goog.structs.SimplePool] Initial cannot be greater than max");for(var c=0;c<a;c++)this.e.push(this.b?this.b():{})}v(P,L);P.prototype.b=null;P.prototype.s=null;function Aa(a){if(a.e.length)return a.e.pop();return a.b?a.b():{}}function Q(a,b){a.e.length<a.w?a.e.push(b):Ba(a,b)}function Ba(a,b){if(a.s)a.s(b);else if(s(b))if(q(b.k)=="function")b.k();else for(var c in b)delete b[c]} -P.prototype.g=function(){P.q.g.call(this);for(var a=this.e;a.length;)Ba(this,a.pop());delete this.e};var Ca;var Da=(Ca="ScriptEngine"in n&&n.ScriptEngine()=="JScript")?n.ScriptEngineMajorVersion()+"."+n.ScriptEngineMinorVersion()+"."+n.ScriptEngineBuildVersion():"0";var R,S,T,Ea,Fa,Ga,Ha,Ia; -(function(){function a(){return{f:0,i:0}}function b(){return[]}function c(){function k(o){return g.call(k.src,k.key,o)}return k}function d(){return new ya}function e(){return new O}var f=Ca&&!(la(Da,"5.7")>=0),g;Ea=function(k){g=k};if(f){R=function(k){Q(i,k)};S=function(){return Aa(l)};T=function(k){Q(l,k)};Fa=function(){Q(j,c())};Ga=function(k){Q(t,k)};Ha=function(){return Aa(m)};Ia=function(k){Q(m,k)};var i=new P(0,600);i.b=a;var l=new P(0,600);l.b=b;var j=new P(0,600);j.b=c;var t=new P(0,600); -t.b=d;var m=new P(0,600);m.b=e}else{R=p;S=b;Ga=Fa=T=p;Ha=e;Ia=p}})();var U={},V={},Ja={},Ka={};function La(a,b,c,d){if(!d.l)if(d.z){var e=0;for(var f=0;e<d.length;e++)if(d[e].j){var g=d[e].A;g.src=null;Fa(g);Ga(d[e])}else{if(e!=f)d[f]=d[e];f++}d.length=f;d.z=false;if(f==0){T(d);delete V[a][b][c];V[a][b].f--;if(V[a][b].f==0){R(V[a][b]);delete V[a][b];V[a].f--}if(V[a].f==0){R(V[a]);delete V[a]}}}}function Ma(a){if(a in Ka)return Ka[a];return Ka[a]="on"+a} -function Na(a,b,c,d,e){var f=1;b=u(b);if(a[b]){a.i--;a=a[b];if(a.l)a.l++;else a.l=1;try{var g=a.length;for(var i=0;i<g;i++){var l=a[i];if(l&&!l.j)f&=Oa(l,e)!==false}}finally{a.l--;La(c,d,b,a)}}return Boolean(f)} -function Oa(a,b){var c=a.handleEvent(b);if(a.r){var d=a.key;if(U[d]){var e=U[d];if(!e.j){var f=e.src,g=e.type,i=e.A,l=e.capture;if(f.removeEventListener){if(f==n||!f.I)f.removeEventListener(g,i,l)}else f.detachEvent&&f.detachEvent(Ma(g),i);f=u(f);i=V[g][l][f];if(Ja[f]){var j=Ja[f],t=E(j,e);if(t>=0){C(j.length!=null);D.splice.call(j,t,1)}j.length==0&&delete Ja[f]}e.j=true;i.z=true;La(g,l,f,i);delete U[d]}}}return c} -function W(a,b){if(!U[a])return true;var c=U[a],d=c.type,e=V;if(!(d in e))return true;e=e[d];var f,g;if(K===undefined)K=false;if(K){var i;if(!(i=b))a:{i="window.event".split(".");var l=n;for(;f=i.shift();)if(l[f]!=null)l=l[f];else{i=null;break a}i=l}f=i;i=true in e;l=false in e;if(i){if(f.keyCode<0||f.returnValue!=undefined)return true;a:{var j=false;if(f.keyCode==0)try{f.keyCode=-1;break a}catch(t){j=true}if(j||f.returnValue==undefined)f.returnValue=true}}j=Ha();j.m(f,this);f=true;try{if(i){var m= -S();for(var k=j.currentTarget;k;k=k.parentNode)m.push(k);g=e[true];g.i=g.f;for(var o=m.length-1;!j.p&&o>=0&&g.i;o--){j.currentTarget=m[o];f&=Na(g,m[o],d,true,j)}if(l){g=e[false];g.i=g.f;for(o=0;!j.p&&o<m.length&&g.i;o++){j.currentTarget=m[o];f&=Na(g,m[o],d,false,j)}}}else f=Oa(c,j)}finally{if(m){m.length=0;T(m)}j.k();Ia(j)}return f}d=new O(b,this);try{f=Oa(c,d)}finally{d.k()}return f}Ea(W);wa[wa.length]=function(a){W=a(W);Ea(W)};function Pa(){} -function Qa(a,b,c){switch(typeof b){case "string":Ra(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(q(b)=="array"){var d=b.length;c.push("[");var e="";for(var f=0;f<d;f++){c.push(e);Qa(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(Object.prototype.hasOwnProperty.call(b,e)){f=b[e];if(typeof f!="function"){c.push(d);Ra(a,e,c);c.push(":"); -Qa(a,f,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var Sa={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},Ta=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function Ra(a,b,c){c.push('"',b.replace(Ta,function(d){if(d in Sa)return Sa[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return Sa[d]=f+e.toString(16)}),'"')};function X(a){switch(q(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return F(a,X);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Ua(a);return b}if(aa(a))return F(a,X);a=ea(a,function(c,d){return typeof d=="number"||r(d)});return fa(a,X);default:return null}} -function Va(a,b){if(q(a)=="array")return F(a,function(c){return Va(c,b)});else if(s(a))return"ELEMENT"in a?Wa(a.ELEMENT,b):fa(a,function(c){return Va(c,b)});return a}function Xa(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.o=da()}if(!b.o)b.o=da();return b}function Ua(a){var b=Xa(a.ownerDocument),c=ga(b,function(d){return d==a});if(!c){c=":wdc:"+b.o++;b[c]=a}return c} -function Wa(a,b){a=decodeURIComponent(a);var c=b||document,d=Xa(c);if(!(a in d))throw new x(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==c.documentElement)return e;f=f.parentNode}delete d[a];throw new x(10,"Element is no longer attached to the DOM");};var Ya=["checkbox","radio"];function Za(a){var b=a.tagName.toUpperCase();if(b=="OPTION")return true;if(b=="INPUT")if(E(Ya,a.type)>=0)return true;return false} -function $a(a,b){var c=null;c=b.toLowerCase();if("style"==b.toLowerCase()){if((c=a.style)&&!r(c))c=c.cssText;return c}if("selected"==c||"checked"==c&&Za(a)){var d;if(Za(a)){d="selected";var e=a.type&&a.type.toLowerCase();if("checkbox"==e||"radio"==e)d="checked";d=!!a[d]}else d=false;return d?"true":null}var f=a.tagName&&"A"==a.tagName.toUpperCase(),g=a.tagName&&"IMG"==a.tagName.toUpperCase();try{e=sa[b]||b;var i=a[e];d=i===undefined&&E(ta,e)>=0?false:i}catch(l){}c=c=="href"&&f||c=="src"&&g||d==null|| -s(d)?va(a,b):d;return c!=null?c.toString():null};function ab(a,b){var c=$a,d=[a,b],e;try{if(r(c))c=new Function(c);var f=Va(d),g=c.apply(null,f);e={status:0,value:X(g)}}catch(i){e={status:"code"in i?i.code:13,value:{message:i.message}}}c=[];Qa(new Pa,e,c);return c.join("")}var Y="_".split("."),Z=n;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&ab!==undefined)Z[$]=ab;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/get_size_android.js b/core/res/res/raw/get_size_android.js deleted file mode 100644 index 54c2678..0000000 --- a/core/res/res/raw/get_size_android.js +++ /dev/null @@ -1,11 +0,0 @@ -function(){return function(){function g(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function h(a){var b=g(a);return b=="array"||b=="object"&&typeof a.length=="number"}function i(a){a=g(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var j=Date.now||function(){return+new Date};function l(a,b){function c(){}c.prototype=b.prototype;a.h=b.prototype;a.prototype=new c};function m(a){this.stack=Error().stack||"";if(a)this.message=String(a)}l(m,Error);m.prototype.name="CustomError";function n(a,b,c){var d={};for(var e in a)if(b.call(c,a[e],e,a))d[e]=a[e];return d}function o(a,b,c){var d={};for(var e in a)d[e]=b.call(c,a[e],e,a);return d}function p(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function q(a,b){m.call(this,b);this.code=a;this.name=r[a]||r[13]}l(q,m);var r,s={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},t={};for(var u in s)t[s[u]]=u;r=t; -q.prototype.toString=function(){return"["+this.name+"] "+this.message};function v(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a};function w(a,b){b.unshift(a);m.call(this,v.apply(null,b));b.shift();this.i=a}l(w,m);w.prototype.name="AssertionError";function x(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}throw new w(""+d,e||[]);}return a};var y=Array.prototype,z=y.map?function(a,b,c){x(a.length!=null);return y.map.call(a,b,c)}:function(a,b,c){var d=a.length,e=Array(d),f=typeof a=="string"?a.split(""):a;for(var k=0;k<d;k++)if(k in f)e[k]=b.call(c,f[k],k,a);return e};var A="",B;if(B=/WebKit\/(\S+)/){var C=B.exec(this.navigator?this.navigator.userAgent:null);A=C?C[1]:""};function D(a,b){this.width=a;this.height=b}D.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};D.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};var E="StopIteration"in this?this.StopIteration:Error("StopIteration");function F(){}F.prototype.next=function(){throw E;};function G(a,b,c,d,e){this.a=!!b;a&&H(this,a,d);this.d=e!=undefined?e:this.c||0;if(this.a)this.d*=-1;this.f=!c}l(G,F);G.prototype.b=null;G.prototype.c=0;G.prototype.e=false;function H(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -G.prototype.next=function(){var a;if(this.e){if(!this.b||this.f&&this.d==0)throw E;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?H(this,c):H(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?H(this,c):H(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.e=true;a=this.b;if(!this.b)throw E;return a}; -G.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;G.prototype.next.call(this);this.a=!this.a;b=h(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function I(a,b,c,d){G.call(this,a,b,c,null,d)}l(I,G);I.prototype.next=function(){do I.h.next.call(this);while(this.c==-1);return this.b};function J(a){if(g(a.getBBox)=="function")return a.getBBox();var b;b:{b=a.nodeType==9?a:a.ownerDocument||a.document;if(b.defaultView&&b.defaultView.getComputedStyle)if(b=b.defaultView.getComputedStyle(a,null)){b=b.display||b.getPropertyValue("display");break b}b=""}if((b||(a.currentStyle?a.currentStyle.display:null)||a.style.display)!="none")a=new D(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,e=b.position;b.visibility="hidden";b.position="absolute";b.display="inline"; -var f;f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;a=new D(f,a)}return a}String.fromCharCode(160);function K(){} -function L(a,b,c){switch(typeof b){case "string":M(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(g(b)=="array"){var d=b.length;c.push("[");var e="";for(var f=0;f<d;f++){c.push(e);L(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(Object.prototype.hasOwnProperty.call(b,e)){f=b[e];if(typeof f!="function"){c.push(d);M(a,e,c);c.push(":");L(a, -f,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var N={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},O=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function M(a,b,c){c.push('"',b.replace(O,function(d){if(d in N)return N[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return N[d]=f+e.toString(16)}),'"')};function P(a){switch(g(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return z(a,P);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Q(a);return b}if(h(a))return z(a,P);a=n(a,function(c,d){return typeof d=="number"||typeof d=="string"});return o(a,P);default:return null}} -function R(a,b){if(g(a)=="array")return z(a,function(c){return R(c,b)});else if(i(a))return"ELEMENT"in a?S(a.ELEMENT,b):o(a,function(c){return R(c,b)});return a}function T(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.g=j()}return b}function Q(a){var b=T(a.ownerDocument),c=p(b,function(d){return d==a});if(!c){c=":wdc:"+b.g++;b[c]=a}return c} -function S(a,b){a=decodeURIComponent(a);var c=b||document,d=T(c);if(!(a in d))throw new q(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==c.documentElement)return e;f=f.parentNode}delete d[a];throw new q(10,"Element is no longer attached to the DOM");};function U(a){var b=J;a=[a];var c;try{if(typeof b=="string")b=new Function(b);var d=R(a),e=b.apply(null,d);c={status:0,value:P(e)}}catch(f){c={status:"code"in f?f.code:13,value:{message:f.message}}}b=[];L(new K,c,b);return b.join("")}var V="_".split("."),W=this;!(V[0]in W)&&W.execScript&&W.execScript("var "+V[0]);for(var X;V.length&&(X=V.shift());)if(!V.length&&U!==undefined)W[X]=U;else W=W[X]?W[X]:W[X]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/get_text_android.js b/core/res/res/raw/get_text_android.js deleted file mode 100644 index f74cb37..0000000 --- a/core/res/res/raw/get_text_android.js +++ /dev/null @@ -1,21 +0,0 @@ -function(){return function(){var g=this; -function i(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function j(a){var b=i(a);return b=="array"||b=="object"&&typeof a.length=="number"}function k(a){return typeof a=="string"}function aa(a){a=i(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var ba=Date.now||function(){return+new Date};function l(a,b){function c(){}c.prototype=b.prototype;a.i=b.prototype;a.prototype=new c};var ca=window;function da(){var a=g.Components;if(!a)return false;try{a.j["@mozilla.org/uuid-generator;1"].k(a.g.n);return true}catch(b){return false}};function m(a){this.stack=Error().stack||"";if(a)this.message=String(a)}l(m,Error);m.prototype.name="CustomError";function ea(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function n(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function fa(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function o(a,b){m.call(this,b);this.code=a;this.name=p[a]||p[13]}l(o,m);var p,r={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},s={};for(var t in r)s[r[t]]=t;p=s; -o.prototype.toString=function(){return"["+this.name+"] "+this.message};function ga(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}function u(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}var v={};function ha(a){return v[a]||(v[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function w(a,b){b.unshift(a);m.call(this,ga.apply(null,b));b.shift();this.l=a}l(w,m);w.prototype.name="AssertionError";function x(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new w(""+d,f||[]);}return a};var y=Array.prototype,ia=y.indexOf?function(a,b,c){x(a.length!=null);return y.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(k(a)){if(!k(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},ja=y.forEach?function(a,b,c){x(a.length!=null);y.forEach.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)e in f&&b.call(c,f[e],e,a)},z=y.map?function(a,b,c){x(a.length!=null);return y.map.call(a, -b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=k(a)?a.split(""):a;for(var h=0;h<d;h++)if(h in e)f[h]=b.call(c,e[h],h,a);return f},ka=y.some?function(a,b,c){x(a.length!=null);return y.some.call(a,b,c)}:function(a,b,c){var d=a.length,f=k(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c,f[e],e,a))return true;return false};var A=true,la="",B;if(A)B=/WebKit\/(\S+)/;if(B){var C=B.exec(g.navigator?g.navigator.userAgent:null);la=C?C[1]:""};function D(a,b){this.width=a;this.height=b}D.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};D.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};function E(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ma(a,b){var c=[];return F(a,b,c,true)?c[0]:undefined}function F(a,b,c,d){if(a!=null){var f=0;for(var e;e=a.childNodes[f];f++){if(b(e)){c.push(e);if(d)return true}if(F(e,b,c,d))return true}}return false}function G(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null};function na(a,b){var c=function(d,f){var e=E(d);if(d.selectSingleNode){e.setProperty&&e.setProperty("SelectionLanguage","XPath");return d.selectSingleNode(f)}else if(e.implementation.hasFeature("XPath","3.0")){var h=e.createNSResolver(e.documentElement),q;if(typeof XPathResult!="undefined")q=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!da())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");q=Components.g.m.FIRST_ORDERED_NODE_TYPE}return e.evaluate(f, -d,h,q,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};var H="StopIteration"in g?g.StopIteration:Error("StopIteration");function I(){}I.prototype.next=function(){throw H;};function J(a,b,c,d,f){this.a=!!b;a&&K(this,a,d);this.d=f!=undefined?f:this.c||0;if(this.a)this.d*=-1;this.f=!c}l(J,I);J.prototype.b=null;J.prototype.c=0;J.prototype.e=false;function K(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -J.prototype.next=function(){var a;if(this.e){if(!this.b||this.f&&this.d==0)throw H;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?K(this,c):K(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?K(this,c):K(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.e=true;a=this.b;if(!this.b)throw H;return a}; -J.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;J.prototype.next.call(this);this.a=!this.a;b=j(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function L(a,b,c,d){J.call(this,a,b,c,null,d)}l(L,J);L.prototype.next=function(){do L.i.next.call(this);while(this.c==-1);return this.b};function M(a,b){var c=E(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""};function N(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var oa=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"]; -function pa(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=u(a.style.cssText).toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(ia(oa,b)>=0)return"true";return c.specified?c.value:null}function O(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return N(a)?a:null}function P(a,b){b=ha(String(b));return M(a,b)||Q(a,b)} -function Q(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=O(a))?Q(c,b):null} -function qa(a){if(i(a.getBBox)=="function")return a.getBBox();var b;if((M(a,"display")||(a.currentStyle?a.currentStyle.display:null)||a.style.display)!="none")b=new D(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var e;e=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=d;b=new D(e,a)}return b} -function R(a,b){function c(e){if(P(e,"display")=="none")return false;e=O(e);return!e||c(e)}function d(e){var h=qa(e);if(h.height>0&&h.width>0)return true;if(e.innerText||e.textContent)if(ra.test(e.innerText||e.textContent))return true;return A&&ka(e.childNodes,function(q){return N(q)&&d(q)})}if(!N(a))throw Error("Argument to isShown must be of type Element");if(N(a,"TITLE"))return(E(a)?E(a).parentWindow||E(a).defaultView:window)==ca;if(N(a,"OPTION")||N(a,"OPTGROUP")){var f=G(a,function(e){return N(e, -"SELECT")});return!!f&&R(f)}if(N(a,"MAP")){if(!a.name)return false;f=E(a);f=f.evaluate?na('/descendant::*[@usemap = "#'+a.name+'"]',f):ma(f,function(e){return N(e)&&pa(e,"usemap")=="#"+a.name});return!!f&&R(f)}if(N(a,"AREA")){f=G(a,function(e){return N(e,"MAP")});return!!f&&R(f)}if(N(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(P(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&S(a)==0)return false;if(!d(a))return false;return true} -function sa(a){var b=[];T(a,b);b=z(b,u);return u(b.join("\n"))}function T(a,b){if(N(a,"BR"))b.push("");else{var c=ta(a);c&&b[b.length-1]&&b.push("");ja(a.childNodes,function(d){if(d.nodeType==3){var f=O(d);if(f){R(f);if(f&&R(f)){d=d.nodeValue.replace(ua," ");f=b.pop()||"";var e=f.length-1;if(e>=0&&f.indexOf(" ",e)==e&&d.lastIndexOf(" ",0)==0)d=d.substr(1);b.push(f+d)}}}else N(d)&&T(d,b)});c&&b[b.length-1]&&b.push("")}}function ta(a){a=P(a,"display");return a=="block"||a=="list-item"} -var va="[\\s\\xa0"+String.fromCharCode(160)+"]+",ua=RegExp(va,"g"),ra=RegExp("^"+va+"$");function S(a){var b=1,c=P(a,"opacity");if(c)b=Number(c);if(a=O(a))b*=S(a);return b};function wa(){} -function U(a,b,c){switch(typeof b){case "string":xa(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(i(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);U(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);xa(a,f,c);c.push(":");U(a, -e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var V={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},ya=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function xa(a,b,c){c.push('"',b.replace(ya,function(d){if(d in V)return V[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return V[d]=e+f.toString(16)}),'"')};function W(a){switch(i(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return z(a,W);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=za(a);return b}if(j(a))return z(a,W);a=ea(a,function(c,d){return typeof d=="number"||k(d)});return n(a,W);default:return null}} -function X(a,b){if(i(a)=="array")return z(a,function(c){return X(c,b)});else if(aa(a))return"ELEMENT"in a?Aa(a.ELEMENT,b):n(a,function(c){return X(c,b)});return a}function Ba(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.h=ba()}return b}function za(a){var b=Ba(a.ownerDocument),c=fa(b,function(d){return d==a});if(!c){c=":wdc:"+b.h++;b[c]=a}return c} -function Aa(a,b){a=decodeURIComponent(a);var c=b||document,d=Ba(c);if(!(a in d))throw new o(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new o(10,"Element is no longer attached to the DOM");};function Ca(a){var b=sa;a=[a];var c;try{if(k(b))b=new Function(b);var d=X(a),f=b.apply(null,d);c={status:0,value:W(f)}}catch(e){c={status:"code"in e?e.code:13,value:{message:e.message}}}b=[];U(new wa,c,b);return b.join("")}var Y="_".split("."),Z=g;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&Ca!==undefined)Z[$]=Ca;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/get_top_left_coordinates_android.js b/core/res/res/raw/get_top_left_coordinates_android.js deleted file mode 100644 index 398f204..0000000 --- a/core/res/res/raw/get_top_left_coordinates_android.js +++ /dev/null @@ -1,18 +0,0 @@ -function(){return function(){var h=this; -function j(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function l(a){var b=j(a);return b=="array"||b=="object"&&typeof a.length=="number"}function aa(a){a=j(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var ba=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.j=b.prototype;a.prototype=new c};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function ca(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function o(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function da(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function p(a,b){n.call(this,b);this.code=a;this.name=q[a]||q[13]}m(p,n);var q,r={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},s={};for(var t in r)s[r[t]]=t;q=s; -p.prototype.toString=function(){return"["+this.name+"] "+this.message};function ea(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}function y(a,b){if(a<b)return-1;else if(a>b)return 1;return 0};function z(a,b){b.unshift(a);n.call(this,ea.apply(null,b));b.shift();this.k=a}m(z,n);z.prototype.name="AssertionError";function fa(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new z(""+d,f||[]);}return a};var A=Array.prototype,B=A.map?function(a,b,c){fa(a.length!=null);return A.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=typeof a=="string"?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f};var C,F="",G;if(G=/WebKit\/(\S+)/){var H=G.exec(h.navigator?h.navigator.userAgent:null);F=H?H[1]:""}C=F;var ga={};var ha;function I(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0}I.prototype.toString=function(){return"("+this.x+", "+this.y+")"};function J(a,b){this.width=a;this.height=b}J.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};J.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};function K(a){return a?new ia(L(a)):ha||(ha=new ia)}function L(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ia(a){this.e=a||h.document||document}function ja(a){a=a.e.body;return new I(a.scrollLeft,a.scrollTop)};var M="StopIteration"in h?h.StopIteration:Error("StopIteration");function ka(){}ka.prototype.next=function(){throw M;};function N(a,b,c,d,f){this.a=!!b;a&&O(this,a,d);this.d=f!=undefined?f:this.c||0;if(this.a)this.d*=-1;this.h=!c}m(N,ka);N.prototype.b=null;N.prototype.c=0;N.prototype.g=false;function O(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -N.prototype.next=function(){var a;if(this.g){if(!this.b||this.h&&this.d==0)throw M;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?O(this,c):O(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?O(this,c):O(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.g=true;a=this.b;if(!this.b)throw M;return a}; -N.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;N.prototype.next.call(this);this.a=!this.a;b=l(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function P(a,b,c,d){N.call(this,a,b,c,null,d)}m(P,N);P.prototype.next=function(){do P.j.next.call(this);while(this.c==-1);return this.b};function la(a,b,c,d){this.top=a;this.right=b;this.bottom=c;this.left=d}la.prototype.toString=function(){return"("+this.top+"t, "+this.right+"r, "+this.bottom+"b, "+this.left+"l)"};function Q(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d}Q.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};function R(a,b){var c=L(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""}function S(a,b){return R(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style[b]} -function ma(a){var b=L(a),c=S(a,"position"),d=c=="fixed"||c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=S(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return null} -function T(a){var b=L(a),c=S(a,"position"),d=new I(0,0),f=(b?b.nodeType==9?b:L(b):document).documentElement;if(a==f)return d;if(a.getBoundingClientRect){a=a.getBoundingClientRect();b=ja(K(b));d.x=a.left+b.x;d.y=a.top+b.y}else if(b.getBoxObjectFor){a=b.getBoxObjectFor(a);b=b.getBoxObjectFor(f);d.x=a.screenX-b.screenX;d.y=a.screenY-b.screenY}else{var e=a;do{d.x+=e.offsetLeft;d.y+=e.offsetTop;if(e!=a){d.x+=e.clientLeft||0;d.y+=e.clientTop||0}if(S(e,"position")=="fixed"){d.x+=b.body.scrollLeft;d.y+=b.body.scrollTop; -break}e=e.offsetParent}while(e&&e!=a);if(c=="absolute")d.y-=b.body.offsetTop;for(e=a;(e=ma(e))&&e!=b.body&&e!=f;){d.x-=e.scrollLeft;d.y-=e.scrollTop}}return d};String.fromCharCode(160);function na(a,b){b.scrollLeft+=Math.min(a.left,Math.max(a.left-a.width,0));b.scrollTop+=Math.min(a.top,Math.max(a.top-a.height,0))} -function oa(a,b){var c;c=b?new Q(b.left,b.top,b.width,b.height):new Q(0,0,a.offsetWidth,a.offsetHeight);var d=L(a);for(var f=a.parentNode;f&&f!=d.body&&f!=d.documentElement;){var e=c,g=f,u=T(a),v=T(g),i=void 0;i=void 0;var k=void 0,D=void 0,E=void 0;E=R(g,"borderLeftWidth");D=R(g,"borderRightWidth");k=R(g,"borderTopWidth");i=R(g,"borderBottomWidth");i=new la(parseFloat(k),parseFloat(D),parseFloat(i),parseFloat(E));na(new Q(u.x+e.left-v.x-i.left,u.y+e.top-v.y-i.top,g.clientWidth-e.width,g.clientHeight- -e.height),g);f=f.parentNode}f=T(a);e=K(d);e=(e.e.parentWindow||e.e.defaultView||window).document;if(!ga["500"]){g=0;u=String(C).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split(".");v=String("500").replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split(".");i=Math.max(u.length,v.length);for(k=0;g==0&&k<i;k++){D=u[k]||"";E=v[k]||"";var sa=RegExp("(\\d*)(\\D*)","g"),ta=RegExp("(\\d*)(\\D*)","g");do{var w=sa.exec(D)||["","",""],x=ta.exec(E)||["","",""];if(w[0].length==0&&x[0].length==0)break;g=y(w[1].length==0?0:parseInt(w[1], -10),x[1].length==0?0:parseInt(x[1],10))||y(w[2].length==0,x[2].length==0)||y(w[2],x[2])}while(g==0)}ga["500"]=g>=0}e=e.compatMode=="CSS1Compat"?e.documentElement:e.body;e=new J(e.clientWidth,e.clientHeight);na(new Q(f.x+c.left-d.body.scrollLeft,f.y+c.top-d.body.scrollTop,e.width-c.width,e.height-c.height),d.body);d=new I;if(a.nodeType==1)if(a.getBoundingClientRect){f=a.getBoundingClientRect();d.x=f.left;d.y=f.top}else{f=ja(K(a));e=T(a);d.x=e.x-f.x;d.y=e.y-f.y}else{f=j(a.f)=="function";e=a;if(a.targetTouches)e= -a.targetTouches[0];else if(f&&a.f().targetTouches)e=a.f().targetTouches[0];d.x=e.clientX;d.y=e.clientY}return new I(d.x+c.left,d.y+c.top)};function pa(){} -function U(a,b,c){switch(typeof b){case "string":qa(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(j(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);U(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);qa(a,f,c);c.push(":");U(a, -e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var V={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},ra=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function qa(a,b,c){c.push('"',b.replace(ra,function(d){if(d in V)return V[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return V[d]=e+f.toString(16)}),'"')};function W(a){switch(j(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return B(a,W);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=ua(a);return b}if(l(a))return B(a,W);a=ca(a,function(c,d){return typeof d=="number"||typeof d=="string"});return o(a,W);default:return null}} -function X(a,b){if(j(a)=="array")return B(a,function(c){return X(c,b)});else if(aa(a))return"ELEMENT"in a?va(a.ELEMENT,b):o(a,function(c){return X(c,b)});return a}function wa(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.i=ba()}return b}function ua(a){var b=wa(a.ownerDocument),c=da(b,function(d){return d==a});if(!c){c=":wdc:"+b.i++;b[c]=a}return c} -function va(a,b){a=decodeURIComponent(a);var c=b||document,d=wa(c);if(!(a in d))throw new p(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new p(10,"Element is no longer attached to the DOM");};function xa(a){var b=oa;a=[a];var c;try{if(typeof b=="string")b=new Function(b);var d=X(a),f=b.apply(null,d);c={status:0,value:W(f)}}catch(e){c={status:"code"in e?e.code:13,value:{message:e.message}}}b=[];U(new pa,c,b);return b.join("")}var Y="_".split("."),Z=h;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&xa!==undefined)Z[$]=xa;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/get_value_of_css_property_android.js b/core/res/res/raw/get_value_of_css_property_android.js deleted file mode 100644 index 0989b04..0000000 --- a/core/res/res/raw/get_value_of_css_property_android.js +++ /dev/null @@ -1,10 +0,0 @@ -function(){return function(){function g(a){var c=typeof a;if(c=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return c;var b=Object.prototype.toString.call(a);if(b=="[object Window]")return"object";if(b=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(b=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(c=="function"&&typeof a.call=="undefined")return"object";return c}function i(a){var c=g(a);return c=="array"||c=="object"&&typeof a.length=="number"}function j(a){a=g(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var k=Date.now||function(){return+new Date};function l(a,c){function b(){}b.prototype=c.prototype;a.h=c.prototype;a.prototype=new b};function m(a){this.stack=Error().stack||"";if(a)this.message=String(a)}l(m,Error);m.prototype.name="CustomError";function n(a,c,b){var d={};for(var e in a)if(c.call(b,a[e],e,a))d[e]=a[e];return d}function o(a,c,b){var d={};for(var e in a)d[e]=c.call(b,a[e],e,a);return d}function p(a,c,b){for(var d in a)if(c.call(b,a[d],d,a))return d};function q(a,c){m.call(this,c);this.code=a;this.name=r[a]||r[13]}l(q,m);var r,s={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},t={};for(var u in s)t[s[u]]=u;r=t; -q.prototype.toString=function(){return"["+this.name+"] "+this.message};function v(a){for(var c=1;c<arguments.length;c++){var b=String(arguments[c]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,b)}return a};function w(a,c){c.unshift(a);m.call(this,v.apply(null,c));c.shift();this.i=a}l(w,m);w.prototype.name="AssertionError";function x(a,c){if(!a){var b=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(c){d+=": "+c;var e=b}throw new w(""+d,e||[]);}return a};var y=Array.prototype,A=y.map?function(a,c,b){x(a.length!=null);return y.map.call(a,c,b)}:function(a,c,b){var d=a.length,e=Array(d),f=typeof a=="string"?a.split(""):a;for(var h=0;h<d;h++)if(h in f)e[h]=c.call(b,f[h],h,a);return e};var B="",C;if(C=/WebKit\/(\S+)/){var D=C.exec(this.navigator?this.navigator.userAgent:null);B=D?D[1]:""};var E="StopIteration"in this?this.StopIteration:Error("StopIteration");function F(){}F.prototype.next=function(){throw E;};function G(a,c,b,d,e){this.a=!!c;a&&H(this,a,d);this.d=e!=undefined?e:this.c||0;if(this.a)this.d*=-1;this.f=!b}l(G,F);G.prototype.b=null;G.prototype.c=0;G.prototype.e=false;function H(a,c,b,d){if(a.b=c)a.c=typeof b=="number"?b:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -G.prototype.next=function(){var a;if(this.e){if(!this.b||this.f&&this.d==0)throw E;a=this.b;var c=this.a?-1:1;if(this.c==c){var b=this.a?a.lastChild:a.firstChild;b?H(this,b):H(this,a,c*-1)}else(b=this.a?a.previousSibling:a.nextSibling)?H(this,b):H(this,a.parentNode,c*-1);this.d+=this.c*(this.a?-1:1)}else this.e=true;a=this.b;if(!this.b)throw E;return a}; -G.prototype.splice=function(){var a=this.b,c=this.a?1:-1;if(this.c==c){this.c=c*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;G.prototype.next.call(this);this.a=!this.a;c=i(arguments[0])?arguments[0]:arguments;for(var b=c.length-1;b>=0;b--)a.parentNode&&a.parentNode.insertBefore(c[b],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function I(a,c,b,d){G.call(this,a,c,b,null,d)}l(I,G);I.prototype.next=function(){do I.h.next.call(this);while(this.c==-1);return this.b};function J(a,c){var b=(a.currentStyle||a.style)[c];if(b!="inherit")return b!==undefined?b:null;for(b=a.parentNode;b&&b.nodeType!=1&&b.nodeType!=9&&b.nodeType!=11;)b=b.parentNode;return(b=b&&b.nodeType==1&&1?b:null)?J(b,c):null}String.fromCharCode(160);function K(){} -function L(a,c,b){switch(typeof c){case "string":M(a,c,b);break;case "number":b.push(isFinite(c)&&!isNaN(c)?c:"null");break;case "boolean":b.push(c);break;case "undefined":b.push("null");break;case "object":if(c==null){b.push("null");break}if(g(c)=="array"){var d=c.length;b.push("[");var e="";for(var f=0;f<d;f++){b.push(e);L(a,c[f],b);e=","}b.push("]");break}b.push("{");d="";for(e in c)if(Object.prototype.hasOwnProperty.call(c,e)){f=c[e];if(typeof f!="function"){b.push(d);M(a,e,b);b.push(":");L(a, -f,b);d=","}}b.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof c);}}var N={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},O=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function M(a,c,b){b.push('"',c.replace(O,function(d){if(d in N)return N[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return N[d]=f+e.toString(16)}),'"')};function P(a){switch(g(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return A(a,P);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var c={};c.ELEMENT=Q(a);return c}if(i(a))return A(a,P);a=n(a,function(b,d){return typeof d=="number"||typeof d=="string"});return o(a,P);default:return null}} -function R(a,c){if(g(a)=="array")return A(a,function(b){return R(b,c)});else if(j(a))return"ELEMENT"in a?S(a.ELEMENT,c):o(a,function(b){return R(b,c)});return a}function T(a){a=a||document;var c=a.$wdc_;if(!c){c=a.$wdc_={};c.g=k()}return c}function Q(a){var c=T(a.ownerDocument),b=p(c,function(d){return d==a});if(!b){b=":wdc:"+c.g++;c[b]=a}return b} -function S(a,c){a=decodeURIComponent(a);var b=c||document,d=T(b);if(!(a in d))throw new q(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==b.documentElement)return e;f=f.parentNode}delete d[a];throw new q(10,"Element is no longer attached to the DOM");};function U(a,c){var b=J,d=[a,c],e;try{if(typeof b=="string")b=new Function(b);var f=R(d),h=b.apply(null,f);e={status:0,value:P(h)}}catch(z){e={status:"code"in z?z.code:13,value:{message:z.message}}}b=[];L(new K,e,b);return b.join("")}var V="_".split("."),W=this;!(V[0]in W)&&W.execScript&&W.execScript("var "+V[0]);for(var X;V.length&&(X=V.shift());)if(!V.length&&U!==undefined)W[X]=U;else W=W[X]?W[X]:W[X]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/is_displayed_android.js b/core/res/res/raw/is_displayed_android.js deleted file mode 100644 index 154e319..0000000 --- a/core/res/res/raw/is_displayed_android.js +++ /dev/null @@ -1,20 +0,0 @@ -function(){return function(){var g=this; -function i(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function j(a){var b=i(a);return b=="array"||b=="object"&&typeof a.length=="number"}function k(a){return typeof a=="string"}function aa(a){a=i(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var l=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.i=b.prototype;a.prototype=new c};var ba=window;function ca(){var a=g.Components;if(!a)return false;try{a.j["@mozilla.org/uuid-generator;1"].k(a.h.n);return true}catch(b){return false}};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function da(a,b,c){var e={};for(var f in a)if(b.call(c,a[f],f,a))e[f]=a[f];return e}function o(a,b,c){var e={};for(var f in a)e[f]=b.call(c,a[f],f,a);return e}function ea(a,b,c){for(var e in a)if(b.call(c,a[e],e,a))return e};function p(a,b){n.call(this,b);this.code=a;this.name=r[a]||r[13]}m(p,n);var r,s={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},t={};for(var u in s)t[s[u]]=u;r=t; -p.prototype.toString=function(){return"["+this.name+"] "+this.message};function fa(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}var v={};function ga(a){return v[a]||(v[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function w(a,b){b.unshift(a);n.call(this,fa.apply(null,b));b.shift();this.l=a}m(w,n);w.prototype.name="AssertionError";function x(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),e="Assertion failed";if(b){e+=": "+b;var f=c}throw new w(""+e,f||[]);}return a};var y=Array.prototype,ha=y.indexOf?function(a,b,c){x(a.length!=null);return y.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(k(a)){if(!k(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},z=y.map?function(a,b,c){x(a.length!=null);return y.map.call(a,b,c)}:function(a,b,c){var e=a.length,f=Array(e),d=k(a)?a.split(""):a;for(var h=0;h<e;h++)if(h in d)f[h]=b.call(c,d[h],h,a);return f},ia=y.some?function(a,b,c){x(a.length!= -null);return y.some.call(a,b,c)}:function(a,b,c){var e=a.length,f=k(a)?a.split(""):a;for(var d=0;d<e;d++)if(d in f&&b.call(c,f[d],d,a))return true;return false};var A=true,ja="",B;if(A)B=/WebKit\/(\S+)/;if(B){var C=B.exec(g.navigator?g.navigator.userAgent:null);ja=C?C[1]:""};function D(a,b){this.width=a;this.height=b}D.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};D.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};function E(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ka(a,b){var c=[];return F(a,b,c,true)?c[0]:undefined}function F(a,b,c,e){if(a!=null){var f=0;for(var d;d=a.childNodes[f];f++){if(b(d)){c.push(d);if(e)return true}if(F(d,b,c,e))return true}}return false}function G(a,b,c,e){if(!c)a=a.parentNode;c=e==null;for(var f=0;a&&(c||f<=e);){if(b(a))return a;a=a.parentNode;f++}return null};function la(a,b){var c=function(e,f){var d=E(e);if(e.selectSingleNode){d.setProperty&&d.setProperty("SelectionLanguage","XPath");return e.selectSingleNode(f)}else if(d.implementation.hasFeature("XPath","3.0")){var h=d.createNSResolver(d.documentElement),q;if(typeof XPathResult!="undefined")q=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!ca())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");q=Components.h.m.FIRST_ORDERED_NODE_TYPE}return d.evaluate(f, -e,h,q,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};var H="StopIteration"in g?g.StopIteration:Error("StopIteration");function I(){}I.prototype.next=function(){throw H;};function J(a,b,c,e,f){this.a=!!b;a&&K(this,a,e);this.d=f!=undefined?f:this.c||0;if(this.a)this.d*=-1;this.g=!c}m(J,I);J.prototype.b=null;J.prototype.c=0;J.prototype.f=false;function K(a,b,c,e){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof e=="number")a.d=e} -J.prototype.next=function(){var a;if(this.f){if(!this.b||this.g&&this.d==0)throw H;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?K(this,c):K(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?K(this,c):K(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.f=true;a=this.b;if(!this.b)throw H;return a}; -J.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;J.prototype.next.call(this);this.a=!this.a;b=j(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function L(a,b,c,e){J.call(this,a,b,c,null,e)}m(L,J);L.prototype.next=function(){do L.i.next.call(this);while(this.c==-1);return this.b};function M(a,b){var c=E(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""};function N(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var ma=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"]; -function na(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=a.style.cssText.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(ha(ma,b)>=0)return"true";return c.specified?c.value:null}function O(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return N(a)?a:null}function P(a,b){b=ga(String(b));return M(a,b)||Q(a,b)} -function Q(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=O(a))?Q(c,b):null} -function oa(a){if(i(a.getBBox)=="function")return a.getBBox();var b;if((M(a,"display")||(a.currentStyle?a.currentStyle.display:null)||a.style.display)!="none")b=new D(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,e=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var d;d=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=e;b=new D(d,a)}return b} -function R(a,b){function c(d){if(P(d,"display")=="none")return false;d=O(d);return!d||c(d)}function e(d){var h=oa(d);if(h.height>0&&h.width>0)return true;if(d.innerText||d.textContent)if(pa.test(d.innerText||d.textContent))return true;return A&&ia(d.childNodes,function(q){return N(q)&&e(q)})}if(!N(a))throw Error("Argument to isShown must be of type Element");if(N(a,"TITLE"))return(E(a)?E(a).parentWindow||E(a).defaultView:window)==ba;if(N(a,"OPTION")||N(a,"OPTGROUP")){var f=G(a,function(d){return N(d, -"SELECT")});return!!f&&R(f)}if(N(a,"MAP")){if(!a.name)return false;f=E(a);f=f.evaluate?la('/descendant::*[@usemap = "#'+a.name+'"]',f):ka(f,function(d){return N(d)&&na(d,"usemap")=="#"+a.name});return!!f&&R(f)}if(N(a,"AREA")){f=G(a,function(d){return N(d,"MAP")});return!!f&&R(f)}if(N(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(P(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&S(a)==0)return false;if(!e(a))return false;return true} -var qa="[\\s\\xa0"+String.fromCharCode(160)+"]+",pa=RegExp("^"+qa+"$");function S(a){var b=1,c=P(a,"opacity");if(c)b=Number(c);if(a=O(a))b*=S(a);return b};function ra(a){return R(a,true)};function sa(){} -function T(a,b,c){switch(typeof b){case "string":U(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(i(b)=="array"){var e=b.length;c.push("[");var f="";for(var d=0;d<e;d++){c.push(f);T(a,b[d],c);f=","}c.push("]");break}c.push("{");e="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){d=b[f];if(typeof d!="function"){c.push(e);U(a,f,c);c.push(":");T(a, -d,c);e=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var V={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},ta=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function U(a,b,c){c.push('"',b.replace(ta,function(e){if(e in V)return V[e];var f=e.charCodeAt(0),d="\\u";if(f<16)d+="000";else if(f<256)d+="00";else if(f<4096)d+="0";return V[e]=d+f.toString(16)}),'"')};function W(a){switch(i(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return z(a,W);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=ua(a);return b}if(j(a))return z(a,W);a=da(a,function(c,e){return typeof e=="number"||k(e)});return o(a,W);default:return null}} -function X(a,b){if(i(a)=="array")return z(a,function(c){return X(c,b)});else if(aa(a))return"ELEMENT"in a?va(a.ELEMENT,b):o(a,function(c){return X(c,b)});return a}function wa(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.e=l()}if(!b.e)b.e=l();return b}function ua(a){var b=wa(a.ownerDocument),c=ea(b,function(e){return e==a});if(!c){c=":wdc:"+b.e++;b[c]=a}return c} -function va(a,b){a=decodeURIComponent(a);var c=b||document,e=wa(c);if(!(a in e))throw new p(10,"Element does not exist in cache");var f=e[a];for(var d=f;d;){if(d==c.documentElement)return f;d=d.parentNode}delete e[a];throw new p(10,"Element is no longer attached to the DOM");};function xa(a){var b=ra;a=[a];var c;try{if(k(b))b=new Function(b);var e=X(a),f=b.apply(null,e);c={status:0,value:W(f)}}catch(d){c={status:"code"in d?d.code:13,value:{message:d.message}}}b=[];T(new sa,c,b);return b.join("")}var Y="_".split("."),Z=g;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&xa!==undefined)Z[$]=xa;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/is_enabled_android.js b/core/res/res/raw/is_enabled_android.js deleted file mode 100644 index 231309f..0000000 --- a/core/res/res/raw/is_enabled_android.js +++ /dev/null @@ -1,12 +0,0 @@ -function(){return function(){function g(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function h(a){var b=g(a);return b=="array"||b=="object"&&typeof a.length=="number"}function i(a){return typeof a=="string"}function k(a){a=g(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var l=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.h=b.prototype;a.prototype=new c};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function o(a,b,c){var d={};for(var e in a)if(b.call(c,a[e],e,a))d[e]=a[e];return d}function p(a,b,c){var d={};for(var e in a)d[e]=b.call(c,a[e],e,a);return d}function q(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function r(a,b){n.call(this,b);this.code=a;this.name=s[a]||s[13]}m(r,n);var s,t={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},u={};for(var v in t)u[t[v]]=v;s=u; -r.prototype.toString=function(){return"["+this.name+"] "+this.message};function w(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a};function x(a,b){b.unshift(a);n.call(this,w.apply(null,b));b.shift();this.i=a}m(x,n);x.prototype.name="AssertionError";function y(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}throw new x(""+d,e||[]);}return a};var z=Array.prototype,A=z.indexOf?function(a,b,c){y(a.length!=null);return z.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(i(a)){if(!i(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},B=z.map?function(a,b,c){y(a.length!=null);return z.map.call(a,b,c)}:function(a,b,c){var d=a.length,e=Array(d),f=i(a)?a.split(""):a;for(var j=0;j<d;j++)if(j in f)e[j]=b.call(c,f[j],j,a);return e};var C="",D;if(D=/WebKit\/(\S+)/){var E=D.exec(this.navigator?this.navigator.userAgent:null);C=E?E[1]:""};var F="StopIteration"in this?this.StopIteration:Error("StopIteration");function G(){}G.prototype.next=function(){throw F;};function H(a,b,c,d,e){this.a=!!b;a&&I(this,a,d);this.d=e!=undefined?e:this.c||0;if(this.a)this.d*=-1;this.f=!c}m(H,G);H.prototype.b=null;H.prototype.c=0;H.prototype.e=false;function I(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -H.prototype.next=function(){var a;if(this.e){if(!this.b||this.f&&this.d==0)throw F;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?I(this,c):I(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?I(this,c):I(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.e=true;a=this.b;if(!this.b)throw F;return a}; -H.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;H.prototype.next.call(this);this.a=!this.a;b=h(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function J(a,b,c,d){H.call(this,a,b,c,null,d)}m(J,H);J.prototype.next=function(){do J.h.next.call(this);while(this.c==-1);return this.b};var K=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"]; -function L(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=a.style.cssText.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(A(K,b)>=0)return"true";return c.specified?c.value:null}var M=["BUTTON","INPUT","OPTGROUP","OPTION","SELECT","TEXTAREA"]; -function N(a){var b=a.tagName.toUpperCase();if(!(A(M,b)>=0))return true;if(L(a,"disabled"))return false;if(a.parentNode&&a.parentNode.nodeType==1&&"OPTGROUP"==b||"OPTION"==b)return N(a.parentNode);return true}String.fromCharCode(160);function O(){} -function P(a,b,c){switch(typeof b){case "string":Q(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(g(b)=="array"){var d=b.length;c.push("[");var e="";for(var f=0;f<d;f++){c.push(e);P(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(Object.prototype.hasOwnProperty.call(b,e)){f=b[e];if(typeof f!="function"){c.push(d);Q(a,e,c);c.push(":");P(a, -f,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var R={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},S=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function Q(a,b,c){c.push('"',b.replace(S,function(d){if(d in R)return R[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return R[d]=f+e.toString(16)}),'"')};function T(a){switch(g(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return B(a,T);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=U(a);return b}if(h(a))return B(a,T);a=o(a,function(c,d){return typeof d=="number"||i(d)});return p(a,T);default:return null}} -function V(a,b){if(g(a)=="array")return B(a,function(c){return V(c,b)});else if(k(a))return"ELEMENT"in a?aa(a.ELEMENT,b):p(a,function(c){return V(c,b)});return a}function W(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.g=l()}return b}function U(a){var b=W(a.ownerDocument),c=q(b,function(d){return d==a});if(!c){c=":wdc:"+b.g++;b[c]=a}return c} -function aa(a,b){a=decodeURIComponent(a);var c=b||document,d=W(c);if(!(a in d))throw new r(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==c.documentElement)return e;f=f.parentNode}delete d[a];throw new r(10,"Element is no longer attached to the DOM");};function X(a){var b=N;a=[a];var c;try{if(i(b))b=new Function(b);var d=V(a),e=b.apply(null,d);c={status:0,value:T(e)}}catch(f){c={status:"code"in f?f.code:13,value:{message:f.message}}}b=[];P(new O,c,b);return b.join("")}var Y="_".split("."),Z=this;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&X!==undefined)Z[$]=X;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/is_selected_android.js b/core/res/res/raw/is_selected_android.js deleted file mode 100644 index e1c51b6..0000000 --- a/core/res/res/raw/is_selected_android.js +++ /dev/null @@ -1,10 +0,0 @@ -function(){return function(){function g(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function h(a){var b=g(a);return b=="array"||b=="object"&&typeof a.length=="number"}function i(a){return typeof a=="string"}function k(a){a=g(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var l=Date.now||function(){return+new Date};function m(a,b){function c(){}c.prototype=b.prototype;a.h=b.prototype;a.prototype=new c};function n(a){this.stack=Error().stack||"";if(a)this.message=String(a)}m(n,Error);n.prototype.name="CustomError";function o(a,b,c){var d={};for(var e in a)if(b.call(c,a[e],e,a))d[e]=a[e];return d}function p(a,b,c){var d={};for(var e in a)d[e]=b.call(c,a[e],e,a);return d}function q(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function r(a,b){n.call(this,b);this.code=a;this.name=s[a]||s[13]}m(r,n);var s,t={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},u={};for(var v in t)u[t[v]]=v;s=u; -r.prototype.toString=function(){return"["+this.name+"] "+this.message};function w(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a};function x(a,b){b.unshift(a);n.call(this,w.apply(null,b));b.shift();this.i=a}m(x,n);x.prototype.name="AssertionError";function y(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}throw new x(""+d,e||[]);}return a};var z=Array.prototype,A=z.indexOf?function(a,b,c){y(a.length!=null);return z.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(i(a)){if(!i(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},B=z.map?function(a,b,c){y(a.length!=null);return z.map.call(a,b,c)}:function(a,b,c){var d=a.length,e=Array(d),f=i(a)?a.split(""):a;for(var j=0;j<d;j++)if(j in f)e[j]=b.call(c,f[j],j,a);return e};var C="",D;if(D=/WebKit\/(\S+)/){var E=D.exec(this.navigator?this.navigator.userAgent:null);C=E?E[1]:""};var F="StopIteration"in this?this.StopIteration:Error("StopIteration");function G(){}G.prototype.next=function(){throw F;};function H(a,b,c,d,e){this.a=!!b;a&&I(this,a,d);this.d=e!=undefined?e:this.c||0;if(this.a)this.d*=-1;this.f=!c}m(H,G);H.prototype.b=null;H.prototype.c=0;H.prototype.e=false;function I(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -H.prototype.next=function(){var a;if(this.e){if(!this.b||this.f&&this.d==0)throw F;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?I(this,c):I(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?I(this,c):I(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.e=true;a=this.b;if(!this.b)throw F;return a}; -H.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;H.prototype.next.call(this);this.a=!this.a;b=h(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function J(a,b,c,d){H.call(this,a,b,c,null,d)}m(J,H);J.prototype.next=function(){do J.h.next.call(this);while(this.c==-1);return this.b};var K={"class":"className",readonly:"readOnly"},L=["checked","disabled","draggable","hidden"];String.fromCharCode(160);function M(a){var b;if(a&&a.nodeType==1&&a.tagName.toUpperCase()=="OPTION")b=true;else if(a&&a.nodeType==1&&a.tagName.toUpperCase()=="INPUT"){b=a.type.toLowerCase();b=b=="checkbox"||b=="radio"}else b=false;if(!b)throw new r(15,"Element is not selectable");b="selected";var c=a.type&&a.type.toLowerCase();if("checkbox"==c||"radio"==c)b="checked";b=K[b]||b;a=a[b];a=a===undefined&&A(L,b)>=0?false:a;return!!a};function N(){} -function O(a,b,c){switch(typeof b){case "string":P(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(g(b)=="array"){var d=b.length;c.push("[");var e="";for(var f=0;f<d;f++){c.push(e);O(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(Object.prototype.hasOwnProperty.call(b,e)){f=b[e];if(typeof f!="function"){c.push(d);P(a,e,c);c.push(":");O(a, -f,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var Q={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},R=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function P(a,b,c){c.push('"',b.replace(R,function(d){if(d in Q)return Q[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return Q[d]=f+e.toString(16)}),'"')};function S(a){switch(g(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return B(a,S);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=T(a);return b}if(h(a))return B(a,S);a=o(a,function(c,d){return typeof d=="number"||i(d)});return p(a,S);default:return null}} -function U(a,b){if(g(a)=="array")return B(a,function(c){return U(c,b)});else if(k(a))return"ELEMENT"in a?V(a.ELEMENT,b):p(a,function(c){return U(c,b)});return a}function W(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.g=l()}return b}function T(a){var b=W(a.ownerDocument),c=q(b,function(d){return d==a});if(!c){c=":wdc:"+b.g++;b[c]=a}return c} -function V(a,b){a=decodeURIComponent(a);var c=b||document,d=W(c);if(!(a in d))throw new r(10,"Element does not exist in cache");var e=d[a];for(var f=e;f;){if(f==c.documentElement)return e;f=f.parentNode}delete d[a];throw new r(10,"Element is no longer attached to the DOM");};function X(a){var b=M;a=[a];var c;try{if(i(b))b=new Function(b);var d=U(a),e=b.apply(null,d);c={status:0,value:S(e)}}catch(f){c={status:"code"in f?f.code:13,value:{message:f.message}}}b=[];O(new N,c,b);return b.join("")}var Y="_".split("."),Z=this;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&X!==undefined)Z[$]=X;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/set_selected_android.js b/core/res/res/raw/set_selected_android.js deleted file mode 100644 index 8936f55..0000000 --- a/core/res/res/raw/set_selected_android.js +++ /dev/null @@ -1,27 +0,0 @@ -function(){return function(){var l=this; -function m(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function o(a){var b=m(a);return b=="array"||b=="object"&&typeof a.length=="number"}function p(a){return typeof a=="string"}function q(a){a=m(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var aa=Date.now||function(){return+new Date};function r(a,b){function c(){}c.prototype=b.prototype;a.k=b.prototype;a.prototype=new c};var ba=window;function ca(){var a=l.Components;if(!a)return false;try{a.l["@mozilla.org/uuid-generator;1"].o(a.i.r);return true}catch(b){return false}};function s(a){this.stack=Error().stack||"";if(a)this.message=String(a)}r(s,Error);s.prototype.name="CustomError";function da(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function t(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function ea(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function v(a,b){s.call(this,b);this.code=a;this.name=w[a]||w[13]}r(v,s);var w,fa={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ga={};for(var ha in fa)ga[fa[ha]]=ha;w=ga; -v.prototype.toString=function(){return"["+this.name+"] "+this.message};function ia(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}var ja={};function ka(a){return ja[a]||(ja[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function x(a,b){b.unshift(a);s.call(this,ia.apply(null,b));b.shift();this.p=a}r(x,s);x.prototype.name="AssertionError";function y(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new x(""+d,f||[]);}return a};var z=Array.prototype,A=z.indexOf?function(a,b,c){y(a.length!=null);return z.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(p(a)){if(!p(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},B=z.map?function(a,b,c){y(a.length!=null);return z.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=p(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f},la=z.some?function(a,b,c){y(a.length!= -null);return z.some.call(a,b,c)}:function(a,b,c){var d=a.length,f=p(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c,f[e],e,a))return true;return false};var C=true,ma="",D;if(C)D=/WebKit\/(\S+)/;if(D){var na=D.exec(l.navigator?l.navigator.userAgent:null);ma=na?na[1]:""};var E;function F(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0}F.prototype.toString=function(){return"("+this.x+", "+this.y+")"};function G(a,b){this.width=a;this.height=b}G.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};G.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};function H(a){return a.nodeType==9?a:a.ownerDocument||a.document}function oa(a,b){var c=[];return pa(a,b,c,true)?c[0]:undefined}function pa(a,b,c,d){if(a!=null){var f=0;for(var e;e=a.childNodes[f];f++){if(b(e)){c.push(e);if(d)return true}if(pa(e,b,c,d))return true}}return false}function I(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null}function J(a){this.e=a||l.document||document} -function qa(a){a=!C&&a.e.compatMode=="CSS1Compat"?a.e.documentElement:a.e.body;return new F(a.scrollLeft,a.scrollTop)};function ra(a,b){var c=function(d,f){var e=H(d);if(d.selectSingleNode){e.setProperty&&e.setProperty("SelectionLanguage","XPath");return d.selectSingleNode(f)}else if(e.implementation.hasFeature("XPath","3.0")){var g=e.createNSResolver(e.documentElement),h;if(typeof XPathResult!="undefined")h=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!ca())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");h=Components.i.q.FIRST_ORDERED_NODE_TYPE}return e.evaluate(f, -d,g,h,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};var K="StopIteration"in l?l.StopIteration:Error("StopIteration");function sa(){}sa.prototype.next=function(){throw K;};function L(a,b,c,d,f){this.a=!!b;a&&M(this,a,d);this.d=f!=undefined?f:this.c||0;if(this.a)this.d*=-1;this.h=!c}r(L,sa);L.prototype.b=null;L.prototype.c=0;L.prototype.g=false;function M(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -L.prototype.next=function(){var a;if(this.g){if(!this.b||this.h&&this.d==0)throw K;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?M(this,c):M(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?M(this,c):M(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.g=true;a=this.b;if(!this.b)throw K;return a}; -L.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;L.prototype.next.call(this);this.a=!this.a;b=o(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function N(a,b,c,d){L.call(this,a,b,c,null,d)}r(N,L);N.prototype.next=function(){do N.k.next.call(this);while(this.c==-1);return this.b};function ta(a,b){var c=H(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""}function O(a,b){return ta(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style[b]} -function ua(a){var b=H(a),c=O(a,"position"),d=c=="fixed"||c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=O(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return null};function P(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var va={"class":"className",readonly:"readOnly"},wa=["checked","disabled","draggable","hidden"],xa=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking", -"selected","spellcheck","truespeed","willvalidate"];function ya(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=a.style.cssText.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(A(xa,b)>=0)return"true";return c.specified?c.value:null}var za=["BUTTON","INPUT","OPTGROUP","OPTION","SELECT","TEXTAREA"]; -function Aa(a){var b=a.tagName.toUpperCase();if(!(A(za,b)>=0))return true;if(ya(a,"disabled"))return false;if(a.parentNode&&a.parentNode.nodeType==1&&"OPTGROUP"==b||"OPTION"==b)return Aa(a.parentNode);return true}function Q(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return P(a)?a:null}function R(a,b){b=ka(String(b));return ta(a,b)||Ba(a,b)} -function Ba(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=Q(a))?Ba(c,b):null}function Ca(a){if(m(a.getBBox)=="function")return a.getBBox();var b;if(O(a,"display")!="none")b=new G(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var e;e=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=d;b=new G(e,a)}return b} -function S(a,b){function c(e){if(R(e,"display")=="none")return false;e=Q(e);return!e||c(e)}function d(e){var g=Ca(e);if(g.height>0&&g.width>0)return true;if(e.innerText||e.textContent)if(Da.test(e.innerText||e.textContent))return true;return C&&la(e.childNodes,function(h){return P(h)&&d(h)})}if(!P(a))throw Error("Argument to isShown must be of type Element");if(P(a,"TITLE"))return(H(a)?H(a).parentWindow||H(a).defaultView:window)==ba;if(P(a,"OPTION")||P(a,"OPTGROUP")){var f=I(a,function(e){return P(e, -"SELECT")});return!!f&&S(f)}if(P(a,"MAP")){if(!a.name)return false;f=H(a);f=f.evaluate?ra('/descendant::*[@usemap = "#'+a.name+'"]',f):oa(f,function(e){return P(e)&&ya(e,"usemap")=="#"+a.name});return!!f&&S(f)}if(P(a,"AREA")){f=I(a,function(e){return P(e,"MAP")});return!!f&&S(f)}if(P(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(R(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&Ea(a)==0)return false;if(!d(a))return false;return true} -var Fa="[\\s\\xa0"+String.fromCharCode(160)+"]+",Da=RegExp("^"+Fa+"$");function Ea(a){var b=1,c=R(a,"opacity");if(c)b=Number(c);if(a=Q(a))b*=Ea(a);return b};var Ga=["dragstart","dragexit","mouseover","mouseout"]; -function T(a,b,c){var d=H(a),f=d?d.parentWindow||d.defaultView:window,e=new F;if(a.nodeType==1)if(a.getBoundingClientRect){var g=a.getBoundingClientRect();e.x=g.left;e.y=g.top}else{g=qa(a?new J(H(a)):E||(E=new J));var h,i=H(a);h=O(a,"position");var j=new F(0,0),u=(i?i.nodeType==9?i:H(i):document).documentElement;if(a!=u)if(a.getBoundingClientRect){h=a.getBoundingClientRect();i=qa(i?new J(H(i)):E||(E=new J));j.x=h.left+i.x;j.y=h.top+i.y}else if(i.getBoxObjectFor){h=i.getBoxObjectFor(a);i=i.getBoxObjectFor(u); -j.x=h.screenX-i.screenX;j.y=h.screenY-i.screenY}else{var k=a;do{j.x+=k.offsetLeft;j.y+=k.offsetTop;if(k!=a){j.x+=k.clientLeft||0;j.y+=k.clientTop||0}if(C&&O(k,"position")=="fixed"){j.x+=i.body.scrollLeft;j.y+=i.body.scrollTop;break}k=k.offsetParent}while(k&&k!=a);if(C&&h=="absolute")j.y-=i.body.offsetTop;for(k=a;(k=ua(k))&&k!=i.body&&k!=u;){j.x-=k.scrollLeft;j.y-=k.scrollTop}}e.x=j.x-g.x;e.y=j.y-g.y}else{g=m(a.f)=="function";j=a;if(a.targetTouches)j=a.targetTouches[0];else if(g&&a.f().targetTouches)j= -a.f().targetTouches[0];e.x=j.clientX;e.y=j.clientY}var n=c||{};c=(n.x||0)+e.x;e=(n.y||0)+e.y;g=n.button||0;j=n.bubble||true;h=null;if(A(Ga,b)>=0)h=n.related||null;i=!!n.alt;u=!!n.control;k=!!n.shift;n=!!n.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=i;a.m=u;a.metaKey=n;a.shiftKey=k;a.clientX=c;a.clientY=e;a.button=g;a.relatedTarget=h}else{a=d.createEvent("MouseEvents");if(a.initMouseEvent)a.initMouseEvent(b,j,true,f,1,0,0,c,e,u,i,k,n,g,h);else{a.initEvent(b,j,true); -a.shiftKey=k;a.metaKey=n;a.altKey=i;a.ctrlKey=u;a.button=g}}return a}function U(a,b,c){var d=c||{};c=d.keyCode||0;var f=d.charCode||0,e=!!d.alt,g=!!d.ctrl,h=!!d.shift;d=!!d.meta;a=H(a).createEvent("Events");a.initEvent(b,true,true);a.charCode=f;a.keyCode=c;a.altKey=e;a.ctrlKey=g;a.metaKey=d;a.shiftKey=h;return a} -function Ha(a,b,c){var d=H(a),f=c||{};c=f.bubble!==false;var e=!!f.alt,g=!!f.control,h=!!f.shift;f=!!f.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=e;a.n=g;a.metaKey=f;a.shiftKey=h}else{a=d.createEvent("HTMLEvents");a.initEvent(b,c,true);a.shiftKey=h;a.metaKey=f;a.altKey=e;a.ctrlKey=g}return a}var V={};V.click=T;V.keydown=U;V.keypress=U;V.keyup=U;V.mousedown=T;V.mousemove=T;V.mouseout=T;V.mouseover=T;V.mouseup=T; -function Ia(a,b,c){c=(V[b]||Ha)(a,b,c);if(m(a.fireEvent)=="function"||q(a.fireEvent)){try{(H(a)?H(a).parentWindow||H(a).defaultView:window).event=c}catch(d){}a=a.fireEvent("on"+b,c)}else a=a.dispatchEvent(c);return a};function Ja(a){var b;if(P(a,"OPTION"))b=true;else if(P(a,"INPUT")){b=a.type.toLowerCase();b=b=="checkbox"||b=="radio"}else b=false;if(!b)throw new v(15,"Element is not selectable");b="selected";var c=a.type&&a.type.toLowerCase();if("checkbox"==c||"radio"==c)b="checked";b=va[b]||b;a=a[b];a=a===undefined&&A(wa,b)>=0?false:a;return!!a}function Ka(a){return P(a,"SELECT")} -function La(a,b){if(!Aa(a))throw new v(12,"Element is not currently enabled and may not be manipulated");if(!S(a,true))throw new v(11,"Element is not currently visible and may not be manipulated");if(P(a,"INPUT")){var c=a.type.toLowerCase();if(c=="checkbox"||c=="radio"){if(a.checked!=b){if(a.type=="radio"&&!b)throw new v(12,"You may not deselect a radio button");if(b!=Ja(a)){a.checked=b;Ia(a,"change")}}}else throw new v(15,"You may not select an unselectable input element: "+a.type);}else if(P(a, -"OPTION")){c=I(a,Ka);if(!c.multiple&&!b)throw new v(15,"You may not deselect an option within a select that does not support multiple selections.");if(b!=Ja(a)){a.selected=b;Ia(c,"change")}}else throw new v(15,"You may not select an unselectable element: "+a.tagName);};function W(a){switch(m(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return B(a,W);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Ma(a);return b}if(o(a))return B(a,W);a=da(a,function(c,d){return typeof d=="number"||p(d)});return t(a,W);default:return null}} -function X(a,b){if(m(a)=="array")return B(a,function(c){return X(c,b)});else if(q(a))return"ELEMENT"in a?Na(a.ELEMENT,b):t(a,function(c){return X(c,b)});return a}function Oa(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.j=aa()}return b}function Ma(a){var b=Oa(a.ownerDocument),c=ea(b,function(d){return d==a});if(!c){c=":wdc:"+b.j++;b[c]=a}return c} -function Na(a,b){a=decodeURIComponent(a);var c=b||document,d=Oa(c);if(!(a in d))throw new v(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new v(10,"Element is no longer attached to the DOM");};function Pa(a,b){var c=La,d=[a,b];try{if(p(c))c=new Function(c);var f=X(d),e=c.apply(null,f);W(e)}catch(g){}}var Y="_".split("."),Z=l;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&Pa!==undefined)Z[$]=Pa;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/submit_android.js b/core/res/res/raw/submit_android.js deleted file mode 100644 index 8dd2e3b..0000000 --- a/core/res/res/raw/submit_android.js +++ /dev/null @@ -1,29 +0,0 @@ -function(){return function(){var m,o=this;function p(){} -function r(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if(b=="function"&&typeof a.call=="undefined")return"object";return b}function aa(a){var b=r(a);return b=="array"||b=="object"&&typeof a.length=="number"}function s(a){return typeof a=="string"}function t(a){return r(a)=="function"}function u(a){a=r(a);return a=="object"||a=="array"||a=="function"}function v(a){return a[ba]||(a[ba]=++ca)}var ba="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36),ca=0,da=Date.now||function(){return+new Date}; -function w(a,b){function c(){}c.prototype=b.prototype;a.r=b.prototype;a.prototype=new c};function x(a){this.stack=Error().stack||"";if(a)this.message=String(a)}w(x,Error);x.prototype.name="CustomError";function ea(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function fa(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function ga(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function y(a,b){x.call(this,b);this.code=a;this.name=z[a]||z[13]}w(y,x);var z,ha={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ia={};for(var ja in ha)ia[ha[ja]]=ja;z=ia; -y.prototype.toString=function(){return"["+this.name+"] "+this.message};function ka(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a} -function la(a,b){var c=0,d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),f=String(b).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=Math.max(d.length,f.length);for(var g=0;c==0&&g<e;g++){var j=d[g]||"",i=f[g]||"",h=RegExp("(\\d*)(\\D*)","g"),n=RegExp("(\\d*)(\\D*)","g");do{var k=h.exec(j)||["","",""],l=n.exec(i)||["","",""];if(k[0].length==0&&l[0].length==0)break;c=A(k[1].length==0?0:parseInt(k[1],10),l[1].length==0?0:parseInt(l[1],10))||A(k[2].length==0,l[2].length==0)||A(k[2],l[2])}while(c== -0)}return c}function A(a,b){if(a<b)return-1;else if(a>b)return 1;return 0};function B(a,b){b.unshift(a);x.call(this,ka.apply(null,b));b.shift();this.N=a}w(B,x);B.prototype.name="AssertionError";function C(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new B(""+d,f||[]);}return a};var D=Array.prototype,ma=D.indexOf?function(a,b,c){C(a.length!=null);return D.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(s(a)){if(!s(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},na=D.map?function(a,b,c){C(a.length!=null);return D.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=s(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f};var oa=o.navigator,pa=(oa&&oa.platform||"").indexOf("Mac")!=-1,qa="",ra;if(ra=/WebKit\/(\S+)/){var sa=ra.exec(o.navigator?o.navigator.userAgent:null);qa=sa?sa[1]:""};var E;function F(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0}F.prototype.toString=function(){return"("+this.x+", "+this.y+")"};function G(a){return a.nodeType==9?a:a.ownerDocument||a.document}function H(a){this.D=a||o.document||document}function ta(a){a=a.D.body;return new F(a.scrollLeft,a.scrollTop)};var ua="StopIteration"in o?o.StopIteration:Error("StopIteration");function va(){}va.prototype.next=function(){throw ua;};function I(a,b,c,d,f){this.a=!!b;a&&J(this,a,d);this.h=f!=undefined?f:this.d||0;if(this.a)this.h*=-1;this.C=!c}w(I,va);m=I.prototype;m.c=null;m.d=0;m.B=false;function J(a,b,c,d){if(a.c=b)a.d=typeof c=="number"?c:a.c.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.h=d} -m.next=function(){var a;if(this.B){if(!this.c||this.C&&this.h==0)throw ua;a=this.c;var b=this.a?-1:1;if(this.d==b){var c=this.a?a.lastChild:a.firstChild;c?J(this,c):J(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?J(this,c):J(this,a.parentNode,b*-1);this.h+=this.d*(this.a?-1:1)}else this.B=true;a=this.c;if(!this.c)throw ua;return a}; -m.splice=function(){var a=this.c,b=this.a?1:-1;if(this.d==b){this.d=b*-1;this.h+=this.d*(this.a?-1:1)}this.a=!this.a;I.prototype.next.call(this);this.a=!this.a;b=aa(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function wa(a,b,c,d){I.call(this,a,b,c,null,d)}w(wa,I);wa.prototype.next=function(){do wa.r.next.call(this);while(this.d==-1);return this.c};function K(a,b){var c;a:{c=G(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null)){c=c[b]||c.getPropertyValue(b);break a}c=""}return c||(a.currentStyle?a.currentStyle[b]:null)||a.style[b]} -function xa(a){var b=G(a),c=K(a,"position"),d=c=="fixed"||c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=K(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return null};String.fromCharCode(160);var ya;var za=["dragstart","dragexit","mouseover","mouseout"]; -function L(a,b,c){var d=G(a),f=d?d.parentWindow||d.defaultView:window,e=new F;if(a.nodeType==1)if(a.getBoundingClientRect){var g=a.getBoundingClientRect();e.x=g.left;e.y=g.top}else{g=ta(a?new H(G(a)):E||(E=new H));var j,i=G(a);j=K(a,"position");var h=new F(0,0),n=(i?i.nodeType==9?i:G(i):document).documentElement;if(a!=n)if(a.getBoundingClientRect){j=a.getBoundingClientRect();i=ta(i?new H(G(i)):E||(E=new H));h.x=j.left+i.x;h.y=j.top+i.y}else if(i.getBoxObjectFor){j=i.getBoxObjectFor(a);i=i.getBoxObjectFor(n); -h.x=j.screenX-i.screenX;h.y=j.screenY-i.screenY}else{var k=a;do{h.x+=k.offsetLeft;h.y+=k.offsetTop;if(k!=a){h.x+=k.clientLeft||0;h.y+=k.clientTop||0}if(K(k,"position")=="fixed"){h.x+=i.body.scrollLeft;h.y+=i.body.scrollTop;break}k=k.offsetParent}while(k&&k!=a);if(j=="absolute")h.y-=i.body.offsetTop;for(k=a;(k=xa(k))&&k!=i.body&&k!=n;){h.x-=k.scrollLeft;h.y-=k.scrollTop}}e.x=h.x-g.x;e.y=h.y-g.y}else{g=t(a.F);h=a;if(a.targetTouches)h=a.targetTouches[0];else if(g&&a.i.targetTouches)h=a.i.targetTouches[0]; -e.x=h.clientX;e.y=h.clientY}var l=c||{};c=(l.x||0)+e.x;e=(l.y||0)+e.y;g=l.button||0;h=l.bubble||true;j=null;if(ma(za,b)>=0)j=l.related||null;i=!!l.alt;n=!!l.control;k=!!l.shift;l=!!l.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=i;a.K=n;a.metaKey=l;a.shiftKey=k;a.clientX=c;a.clientY=e;a.button=g;a.relatedTarget=j}else{a=d.createEvent("MouseEvents");if(a.initMouseEvent)a.initMouseEvent(b,h,true,f,1,0,0,c,e,n,i,k,l,g,j);else{a.initEvent(b,h,true);a.shiftKey=k;a.metaKey= -l;a.altKey=i;a.ctrlKey=n;a.button=g}}return a}function Aa(a,b,c){var d=c||{};c=d.keyCode||0;var f=d.charCode||0,e=!!d.alt,g=!!d.ctrl,j=!!d.shift;d=!!d.meta;a=G(a).createEvent("Events");a.initEvent(b,true,true);a.charCode=f;a.keyCode=c;a.altKey=e;a.ctrlKey=g;a.metaKey=d;a.shiftKey=j;return a} -function Ba(a,b,c){var d=G(a),f=c||{};c=f.bubble!==false;var e=!!f.alt,g=!!f.control,j=!!f.shift;f=!!f.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=e;a.L=g;a.metaKey=f;a.shiftKey=j}else{a=d.createEvent("HTMLEvents");a.initEvent(b,c,true);a.shiftKey=j;a.metaKey=f;a.altKey=e;a.ctrlKey=g}return a}var M={};M.click=L;M.keydown=Aa;M.keypress=Aa;M.keyup=Aa;M.mousedown=L;M.mousemove=L;M.mouseout=L;M.mouseover=L;M.mouseup=L;function Ca(a){a:{a=a;for(var b=0;a;){if(a&&a.nodeType==1&&a.tagName.toUpperCase()=="FORM"){a=a;break a}a=a.parentNode;b++}a=null}if(!a)throw new y(12,"Element was not in a form, so could not submit.");b=a;var c=(M.submit||Ba)(b,"submit",void 0);if(t(b.fireEvent)||u(b.fireEvent)){try{(G(b)?G(b).parentWindow||G(b).defaultView:window).event=c}catch(d){}b=b.fireEvent("onsubmit",c)}else b=b.dispatchEvent(c);b&&a.submit()};var Da=[];function N(){if(Ea)Fa[v(this)]=this}var Ea=false,Fa={};N.prototype.u=false;N.prototype.l=function(){if(!this.u){this.u=true;this.g();if(Ea){var a=v(this);if(!Fa.hasOwnProperty(a))throw Error(this+" did not call the goog.Disposable base constructor or was disposed of after a clearUndisposedObjects call");delete Fa[a]}}};N.prototype.g=function(){};function O(a,b){N.call(this);this.type=a;this.currentTarget=this.target=b}w(O,N);O.prototype.g=function(){delete this.type;delete this.target;delete this.currentTarget};O.prototype.q=false;O.prototype.I=true;new Function("a","return a");function P(a,b){a&&this.n(a,b)}w(P,O);m=P.prototype;m.target=null;m.relatedTarget=null;m.offsetX=0;m.offsetY=0;m.clientX=0;m.clientY=0;m.screenX=0;m.screenY=0;m.button=0;m.keyCode=0;m.charCode=0;m.ctrlKey=false;m.altKey=false;m.shiftKey=false;m.metaKey=false;m.H=false;m.i=null; -m.n=function(a,b){var c=this.type=a.type;O.call(this,c);this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;if(!d)if(c=="mouseover")d=a.fromElement;else if(c=="mouseout")d=a.toElement;this.relatedTarget=d;this.offsetX=a.offsetX!==undefined?a.offsetX:a.layerX;this.offsetY=a.offsetY!==undefined?a.offsetY:a.layerY;this.clientX=a.clientX!==undefined?a.clientX:a.pageX;this.clientY=a.clientY!==undefined?a.clientY:a.pageY;this.screenX=a.screenX||0;this.screenY=a.screenY||0;this.button= -a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||(c=="keypress"?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.H=pa?a.metaKey:a.ctrlKey;this.J=a.J;this.i=a;delete this.I;delete this.q};m.F=function(){return this.i};m.g=function(){P.r.g.call(this);this.relatedTarget=this.currentTarget=this.target=this.i=null};function Ga(){}var Ha=0;m=Ga.prototype;m.key=0;m.k=false;m.s=false;m.n=function(a,b,c,d,f,e){if(t(a))this.v=true;else if(a&&a.handleEvent&&t(a.handleEvent))this.v=false;else throw Error("Invalid listener argument");this.o=a;this.A=b;this.src=c;this.type=d;this.capture=!!f;this.G=e;this.s=false;this.key=++Ha;this.k=false};m.handleEvent=function(a){if(this.v)return this.o.call(this.G||this.src,a);return this.o.handleEvent.call(this.o,a)};function Q(a,b){N.call(this);this.w=b;this.e=[];if(a>this.w)throw Error("[goog.structs.SimplePool] Initial cannot be greater than max");for(var c=0;c<a;c++)this.e.push(this.b?this.b():{})}w(Q,N);Q.prototype.b=null;Q.prototype.t=null;function Ia(a){if(a.e.length)return a.e.pop();return a.b?a.b():{}}function R(a,b){a.e.length<a.w?a.e.push(b):Ja(a,b)}function Ja(a,b){if(a.t)a.t(b);else if(u(b))if(t(b.l))b.l();else for(var c in b)delete b[c]} -Q.prototype.g=function(){Q.r.g.call(this);for(var a=this.e;a.length;)Ja(this,a.pop());delete this.e};var Ka;var La=(Ka="ScriptEngine"in o&&o.ScriptEngine()=="JScript")?o.ScriptEngineMajorVersion()+"."+o.ScriptEngineMinorVersion()+"."+o.ScriptEngineBuildVersion():"0";var S,Ma,T,Na,Oa,Pa,Qa,Ra; -(function(){function a(){return{f:0,j:0}}function b(){return[]}function c(){function l(q){return g.call(l.src,l.key,q)}return l}function d(){return new Ga}function f(){return new P}var e=Ka&&!(la(La,"5.7")>=0),g;Na=function(l){g=l};if(e){S=function(l){R(j,l)};Ma=function(){return Ia(i)};T=function(l){R(i,l)};Oa=function(){R(h,c())};Pa=function(l){R(n,l)};Qa=function(){return Ia(k)};Ra=function(l){R(k,l)};var j=new Q(0,600);j.b=a;var i=new Q(0,600);i.b=b;var h=new Q(0,600);h.b=c;var n=new Q(0,600); -n.b=d;var k=new Q(0,600);k.b=f}else{S=p;Ma=b;Pa=Oa=T=p;Qa=f;Ra=p}})();var U={},V={},Sa={},Ta={};function Ua(a,b,c,d){if(!d.m)if(d.z){var f=0;for(var e=0;f<d.length;f++)if(d[f].k){var g=d[f].A;g.src=null;Oa(g);Pa(d[f])}else{if(f!=e)d[e]=d[f];e++}d.length=e;d.z=false;if(e==0){T(d);delete V[a][b][c];V[a][b].f--;if(V[a][b].f==0){S(V[a][b]);delete V[a][b];V[a].f--}if(V[a].f==0){S(V[a]);delete V[a]}}}}function Va(a){if(a in Ta)return Ta[a];return Ta[a]="on"+a} -function Wa(a,b,c,d,f){var e=1;b=v(b);if(a[b]){a.j--;a=a[b];if(a.m)a.m++;else a.m=1;try{var g=a.length;for(var j=0;j<g;j++){var i=a[j];if(i&&!i.k)e&=Xa(i,f)!==false}}finally{a.m--;Ua(c,d,b,a)}}return Boolean(e)} -function Xa(a,b){var c=a.handleEvent(b);if(a.s){var d=a.key;if(U[d]){var f=U[d];if(!f.k){var e=f.src,g=f.type,j=f.A,i=f.capture;if(e.removeEventListener){if(e==o||!e.M)e.removeEventListener(g,j,i)}else e.detachEvent&&e.detachEvent(Va(g),j);e=v(e);j=V[g][i][e];if(Sa[e]){var h=Sa[e],n=ma(h,f);if(n>=0){C(h.length!=null);D.splice.call(h,n,1)}h.length==0&&delete Sa[e]}f.k=true;j.z=true;Ua(g,i,e,j);delete U[d]}}}return c} -function W(a,b){if(!U[a])return true;var c=U[a],d=c.type,f=V;if(!(d in f))return true;f=f[d];var e,g;if(ya===undefined)ya=false;if(ya){var j;if(!(j=b))a:{j="window.event".split(".");var i=o;for(;e=j.shift();)if(i[e]!=null)i=i[e];else{j=null;break a}j=i}e=j;j=true in f;i=false in f;if(j){if(e.keyCode<0||e.returnValue!=undefined)return true;a:{var h=false;if(e.keyCode==0)try{e.keyCode=-1;break a}catch(n){h=true}if(h||e.returnValue==undefined)e.returnValue=true}}h=Qa();h.n(e,this);e=true;try{if(j){var k= -Ma();for(var l=h.currentTarget;l;l=l.parentNode)k.push(l);g=f[true];g.j=g.f;for(var q=k.length-1;!h.q&&q>=0&&g.j;q--){h.currentTarget=k[q];e&=Wa(g,k[q],d,true,h)}if(i){g=f[false];g.j=g.f;for(q=0;!h.q&&q<k.length&&g.j;q++){h.currentTarget=k[q];e&=Wa(g,k[q],d,false,h)}}}else e=Xa(c,h)}finally{if(k){k.length=0;T(k)}h.l();Ra(h)}return e}d=new P(b,this);try{e=Xa(c,d)}finally{d.l()}return e}Na(W);Da[Da.length]=function(a){W=a(W);Na(W)};function Ya(){} -function Za(a,b,c){switch(typeof b){case "string":$a(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(r(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);Za(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);$a(a,f,c);c.push(":"); -Za(a,e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var ab={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},bb=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function $a(a,b,c){c.push('"',b.replace(bb,function(d){if(d in ab)return ab[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return ab[d]=e+f.toString(16)}),'"')};function X(a){switch(r(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return na(a,X);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=cb(a);return b}if(aa(a))return na(a,X);a=ea(a,function(c,d){return typeof d=="number"||s(d)});return fa(a,X);default:return null}} -function db(a,b){if(r(a)=="array")return na(a,function(c){return db(c,b)});else if(u(a))return"ELEMENT"in a?eb(a.ELEMENT,b):fa(a,function(c){return db(c,b)});return a}function fb(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.p=da()}if(!b.p)b.p=da();return b}function cb(a){var b=fb(a.ownerDocument),c=ga(b,function(d){return d==a});if(!c){c=":wdc:"+b.p++;b[c]=a}return c} -function eb(a,b){a=decodeURIComponent(a);var c=b||document,d=fb(c);if(!(a in d))throw new y(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new y(10,"Element is no longer attached to the DOM");};function gb(a){var b=Ca;a=[a];var c;try{if(s(b))b=new Function(b);var d=db(a),f=b.apply(null,d);c={status:0,value:X(f)}}catch(e){c={status:"code"in e?e.code:13,value:{message:e.message}}}Za(new Ya,c,[])}var Y="_".split("."),Z=o;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&gb!==undefined)Z[$]=gb;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/toggle_android.js b/core/res/res/raw/toggle_android.js deleted file mode 100644 index d4da5b7..0000000 --- a/core/res/res/raw/toggle_android.js +++ /dev/null @@ -1,30 +0,0 @@ -function(){return function(){var l=this; -function m(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array)return"array";else if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(c=="[object Window]")return"object";if(c=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";if(c=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if(b== -"function"&&typeof a.call=="undefined")return"object";return b}function aa(a){var b=m(a);return b=="array"||b=="object"&&typeof a.length=="number"}function o(a){return typeof a=="string"}function ba(a){a=m(a);return a=="object"||a=="array"||a=="function"}Math.floor(Math.random()*2147483648).toString(36);var ca=Date.now||function(){return+new Date};function p(a,b){function c(){}c.prototype=b.prototype;a.k=b.prototype;a.prototype=new c};var da=window;function ea(){var a=l.Components;if(!a)return false;try{a.l["@mozilla.org/uuid-generator;1"].o(a.i.r);return true}catch(b){return false}};function q(a){this.stack=Error().stack||"";if(a)this.message=String(a)}p(q,Error);q.prototype.name="CustomError";function fa(a,b,c){var d={};for(var f in a)if(b.call(c,a[f],f,a))d[f]=a[f];return d}function ga(a,b,c){var d={};for(var f in a)d[f]=b.call(c,a[f],f,a);return d}function ha(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};function r(a,b){q.call(this,b);this.code=a;this.name=s[a]||s[13]}p(r,q);var s,ia={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,ModalDialogOpenError:27,ScriptTimeoutError:28},ja={};for(var ka in ia)ja[ia[ka]]=ka;s=ja; -r.prototype.toString=function(){return"["+this.name+"] "+this.message};function la(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a}var ma={};function na(a){return ma[a]||(ma[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function t(a,b){b.unshift(a);q.call(this,la.apply(null,b));b.shift();this.p=a}p(t,q);t.prototype.name="AssertionError";function v(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var f=c}throw new t(""+d,f||[]);}return a};var w=Array.prototype,x=w.indexOf?function(a,b,c){v(a.length!=null);return w.indexOf.call(a,b,c)}:function(a,b,c){c=c==null?0:c<0?Math.max(0,a.length+c):c;if(o(a)){if(!o(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},y=w.map?function(a,b,c){v(a.length!=null);return w.map.call(a,b,c)}:function(a,b,c){var d=a.length,f=Array(d),e=o(a)?a.split(""):a;for(var g=0;g<d;g++)if(g in e)f[g]=b.call(c,e[g],g,a);return f},oa=w.some?function(a,b,c){v(a.length!= -null);return w.some.call(a,b,c)}:function(a,b,c){var d=a.length,f=o(a)?a.split(""):a;for(var e=0;e<d;e++)if(e in f&&b.call(c,f[e],e,a))return true;return false};var z=true,pa="",A;if(z)A=/WebKit\/(\S+)/;if(A){var qa=A.exec(l.navigator?l.navigator.userAgent:null);pa=qa?qa[1]:""};var B;function C(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0}C.prototype.toString=function(){return"("+this.x+", "+this.y+")"};function D(a,b){this.width=a;this.height=b}D.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};D.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};function E(a){return a.nodeType==9?a:a.ownerDocument||a.document}function ra(a,b){var c=[];return sa(a,b,c,true)?c[0]:undefined}function sa(a,b,c,d){if(a!=null){var f=0;for(var e;e=a.childNodes[f];f++){if(b(e)){c.push(e);if(d)return true}if(sa(e,b,c,d))return true}}return false}function F(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var f=0;a&&(c||f<=d);){if(b(a))return a;a=a.parentNode;f++}return null}function G(a){this.e=a||l.document||document} -function ta(a){a=!z&&a.e.compatMode=="CSS1Compat"?a.e.documentElement:a.e.body;return new C(a.scrollLeft,a.scrollTop)};function ua(a,b){var c=function(d,f){var e=E(d);if(d.selectSingleNode){e.setProperty&&e.setProperty("SelectionLanguage","XPath");return d.selectSingleNode(f)}else if(e.implementation.hasFeature("XPath","3.0")){var g=e.createNSResolver(e.documentElement),h;if(typeof XPathResult!="undefined")h=XPathResult.FIRST_ORDERED_NODE_TYPE;else{if(!ea())throw Error("Document claims it supports XPath yet XPathResult is not defined. Please report this to Selenium developers");h=Components.i.q.FIRST_ORDERED_NODE_TYPE}return e.evaluate(f, -d,g,h,null).singleNodeValue}return null}(b,a);if(!c)return null;if(c.nodeType!=1)throw Error("Returned node is not an element: "+a);return c};var H="StopIteration"in l?l.StopIteration:Error("StopIteration");function va(){}va.prototype.next=function(){throw H;};function I(a,b,c,d,f){this.a=!!b;a&&J(this,a,d);this.d=f!=undefined?f:this.c||0;if(this.a)this.d*=-1;this.h=!c}p(I,va);I.prototype.b=null;I.prototype.c=0;I.prototype.g=false;function J(a,b,c,d){if(a.b=b)a.c=typeof c=="number"?c:a.b.nodeType!=1?0:a.a?-1:1;if(typeof d=="number")a.d=d} -I.prototype.next=function(){var a;if(this.g){if(!this.b||this.h&&this.d==0)throw H;a=this.b;var b=this.a?-1:1;if(this.c==b){var c=this.a?a.lastChild:a.firstChild;c?J(this,c):J(this,a,b*-1)}else(c=this.a?a.previousSibling:a.nextSibling)?J(this,c):J(this,a.parentNode,b*-1);this.d+=this.c*(this.a?-1:1)}else this.g=true;a=this.b;if(!this.b)throw H;return a}; -I.prototype.splice=function(){var a=this.b,b=this.a?1:-1;if(this.c==b){this.c=b*-1;this.d+=this.c*(this.a?-1:1)}this.a=!this.a;I.prototype.next.call(this);this.a=!this.a;b=aa(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function K(a,b,c,d){I.call(this,a,b,c,null,d)}p(K,I);K.prototype.next=function(){do K.k.next.call(this);while(this.c==-1);return this.b};function wa(a,b){var c=E(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return""}function L(a,b){return wa(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style[b]} -function xa(a){var b=E(a),c=L(a,"position"),d=c=="fixed"||c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=L(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return null};function M(a,b){return!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)} -var ya={"class":"className",readonly:"readOnly"},za=["checked","disabled","draggable","hidden"],Aa=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking", -"selected","spellcheck","truespeed","willvalidate"];function Ba(a,b){if(8==a.nodeType)return null;b=b.toLowerCase();if(b=="style"){var c=a.style.cssText.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=a.getAttributeNode(b);if(!c)return null;if(x(Aa,b)>=0)return"true";return c.specified?c.value:null}var Ca=["BUTTON","INPUT","OPTGROUP","OPTION","SELECT","TEXTAREA"]; -function Da(a){var b=a.tagName.toUpperCase();if(!(x(Ca,b)>=0))return true;if(Ba(a,"disabled"))return false;if(a.parentNode&&a.parentNode.nodeType==1&&"OPTGROUP"==b||"OPTION"==b)return Da(a.parentNode);return true}function N(a){for(a=a.parentNode;a&&a.nodeType!=1&&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return M(a)?a:null}function O(a,b){b=na(String(b));return wa(a,b)||Ea(a,b)} -function Ea(a,b){var c=(a.currentStyle||a.style)[b];if(c!="inherit")return c!==undefined?c:null;return(c=N(a))?Ea(c,b):null}function Fa(a){if(m(a.getBBox)=="function")return a.getBBox();var b;if(L(a,"display")!="none")b=new D(a.offsetWidth,a.offsetHeight);else{b=a.style;var c=b.display,d=b.visibility,f=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";var e;e=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=f;b.visibility=d;b=new D(e,a)}return b} -function P(a,b){function c(e){if(O(e,"display")=="none")return false;e=N(e);return!e||c(e)}function d(e){var g=Fa(e);if(g.height>0&&g.width>0)return true;if(e.innerText||e.textContent)if(Ga.test(e.innerText||e.textContent))return true;return z&&oa(e.childNodes,function(h){return M(h)&&d(h)})}if(!M(a))throw Error("Argument to isShown must be of type Element");if(M(a,"TITLE"))return(E(a)?E(a).parentWindow||E(a).defaultView:window)==da;if(M(a,"OPTION")||M(a,"OPTGROUP")){var f=F(a,function(e){return M(e, -"SELECT")});return!!f&&P(f)}if(M(a,"MAP")){if(!a.name)return false;f=E(a);f=f.evaluate?ua('/descendant::*[@usemap = "#'+a.name+'"]',f):ra(f,function(e){return M(e)&&Ba(e,"usemap")=="#"+a.name});return!!f&&P(f)}if(M(a,"AREA")){f=F(a,function(e){return M(e,"MAP")});return!!f&&P(f)}if(M(a,"INPUT")&&a.type.toLowerCase()=="hidden")return false;if(O(a,"visibility")=="hidden")return false;if(!c(a))return false;if(!b&&Ha(a)==0)return false;if(!d(a))return false;return true} -var Ia="[\\s\\xa0"+String.fromCharCode(160)+"]+",Ga=RegExp("^"+Ia+"$");function Ha(a){var b=1,c=O(a,"opacity");if(c)b=Number(c);if(a=N(a))b*=Ha(a);return b};var Ja=["dragstart","dragexit","mouseover","mouseout"]; -function Q(a,b,c){var d=E(a),f=d?d.parentWindow||d.defaultView:window,e=new C;if(a.nodeType==1)if(a.getBoundingClientRect){var g=a.getBoundingClientRect();e.x=g.left;e.y=g.top}else{g=ta(a?new G(E(a)):B||(B=new G));var h,i=E(a);h=L(a,"position");var j=new C(0,0),u=(i?i.nodeType==9?i:E(i):document).documentElement;if(a!=u)if(a.getBoundingClientRect){h=a.getBoundingClientRect();i=ta(i?new G(E(i)):B||(B=new G));j.x=h.left+i.x;j.y=h.top+i.y}else if(i.getBoxObjectFor){h=i.getBoxObjectFor(a);i=i.getBoxObjectFor(u); -j.x=h.screenX-i.screenX;j.y=h.screenY-i.screenY}else{var k=a;do{j.x+=k.offsetLeft;j.y+=k.offsetTop;if(k!=a){j.x+=k.clientLeft||0;j.y+=k.clientTop||0}if(z&&L(k,"position")=="fixed"){j.x+=i.body.scrollLeft;j.y+=i.body.scrollTop;break}k=k.offsetParent}while(k&&k!=a);if(z&&h=="absolute")j.y-=i.body.offsetTop;for(k=a;(k=xa(k))&&k!=i.body&&k!=u;){j.x-=k.scrollLeft;j.y-=k.scrollTop}}e.x=j.x-g.x;e.y=j.y-g.y}else{g=m(a.f)=="function";j=a;if(a.targetTouches)j=a.targetTouches[0];else if(g&&a.f().targetTouches)j= -a.f().targetTouches[0];e.x=j.clientX;e.y=j.clientY}var n=c||{};c=(n.x||0)+e.x;e=(n.y||0)+e.y;g=n.button||0;j=n.bubble||true;h=null;if(x(Ja,b)>=0)h=n.related||null;i=!!n.alt;u=!!n.control;k=!!n.shift;n=!!n.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=i;a.m=u;a.metaKey=n;a.shiftKey=k;a.clientX=c;a.clientY=e;a.button=g;a.relatedTarget=h}else{a=d.createEvent("MouseEvents");if(a.initMouseEvent)a.initMouseEvent(b,j,true,f,1,0,0,c,e,u,i,k,n,g,h);else{a.initEvent(b,j,true); -a.shiftKey=k;a.metaKey=n;a.altKey=i;a.ctrlKey=u;a.button=g}}return a}function R(a,b,c){var d=c||{};c=d.keyCode||0;var f=d.charCode||0,e=!!d.alt,g=!!d.ctrl,h=!!d.shift;d=!!d.meta;a=E(a).createEvent("Events");a.initEvent(b,true,true);a.charCode=f;a.keyCode=c;a.altKey=e;a.ctrlKey=g;a.metaKey=d;a.shiftKey=h;return a} -function Ka(a,b,c){var d=E(a),f=c||{};c=f.bubble!==false;var e=!!f.alt,g=!!f.control,h=!!f.shift;f=!!f.meta;if(a.fireEvent&&d&&d.createEventObject){a=d.createEventObject();a.altKey=e;a.n=g;a.metaKey=f;a.shiftKey=h}else{a=d.createEvent("HTMLEvents");a.initEvent(b,c,true);a.shiftKey=h;a.metaKey=f;a.altKey=e;a.ctrlKey=g}return a}var S={};S.click=Q;S.keydown=R;S.keypress=R;S.keyup=R;S.mousedown=Q;S.mousemove=Q;S.mouseout=Q;S.mouseover=Q;S.mouseup=Q; -function La(a,b,c){c=(S[b]||Ka)(a,b,c);if(m(a.fireEvent)=="function"||ba(a.fireEvent)){try{(E(a)?E(a).parentWindow||E(a).defaultView:window).event=c}catch(d){}a=a.fireEvent("on"+b,c)}else a=a.dispatchEvent(c);return a};function T(a){var b;if(M(a,"OPTION"))b=true;else if(M(a,"INPUT")){b=a.type.toLowerCase();b=b=="checkbox"||b=="radio"}else b=false;if(!b)throw new r(15,"Element is not selectable");b="selected";var c=a.type&&a.type.toLowerCase();if("checkbox"==c||"radio"==c)b="checked";b=ya[b]||b;a=a[b];a=a===undefined&&x(za,b)>=0?false:a;return!!a}function Ma(a){return M(a,"SELECT")} -function Na(a){if(M(a,"INPUT")&&"radio"==a.type)throw new r(12,"You may not toggle a radio button");var b=!T(a);if(!Da(a))throw new r(12,"Element is not currently enabled and may not be manipulated");if(!P(a,true))throw new r(11,"Element is not currently visible and may not be manipulated");if(M(a,"INPUT")){var c=a.type.toLowerCase();if(c=="checkbox"||c=="radio"){if(a.checked!=b){if(a.type=="radio"&&!b)throw new r(12,"You may not deselect a radio button");if(b!=T(a)){a.checked=b;La(a,"change")}}}else throw new r(15, -"You may not select an unselectable input element: "+a.type);}else if(M(a,"OPTION")){c=F(a,Ma);if(!c.multiple&&!b)throw new r(15,"You may not deselect an option within a select that does not support multiple selections.");if(b!=T(a)){a.selected=b;La(c,"change")}}else throw new r(15,"You may not select an unselectable element: "+a.tagName);return T(a)};function Oa(){} -function U(a,b,c){switch(typeof b){case "string":Pa(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==null){c.push("null");break}if(m(b)=="array"){var d=b.length;c.push("[");var f="";for(var e=0;e<d;e++){c.push(f);U(a,b[e],c);f=","}c.push("]");break}c.push("{");d="";for(f in b)if(Object.prototype.hasOwnProperty.call(b,f)){e=b[f];if(typeof e!="function"){c.push(d);Pa(a,f,c);c.push(":");U(a, -e,c);d=","}}c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var V={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},Qa=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; -function Pa(a,b,c){c.push('"',b.replace(Qa,function(d){if(d in V)return V[d];var f=d.charCodeAt(0),e="\\u";if(f<16)e+="000";else if(f<256)e+="00";else if(f<4096)e+="0";return V[d]=e+f.toString(16)}),'"')};function W(a){switch(m(a)){case "string":case "number":case "boolean":return a;case "function":return a.toString();case "array":return y(a,W);case "object":a=a;if("nodeType"in a&&(a.nodeType==1||a.nodeType==9)){var b={};b.ELEMENT=Ra(a);return b}if(aa(a))return y(a,W);a=fa(a,function(c,d){return typeof d=="number"||o(d)});return ga(a,W);default:return null}} -function X(a,b){if(m(a)=="array")return y(a,function(c){return X(c,b)});else if(ba(a))return"ELEMENT"in a?Sa(a.ELEMENT,b):ga(a,function(c){return X(c,b)});return a}function Ta(a){a=a||document;var b=a.$wdc_;if(!b){b=a.$wdc_={};b.j=ca()}return b}function Ra(a){var b=Ta(a.ownerDocument),c=ha(b,function(d){return d==a});if(!c){c=":wdc:"+b.j++;b[c]=a}return c} -function Sa(a,b){a=decodeURIComponent(a);var c=b||document,d=Ta(c);if(!(a in d))throw new r(10,"Element does not exist in cache");var f=d[a];for(var e=f;e;){if(e==c.documentElement)return f;e=e.parentNode}delete d[a];throw new r(10,"Element is no longer attached to the DOM");};function Ua(a){var b=Na;a=[a];var c;try{if(o(b))b=new Function(b);var d=X(a),f=b.apply(null,d);c={status:0,value:W(f)}}catch(e){c={status:"code"in e?e.code:13,value:{message:e.message}}}b=[];U(new Oa,c,b);return b.join("")}var Y="_".split("."),Z=l;!(Y[0]in Z)&&Z.execScript&&Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&Ua!==undefined)Z[$]=Ua;else Z=Z[$]?Z[$]:Z[$]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);} diff --git a/core/res/res/raw/webdriver_readme.txt b/core/res/res/raw/webdriver_readme.txt deleted file mode 100644 index 5c4667d..0000000 --- a/core/res/res/raw/webdriver_readme.txt +++ /dev/null @@ -1,53 +0,0 @@ -The JavaScript files *_android.js are used in frameworks/base/core/java/android/webkit/webdriver/ -. Those files contain closure compiled JavaScript from -http://selenium.googlecode.com. They are under the Apache 2.0 licence: -/** @license -Copyright 2010 WebDriver committers -Copyright 2010 Google Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -The licence is not included in the compiled code to minimize the size -of JavaScript injected into web pages. - -Those files can be generated by doing the following: -$svn checkout http://selenium.googlecode.com/svn/trunk/ . -$./go //javascript/webdriver-atoms/inject:<js_fragment_name>:android - -Where <js_fragment_name> should be replaced by the actual name of the fragment to -generate. For example to generate is_selected_android.js, execute: -$./go //javascript/webdriver-atoms/inject:is_selected:android - -The build file for those rules is under the following: -http://code.google.com/p/selenium/source/browse/trunk/javascript/webdriver-atoms/inject/build.desc -Every js_fragment rule generates a JavaScript file containing the corresponding -JavaScript code snippet. - -The current version of the files was generated using revision 11823. - -Here is the build command list executed to generate those files: -./go //javascript/webdriver-atoms/inject:find_element:android -./go //javascript/webdriver-atoms/inject:find_elements:android -./go //javascript/webdriver-atoms/inject:get_text:android -./go //javascript/webdriver-atoms/inject:is_selected:android -./go //javascript/webdriver-atoms/inject:get_top_left_coordinates:android -./go //javascript/webdriver-atoms/inject:get_attribute_value:android -./go //javascript/webdriver-atoms/inject:get_size:android -./go //javascript/webdriver-atoms/inject:get_value_of_css_property:android -./go //javascript/webdriver-atoms/inject:is_enabled:android -./go //javascript/webdriver-atoms/inject:toggle:android -./go //javascript/webdriver-atoms/inject:set_selected:android -./go //javascript/webdriver-atoms/inject:is_displayed:android -./go //javascript/webdriver-atoms:execute_script:android -./go //javascript/webdriver-atoms/inject:submit:android diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 753e4ac..fe5ace8 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -225,8 +225,6 @@ <item>@drawable/spinner_ab_focused_holo_light</item> <item>@drawable/spinner_ab_pressed_holo_dark</item> <item>@drawable/spinner_ab_pressed_holo_light</item> - <item>@drawable/spinner_ab_activated_holo_dark</item> - <item>@drawable/spinner_ab_activated_holo_light</item> <item>@drawable/spinner_ab_holo_dark</item> <item>@drawable/spinner_ab_holo_light</item> <item>@drawable/spinner_default_holo_dark</item> @@ -243,21 +241,18 @@ <item>@drawable/spinner_pressed_holo_dark</item> <item>@drawable/spinner_pressed_holo_light</item> <item>@drawable/spinner_select</item> - <item>@drawable/btn_cab_done</item> - <item>@drawable/btn_cab_done_focused_holo</item> - <item>@drawable/btn_cab_done_holo</item> - <item>@drawable/btn_cab_done_pressed_holo</item> - <item>@drawable/cab_background_holo_dark</item> - <item>@drawable/cab_background_holo_light</item> - <item>@drawable/cab_background_opaque_holo_dark</item> - <item>@drawable/cab_background_opaque_holo_light</item> - <item>@drawable/cab_ic_close_focused_holo</item> - <item>@drawable/cab_ic_close_holo</item> - <item>@drawable/cab_ic_close_normal_holo</item> - <item>@drawable/cab_ic_close_pressed_holo</item> - <item>@drawable/ic_cab_close_holo</item> - <item>@drawable/action_bar_background</item> - <item>@drawable/action_bar_divider</item> + <item>@drawable/cab_background_bottom_holo_dark</item> + <item>@drawable/cab_background_top_holo_light</item> + <item>@drawable/cab_background_bottom_holo_light</item> + <item>@drawable/ic_cab_done_holo_dark</item> + <item>@drawable/cab_background_top_holo_dark</item> + <item>@drawable/ic_cab_done_holo_light</item> + <item>@drawable/btn_cab_done_default_holo_dark</item> + <item>@drawable/btn_cab_done_focused_holo_light</item> + <item>@drawable/btn_cab_done_default_holo_light</item> + <item>@drawable/btn_cab_done_pressed_holo_dark</item> + <item>@drawable/btn_cab_done_focused_holo_dark</item> + <item>@drawable/btn_cab_done_pressed_holo_light</item> <item>@drawable/ic_menu_close_clear_cancel</item> <item>@drawable/ic_menu_copy_holo_dark</item> <item>@drawable/ic_menu_copy_holo_light</item> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 63b49bd..f63eb62 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -633,6 +633,10 @@ <attr name="actionBarSize" format="dimension" > <enum name="wrap_content" value="0" /> </attr> + <!-- Custom divider drawable to use for elements in the action bar. --> + <attr name="actionBarDivider" format="reference" /> + <!-- Custom item state list drawable background for action bar items. --> + <attr name="actionBarItemBackground" format="reference" /> <!-- TextAppearance style that will be applied to text that appears within action menu items. --> <attr name="actionMenuTextAppearance" format="reference" /> @@ -647,6 +651,8 @@ <attr name="actionModeCloseButtonStyle" format="reference" /> <!-- Background drawable to use for action mode UI --> <attr name="actionModeBackground" format="reference" /> + <!-- Background drawable to use for action mode UI in the lower split bar --> + <attr name="actionModeSplitBackground" format="reference" /> <!-- Drawable to use for the close action mode button --> <attr name="actionModeCloseDrawable" format="reference" /> @@ -5269,6 +5275,8 @@ <attr name="subtitleTextStyle" /> <!-- Specifies a background for the action mode bar. --> <attr name="background" /> + <!-- Specifies a background for the split action mode bar. --> + <attr name="backgroundSplit" /> <!-- Specifies a fixed height for the action mode bar. --> <attr name="height" /> </declare-styleable> @@ -5281,6 +5289,10 @@ <attr name="maxWidth" /> <!-- An optional query hint string to be displayed in the empty query field. --> <attr name="queryHint" format="string" /> + <!-- The IME options to set on the query text field. --> + <attr name="imeOptions" /> + <!-- The input type to set on the query text field. --> + <attr name="inputType" /> </declare-styleable> <declare-styleable name="ActionBar_LayoutParams"> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index e534e9b..829f757 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -32,8 +32,12 @@ <dimen name="toast_y_offset">64dip</dimen> <!-- Height of the status bar --> <dimen name="status_bar_height">25dip</dimen> - <!-- Height of the system bar --> + <!-- Height of the system bar (combined status + navigation, used on large screens) --> <dimen name="system_bar_height">48dip</dimen> + <!-- Height of the horizontal navigation bar on devices that require it --> + <dimen name="navigation_bar_height">48dp</dimen> + <!-- Width of the vertical navigation bar on devices that require it --> + <dimen name="navigation_bar_width">42dp</dimen> <!-- Height of notification icons in the status bar --> <dimen name="status_bar_icon_size">24dip</dimen> <!-- Size of the giant number (unread count) in the notifications --> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 1ba54cf..730d971 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1788,6 +1788,10 @@ <public type="attr" name="subtypeLocale" /> <public type="attr" name="subtypeExtraValue" /> + <public type="attr" name="actionBarDivider" /> + <public type="attr" name="actionBarItemBackground" /> + <public type="attr" name="actionModeSplitBackground" /> + <public type="style" name="TextAppearance.SuggestionHighlight" /> <public type="style" name="Theme.Holo.Light.DarkActionBar" /> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 5618bfb..71e302f 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -916,36 +916,37 @@ applications can use this to erase or modify your contact data.</string> <!-- Title of the read profile permission, listed so the user can decide whether to allow the application to read the user's personal profile data. [CHAR LIMIT=30] --> - <string name="permlab_readProfile">read profile data</string> + <string name="permlab_readProfile">read your profile data</string> <!-- Description of the read profile permission, listed so the user can decide whether to allow the application to read the user's personal profile data. [CHAR LIMIT=NONE] --> - <string name="permdesc_readProfile" product="default">Allows an application to read all - of your personal profile information. Malicious applications can use this to identify - you and send your personal information to other people.</string> + <string name="permdesc_readProfile" product="default">Allows the application to read personal + profile information stored on your device, such as your name and contact information. This + means the application can identify you and send your profile information to others.</string> <!-- Title of the write profile permission, listed so the user can decide whether to allow the application to write to the user's personal profile data. [CHAR LIMIT=30] --> - <string name="permlab_writeProfile">write profile data</string> + <string name="permlab_writeProfile">write to your profile data</string> <!-- Description of the write profile permission, listed so the user can decide whether to allow the application to write to the user's personal profile data. [CHAR LIMIT=NONE] --> - <string name="permdesc_writeProfile" product="default">Allows an application to modify - your personal profile information. Malicious applications can use this to erase or - modify your profile data.</string> + <string name="permdesc_writeProfile" product="default">Allows the application to change or add + to personal profile information stored on your device, such as your name and contact + information. This means other applications can identify you and send your profile + information to others.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permlab_readCalendar">read calendar events</string> + <string name="permlab_readCalendar">read calendar events plus confidential information</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permdesc_readCalendar" product="tablet">Allows an application to read all - of the calendar events stored on your tablet. Malicious applications - can use this to send your calendar events to other people.</string> + <string name="permdesc_readCalendar" product="tablet">Allows an application to read all calendar + events stored on your tablet, including those of friends or coworkers. A malicious application with + this permission can extract personal information from these calendars without the owners\' knowledge.</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permdesc_readCalendar" product="default">Allows an application to read all - of the calendar events stored on your phone. Malicious applications - can use this to send your calendar events to other people.</string> + <string name="permdesc_readCalendar" product="default">Allows an application to read all calendar + events stored on your phone, including those of friends or coworkers. A malicious application with + this permission can extract personal information from these calendars without the owners\' knowledge.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permlab_writeCalendar">add or modify calendar events and send email to guests</string> + <string name="permlab_writeCalendar">add or modify calendar events and send email to guests without owners\' knowledge</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permdesc_writeCalendar">Allows an application to add or change the - events on your calendar, which may send email to guests. Malicious applications can use this - to erase or modify your calendar events or to send email to guests.</string> + <string name="permdesc_writeCalendar">Allows an application to send event invitations as the calendar owner and add, remove, + change events that you can modify on your device, including those of friends or co-workers. A malicious application with this permission + can send spam emails that appear to come from calendar owners, modify events without the owners\' knowledge, or add fake events.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permlab_accessMockLocation">mock location sources for testing</string> @@ -2403,9 +2404,6 @@ <!-- Item on EditText context menu. This action is used to paste from the clipboard into the eidt field --> <string name="paste">Paste</string> - <!-- Text displayed in a popup dialog in TextEdit when the clipboard is empty. 'paste' is used otherwise. [CHAR LIMIT=20] --> - <string name="pasteDisabled">Nothing to paste</string> - <!-- Item on EditText context menu. This action is used to replace the current word by other suggested words, suggested by the IME or the spell checker --> <string name="replace">Replace</string> @@ -2466,25 +2464,24 @@ activity chooser. See the "Select an action" title. --> <string name="noApplications">No applications can perform this action.</string> <!-- Title of the alert when an application has crashed. --> - <string name="aerr_title">Sorry!</string> + <string name="aerr_title"></string> <!-- Text of the alert that is displayed when an application has crashed. --> - <string name="aerr_application">The application <xliff:g id="application">%1$s</xliff:g> - (process <xliff:g id="process">%2$s</xliff:g>) has stopped unexpectedly. Please try again.</string> + <string name="aerr_application"><xliff:g id="application">%1$s</xliff:g> has stopped by mistake.</string> <!-- Text of the alert that is displayed when an application has crashed. --> <string name="aerr_process">The process <xliff:g id="process">%1$s</xliff:g> has - stopped unexpectedly. Please try again.</string> + stopped by mistake.</string> <!-- Title of the alert when an application is not responding. --> - <string name="anr_title">Sorry!</string> + <string name="anr_title"></string> <!-- Text of the alert that is displayed when an application is not responding. --> - <string name="anr_activity_application">Activity <xliff:g id="activity">%1$s</xliff:g> (in application <xliff:g id="application">%2$s</xliff:g>) is not responding.</string> + <string name="anr_activity_application"><xliff:g id="application">%2$s</xliff:g> is not responding.\n\nWould you like to close it?</string> <!-- Text of the alert that is displayed when an application is not responding. --> - <string name="anr_activity_process">Activity <xliff:g id="activity">%1$s</xliff:g> (in process <xliff:g id="process">%2$s</xliff:g>) is not responding.</string> + <string name="anr_activity_process">Activity <xliff:g id="activity">%1$s</xliff:g> is not responding.\n\nWould you like to close it?</string> <!-- Text of the alert that is displayed when an application is not responding. --> - <string name="anr_application_process">Application <xliff:g id="application">%1$s</xliff:g> (in process <xliff:g id="process">%2$s</xliff:g>) is not responding.</string> + <string name="anr_application_process"><xliff:g id="application">%1$s</xliff:g> is not responding. Would you like to close it?</string> <!-- Text of the alert that is displayed when an application is not responding. --> - <string name="anr_process">Process <xliff:g id="process">%1$s</xliff:g> is not responding.</string> + <string name="anr_process">Process <xliff:g id="process">%1$s</xliff:g> is not responding.\n\nWould you like to close it?</string> <!-- Button allowing the user to close an application that is not responding. This will kill the application. --> - <string name="force_close">Force close</string> + <string name="force_close">OK</string> <!-- Button allowing the user to send a bug report for application which has encountered an error. --> <string name="report">Report</string> <!-- Button allowing the user to choose to wait for an application that is not responding to become responsive again. --> @@ -2554,17 +2551,15 @@ <string name="volume_unknown">Volume</string> <!-- Content description for bluetooth volume icon [CHAR LIMIT=100] --> - <string name="volume_icon_description_bluetooth">Bluetooth volume. Tap to toggle silent mode.</string> + <string name="volume_icon_description_bluetooth">Bluetooth volume</string> <!-- Content description for ringer volume icon [CHAR LIMIT=100] --> - <string name="volume_icon_description_ringer">Ringtone volume. Tap to toggle silent mode.</string> + <string name="volume_icon_description_ringer">Ringtone volume</string> <!-- Content description for in-call volume icon [CHAR LIMIT=100] --> - <string name="volume_icon_description_incall">Call volume. Tap to toggle silent mode.</string> + <string name="volume_icon_description_incall">Call volume</string> <!-- Content description for media volume icon [CHAR LIMIT=100] --> - <string name="volume_icon_description_media">Media volume. Tap to toggle silent mode.</string> + <string name="volume_icon_description_media">Media volume</string> <!-- Content description for notification volume icon [CHAR LIMIT=100] --> - <string name="volume_icon_description_notification">Notification volume. Tap to toggle silent mode.</string> - <!-- Content description for volume settings expansion button [CHAR LIMIT=100] --> - <string name="volume_panel_more_description">Tap to show more audio stream volumes.</string> + <string name="volume_icon_description_notification">Notification volume</string> <!-- Ringtone picker strings --> <skip /> <!-- Choice in the ringtone picker. If chosen, the default ringtone will be used. --> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 0c6e20f..8ff9d46 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -1090,6 +1090,7 @@ please see styles_device_defaults.xml. <style name="Widget.ActionMode"> <item name="android:background">?android:attr/actionModeBackground</item> + <item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item> <item name="android:height">?android:attr/actionBarSize</item> <item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Title</item> <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item> @@ -1113,7 +1114,7 @@ please see styles_device_defaults.xml. </style> <style name="Widget.ActionButton"> - <item name="android:background">?android:attr/selectableItemBackground</item> + <item name="android:background">?android:attr/actionBarItemBackground</item> <item name="android:paddingLeft">12dip</item> <item name="android:paddingRight">12dip</item> <item name="android:minWidth">56dip</item> @@ -1126,7 +1127,6 @@ please see styles_device_defaults.xml. </style> <style name="Widget.ActionButton.CloseMode"> - <item name="android:src">?android:attr/actionModeCloseDrawable</item> </style> <style name="Widget.ActionBar.TabView" parent="Widget"> @@ -1847,9 +1847,9 @@ please see styles_device_defaults.xml. </style> <style name="Widget.Holo.ActionBar.TabBar" parent="Widget.ActionBar.TabBar"> - <item name="android:divider">?android:attr/dividerVertical</item> + <item name="android:divider">?android:attr/actionBarDivider</item> <item name="android:showDividers">middle</item> - <item name="android:dividerPadding">8dip</item> + <item name="android:dividerPadding">12dip</item> </style> <style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText"> @@ -1866,7 +1866,7 @@ please see styles_device_defaults.xml. </style> <style name="Widget.Holo.ActionButton.CloseMode"> - <item name="android:src">@drawable/cab_ic_close_holo</item> + <item name="android:background">@drawable/btn_cab_done_holo_dark</item> </style> <style name="Widget.Holo.ActionBar" parent="Widget.ActionBar"> @@ -2230,6 +2230,7 @@ please see styles_device_defaults.xml. </style> <style name="Widget.Holo.Light.ActionButton.CloseMode"> + <item name="android:background">@drawable/btn_cab_done_holo_light</item> </style> <style name="Widget.Holo.Light.ActionBar" parent="Widget.Holo.ActionBar"> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 82299b8..397278c 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -287,7 +287,8 @@ please see themes_device_defaults.xml. <item name="actionDropDownStyle">@android:style/Widget.Spinner.DropDown</item> <item name="actionButtonStyle">@android:style/Widget.ActionButton</item> <item name="actionOverflowButtonStyle">@android:style/Widget.ActionButton.Overflow</item> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_dark</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item> + <item name="actionModeSplitBackground">@null</item> <item name="actionModeCloseDrawable">@android:drawable/ic_menu_close_clear_cancel</item> <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item> @@ -308,6 +309,8 @@ please see themes_device_defaults.xml. <item name="actionMenuTextAppearance">@android:style/TextAppearance.Holo.Widget.ActionBar.Menu</item> <item name="actionMenuTextColor">?android:attr/textColorPrimary</item> <item name="actionBarWidgetTheme">@null</item> + <item name="actionBarDivider">?android:attr/dividerVertical</item> + <item name="actionBarItemBackground">?android:attr/selectableItemBackground</item> <item name="dividerVertical">@drawable/divider_vertical_dark</item> <item name="dividerHorizontal">@drawable/divider_vertical_dark</item> @@ -428,7 +431,8 @@ please see themes_device_defaults.xml. <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_light</item> <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_light</item> <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_light</item> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_light</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_light</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> <!-- SearchView attributes --> <item name="searchDropdownBackground">@android:drawable/search_dropdown_light</item> @@ -717,22 +721,26 @@ please see themes_device_defaults.xml. <!-- Theme for the search input bar. --> <style name="Theme.SearchBar" parent="Theme.Holo.Light.Panel"> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_light</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_light</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> </style> <style name="Theme.Holo.SearchBar" parent="Theme.Holo.Panel"> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_dark</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> </style> <style name="Theme.Holo.Light.SearchBar" parent="Theme.Holo.Light.Panel"> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_light</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_light</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> </style> <!-- Theme for the search input bar when doing global search. The only difference from non-global search is that we do not dim the background. --> <style name="Theme.GlobalSearchBar" parent="Theme.Panel"> <item name="windowContentOverlay">@null</item> - <item name="actionModeBackground">@android:drawable/cab_background_opaque_holo_light</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_light</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> </style> <!-- Menu Themes --> @@ -1070,8 +1078,9 @@ please see themes_device_defaults.xml. <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item> <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item> <item name="actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item> - <item name="actionModeBackground">@android:drawable/cab_background_holo_dark</item> - <item name="actionModeCloseDrawable">@android:drawable/cab_ic_close_holo</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_dark</item> + <item name="actionModeCloseDrawable">@android:drawable/ic_cab_done_holo_dark</item> <item name="actionBarTabStyle">@style/Widget.Holo.ActionBar.TabView</item> <item name="actionBarTabBarStyle">@style/Widget.Holo.ActionBar.TabBar</item> <item name="actionBarTabTextStyle">@style/Widget.Holo.ActionBar.TabText</item> @@ -1371,8 +1380,9 @@ please see themes_device_defaults.xml. <item name="actionDropDownStyle">@android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar</item> <item name="actionButtonStyle">@android:style/Widget.Holo.Light.ActionButton</item> <item name="actionOverflowButtonStyle">@android:style/Widget.Holo.Light.ActionButton.Overflow</item> - <item name="actionModeBackground">@android:drawable/cab_background_holo_light</item> - <item name="actionModeCloseDrawable">@android:drawable/cab_ic_close_holo</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_light</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_light</item> + <item name="actionModeCloseDrawable">@android:drawable/ic_cab_done_holo_light</item> <item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView</item> <item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar</item> <item name="actionBarTabTextStyle">@style/Widget.Holo.Light.ActionBar.TabText</item> @@ -1429,19 +1439,22 @@ please see themes_device_defaults.xml. with an inverse color profile. The dark action bar sharply stands out against the light content. --> <style name="Theme.Holo.Light.DarkActionBar"> - <item name="android:windowContentOverlay">@android:drawable/title_bar_shadow</item> + <item name="android:windowContentOverlay">@android:drawable/ab_solid_shadow_holo</item> <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item> <item name="actionBarWidgetTheme">@android:style/Theme.Holo</item> <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item> <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item> <item name="actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item> - <item name="actionModeBackground">@android:drawable/cab_background_holo_dark</item> - <item name="actionModeCloseDrawable">@android:drawable/cab_ic_close_holo</item> + <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item> + <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_dark</item> + <item name="actionModeCloseDrawable">@android:drawable/ic_cab_done_holo_dark</item> <item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item> <item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView.Inverse</item> <item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar.Inverse</item> <item name="actionBarTabTextStyle">@style/Widget.Holo.Light.ActionBar.TabText.Inverse</item> + <item name="actionBarDivider">@android:drawable/list_divider_holo_dark</item> + <item name="actionBarItemBackground">@android:drawable/item_background_holo_dark</item> <item name="actionMenuTextColor">?android:attr/textColorPrimaryInverse</item> <item name="actionModeStyle">@style/Widget.Holo.Light.ActionMode.Inverse</item> <item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item> diff --git a/core/tests/coretests/src/android/content/pm/ManifestDigestTest.java b/core/tests/coretests/src/android/content/pm/ManifestDigestTest.java new file mode 100644 index 0000000..8922f27 --- /dev/null +++ b/core/tests/coretests/src/android/content/pm/ManifestDigestTest.java @@ -0,0 +1,74 @@ +package android.content.pm; + +import android.os.Parcel; +import android.test.AndroidTestCase; +import android.util.Base64; + +import java.util.jar.Attributes; + +public class ManifestDigestTest extends AndroidTestCase { + private static final byte[] DIGEST_1 = { + (byte) 0x00, (byte) 0xAA, (byte) 0x55, (byte) 0xFF + }; + + private static final String DIGEST_1_STR = Base64.encodeToString(DIGEST_1, Base64.DEFAULT); + + private static final byte[] DIGEST_2 = { + (byte) 0x0A, (byte) 0xA5, (byte) 0xF0, (byte) 0x5A + }; + + private static final String DIGEST_2_STR = Base64.encodeToString(DIGEST_2, Base64.DEFAULT); + + private static final Attributes.Name SHA1_DIGEST = new Attributes.Name("SHA1-Digest"); + + private static final Attributes.Name MD5_DIGEST = new Attributes.Name("MD5-Digest"); + + public void testManifestDigest_FromAttributes_Null() { + assertNull("Attributes were null, so ManifestDigest.fromAttributes should return null", + ManifestDigest.fromAttributes(null)); + } + + public void testManifestDigest_FromAttributes_NoAttributes() { + Attributes a = new Attributes(); + + assertNull("There were no attributes to extract, so ManifestDigest should be null", + ManifestDigest.fromAttributes(a)); + } + + public void testManifestDigest_FromAttributes_SHA1PreferredOverMD5() { + Attributes a = new Attributes(); + a.put(SHA1_DIGEST, DIGEST_1_STR); + + a.put(MD5_DIGEST, DIGEST_2_STR); + + ManifestDigest fromAttributes = ManifestDigest.fromAttributes(a); + + assertNotNull("A valid ManifestDigest should be returned", fromAttributes); + + ManifestDigest created = new ManifestDigest(DIGEST_1); + + assertEquals("SHA-1 should be preferred over MD5: " + created.toString() + " vs. " + + fromAttributes.toString(), created, fromAttributes); + + assertEquals("Hash codes should be the same: " + created.toString() + " vs. " + + fromAttributes.toString(), created.hashCode(), fromAttributes + .hashCode()); + } + + public void testManifestDigest_Parcel() { + Attributes a = new Attributes(); + a.put(SHA1_DIGEST, DIGEST_1_STR); + + ManifestDigest digest = ManifestDigest.fromAttributes(a); + + Parcel p = Parcel.obtain(); + digest.writeToParcel(p, 0); + p.setDataPosition(0); + + ManifestDigest fromParcel = ManifestDigest.CREATOR.createFromParcel(p); + + assertEquals("ManifestDigest going through parceling should be the same as before: " + + digest.toString() + " and " + fromParcel.toString(), digest, + fromParcel); + } +} diff --git a/data/fonts/DroidSansThai.ttf b/data/fonts/DroidSansThai.ttf Binary files differindex f849bae..c078be0 100644 --- a/data/fonts/DroidSansThai.ttf +++ b/data/fonts/DroidSansThai.ttf diff --git a/data/fonts/Roboto-Bold.ttf b/data/fonts/Roboto-Bold.ttf Binary files differnew file mode 100755 index 0000000..32c1794 --- /dev/null +++ b/data/fonts/Roboto-Bold.ttf diff --git a/data/fonts/Roboto-BoldCondensed.ttf b/data/fonts/Roboto-BoldCondensed.ttf Binary files differnew file mode 100755 index 0000000..61da020 --- /dev/null +++ b/data/fonts/Roboto-BoldCondensed.ttf diff --git a/data/fonts/Roboto-BoldCondensedItalic.ttf b/data/fonts/Roboto-BoldCondensedItalic.ttf Binary files differnew file mode 100755 index 0000000..b946dce --- /dev/null +++ b/data/fonts/Roboto-BoldCondensedItalic.ttf diff --git a/data/fonts/Roboto-BoldItalic.ttf b/data/fonts/Roboto-BoldItalic.ttf Binary files differnew file mode 100755 index 0000000..551bae2 --- /dev/null +++ b/data/fonts/Roboto-BoldItalic.ttf diff --git a/data/fonts/Roboto-Condensed.ttf b/data/fonts/Roboto-Condensed.ttf Binary files differnew file mode 100755 index 0000000..73a868f --- /dev/null +++ b/data/fonts/Roboto-Condensed.ttf diff --git a/data/fonts/Roboto-CondensedItalic.ttf b/data/fonts/Roboto-CondensedItalic.ttf Binary files differnew file mode 100755 index 0000000..a0969bb --- /dev/null +++ b/data/fonts/Roboto-CondensedItalic.ttf diff --git a/data/fonts/Roboto-Italic.ttf b/data/fonts/Roboto-Italic.ttf Binary files differnew file mode 100755 index 0000000..9795cc0 --- /dev/null +++ b/data/fonts/Roboto-Italic.ttf diff --git a/data/fonts/Roboto-Regular.ttf b/data/fonts/Roboto-Regular.ttf Binary files differnew file mode 100755 index 0000000..8545f29 --- /dev/null +++ b/data/fonts/Roboto-Regular.ttf diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk index 9a590bb..73fb111 100644 --- a/data/fonts/fonts.mk +++ b/data/fonts/fonts.mk @@ -15,6 +15,10 @@ # Warning: this is actually a product definition, to be inherited from PRODUCT_COPY_FILES := \ + frameworks/base/data/fonts/Roboto-Regular.ttf:system/fonts/Roboto-Regular.ttf \ + frameworks/base/data/fonts/Roboto-Bold.ttf:system/fonts/Roboto-Bold.ttf \ + frameworks/base/data/fonts/Roboto-Italic.ttf:system/fonts/Roboto-Italic.ttf \ + frameworks/base/data/fonts/Roboto-BoldItalic.ttf:system/fonts/Roboto-BoldItalic.ttf \ frameworks/base/data/fonts/DroidSans.ttf:system/fonts/DroidSans.ttf \ frameworks/base/data/fonts/DroidSans-Bold.ttf:system/fonts/DroidSans-Bold.ttf \ frameworks/base/data/fonts/DroidNaskh-Regular.ttf:system/fonts/DroidNaskh-Regular.ttf \ diff --git a/data/fonts/system_fonts.xml b/data/fonts/system_fonts.xml index 8d8d020..76a5002 100644 --- a/data/fonts/system_fonts.xml +++ b/data/fonts/system_fonts.xml @@ -27,8 +27,10 @@ <name>verdana</name> </nameset> <fileset> - <file>DroidSans.ttf</file> - <file>DroidSans-Bold.ttf</file> + <file>Roboto-Regular.ttf</file> + <file>Roboto-Bold.ttf</file> + <file>Roboto-Italic.ttf</file> + <file>Roboto-BoldItalic.ttf</file> </fileset> </family> @@ -53,6 +55,16 @@ </fileset> </family> + <family> + <nameset> + <name>Droid Sans</name> + </nameset> + <fileset> + <file>DroidSans.ttf</file> + <file>DroidSans-Bold.ttf</file> + </fileset> + </family> + <family> <nameset> <name>monospace</name> diff --git a/data/keyboards/Generic.kl b/data/keyboards/Generic.kl index 68a158e..10de6ac 100644 --- a/data/keyboards/Generic.kl +++ b/data/keyboards/Generic.kl @@ -105,7 +105,7 @@ key 82 NUMPAD_0 key 83 NUMPAD_DOT # key 84 (undefined) # key 85 "KEY_ZENKAKUHANKAKU" -# key 86 "KEY_102ND" +key 86 BACKSLASH key 87 F11 key 88 F12 # key 89 "KEY_RO" @@ -161,8 +161,8 @@ key 128 MEDIA_STOP key 139 MENU WAKE_DROPPED # key 140 "KEY_CALC" # key 141 "KEY_SETUP" -# key 142 "KEY_SLEEP" -# key 143 "KEY_WAKEUP" +key 142 POWER WAKE +key 143 POWER WAKE # key 144 "KEY_FILE" # key 145 "KEY_SENDFILE" # key 146 "KEY_DELETEFILE" @@ -171,7 +171,7 @@ key 139 MENU WAKE_DROPPED # key 149 "KEY_PROG2" key 150 EXPLORER # key 151 "KEY_MSDOS" -# key 152 "KEY_COFFEE" +key 152 POWER WAKE # key 153 "KEY_DIRECTION" # key 154 "KEY_CYCLEWINDOWS" key 155 ENVELOPE @@ -246,20 +246,6 @@ key 217 SEARCH # key 224 "KEY_BRIGHTNESSDOWN" # key 225 "KEY_BRIGHTNESSUP" key 226 HEADSETHOOK -key 227 STAR -key 228 POUND -key 229 SOFT_LEFT -key 230 SOFT_RIGHT -key 231 CALL -key 232 DPAD_CENTER -key 233 HEADSETHOOK -# key 234 "KEY_0_5" or "KEY_SAVE" -# key 235 "KEY_2_5" or "KEY_DOCUMENTS" -# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY" -# key 237 "KEY_KBDILLUMTOGGLE" -# key 238 "KEY_KBDILLUMDOWN" -# key 239 "KEY_KBDILLUMUP" -# key 240 "KEY_UNKNOWN" key 256 BUTTON_1 key 257 BUTTON_2 diff --git a/docs/html/guide/practices/design/jni.jd b/docs/html/guide/practices/design/jni.jd index 1d0e26e..6e984b0 100644 --- a/docs/html/guide/practices/design/jni.jd +++ b/docs/html/guide/practices/design/jni.jd @@ -18,9 +18,9 @@ page.title=JNI Tips <li><a href="#native_libraries">Native Libraries</a></li> <li><a href="#64_bit">64-bit Considerations</a></li> <li><a href="#unsupported">Unsupported Features</a></li> - <li><a href="#faq_ULE">FAQ: UnsatisfiedLinkError</a></li> - <li><a href="#faq_FindClass">FAQ: FindClass didn't find my class</a></li> - <li><a href="#faq_sharing">FAQ: Sharing raw data with native code</a></li> + <li><a href="#faq_ULE">FAQ: Why do I get <code>UnsatisfiedLinkError</code></a></li> + <li><a href="#faq_FindClass">FAQ: Why didn't <code>FindClass</code> find my class?</a></li> + <li><a href="#faq_sharing">FAQ: How do I share raw data with native code?</a></li> </ol> </div> @@ -28,7 +28,7 @@ page.title=JNI Tips <p>JNI is the Java Native Interface. It defines a way for code written in the Java programming language to interact with native -code, e.g. functions written in C/C++. It's VM-neutral, has support for loading code from +code: functions written in C/C++. It's VM-neutral, has support for loading code from dynamic shared libraries, and while cumbersome at times is reasonably efficient.</p> <p>You really should read through the @@ -36,8 +36,7 @@ dynamic shared libraries, and while cumbersome at times is reasonably efficient. to get a sense for how JNI works and what features are available. Some aspects of the interface aren't immediately obvious on first reading, so you may find the next few sections handy. -The more detailed <i>JNI Programmer's Guide and Specification</i> can be found -<a href="http://java.sun.com/docs/books/jni/html/jniTOC.html">here</a>.</p> +There's a more detailed <a href="http://java.sun.com/docs/books/jni/html/jniTOC.html">JNI Programmer's Guide and Specification</a>.</p> <a name="JavaVM_and_JNIEnv" id="JavaVM_and_JNIEnv"></a> @@ -55,20 +54,20 @@ the first argument.</p> <p>On some VMs, the JNIEnv is used for thread-local storage. For this reason, <strong>you cannot share a JNIEnv between threads</strong>. If a piece of code has no other way to get its JNIEnv, you should share -the JavaVM, and use JavaVM->GetEnv to discover the thread's JNIEnv. (Assuming it has one; see <code>AttachCurrentThread</code> below.)</p> +the JavaVM, and use <code>GetEnv</code> to discover the thread's JNIEnv. (Assuming it has one; see <code>AttachCurrentThread</code> below.)</p> <p>The C declarations of JNIEnv and JavaVM are different from the C++ -declarations. "jni.h" provides different typedefs -depending on whether it's included into ".c" or ".cpp". For this reason it's a bad idea to +declarations. The <code>"jni.h"</code> include file provides different typedefs +depending on whether it's included into C or C++. For this reason it's a bad idea to include JNIEnv arguments in header files included by both languages. (Put another way: if your -header file requires "#ifdef __cplusplus", you may have to do some extra work if anything in +header file requires <code>#ifdef __cplusplus</code>, you may have to do some extra work if anything in that header refers to JNIEnv.)</p> <a name="threads" id="threads"></a> <h2>Threads</h2> <p>All VM threads are Linux threads, scheduled by the kernel. They're usually -started using Java language features (notably <code>Thread.start()</code>), +started using Java language features (notably <code>Thread.start</code>), but they can also be created elsewhere and then attached to the VM. For example, a thread started with <code>pthread_create</code> can be attached with the JNI <code>AttachCurrentThread</code> or @@ -87,7 +86,7 @@ request, the VM will pause the thread the next time it makes a JNI call.</p> <p>Threads attached through JNI <strong>must call <code>DetachCurrentThread</code> before they exit</strong>. -If coding this directly is awkward, in Android >= 2.0 ("Eclair") you +If coding this directly is awkward, in Android 2.0 (Eclair) and higher you can use <code>pthread_key_create</code> to define a destructor function that will be called before the thread exits, and call <code>DetachCurrentThread</code> from there. (Use that @@ -104,7 +103,7 @@ the argument.)</p> <ul> <li> Get the class object reference for the class with <code>FindClass</code></li> <li> Get the field ID for the field with <code>GetFieldID</code></li> -<li> Get the contents of the field with something appropriate, e.g. +<li> Get the contents of the field with something appropriate, such as <code>GetIntField</code></li> </ul> @@ -114,12 +113,12 @@ comparisons, but once you have them the actual call to get the field or invoke t is very quick.</p> <p>If performance is important, it's useful to look the values up once and cache the results -in your native code. Because we are limiting ourselves to one VM per process, it's reasonable +in your native code. Because there is a limit of one VM per process, it's reasonable to store this data in a static local structure.</p> <p>The class references, field IDs, and method IDs are guaranteed valid until the class is unloaded. Classes are only unloaded if all classes associated with a ClassLoader can be garbage collected, -which is rare but will not be impossible in our system. Note however that +which is rare but will not be impossible in Android. Note however that the <code>jclass</code> is a class reference and <strong>must be protected</strong> with a call to <code>NewGlobalRef</code> (see the next section).</p> @@ -130,27 +129,18 @@ the IDs is to add a piece of code that looks like this to the appropriate class: <pre> /* * We use a class initializer to allow the native code to cache some - * field offsets. + * field offsets. This native function looks up and caches interesting + * class/field/method IDs. Throws on failure. */ + private static native void nativeInit(); - /* - * A native function that looks up and caches interesting - * class/field/method IDs for this class. Returns false on failure. - */ - native private static boolean nativeClassInit(); - - /* - * Invoke the native initializer when the class is loaded. - */ static { - if (!nativeClassInit()) - throw new RuntimeException("native init failed"); + nativeInit(); }</pre> -<p>Create a nativeClassInit method in your C/C++ code that performs the ID lookups. The code +<p>Create a <code>nativeClassInit</code> method in your C/C++ code that performs the ID lookups. The code will be executed once, when the class is initialized. If the class is ever unloaded and -then reloaded, it will be executed again. (See the implementation of java.io.FileDescriptor -for an example in our source tree.)</p> +then reloaded, it will be executed again.</p> <a name="local_and_global_references" id="local_and_global_references"></a> <h2>Local and Global References</h2> @@ -175,12 +165,12 @@ from <code>FindClass</code>, e.g.:</p> jclass globalClass = reinterpret_cast<jclass>(env->NewGlobalRef(localClass));</pre> <p>All JNI methods accept both local and global references as arguments. -It's possible for references to the same object to have different values; -for example, the return values from consecutive calls to +It's possible for references to the same object to have different values. +For example, the return values from consecutive calls to <code>NewGlobalRef</code> on the same object may be different. <strong>To see if two references refer to the same object, you must use the <code>IsSameObject</code> function.</strong> Never compare -references with "==" in native code.</p> +references with <code>==</code> in native code.</p> <p>One consequence of this is that you <strong>must not assume object references are constant or unique</strong> @@ -197,13 +187,13 @@ VM is only required to reserve slots for 16 local references, so if you need more than that you should either delete as you go or use <code>EnsureLocalCapacity</code> to reserve more.</p> -<p>Note: method and field IDs are just 32-bit identifiers, not object +<p>Note that <code>jfieldID</code>s and <code>jmethodID</code>s are just integers, not object references, and should not be passed to <code>NewGlobalRef</code>. The raw data pointers returned by functions like <code>GetStringUTFChars</code> and <code>GetByteArrayElements</code> are also not objects.</p> <p>One unusual case deserves separate mention. If you attach a native -thread to the VM with AttachCurrentThread, the code you are running will +thread to the VM with <code>AttachCurrentThread</code>, the code you are running will never "return" to the VM until the thread detaches from the VM. Any local references you create will have to be deleted manually unless you're going to detach the thread soon.</p> @@ -217,17 +207,17 @@ The nice thing about this is that you can count on having C-style zero-terminate suitable for use with standard libc string functions. The down side is that you cannot pass arbitrary UTF-8 data into the VM and expect it to work correctly.</p> -<p>It's usually best to operate with UTF-16 strings. With our current VMs, the +<p>It's usually best to operate with UTF-16 strings. With Android's current VMs, the <code>GetStringChars</code> method does not require a copy, whereas <code>GetStringUTFChars</code> requires a malloc and a UTF conversion. Note that <strong>UTF-16 strings are not zero-terminated</strong>, and \u0000 is allowed, so you need to hang on to the string length as well as the string pointer.</p> -<p><strong>Don't forget to Release the strings you Get</strong>. The +<p><strong>Don't forget to <code>Release</code> the strings you <code>Get</code></strong>. The string functions return <code>jchar*</code> or <code>jbyte*</code>, which are C-style pointers to primitive data rather than local references. They -are guaranteed valid until Release is called, which means they are not +are guaranteed valid until <code>Release</code> is called, which means they are not released when the native method returns.</p> <p><strong>Data passed to NewStringUTF must be in Modified UTF-8 format</strong>. A @@ -254,8 +244,8 @@ allocate some memory and make a copy. Either way, the raw pointer returned is guaranteed to be valid until the corresponding <code>Release</code> call is issued (which implies that, if the data wasn't copied, the array object will be pinned down and can't be relocated as part of compacting the heap). -<strong>You must Release every array you Get.</strong> Also, if the Get -call fails, you must ensure that your code doesn't try to Release a NULL +<strong>You must <code>Release</code> every array you <code>Get</code>.</strong> Also, if the <code>Get</code> +call fails, you must ensure that your code doesn't try to <code>Release</code> a NULL pointer later.</p> <p>You can determine whether or not the data was copied by passing in a @@ -298,12 +288,12 @@ then discard the changes. If you know that JNI is making a new copy for you, there's no need to create another "editable" copy. If JNI is passing you the original, then you do need to make your own copy.</p> -<p>Some have asserted that you can skip the <code>Release</code> call if +<p>It is a common mistake (repeated in example code) to assume that you can skip the <code>Release</code> call if <code>*isCopy</code> is false. This is not the case. If no copy buffer was allocated, then the original memory must be pinned down and can't be moved by the garbage collector.</p> -<p>Also note that the <code>JNI_COMMIT</code> flag does NOT release the array, +<p>Also note that the <code>JNI_COMMIT</code> flag does <strong>not</strong> release the array, and you will need to call <code>Release</code> again with a different flag eventually.</p> @@ -315,8 +305,7 @@ eventually.</p> and <code>GetStringChars</code> that may be very helpful when all you want to do is copy data in or out. Consider the following:</p> -<pre> - jbyte* data = env->GetByteArrayElements(array, NULL); +<pre> jbyte* data = env->GetByteArrayElements(array, NULL); if (data != NULL) { memcpy(buffer, data, len); env->ReleaseByteArrayElements(array, data, JNI_ABORT); @@ -325,12 +314,11 @@ to do is copy data in or out. Consider the following:</p> <p>This grabs the array, copies the first <code>len</code> byte elements out of it, and then releases the array. Depending upon the VM policies the <code>Get</code> call will either pin or copy the array contents. -We copy the data (for perhaps a second time), then call Release; in this case -we use <code>JNI_ABORT</code> so there's no chance of a third copy.</p> +The code copies the data (for perhaps a second time), then calls <code>Release</code>; in this case +<code>JNI_ABORT</code> ensures there's no chance of a third copy.</p> -<p>We can accomplish the same thing with this:</p> -<pre> - env->GetByteArrayRegion(array, 0, len, buffer);</pre> +<p>One can accomplish the same thing more simply:</p> +<pre> env->GetByteArrayRegion(array, 0, len, buffer);</pre> <p>This has several advantages:</p> <ul> @@ -349,29 +337,29 @@ to copy data into an array, and <code>GetStringRegion</code> or <a name="exceptions" id="exceptions"></a> <h2>Exception</h2> -<p><strong>You may not call most JNI functions while an exception is pending.</strong> +<p><strong>You must not call most JNI functions while an exception is pending.</strong> Your code is expected to notice the exception (via the function's return value, -<code>ExceptionCheck()</code>, or <code>ExceptionOccurred()</code>) and return, +<code>ExceptionCheck</code>, or <code>ExceptionOccurred</code>) and return, or clear the exception and handle it.</p> <p>The only JNI functions that you are allowed to call while an exception is pending are:</p> <ul> - <li>DeleteGlobalRef - <li>DeleteLocalRef - <li>DeleteWeakGlobalRef - <li>ExceptionCheck - <li>ExceptionClear - <li>ExceptionDescribe - <li>ExceptionOccurred - <li>MonitorExit - <li>PopLocalFrame - <li>PushLocalFrame - <li>Release<PrimitiveType>ArrayElements - <li>ReleasePrimitiveArrayCritical - <li>ReleaseStringChars - <li>ReleaseStringCritical - <li>ReleaseStringUTFChars + <li><code>DeleteGlobalRef</code> + <li><code>DeleteLocalRef</code> + <li><code>DeleteWeakGlobalRef</code> + <li><code>ExceptionCheck</code> + <li><code>ExceptionClear</code> + <li><code>ExceptionDescribe</code> + <li><code>ExceptionOccurred</code> + <li><code>MonitorExit</code> + <li><code>PopLocalFrame</code> + <li><code>PushLocalFrame</code> + <li><code>Release<PrimitiveType>ArrayElements</code> + <li><code>ReleasePrimitiveArrayCritical</code> + <li><code>ReleaseStringChars</code> + <li><code>ReleaseStringCritical</code> + <li><code>ReleaseStringUTFChars</code> </ul> <p>Many JNI calls can throw an exception, but often provide a simpler way @@ -392,86 +380,80 @@ native code, the exception will be noted and handled appropriately.</p> <code>ExceptionClear</code>. As usual, discarding exceptions without handling them can lead to problems.</p> -<p>There are no built-in functions for manipulating the Throwable object +<p>There are no built-in functions for manipulating the <code>Throwable</code> object itself, so if you want to (say) get the exception string you will need to -find the Throwable class, look up the method ID for +find the <code>Throwable</code> class, look up the method ID for <code>getMessage "()Ljava/lang/String;"</code>, invoke it, and if the result is non-NULL use <code>GetStringUTFChars</code> to get something you can -hand to printf or a LOG macro.</p> +hand to <code>printf(3)</code> or equivalent.</p> <a name="extended_checking" id="extended_checking"></a> <h2>Extended Checking</h2> -<p>JNI does very little error checking. Calling <code>SetIntField</code> -on an Object field will succeed, even if the field is marked -<code>private</code> and <code>final</code>. The -goal is to minimize the overhead on the assumption that, if you've written it in native code, -you probably did it for performance reasons.</p> - -<p>In Dalvik, you can enable additional checks by setting the -"<code>-Xcheck:jni</code>" flag. If the flag is set, the VM directs -the JavaVM and JNIEnv pointers to a different table of functions. -These functions perform an extended series of checks before calling the -standard implementation.</p> +<p>JNI does very little error checking. Errors usually result in a crash. Android also offers a mode called CheckJNI, where the JavaVM and JNIEnv function table pointers are switched to tables of functions that perform an extended series of checks before calling the standard implementation.</p> -<p>The additional tests include:</p> +<p>The additional checks include:</p> <ul> -<li> Check for null pointers where not allowed.</li> -<li> Verify argument type correctness (jclass is a class object, -jfieldID points to field data, jstring is a java.lang.String).</li> -<li> Field type correctness, e.g. don't store a HashMap in a String field.</li> -<li> Ensure jmethodID is appropriate when making a static or virtual -method call.</li> -<li> Check to see if an exception is pending on calls where pending exceptions are not legal.</li> -<li> Check for calls to inappropriate functions between Critical get/release calls.</li> -<li> Check that JNIEnv structs aren't being shared between threads.</li> -<li> Make sure local references aren't used outside their allowed lifespan.</li> -<li> UTF-8 strings contain only valid <a href="http://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8">Modified UTF-8</a> data.</li> +<li>Arrays: attempting to allocate a negative-sized array.</li> +<li>Bad pointers: passing a bad jarray/jclass/jobject/jstring to a JNI call, or passing a NULL pointer to a JNI call with a non-nullable argument.</li> +<li>Class names: passing anything but the “java/lang/String” style of class name to a JNI call.</li> +<li>Critical calls: making a JNI call between a “critical” get and its corresponding release.</li> +<li>Direct ByteBuffers: passing bad arguments to <code>NewDirectByteBuffer</code>.</li> +<li>Exceptions: making a JNI call while there’s an exception pending.</li> +<li>JNIEnv*s: using a JNIEnv* from the wrong thread.</li> +<li>jfieldIDs: using a NULL jfieldID, or using a jfieldID to set a field to a value of the wrong type (trying to assign a StringBuilder to a String field, say), or using a jfieldID for a static field to set an instance field or vice versa, or using a jfieldID from one class with instances of another class.</li> +<li>jmethodIDs: using the wrong kind of jmethodID when making a <code>Call*Method</code> JNI call: incorrect return type, static/non-static mismatch, wrong type for ‘this’ (for non-static calls) or wrong class (for static calls).</li> +<li>References: using <code>DeleteGlobalRef</code>/<code>DeleteLocalRef</code> on the wrong kind of reference.</li> +<li>Release modes: passing a bad release mode to a release call (something other than <code>0</code>, <code>JNI_ABORT</code>, or <code>JNI_COMMIT</code>).</li> +<li>Type safety: returning an incompatible type from your native method (returning a StringBuilder from a method declared to return a String, say).</li> +<li>UTF-8: passing an invalid <a href="http://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8">Modified UTF-8</a> byte sequence to a JNI call.</li> </ul> -<p>Accessibility of methods and fields (i.e. public vs. private) is not -checked.</p> +<p>(Accessibility of methods and fields is still not checked: access restrictions don't apply to native code.)</p> + +<p>There are several ways to enable CheckJNI.</p> + +<p>If you’re using the emulator, CheckJNI is on by default.</p> + +<p>If you have a rooted device, you can use the following sequence of commands to restart the runtime with CheckJNI enabled:</p> + +<pre>adb shell stop +adb shell setprop dalvik.vm.checkjni true +adb shell start</pre> + +<p>In either of these cases, you’ll see something like this in your logcat output when the runtime starts:</p> + +<pre>D AndroidRuntime: CheckJNI is ON</pre> + +<p>If you have a regular device, you can use the following command:</p> + +<pre>adb shell setprop debug.checkjni 1</pre> + +<p>This won’t affect already-running apps, but any app launched from that point on will have CheckJNI enabled. (Change the property to any other value or simply rebooting will disable CheckJNI again.) In this case, you’ll see something like this in your logcat output the next time an app starts:</p> -<p>For a description of how to enable CheckJNI for Android apps, see -<a href="embedded-vm-control.html">Controlling the Embedded VM</a>. -It's currently enabled by default in the Android emulator and on -"engineering" device builds.</p> +<pre>D Late-enabling CheckJNI</pre> -<p>JNI checks can be modified with the <code>-Xjniopts</code> command-line -flag. Currently supported values include:</p> -<dl> -<dt>forcecopy -<dd>When set, any function that can return a copy of the original data -(array of primitive values, UTF-16 chars) will always do so. The buffers -are over-allocated and surrounded with a guard pattern to help identify -code writing outside the buffer, and the contents are erased before the -storage is freed to trip up code that uses the data after calling Release. -This will have a noticeable performance impact on some applications. -<dt>warnonly -<dd>By default, JNI "warnings" cause the VM to abort. With this flag -it continues on. -</dl> <a name="native_libraries" id="native_libraries"></a> <h2>Native Libraries</h2> <p>You can load native code from shared libraries with the standard -<code>System.loadLibrary()</code> call. The +<code>System.loadLibrary</code> call. The preferred way to get at your native code is:</p> <ul> -<li> Call <code>System.loadLibrary()</code> from a static class +<li> Call <code>System.loadLibrary</code> from a static class initializer. (See the earlier example, where one is used to call -<code>nativeClassInit()</code>.) The argument is the "undecorated" -library name, e.g. to load "libfubar.so" you would pass in "fubar".</li> +<code>nativeClassInit</code>.) The argument is the "undecorated" +library name, so to load "libfubar.so" you would pass in "fubar".</li> <li> Provide a native function: <code><strong>jint JNI_OnLoad(JavaVM* vm, void* reserved)</strong></code></li> <li>In <code>JNI_OnLoad</code>, register all of your native methods. You should declare -the functions <code>static</code> so the names don't take up space in the symbol table +the methods "static" so the names don't take up space in the symbol table on the device.</li> </ul> @@ -490,7 +472,7 @@ written in C++:</p> return JNI_VERSION_1_6; }</pre> -<p>You can also call <code>System.load()</code> with the full path name of the +<p>You can also call <code>System.load</code> with the full path name of the shared library. For Android apps, you may find it useful to get the full path to the application's private data storage area from the context object.</p> @@ -549,28 +531,28 @@ that use 64-bit pointers, <strong>you need to stash your native pointers in a <p>For backward compatibility, you may need to be aware of:</p> <ul> - <li>Until Android 2.0 ("Eclair"), the '$' character was not properly + <li>Until Android 2.0 (Eclair), the '$' character was not properly converted to "_00024" during searches for method names. Working around this requires using explicit registration or moving the native methods out of inner classes. - <li>Until Android 2.0 ("Eclair"), it was not possible to use a <code>pthread_key_create</code> + <li>Until Android 2.0 (Eclair), it was not possible to use a <code>pthread_key_create</code> destructor function to avoid the VM's "thread must be detached before exit" check. (The VM also uses a pthread key destructor function, so it'd be a race to see which gets called first.) - <li>"Weak global" references were not implemented until Android 2.2 ("Froyo"). + <li>Until Android 2.2 (Froyo), weak global references were not implemented. Older VMs will vigorously reject attempts to use them. You can use the Android platform version constants to test for support. </ul> <a name="faq_ULE" id="faq_ULE"></a> -<h2>FAQ: UnsatisfiedLinkError</h2> +<h2>FAQ: Why do I get <code>UnsatisfiedLinkError</code>?</h2> <p>When working on native code it's not uncommon to see a failure like this:</p> <pre>java.lang.UnsatisfiedLinkError: Library foo not found</pre> <p>In some cases it means what it says — the library wasn't found. In -other cases the library exists but couldn't be opened by dlopen(), and +other cases the library exists but couldn't be opened by <code>dlopen(3)</code>, and the details of the failure can be found in the exception's detail message.</p> <p>Common reasons why you might encounter "library not found" exceptions:</p> @@ -601,7 +583,7 @@ Some common reasons for this are:</p> <li>For lazy method lookup, failing to declare C++ functions with <code>extern "C"</code>. You can use <code>arm-eabi-nm</code> to see the symbols as they appear in the library; if they look - mangled (e.g. <code>_Z15Java_Foo_myfuncP7_JNIEnvP7_jclass</code> + mangled (something like <code>_Z15Java_Foo_myfuncP7_JNIEnvP7_jclass</code> rather than <code>Java_Foo_myfunc</code>) then you need to adjust the declaration. <li>For explicit registration, minor errors when entering the @@ -610,8 +592,7 @@ Some common reasons for this are:</p> Remember that 'B' is <code>byte</code> and 'Z' is <code>boolean</code>. Class name components in signatures start with 'L', end with ';', use '/' to separate package/class names, and use '$' to separate - inner-class names - (e.g. <code>Ljava/util/Map$Entry;</code>). + inner-class names (<code>Ljava/util/Map$Entry;</code>, say). </ul> </ul> @@ -620,11 +601,11 @@ avoid some problems. <a name="faq_FindClass" id="faq_FindClass"></a> -<h2>FAQ: FindClass didn't find my class</h2> +<h2>FAQ: Why didn't <code>FindClass</code> find my class?</h2> <p>Make sure that the class name string has the correct format. JNI class names start with the package name and are separated with slashes, -e.g. <code>java/lang/String</code>. If you're looking up an array class, +such as <code>java/lang/String</code>. If you're looking up an array class, you need to start with the appropriate number of square brackets and must also wrap the class with 'L' and ';', so a one-dimensional array of <code>String</code> would be <code>[Ljava/lang/String;</code>.</p> @@ -663,8 +644,8 @@ with your application, so attempts to find app-specific classes will fail.</p> If your app code is loading the library, <code>FindClass</code> will use the correct class loader. <li>Pass an instance of the class into the functions that need - it, e.g. declare your native method to take a Class argument and - then pass <code>Foo.class</code> in. + it, by declaring your native method to take a Class argument and + then passing <code>Foo.class</code> in. <li>Cache a reference to the <code>ClassLoader</code> object somewhere handy, and issue <code>loadClass</code> calls directly. This requires some effort. @@ -672,7 +653,7 @@ with your application, so attempts to find app-specific classes will fail.</p> <a name="faq_sharing" id="faq_sharing"></a> -<h2>FAQ: Sharing raw data with native code</h2> +<h2>FAQ: How do I share raw data with native code?</h2> <p>You may find yourself in a situation where you need to access a large buffer of raw data from code written in Java and C/C++. Common examples diff --git a/docs/html/images/screens_support/compat-stretch-thumb.png b/docs/html/images/screens_support/compat-stretch-thumb.png Binary files differnew file mode 100644 index 0000000..da2c07c --- /dev/null +++ b/docs/html/images/screens_support/compat-stretch-thumb.png diff --git a/docs/html/images/screens_support/compat-stretch.png b/docs/html/images/screens_support/compat-stretch.png Binary files differnew file mode 100644 index 0000000..69d81a6 --- /dev/null +++ b/docs/html/images/screens_support/compat-stretch.png diff --git a/docs/html/images/screens_support/compat-toggle.png b/docs/html/images/screens_support/compat-toggle.png Binary files differnew file mode 100644 index 0000000..14dc59d --- /dev/null +++ b/docs/html/images/screens_support/compat-toggle.png diff --git a/docs/html/images/screens_support/compat-zoom-thumb.png b/docs/html/images/screens_support/compat-zoom-thumb.png Binary files differnew file mode 100644 index 0000000..244800b --- /dev/null +++ b/docs/html/images/screens_support/compat-zoom-thumb.png diff --git a/docs/html/images/screens_support/compat-zoom.png b/docs/html/images/screens_support/compat-zoom.png Binary files differnew file mode 100644 index 0000000..5f46820 --- /dev/null +++ b/docs/html/images/screens_support/compat-zoom.png diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 3fc6463..79acd55 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -93,7 +93,7 @@ public final class Bitmap implements Parcelable { This can be called from JNI code. */ - private Bitmap(int nativeBitmap, byte[] buffer, boolean isMutable, byte[] ninePatchChunk, + /*package*/ Bitmap(int nativeBitmap, byte[] buffer, boolean isMutable, byte[] ninePatchChunk, int density) { if (nativeBitmap == 0) { throw new RuntimeException("internal error: native bitmap is 0"); diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 6ae8c9b..eefd21e 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -508,17 +508,6 @@ public class Canvas { } /** - * Returns a pointer to an internal 4x4 native matrix. The returned - * pointer is a pointer to an array of 16 floats. - * - * @hide - */ - @SuppressWarnings({"UnusedDeclaration"}) - public int getNativeMatrix() { - return 0; - } - - /** * Return a new matrix with a copy of the canvas' current transformation * matrix. */ diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index 1df8143..828bafd 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -70,16 +70,16 @@ public class Paint { */ public int mBidiFlags = BIDI_DEFAULT_LTR; - private static final Style[] sStyleArray = { + static final Style[] sStyleArray = { Style.FILL, Style.STROKE, Style.FILL_AND_STROKE }; - private static final Cap[] sCapArray = { + static final Cap[] sCapArray = { Cap.BUTT, Cap.ROUND, Cap.SQUARE }; - private static final Join[] sJoinArray = { + static final Join[] sJoinArray = { Join.MITER, Join.ROUND, Join.BEVEL }; - private static final Align[] sAlignArray = { + static final Align[] sAlignArray = { Align.LEFT, Align.CENTER, Align.RIGHT }; @@ -103,7 +103,7 @@ public class Paint { public static final int DEV_KERN_TEXT_FLAG = 0x100; // we use this when we first create a paint - private static final int DEFAULT_PAINT_FLAGS = DEV_KERN_TEXT_FLAG; + static final int DEFAULT_PAINT_FLAGS = DEV_KERN_TEXT_FLAG; /** * Bidi flag to set LTR paragraph direction. @@ -1179,13 +1179,26 @@ public class Paint { /** * Return the width of the text. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param index The index of the first character to start measuring * @param count THe number of characters to measure, beginning with start * @return The width of the text */ public float measureText(char[] text, int index, int count) { - if (!mHasCompatScaling) return native_measureText(text, index, count); + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((index | count) < 0 || index + count > text.length) { + throw new ArrayIndexOutOfBoundsException(); + } + + if (text.length == 0 || count == 0) { + return 0f; + } + if (!mHasCompatScaling) { + return native_measureText(text, index, count); + } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); float w = native_measureText(text, index, count); @@ -1198,13 +1211,26 @@ public class Paint { /** * Return the width of the text. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param start The index of the first character to start measuring * @param end 1 beyond the index of the last character to measure * @return The width of the text */ public float measureText(String text, int start, int end) { - if (!mHasCompatScaling) return native_measureText(text, start, end); + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((start | end | (end - start) | (text.length() - end)) < 0) { + throw new IndexOutOfBoundsException(); + } + + if (text.length() == 0 || start == end) { + return 0f; + } + if (!mHasCompatScaling) { + return native_measureText(text, start, end); + } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); float w = native_measureText(text, start, end); @@ -1217,10 +1243,18 @@ public class Paint { /** * Return the width of the text. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @return The width of the text */ public float measureText(String text) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + + if (text.length() == 0) { + return 0f; + } + if (!mHasCompatScaling) return native_measureText(text); final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); @@ -1240,6 +1274,16 @@ public class Paint { * @return The width of the text */ public float measureText(CharSequence text, int start, int end) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((start | end | (end - start) | (text.length() - end)) < 0) { + throw new IndexOutOfBoundsException(); + } + + if (text.length() == 0 || start == end) { + return 0f; + } if (text instanceof String) { return measureText((String)text, start, end); } @@ -1263,7 +1307,7 @@ public class Paint { * Return the number of chars that were measured, and if measuredWidth is * not null, return in it the actual width measured. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param index The offset into text to begin measuring at * @param count The number of maximum number of entries to measure. If count * is negative, then the characters are measured in reverse order. @@ -1275,9 +1319,20 @@ public class Paint { */ public int breakText(char[] text, int index, int count, float maxWidth, float[] measuredWidth) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((index | count) < 0 || index + count > text.length) { + throw new ArrayIndexOutOfBoundsException(); + } + + if (text.length == 0 || count == 0) { + return 0; + } if (!mHasCompatScaling) { return native_breakText(text, index, count, maxWidth, measuredWidth); } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); int res = native_breakText(text, index, count, maxWidth*mCompatScaling, @@ -1295,7 +1350,7 @@ public class Paint { * Return the number of chars that were measured, and if measuredWidth is * not null, return in it the actual width measured. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param start The offset into text to begin measuring at * @param end The end of the text slice to measure. * @param measureForwards If true, measure forwards, starting at start. @@ -1309,6 +1364,16 @@ public class Paint { public int breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth, float[] measuredWidth) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((start | end | (end - start) | (text.length() - end)) < 0) { + throw new IndexOutOfBoundsException(); + } + + if (text.length() == 0 || start == end) { + return 0; + } if (start == 0 && text instanceof String && end == text.length()) { return breakText((String) text, measureForwards, maxWidth, measuredWidth); @@ -1334,7 +1399,7 @@ public class Paint { * Return the number of chars that were measured, and if measuredWidth is * not null, return in it the actual width measured. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param measureForwards If true, measure forwards, starting with the * first character in the string. Otherwise, * measure backwards, starting with the @@ -1347,9 +1412,17 @@ public class Paint { */ public int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + + if (text.length() == 0) { + return 0; + } if (!mHasCompatScaling) { return native_breakText(text, measureForwards, maxWidth, measuredWidth); } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); int res = native_breakText(text, measureForwards, maxWidth*mCompatScaling, @@ -1365,7 +1438,7 @@ public class Paint { /** * Return the advance widths for the characters in the string. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param index The index of the first char to to measure * @param count The number of chars starting with index to measure * @param widths array to receive the advance widths of the characters. @@ -1374,14 +1447,21 @@ public class Paint { */ public int getTextWidths(char[] text, int index, int count, float[] widths) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } if ((index | count) < 0 || index + count > text.length || count > widths.length) { throw new ArrayIndexOutOfBoundsException(); } - + + if (text.length == 0 || count == 0) { + return 0; + } if (!mHasCompatScaling) { return native_getTextWidths(mNativePaint, text, index, count, widths); } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); int res = native_getTextWidths(mNativePaint, text, index, count, widths); @@ -1395,7 +1475,7 @@ public class Paint { /** * Return the advance widths for the characters in the string. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param start The index of the first char to to measure * @param end The end of the text slice to measure * @param widths array to receive the advance widths of the characters. @@ -1404,6 +1484,19 @@ public class Paint { */ public int getTextWidths(CharSequence text, int start, int end, float[] widths) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((start | end | (end - start) | (text.length() - end)) < 0) { + throw new IndexOutOfBoundsException(); + } + if (end - start > widths.length) { + throw new ArrayIndexOutOfBoundsException(); + } + + if (text.length() == 0 || start == end) { + return 0; + } if (text instanceof String) { return getTextWidths((String) text, start, end, widths); } @@ -1426,7 +1519,7 @@ public class Paint { /** * Return the advance widths for the characters in the string. * - * @param text The text to measure + * @param text The text to measure. Cannot be null. * @param start The index of the first char to to measure * @param end The end of the text slice to measure * @param widths array to receive the advance widths of the characters. @@ -1434,6 +1527,9 @@ public class Paint { * @return the number of unichars in the specified text. */ public int getTextWidths(String text, int start, int end, float[] widths) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } if ((start | end | (end - start) | (text.length() - end)) < 0) { throw new IndexOutOfBoundsException(); } @@ -1441,9 +1537,13 @@ public class Paint { throw new ArrayIndexOutOfBoundsException(); } + if (text.length() == 0 || start == end) { + return 0; + } if (!mHasCompatScaling) { return native_getTextWidths(mNativePaint, text, start, end, widths); } + final float oldSize = getTextSize(); setTextSize(oldSize*mCompatScaling); int res = native_getTextWidths(mNativePaint, text, start, end, widths); @@ -1488,6 +1588,12 @@ public class Paint { */ public int getTextGlypths(String text, int start, int end, int contextStart, int contextEnd, int flags, char[] glyphs) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { + throw new IllegalArgumentException("unknown flags value: " + flags); + } if ((start | end | contextStart | contextEnd | (end - start) | (start - contextStart) | (contextEnd - end) | (text.length() - end) | (text.length() - contextEnd)) < 0) { @@ -1496,9 +1602,6 @@ public class Paint { if (end - start > glyphs.length) { throw new ArrayIndexOutOfBoundsException(); } - if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { - throw new IllegalArgumentException("unknown flags value: " + flags); - } return native_getTextGlyphs(mNativePaint, text, start, end, contextStart, contextEnd, flags, glyphs); } @@ -1528,18 +1631,24 @@ public class Paint { int contextIndex, int contextCount, int flags, float[] advances, int advancesIndex, int reserved) { + if (chars == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { + throw new IllegalArgumentException("unknown flags value: " + flags); + } if ((index | count | contextIndex | contextCount | advancesIndex - | (index - contextIndex) + | (index - contextIndex) | (contextCount - count) | ((contextIndex + contextCount) - (index + count)) | (chars.length - (contextIndex + contextCount)) | (advances == null ? 0 : (advances.length - (advancesIndex + count)))) < 0) { throw new IndexOutOfBoundsException(); } - if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { - throw new IllegalArgumentException("unknown flags value: " + flags); - } + if (chars.length == 0 || count == 0){ + return 0f; + } if (!mHasCompatScaling) { return native_getTextRunAdvances(mNativePaint, chars, index, count, contextIndex, contextCount, flags, advances, advancesIndex, reserved); @@ -1584,6 +1693,17 @@ public class Paint { int contextStart, int contextEnd, int flags, float[] advances, int advancesIndex, int reserved) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if ((start | end | contextStart | contextEnd | advancesIndex | (end - start) + | (start - contextStart) | (contextEnd - end) + | (text.length() - contextEnd) + | (advances == null ? 0 : + (advances.length - advancesIndex - (end - start)))) < 0) { + throw new IndexOutOfBoundsException(); + } + if (text instanceof String) { return getTextRunAdvances((String) text, start, end, contextStart, contextEnd, flags, advances, advancesIndex, reserved); @@ -1597,6 +1717,9 @@ public class Paint { return ((GraphicsOperations) text).getTextRunAdvances(start, end, contextStart, contextEnd, flags, advances, advancesIndex, this); } + if (text.length() == 0 || end == start) { + return 0f; + } int contextLen = contextEnd - contextStart; int len = end - start; @@ -1633,7 +1756,7 @@ public class Paint { * These bounds typically reflect changes in bidi level or font * metrics across which shaping does not occur. * - * @param text the text to measure + * @param text the text to measure. Cannot be null. * @param start the index of the first character to measure * @param end the index past the last character to measure * @param contextStart the index of the first character to use for shaping context, @@ -1681,7 +1804,7 @@ public class Paint { * These bounds typically reflect changes in bidi level or font * metrics across which shaping does not occur. * - * @param text the text to measure + * @param text the text to measure. Cannot be null. * @param start the index of the first character to measure * @param end the index past the last character to measure * @param contextStart the index of the first character to use for shaping context, @@ -1702,6 +1825,12 @@ public class Paint { public float getTextRunAdvances(String text, int start, int end, int contextStart, int contextEnd, int flags, float[] advances, int advancesIndex, int reserved) { + if (text == null) { + throw new IllegalArgumentException("text cannot be null"); + } + if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { + throw new IllegalArgumentException("unknown flags value: " + flags); + } if ((start | end | contextStart | contextEnd | advancesIndex | (end - start) | (start - contextStart) | (contextEnd - end) | (text.length() - contextEnd) @@ -1709,8 +1838,9 @@ public class Paint { (advances.length - advancesIndex - (end - start)))) < 0) { throw new IndexOutOfBoundsException(); } - if (flags != DIRECTION_LTR && flags != DIRECTION_RTL) { - throw new IllegalArgumentException("unknown flags value: " + flags); + + if (text.length() == 0 || start == end) { + return 0f; } if (!mHasCompatScaling) { diff --git a/graphics/java/android/graphics/ParcelSurfaceTexture.aidl b/graphics/java/android/graphics/ParcelSurfaceTexture.aidl deleted file mode 100644 index 35ff285..0000000 --- a/graphics/java/android/graphics/ParcelSurfaceTexture.aidl +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2011, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.graphics; - -parcelable ParcelSurfaceTexture; diff --git a/graphics/java/android/graphics/ParcelSurfaceTexture.java b/graphics/java/android/graphics/ParcelSurfaceTexture.java deleted file mode 100644 index cc8bd02..0000000 --- a/graphics/java/android/graphics/ParcelSurfaceTexture.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.graphics; - -import android.graphics.SurfaceTexture; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.Surface; - -/** - * - * @hide Pending review by API council. - */ -public final class ParcelSurfaceTexture implements Parcelable { - /** - * This field is used by native code, do not access or modify. - * - * @hide - */ - @SuppressWarnings({"UnusedDeclaration"}) - private int mISurfaceTexture; - - /** - * Create a new ParcelSurfaceTexture from a Surface - * - * @param surface The Surface to create a ParcelSurfaceTexture from. - * - * @return Returns a new ParcelSurfaceTexture for the given Surface. - */ - public static ParcelSurfaceTexture fromSurface(Surface surface) { - return new ParcelSurfaceTexture(surface); - } - - /** - * Create a new ParcelSurfaceTexture from a SurfaceTexture - * - * @param surfaceTexture The SurfaceTexture to transport. - * - * @return Returns a new ParcelSurfaceTexture for the given SurfaceTexture. - */ - public static ParcelSurfaceTexture fromSurfaceTexture(SurfaceTexture surfaceTexture) { - return new ParcelSurfaceTexture(surfaceTexture); - } - - /** - * @see android.os.Parcelable#describeContents() - */ - @Override - public int describeContents() { - return 0; - } - - /** - * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int) - */ - @Override - public void writeToParcel(Parcel dest, int flags) { - nativeWriteToParcel(dest, flags); - } - - public static final Parcelable.Creator<ParcelSurfaceTexture> CREATOR = - new Parcelable.Creator<ParcelSurfaceTexture>() { - @Override - public ParcelSurfaceTexture createFromParcel(Parcel in) { - return new ParcelSurfaceTexture(in); - } - @Override - public ParcelSurfaceTexture[] newArray(int size) { - return new ParcelSurfaceTexture[size]; - } - }; - - private ParcelSurfaceTexture(Parcel in) { - nativeReadFromParcel(in); - } - private ParcelSurfaceTexture(Surface surface) { - nativeInitFromSurface(surface); - } - private ParcelSurfaceTexture(SurfaceTexture surfaceTexture) { - nativeInitFromSurfaceTexture(surfaceTexture); - } - - @Override - protected void finalize() throws Throwable { - try { - nativeFinalize(); - } finally { - super.finalize(); - } - } - - private native void nativeInitFromSurface(Surface surface); - private native void nativeInitFromSurfaceTexture(SurfaceTexture surfaceTexture); - private native void nativeFinalize(); - private native void nativeWriteToParcel(Parcel dest, int flags); - private native void nativeReadFromParcel(Parcel in); - - /* - * We use a class initializer to allow the native code to cache some - * field offsets. - */ - private static native void nativeClassInit(); - static { nativeClassInit(); } -} diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java index c5d7500..b4f1e84 100644 --- a/graphics/java/android/graphics/Path.java +++ b/graphics/java/android/graphics/Path.java @@ -115,7 +115,7 @@ public class Path { } // these must be in the same order as their native values - private static final FillType[] sFillTypeArray = { + static final FillType[] sFillTypeArray = { FillType.WINDING, FillType.EVEN_ODD, FillType.INVERSE_WINDING, diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index bc92d3a..ed6fa08 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -43,7 +43,7 @@ public class Typeface { /** The NORMAL style of the default monospace typeface. */ public static final Typeface MONOSPACE; - private static Typeface[] sDefaults; + /* package */ static Typeface[] sDefaults; /* package */ int native_instance; diff --git a/graphics/java/android/renderscript/Font.java b/graphics/java/android/renderscript/Font.java index 616990a..18dacac 100644 --- a/graphics/java/android/renderscript/Font.java +++ b/graphics/java/android/renderscript/Font.java @@ -89,10 +89,10 @@ public class Font extends BaseObj { FontFamily sansFamily = new FontFamily(); sansFamily.mNames = sSansNames; - sansFamily.mNormalFileName = "DroidSans.ttf"; - sansFamily.mBoldFileName = "DroidSans-Bold.ttf"; - sansFamily.mItalicFileName = "DroidSans.ttf"; - sansFamily.mBoldItalicFileName = "DroidSans-Bold.ttf"; + sansFamily.mNormalFileName = "Roboto-Regular.ttf"; + sansFamily.mBoldFileName = "Roboto-Bold.ttf"; + sansFamily.mItalicFileName = "Roboto-Italic.ttf"; + sansFamily.mBoldItalicFileName = "Roboto-BoldItalic.ttf"; addFamilyToMap(sansFamily); FontFamily serifFamily = new FontFamily(); diff --git a/graphics/java/android/renderscript/RSTextureView.java b/graphics/java/android/renderscript/RSTextureView.java index b8dd577..30b2f99 100644 --- a/graphics/java/android/renderscript/RSTextureView.java +++ b/graphics/java/android/renderscript/RSTextureView.java @@ -85,13 +85,15 @@ public class RSTextureView extends TextureView implements TextureView.SurfaceTex } @Override - public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureDestroyed"); mSurfaceTexture = surface; if (mRS != null) { mRS.setSurfaceTexture(null, 0, 0); } + + return true; } @Override diff --git a/include/android_runtime/android_graphics_ParcelSurfaceTexture.h b/include/android_runtime/android_graphics_ParcelSurfaceTexture.h deleted file mode 100644 index b94ac9b..0000000 --- a/include/android_runtime/android_graphics_ParcelSurfaceTexture.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ANDROID_GRAPHICS_PARCELSURFACETEXTURE_H -#define _ANDROID_GRAPHICS_PARCELSURFACETEXTURE_H - -#include <android/native_window.h> - -#include "jni.h" - -namespace android { - -class ISurfaceTexture; - -extern sp<ANativeWindow> android_ParcelSurfaceTexture_getNativeWindow( - JNIEnv* env, jobject thiz); -extern bool android_ParcelSurfaceTexture_isInstanceOf(JNIEnv* env, jobject thiz); - -/* Gets the underlying ISurfaceTexture from a ParcelSurfaceTexture Java object. */ -extern sp<ISurfaceTexture> ParcelSurfaceTexture_getISurfaceTexture(JNIEnv* env, jobject thiz); - -} // namespace android - -#endif // _ANDROID_GRAPHICS_PARCELSURFACETEXTURE_H diff --git a/include/gui/ISurfaceTexture.h b/include/gui/ISurfaceTexture.h index 1eda646..50626a0 100644 --- a/include/gui/ISurfaceTexture.h +++ b/include/gui/ISurfaceTexture.h @@ -111,7 +111,12 @@ protected: // // This method will fail if the connect was previously called on the // SurfaceTexture and no corresponding disconnect call was made. - virtual status_t connect(int api) = 0; + // + // outWidth, outHeight and outTransform are filled with the default width + // and height of the window and current transform applied to buffers, + // respectively. + virtual status_t connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) = 0; // disconnect attempts to disconnect a client API from the SurfaceTexture. // Calling this method will cause any subsequent calls to other diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h index 2a8e725..a6fb12e 100644 --- a/include/gui/SurfaceTexture.h +++ b/include/gui/SurfaceTexture.h @@ -106,7 +106,8 @@ public: // // This method will fail if the connect was previously called on the // SurfaceTexture and no corresponding disconnect call was made. - virtual status_t connect(int api); + virtual status_t connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform); // disconnect attempts to disconnect a client API from the SurfaceTexture. // Calling this method will cause any subsequent calls to other @@ -207,9 +208,28 @@ public: protected: - // freeAllBuffers frees the resources (both GraphicBuffer and EGLImage) for - // all slots. - void freeAllBuffers(); + // freeBufferLocked frees the resources (both GraphicBuffer and EGLImage) + // for the given slot. + void freeBufferLocked(int index); + + // freeAllBuffersLocked frees the resources (both GraphicBuffer and + // EGLImage) for all slots. + void freeAllBuffersLocked(); + + // freeAllBuffersExceptHeadLocked frees the resources (both GraphicBuffer + // and EGLImage) for all slots except the head of mQueue + void freeAllBuffersExceptHeadLocked(); + + // drainQueueLocked drains the buffer queue if we're in synchronous mode + // returns immediately otherwise. return NO_INIT if SurfaceTexture + // became abandoned or disconnected during this call. + status_t drainQueueLocked(); + + // drainQueueAndFreeBuffersLocked drains the buffer queue if we're in + // synchronous mode and free all buffers. In asynchronous mode, all buffers + // are freed except the current buffer. + status_t drainQueueAndFreeBuffersLocked(); + static bool isExternalFormat(uint32_t format); private: diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index f20e234..e0d7898 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -108,6 +108,8 @@ public: static unsigned int getInputFramesLost(audio_io_handle_t ioHandle); static int newAudioSessionId(); + static void acquireAudioSessionId(int audioSession); + static void releaseAudioSessionId(int audioSession); // types of io configuration change events received with ioConfigChanged() enum io_config_event { @@ -181,6 +183,7 @@ public: int session, int id); static status_t unregisterEffect(int id); + static status_t setEffectEnabled(int id, bool enabled); static const sp<IAudioPolicyService>& get_audio_policy_service(); diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h index 4037c46..9e3cb7f 100644 --- a/include/media/IAudioFlinger.h +++ b/include/media/IAudioFlinger.h @@ -139,6 +139,9 @@ public: virtual int newAudioSessionId() = 0; + virtual void acquireAudioSessionId(int audioSession) = 0; + virtual void releaseAudioSessionId(int audioSession) = 0; + virtual status_t queryNumberEffects(uint32_t *numEffects) = 0; virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) = 0; diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h index ed265e1..9807cbe 100644 --- a/include/media/IAudioPolicyService.h +++ b/include/media/IAudioPolicyService.h @@ -84,6 +84,7 @@ public: int session, int id) = 0; virtual status_t unregisterEffect(int id) = 0; + virtual status_t setEffectEnabled(int id, bool enabled) = 0; virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const = 0; virtual status_t queryDefaultPreProcessing(int audioSession, effect_descriptor_t *descriptors, diff --git a/include/media/stagefright/HardwareAPI.h b/include/media/stagefright/HardwareAPI.h index d785c48..32eed3f 100644 --- a/include/media/stagefright/HardwareAPI.h +++ b/include/media/stagefright/HardwareAPI.h @@ -73,16 +73,6 @@ struct StoreMetaDataInBuffersParams { OMX_BOOL bStoreMetaData; }; -// A pointer to this struct is passed to OMX_SetParameter() when the extension -// index "OMX.google.android.index.enableSecureMode" -// is given. -// -struct EnableSecureModeParams { - OMX_U32 nSize; - OMX_VERSIONTYPE nVersion; - OMX_BOOL bEnableSecureMode; -}; - // A pointer to this struct is passed to OMX_SetParameter when the extension // index for the 'OMX.google.android.index.useAndroidNativeBuffer' extension is // given. This call will only be performed if a prior call was made with the diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index 2a1b3d8..2932744 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -319,8 +319,6 @@ private: void initOutputFormat(const sp<MetaData> &inputFormat); status_t initNativeWindow(); - status_t enableSecureMode(); - void dumpPortStatus(OMX_U32 portIndex); status_t configureCodec(const sp<MetaData> &meta); diff --git a/include/media/stagefright/SurfaceMediaSource.h b/include/media/stagefright/SurfaceMediaSource.h index fab258c..1affb8a 100644 --- a/include/media/stagefright/SurfaceMediaSource.h +++ b/include/media/stagefright/SurfaceMediaSource.h @@ -133,7 +133,8 @@ public: // // This method will fail if the connect was previously called on the // SurfaceMediaSource and no corresponding disconnect call was made. - virtual status_t connect(int api); + virtual status_t connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform); // disconnect attempts to disconnect a client API from the SurfaceMediaSource. // Calling this method will cause any subsequent calls to other diff --git a/include/utils/RefBase.h b/include/utils/RefBase.h index ca17082..c7a9b78 100644 --- a/include/utils/RefBase.h +++ b/include/utils/RefBase.h @@ -80,9 +80,12 @@ public: void incWeak(const void* id); void decWeak(const void* id); + // acquires a strong reference if there is already one. bool attemptIncStrong(const void* id); - //! This is only safe if you have set OBJECT_LIFETIME_FOREVER. + // acquires a weak reference if there is already one. + // This is not always safe. see ProcessState.cpp and BpBinder.cpp + // for proper use. bool attemptIncWeak(const void* id); //! DEBUGGING ONLY: Get current weak ref count. @@ -116,28 +119,15 @@ public: typedef RefBase basetype; - // used to override the RefBase destruction. - class Destroyer { - friend class RefBase; - friend class weakref_type; - public: - virtual ~Destroyer(); - private: - virtual void destroy(RefBase const* base) = 0; - }; - - // Make sure to never acquire a strong reference from this function. The - // same restrictions than for destructors apply. - void setDestroyer(Destroyer* destroyer); - protected: RefBase(); virtual ~RefBase(); //! Flags for extendObjectLifetime() enum { + OBJECT_LIFETIME_STRONG = 0x0000, OBJECT_LIFETIME_WEAK = 0x0001, - OBJECT_LIFETIME_FOREVER = 0x0003 + OBJECT_LIFETIME_MASK = 0x0001 }; void extendObjectLifetime(int32_t mode); @@ -163,7 +153,7 @@ private: RefBase(const RefBase& o); RefBase& operator=(const RefBase& o); - + weakref_impl* const mRefs; }; diff --git a/include/utils/threads.h b/include/utils/threads.h index c8e9c04..c84a9b4 100644 --- a/include/utils/threads.h +++ b/include/utils/threads.h @@ -20,6 +20,7 @@ #include <stdint.h> #include <sys/types.h> #include <time.h> +#include <system/graphics.h> #if defined(HAVE_PTHREADS) # include <pthread.h> @@ -42,8 +43,8 @@ enum { * ** Keep in sync with android.os.Process.java ** * *********************************************** * - * This maps directly to the "nice" priorites we use in Android. - * A thread priority should be chosen inverse-proportinally to + * This maps directly to the "nice" priorities we use in Android. + * A thread priority should be chosen inverse-proportionally to * the amount of work the thread is expected to do. The more work * a thread will do, the less favorable priority it should get so that * it doesn't starve the system. Threads not behaving properly might @@ -66,7 +67,7 @@ enum { ANDROID_PRIORITY_DISPLAY = -4, /* ui service treads might want to run at a urgent display (uncommon) */ - ANDROID_PRIORITY_URGENT_DISPLAY = -8, + ANDROID_PRIORITY_URGENT_DISPLAY = HAL_PRIORITY_URGENT_DISPLAY, /* all normal audio threads */ ANDROID_PRIORITY_AUDIO = -16, diff --git a/libs/gui/ISurfaceTexture.cpp b/libs/gui/ISurfaceTexture.cpp index 55246dc..babd2c0 100644 --- a/libs/gui/ISurfaceTexture.cpp +++ b/libs/gui/ISurfaceTexture.cpp @@ -162,11 +162,15 @@ public: return result; } - virtual status_t connect(int api) { + virtual status_t connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { Parcel data, reply; data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); data.writeInt32(api); remote()->transact(CONNECT, data, &reply); + *outWidth = reply.readInt32(); + *outHeight = reply.readInt32(); + *outTransform = reply.readInt32(); status_t result = reply.readInt32(); return result; } @@ -283,7 +287,12 @@ status_t BnSurfaceTexture::onTransact( case CONNECT: { CHECK_INTERFACE(ISurfaceTexture, data, reply); int api = data.readInt32(); - status_t res = connect(api); + uint32_t outWidth, outHeight, outTransform; + status_t res = connect(api, + &outWidth, &outHeight, &outTransform); + reply->writeInt32(outWidth); + reply->writeInt32(outHeight); + reply->writeInt32(outTransform); reply->writeInt32(res); return NO_ERROR; } break; diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index ccf98e5..2c70251 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -277,6 +277,11 @@ sp<Surface> Surface::readFromParcel(const Parcel& data) { if (surface == 0) { surface = new Surface(data, binder); sCachedSurfaces.add(binder, surface); + } else { + // The Surface was found in the cache, but we still should clear any + // remaining data from the parcel. + data.readStrongBinder(); // ISurfaceTexture + data.readInt32(); // identity } if (surface->mSurface == NULL && surface->getISurfaceTexture() == NULL) { surface = 0; diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp index be71c94..7ac4343 100644 --- a/libs/gui/SurfaceTexture.cpp +++ b/libs/gui/SurfaceTexture.cpp @@ -104,7 +104,7 @@ SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) : SurfaceTexture::~SurfaceTexture() { LOGV("SurfaceTexture::~SurfaceTexture"); - freeAllBuffers(); + freeAllBuffersLocked(); } status_t SurfaceTexture::setBufferCountServerLocked(int bufferCount) { @@ -154,7 +154,6 @@ status_t SurfaceTexture::setBufferCount(int bufferCount) { LOGE("setBufferCount: SurfaceTexture has been abandoned!"); return NO_INIT; } - if (bufferCount > NUM_BUFFER_SLOTS) { LOGE("setBufferCount: bufferCount larger than slots available"); return BAD_VALUE; @@ -185,7 +184,7 @@ status_t SurfaceTexture::setBufferCount(int bufferCount) { // here we're guaranteed that the client doesn't have dequeued buffers // and will release all of its buffer references. - freeAllBuffers(); + freeAllBuffersLocked(); mBufferCount = bufferCount; mClientBufferCount = bufferCount; mCurrentTexture = INVALID_BUFFER_SLOT; @@ -228,11 +227,6 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h, uint32_t format, uint32_t usage) { LOGV("SurfaceTexture::dequeueBuffer"); - if (mAbandoned) { - LOGE("dequeueBuffer: SurfaceTexture has been abandoned!"); - return NO_INIT; - } - if ((w && !h) || (!w && h)) { LOGE("dequeueBuffer: invalid size: w=%u, h=%u", w, h); return BAD_VALUE; @@ -246,10 +240,15 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h, int dequeuedCount = 0; bool tryAgain = true; while (tryAgain) { + if (mAbandoned) { + LOGE("dequeueBuffer: SurfaceTexture has been abandoned!"); + return NO_INIT; + } + // We need to wait for the FIFO to drain if the number of buffer // needs to change. // - // The condition "number of buffer needs to change" is true if + // The condition "number of buffers needs to change" is true if // - the client doesn't care about how many buffers there are // - AND the actual number of buffer is different from what was // set in the last setBufferCountServer() @@ -261,31 +260,24 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h, // As long as this condition is true AND the FIFO is not empty, we // wait on mDequeueCondition. - int minBufferCountNeeded = mSynchronousMode ? + const int minBufferCountNeeded = mSynchronousMode ? MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS; - if (!mClientBufferCount && + const bool numberOfBuffersNeedsToChange = !mClientBufferCount && ((mServerBufferCount != mBufferCount) || - (mServerBufferCount < minBufferCountNeeded))) { + (mServerBufferCount < minBufferCountNeeded)); + + if (!mQueue.isEmpty() && numberOfBuffersNeedsToChange) { // wait for the FIFO to drain - while (!mQueue.isEmpty()) { - mDequeueCondition.wait(mMutex); - if (mAbandoned) { - LOGE("dequeueBuffer: SurfaceTexture was abandoned while " - "blocked!"); - return NO_INIT; - } - } - minBufferCountNeeded = mSynchronousMode ? - MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS; + mDequeueCondition.wait(mMutex); + // NOTE: we continue here because we need to reevaluate our + // whole state (eg: we could be abandoned or disconnected) + continue; } - - if (!mClientBufferCount && - ((mServerBufferCount != mBufferCount) || - (mServerBufferCount < minBufferCountNeeded))) { + if (numberOfBuffersNeedsToChange) { // here we're guaranteed that mQueue is empty - freeAllBuffers(); + freeAllBuffersLocked(); mBufferCount = mServerBufferCount; if (mBufferCount < minBufferCountNeeded) mBufferCount = minBufferCountNeeded; @@ -414,9 +406,9 @@ status_t SurfaceTexture::setSynchronousMode(bool enabled) { if (!enabled) { // going to asynchronous mode, drain the queue - while (mSynchronousMode != enabled && !mQueue.isEmpty()) { - mDequeueCondition.wait(mMutex); - } + err = drainQueueLocked(); + if (err != NO_ERROR) + return err; } if (mSynchronousMode != enabled) { @@ -548,7 +540,8 @@ status_t SurfaceTexture::setTransform(uint32_t transform) { return OK; } -status_t SurfaceTexture::connect(int api) { +status_t SurfaceTexture::connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { LOGV("SurfaceTexture::connect(this=%p, %d)", this, api); Mutex::Autolock lock(mMutex); @@ -569,6 +562,9 @@ status_t SurfaceTexture::connect(int api) { err = -EINVAL; } else { mConnectedApi = api; + *outWidth = mDefaultWidth; + *outHeight = mDefaultHeight; + *outTransform = 0; } break; default: @@ -594,7 +590,9 @@ status_t SurfaceTexture::disconnect(int api) { case NATIVE_WINDOW_API_MEDIA: case NATIVE_WINDOW_API_CAMERA: if (mConnectedApi == api) { + drainQueueAndFreeBuffersLocked(); mConnectedApi = NO_CONNECTED_API; + mDequeueCondition.signal(); } else { LOGE("disconnect: connected to another api (cur=%d, req=%d)", mConnectedApi, api); @@ -630,7 +628,7 @@ status_t SurfaceTexture::updateTexImage() { if (mAbandoned) { LOGE("calling updateTexImage() on an abandoned SurfaceTexture"); - //return NO_INIT; + return NO_INIT; } // In asynchronous mode the list is guaranteed to be one buffer @@ -639,21 +637,14 @@ status_t SurfaceTexture::updateTexImage() { Fifo::iterator front(mQueue.begin()); int buf = *front; - if (uint32_t(buf) >= NUM_BUFFER_SLOTS) { - LOGE("buffer index out of range (index=%d)", buf); - //return BAD_VALUE; - } - // Update the GL texture object. EGLImageKHR image = mSlots[buf].mEglImage; if (image == EGL_NO_IMAGE_KHR) { EGLDisplay dpy = eglGetCurrentDisplay(); - if (mSlots[buf].mGraphicBuffer == 0) { LOGE("buffer at slot %d is null", buf); - //return BAD_VALUE; + return BAD_VALUE; } - image = createImage(dpy, mSlots[buf].mGraphicBuffer); mSlots[buf].mEglImage = image; mSlots[buf].mEglDisplay = dpy; @@ -843,18 +834,66 @@ void SurfaceTexture::setFrameAvailableListener( mFrameAvailableListener = listener; } -void SurfaceTexture::freeAllBuffers() { +void SurfaceTexture::freeBufferLocked(int i) { + mSlots[i].mGraphicBuffer = 0; + mSlots[i].mBufferState = BufferSlot::FREE; + if (mSlots[i].mEglImage != EGL_NO_IMAGE_KHR) { + eglDestroyImageKHR(mSlots[i].mEglDisplay, mSlots[i].mEglImage); + mSlots[i].mEglImage = EGL_NO_IMAGE_KHR; + mSlots[i].mEglDisplay = EGL_NO_DISPLAY; + } +} + +void SurfaceTexture::freeAllBuffersLocked() { + LOGW_IF(!mQueue.isEmpty(), + "freeAllBuffersLocked called but mQueue is not empty"); + for (int i = 0; i < NUM_BUFFER_SLOTS; i++) { + freeBufferLocked(i); + } +} + +void SurfaceTexture::freeAllBuffersExceptHeadLocked() { + LOGW_IF(!mQueue.isEmpty(), + "freeAllBuffersExceptCurrentLocked called but mQueue is not empty"); + int head = -1; + if (!mQueue.empty()) { + Fifo::iterator front(mQueue.begin()); + head = *front; + } for (int i = 0; i < NUM_BUFFER_SLOTS; i++) { - mSlots[i].mGraphicBuffer = 0; - mSlots[i].mBufferState = BufferSlot::FREE; - if (mSlots[i].mEglImage != EGL_NO_IMAGE_KHR) { - eglDestroyImageKHR(mSlots[i].mEglDisplay, mSlots[i].mEglImage); - mSlots[i].mEglImage = EGL_NO_IMAGE_KHR; - mSlots[i].mEglDisplay = EGL_NO_DISPLAY; + if (i != head) { + freeBufferLocked(i); } } } +status_t SurfaceTexture::drainQueueLocked() { + while (mSynchronousMode && !mQueue.isEmpty()) { + mDequeueCondition.wait(mMutex); + if (mAbandoned) { + LOGE("drainQueueLocked: SurfaceTexture has been abandoned!"); + return NO_INIT; + } + if (mConnectedApi == NO_CONNECTED_API) { + LOGE("drainQueueLocked: SurfaceTexture is not connected!"); + return NO_INIT; + } + } + return NO_ERROR; +} + +status_t SurfaceTexture::drainQueueAndFreeBuffersLocked() { + status_t err = drainQueueLocked(); + if (err == NO_ERROR) { + if (mSynchronousMode) { + freeAllBuffersLocked(); + } else { + freeAllBuffersExceptHeadLocked(); + } + } + return err; +} + EGLImageKHR SurfaceTexture::createImage(EGLDisplay dpy, const sp<GraphicBuffer>& graphicBuffer) { EGLClientBuffer cbuf = (EGLClientBuffer)graphicBuffer->getNativeBuffer(); @@ -924,9 +963,10 @@ int SurfaceTexture::query(int what, int* outValue) void SurfaceTexture::abandon() { Mutex::Autolock lock(mMutex); - freeAllBuffers(); + mQueue.clear(); mAbandoned = true; mCurrentTextureBuf.clear(); + freeAllBuffersLocked(); mDequeueCondition.signal(); } @@ -981,19 +1021,25 @@ void SurfaceTexture::dump(String8& result, const char* prefix, for (int i=0 ; i<mBufferCount ; i++) { const BufferSlot& slot(mSlots[i]); - const sp<GraphicBuffer>& buf(slot.mGraphicBuffer); snprintf(buffer, SIZE, "%s%s[%02d] " - "%p [%4ux%4u:%4u,%3X] " "state=%-8s, crop=[%d,%d,%d,%d], " - "transform=0x%02x, timestamp=%lld\n", + "transform=0x%02x, timestamp=%lld", prefix, (i==mCurrentTexture)?">":" ", i, - buf->handle, buf->width, buf->height, buf->stride, buf->format, stateName(slot.mBufferState), slot.mCrop.left, slot.mCrop.top, slot.mCrop.right, slot.mCrop.bottom, slot.mTransform, slot.mTimestamp ); result.append(buffer); + + const sp<GraphicBuffer>& buf(slot.mGraphicBuffer); + if (buf != NULL) { + snprintf(buffer, SIZE, + ", %p [%4ux%4u:%4u,%3X]", + buf->handle, buf->width, buf->height, buf->stride, buf->format); + result.append(buffer); + } + result.append("\n"); } } diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index d1037de..e91be84 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -385,7 +385,8 @@ int SurfaceTextureClient::dispatchUnlockAndPost(va_list args) { int SurfaceTextureClient::connect(int api) { LOGV("SurfaceTextureClient::connect"); Mutex::Autolock lock(mMutex); - int err = mSurfaceTexture->connect(api); + int err = mSurfaceTexture->connect(api, + &mDefaultWidth, &mDefaultHeight, &mTransformHint); if (!err && api == NATIVE_WINDOW_API_CPU) { mConnectedToCpu = true; } diff --git a/libs/hwui/GradientCache.h b/libs/hwui/GradientCache.h index 45c1005..7339853 100644 --- a/libs/hwui/GradientCache.h +++ b/libs/hwui/GradientCache.h @@ -38,28 +38,27 @@ struct GradientCacheEntry { GradientCacheEntry(uint32_t* colors, float* positions, int count, SkShader::TileMode tileMode) { - this->count = count; - this->colors = new uint32_t[count]; - this->positions = new float[count]; - this->tileMode = tileMode; - - memcpy(this->colors, colors, count * sizeof(uint32_t)); - memcpy(this->positions, positions, count * sizeof(float)); + copy(colors, positions, count, tileMode); } GradientCacheEntry(const GradientCacheEntry& entry) { - this->count = entry.count; - this->colors = new uint32_t[count]; - this->positions = new float[count]; - this->tileMode = entry.tileMode; - - memcpy(this->colors, entry.colors, count * sizeof(uint32_t)); - memcpy(this->positions, entry.positions, count * sizeof(float)); + copy(entry.colors, entry.positions, entry.count, entry.tileMode); } ~GradientCacheEntry() { - if (colors) delete[] colors; - if (positions) delete[] positions; + delete[] colors; + delete[] positions; + } + + GradientCacheEntry& operator=(const GradientCacheEntry& entry) { + if (this != &entry) { + delete[] colors; + delete[] positions; + + copy(entry.colors, entry.positions, entry.count, entry.tileMode); + } + + return *this; } bool operator<(const GradientCacheEntry& r) const { @@ -82,6 +81,18 @@ struct GradientCacheEntry { int count; SkShader::TileMode tileMode; +private: + + void copy(uint32_t* colors, float* positions, int count, SkShader::TileMode tileMode) { + this->count = count; + this->colors = new uint32_t[count]; + this->positions = new float[count]; + this->tileMode = tileMode; + + memcpy(this->colors, colors, count * sizeof(uint32_t)); + memcpy(this->positions, positions, count * sizeof(float)); + } + }; // GradientCacheEntry /** diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h index a0eae59..63bb824 100644 --- a/libs/hwui/LayerCache.h +++ b/libs/hwui/LayerCache.h @@ -119,10 +119,6 @@ private: mHeight = uint32_t(ceilf(layerHeight / float(LAYER_SIZE)) * LAYER_SIZE); } - LayerEntry(const LayerEntry& entry): - mLayer(entry.mLayer), mWidth(entry.mWidth), mHeight(entry.mHeight) { - } - LayerEntry(Layer* layer): mLayer(layer), mWidth(layer->getWidth()), mHeight(layer->getHeight()) { } diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index ed2fa3c..4864cff 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -924,13 +924,6 @@ void OpenGLRenderer::setMatrix(SkMatrix* matrix) { mSnapshot->transform->load(*matrix); } -const float* OpenGLRenderer::getMatrix() const { - if (mSnapshot->fbo != 0) { - return &mSnapshot->transform->data[0]; - } - return &mIdentity.data[0]; -} - void OpenGLRenderer::getMatrix(SkMatrix* matrix) { mSnapshot->transform->copyTo(*matrix); } diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index fa893f0..14b22b3 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -87,7 +87,6 @@ public: virtual void scale(float sx, float sy); virtual void skew(float sx, float sy); - const float* getMatrix() const; void getMatrix(SkMatrix* matrix); virtual void setMatrix(SkMatrix* matrix); virtual void concatMatrix(SkMatrix* matrix); diff --git a/libs/hwui/PatchCache.h b/libs/hwui/PatchCache.h index 62d0ce1..91b603f 100644 --- a/libs/hwui/PatchCache.h +++ b/libs/hwui/PatchCache.h @@ -80,13 +80,6 @@ private: emptyCount(emptyCount), colorKey(colorKey) { } - PatchDescription(const PatchDescription& description): - bitmapWidth(description.bitmapWidth), bitmapHeight(description.bitmapHeight), - pixelWidth(description.pixelWidth), pixelHeight(description.pixelHeight), - xCount(description.xCount), yCount(description.yCount), - emptyCount(description.emptyCount), colorKey(description.colorKey) { - } - bool operator<(const PatchDescription& rhs) const { LTE_FLOAT(bitmapWidth) { LTE_FLOAT(bitmapHeight) { diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h index 7ff8b74..4904a58 100644 --- a/libs/hwui/PathCache.h +++ b/libs/hwui/PathCache.h @@ -41,10 +41,6 @@ struct PathCacheEntry: public ShapeCacheEntry { path = NULL; } - PathCacheEntry(const PathCacheEntry& entry): ShapeCacheEntry(entry) { - path = entry.path; - } - bool lessThan(const ShapeCacheEntry& r) const { const PathCacheEntry& rhs = (const PathCacheEntry&) r; LTE_INT(path) { diff --git a/libs/hwui/ShapeCache.h b/libs/hwui/ShapeCache.h index 33953be..0660b69 100644 --- a/libs/hwui/ShapeCache.h +++ b/libs/hwui/ShapeCache.h @@ -96,12 +96,6 @@ struct ShapeCacheEntry { pathEffect = NULL; } - ShapeCacheEntry(const ShapeCacheEntry& entry): - shapeType(entry.shapeType), join(entry.join), cap(entry.cap), - style(entry.style), miter(entry.miter), - strokeWidth(entry.strokeWidth), pathEffect(entry.pathEffect) { - } - ShapeCacheEntry(ShapeType type, SkPaint* paint) { shapeType = type; join = paint->getStrokeJoin(); @@ -167,14 +161,6 @@ struct RoundRectShapeCacheEntry: public ShapeCacheEntry { mRy = 0; } - RoundRectShapeCacheEntry(const RoundRectShapeCacheEntry& entry): - ShapeCacheEntry(entry) { - mWidth = entry.mWidth; - mHeight = entry.mHeight; - mRx = entry.mRx; - mRy = entry.mRy; - } - bool lessThan(const ShapeCacheEntry& r) const { const RoundRectShapeCacheEntry& rhs = (const RoundRectShapeCacheEntry&) r; LTE_INT(mWidth) { @@ -206,11 +192,6 @@ struct CircleShapeCacheEntry: public ShapeCacheEntry { mRadius = 0; } - CircleShapeCacheEntry(const CircleShapeCacheEntry& entry): - ShapeCacheEntry(entry) { - mRadius = entry.mRadius; - } - bool lessThan(const ShapeCacheEntry& r) const { const CircleShapeCacheEntry& rhs = (const CircleShapeCacheEntry&) r; LTE_INT(mRadius) { @@ -234,12 +215,6 @@ struct OvalShapeCacheEntry: public ShapeCacheEntry { mWidth = mHeight = 0; } - OvalShapeCacheEntry(const OvalShapeCacheEntry& entry): - ShapeCacheEntry(entry) { - mWidth = entry.mWidth; - mHeight = entry.mHeight; - } - bool lessThan(const ShapeCacheEntry& r) const { const OvalShapeCacheEntry& rhs = (const OvalShapeCacheEntry&) r; LTE_INT(mWidth) { @@ -266,12 +241,6 @@ struct RectShapeCacheEntry: public ShapeCacheEntry { mWidth = mHeight = 0; } - RectShapeCacheEntry(const RectShapeCacheEntry& entry): - ShapeCacheEntry(entry) { - mWidth = entry.mWidth; - mHeight = entry.mHeight; - } - bool lessThan(const ShapeCacheEntry& r) const { const RectShapeCacheEntry& rhs = (const RectShapeCacheEntry&) r; LTE_INT(mWidth) { @@ -306,15 +275,6 @@ struct ArcShapeCacheEntry: public ShapeCacheEntry { mUseCenter = 0; } - ArcShapeCacheEntry(const ArcShapeCacheEntry& entry): - ShapeCacheEntry(entry) { - mWidth = entry.mWidth; - mHeight = entry.mHeight; - mStartAngle = entry.mStartAngle; - mSweepAngle = entry.mSweepAngle; - mUseCenter = entry.mUseCenter; - } - bool lessThan(const ShapeCacheEntry& r) const { const ArcShapeCacheEntry& rhs = (const ArcShapeCacheEntry&) r; LTE_INT(mWidth) { diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 6a30b17..bffe3c0 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -245,20 +245,32 @@ void * Context::threadProc(void *vrsc) { rsc->mRunning = true; bool mDraw = true; + bool doWait = true; + + uint64_t targetTime = rsc->getTime(); while (!rsc->mExit) { - mDraw |= rsc->mIO.playCoreCommands(rsc, !mDraw); + uint64_t waitTime = 0; + uint64_t now = rsc->getTime(); + if (now < targetTime) { + waitTime = targetTime - now; + } else { + doWait = false; + } + + mDraw |= rsc->mIO.playCoreCommands(rsc, doWait, waitTime); mDraw &= (rsc->mRootScript.get() != NULL); mDraw &= rsc->mHasSurface; - uint32_t targetTime = 0; if (mDraw && rsc->mIsGraphicsContext) { - targetTime = rsc->runRootScript(); + uint64_t delay = rsc->runRootScript() * 1000000; + targetTime = rsc->getTime() + delay; + doWait = delay != 0; if (rsc->props.mLogVisual) { rsc->displayDebugStats(); } - mDraw = targetTime && !rsc->mPaused; + mDraw = !rsc->mPaused; rsc->timerSet(RS_TIMER_CLEAR_SWAP); rsc->mHal.funcs.swap(rsc); rsc->timerFrame(); @@ -266,12 +278,6 @@ void * Context::threadProc(void *vrsc) { rsc->timerPrint(); rsc->timerReset(); } - if (targetTime > 1) { - int32_t t = (targetTime - (int32_t)(rsc->mTimeMSLastScript + rsc->mTimeMSLastSwap)) * 1000; - if (t > 0) { - usleep(t); - } - } } LOGV("%p, RS Thread exiting", rsc); diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp index ce674f4..3917ca1 100644 --- a/libs/rs/rsFont.cpp +++ b/libs/rs/rsFont.cpp @@ -735,7 +735,7 @@ void FontState::renderText(const char *text, uint32_t len, int32_t x, int32_t y, Font *currentFont = mRSC->getFont(); if (!currentFont) { if (!mDefault.get()) { - String8 fontsDir("/fonts/DroidSans.ttf"); + String8 fontsDir("/fonts/Roboto-Regular.ttf"); String8 fullPath(getenv("ANDROID_ROOT")); fullPath += fontsDir; diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp index 7023a1f..02a76ab 100644 --- a/libs/rs/rsLocklessFifo.cpp +++ b/libs/rs/rsLocklessFifo.cpp @@ -129,21 +129,23 @@ void LocklessCommandFifo::flush() { //dumpState("flush 2"); } -void LocklessCommandFifo::wait() { +bool LocklessCommandFifo::wait(uint64_t timeout) { while (isEmpty() && !mInShutdown) { mSignalToControl.set(); - mSignalToWorker.wait(); + return mSignalToWorker.wait(timeout); } + return true; } -const void * LocklessCommandFifo::get(uint32_t *command, uint32_t *bytesData) { +const void * LocklessCommandFifo::get(uint32_t *command, uint32_t *bytesData, uint64_t timeout) { while (1) { //dumpState("get"); - wait(); - if (mInShutdown) { + wait(timeout); + + if (isEmpty() || mInShutdown) { *command = 0; *bytesData = 0; - return 0; + return NULL; } *command = reinterpret_cast<const uint16_t *>(mGet)[0]; diff --git a/libs/rs/rsLocklessFifo.h b/libs/rs/rsLocklessFifo.h index eabdc3e..4962ef6 100644 --- a/libs/rs/rsLocklessFifo.h +++ b/libs/rs/rsLocklessFifo.h @@ -57,9 +57,9 @@ public: void commitSync(uint32_t command, uint32_t bytes); void flush(); - void wait(); + bool wait(uint64_t timeout = 0); - const void * get(uint32_t *command, uint32_t *bytesData); + const void * get(uint32_t *command, uint32_t *bytesData, uint64_t timeout = 0); void next(); void makeSpace(uint32_t bytes); diff --git a/libs/rs/rsSignal.cpp b/libs/rs/rsSignal.cpp index ccd20b9..413ac2b 100644 --- a/libs/rs/rsSignal.cpp +++ b/libs/rs/rsSignal.cpp @@ -68,26 +68,43 @@ void Signal::set() { } } -void Signal::wait() { +bool Signal::wait(uint64_t timeout) { int status; + bool ret = false; status = pthread_mutex_lock(&mMutex); if (status) { LOGE("LocklessCommandFifo: error %i locking for condition.", status); - return; + return false; } if (!mSet) { - status = pthread_cond_wait(&mCondition, &mMutex); - if (status) { - LOGE("LocklessCommandFifo: error %i waiting on condition.", status); + if (!timeout) { + status = pthread_cond_wait(&mCondition, &mMutex); + } else { +#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE) + status = pthread_cond_timeout_np(&mCondition, &mMutex, timeout / 1000000); +#else + // This is safe it will just make things less reponsive + status = pthread_cond_wait(&mCondition, &mMutex); +#endif + } + } + + if (!status) { + mSet = false; + ret = true; + } else { + if (status != ETIMEDOUT) { + LOGE("LocklessCommandFifo: error %i waiting for condition.", status); } } - mSet = false; status = pthread_mutex_unlock(&mMutex); if (status) { LOGE("LocklessCommandFifo: error %i unlocking for condition.", status); } + + return ret; } diff --git a/libs/rs/rsSignal.h b/libs/rs/rsSignal.h index 2e760f1..fc31883 100644 --- a/libs/rs/rsSignal.h +++ b/libs/rs/rsSignal.h @@ -31,7 +31,10 @@ public: bool init(); void set(); - void wait(); + + // returns true if the signal occured + // false for timeout + bool wait(uint64_t timeout = 0); protected: bool mSet; diff --git a/libs/rs/rsThreadIO.cpp b/libs/rs/rsThreadIO.cpp index 1c8b89c..fe2c52e 100644 --- a/libs/rs/rsThreadIO.cpp +++ b/libs/rs/rsThreadIO.cpp @@ -113,8 +113,10 @@ void ThreadIO::coreGetReturn(void *data, size_t dataLen) { } -bool ThreadIO::playCoreCommands(Context *con, bool waitForCommand) { +bool ThreadIO::playCoreCommands(Context *con, bool waitForCommand, uint64_t timeToWait) { bool ret = false; + uint64_t startTime = con->getTime(); + while (!mToCore.isEmpty() || waitForCommand) { uint32_t cmdID = 0; uint32_t cmdSize = 0; @@ -122,9 +124,17 @@ bool ThreadIO::playCoreCommands(Context *con, bool waitForCommand) { if (con->props.mLogTimes) { con->timerSet(Context::RS_TIMER_IDLE); } - const void * data = mToCore.get(&cmdID, &cmdSize); + + uint64_t delay = 0; + if (waitForCommand) { + delay = timeToWait - (con->getTime() - startTime); + if (delay > timeToWait) { + delay = 0; + } + } + const void * data = mToCore.get(&cmdID, &cmdSize, delay); if (!cmdSize) { - // exception occured, probably shutdown. + // exception or timeout occurred. return false; } if (con->props.mLogTimes) { diff --git a/libs/rs/rsThreadIO.h b/libs/rs/rsThreadIO.h index cad7318..9036118 100644 --- a/libs/rs/rsThreadIO.h +++ b/libs/rs/rsThreadIO.h @@ -37,7 +37,7 @@ public: // Plays back commands from the client. // Returns true if any commands were processed. - bool playCoreCommands(Context *con, bool waitForCommand); + bool playCoreCommands(Context *con, bool waitForCommand, uint64_t timeToWait); //LocklessCommandFifo mToCore; diff --git a/libs/rs/scriptc/rs_allocation.rsh b/libs/rs/scriptc/rs_allocation.rsh new file mode 100644 index 0000000..1e755cd --- /dev/null +++ b/libs/rs/scriptc/rs_allocation.rsh @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_allocation.rsh + * \brief Allocation routines + * + * + */ + +#ifndef __RS_ALLOCATION_RSH__ +#define __RS_ALLOCATION_RSH__ + +/** + * Returns the Allocation for a given pointer. The pointer should point within + * a valid allocation. The results are undefined if the pointer is not from a + * valid allocation. + */ +extern rs_allocation __attribute__((overloadable)) + rsGetAllocation(const void *); + +/** + * Query the dimension of an allocation. + * + * @return uint32_t The X dimension of the allocation. + */ +extern uint32_t __attribute__((overloadable)) + rsAllocationGetDimX(rs_allocation); + +/** + * Query the dimension of an allocation. + * + * @return uint32_t The Y dimension of the allocation. + */ +extern uint32_t __attribute__((overloadable)) + rsAllocationGetDimY(rs_allocation); + +/** + * Query the dimension of an allocation. + * + * @return uint32_t The Z dimension of the allocation. + */ +extern uint32_t __attribute__((overloadable)) + rsAllocationGetDimZ(rs_allocation); + +/** + * Query an allocation for the presence of more than one LOD. + * + * @return uint32_t Returns 1 if more than one LOD is present, 0 otherwise. + */ +extern uint32_t __attribute__((overloadable)) + rsAllocationGetDimLOD(rs_allocation); + +/** + * Query an allocation for the presence of more than one face. + * + * @return uint32_t Returns 1 if more than one face is present, 0 otherwise. + */ +extern uint32_t __attribute__((overloadable)) + rsAllocationGetDimFaces(rs_allocation); + +/** + * Copy part of an allocation from another allocation. + * + * @param dstAlloc Allocation to copy data into. + * @param dstOff The offset of the first element to be copied in + * the destination allocation. + * @param dstMip Mip level in the destination allocation. + * @param count The number of elements to be copied. + * @param srcAlloc The source data allocation. + * @param srcOff The offset of the first element in data to be + * copied in the source allocation. + * @param srcMip Mip level in the source allocation. + */ +extern void __attribute__((overloadable)) + rsAllocationCopy1DRange(rs_allocation dstAlloc, + uint32_t dstOff, uint32_t dstMip, + uint32_t count, + rs_allocation srcAlloc, + uint32_t srcOff, uint32_t srcMip); + +/** + * Copy a rectangular region into the allocation from another + * allocation. + * + * @param dstAlloc allocation to copy data into. + * @param dstXoff X offset of the region to update in the + * destination allocation. + * @param dstYoff Y offset of the region to update in the + * destination allocation. + * @param dstMip Mip level in the destination allocation. + * @param dstFace Cubemap face of the destination allocation, + * ignored for allocations that aren't cubemaps. + * @param width Width of the incoming region to update. + * @param height Height of the incoming region to update. + * @param srcAlloc The source data allocation. + * @param srcXoff X offset in data of the source allocation. + * @param srcYoff Y offset in data of the source allocation. + * @param srcMip Mip level in the source allocation. + * @param srcFace Cubemap face of the source allocation, + * ignored for allocations that aren't cubemaps. + */ +extern void __attribute__((overloadable)) + rsAllocationCopy2DRange(rs_allocation dstAlloc, + uint32_t dstXoff, uint32_t dstYoff, + uint32_t dstMip, + rs_allocation_cubemap_face dstFace, + uint32_t width, uint32_t height, + rs_allocation srcAlloc, + uint32_t srcXoff, uint32_t srcYoff, + uint32_t srcMip, + rs_allocation_cubemap_face srcFace); + + +/** + * Extract a single element from an allocation. + */ +extern const void * __attribute__((overloadable)) + rsGetElementAt(rs_allocation, uint32_t x); +/** + * \overload + */ +extern const void * __attribute__((overloadable)) + rsGetElementAt(rs_allocation, uint32_t x, uint32_t y); +/** + * \overload + */ +extern const void * __attribute__((overloadable)) + rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z); + +#endif + diff --git a/libs/rs/scriptc/rs_atomic.rsh b/libs/rs/scriptc/rs_atomic.rsh new file mode 100644 index 0000000..95513ad --- /dev/null +++ b/libs/rs/scriptc/rs_atomic.rsh @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_atomic.rsh + * \brief Atomic routines + * + * + */ + +#ifndef __RS_ATOMIC_RSH__ +#define __RS_ATOMIC_RSH__ + + +/** + * Atomic add one to the value at addr. + * Equal to rsAtomicAdd(addr, 1) + * + * @param addr Address of value to increment + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicInc(volatile int32_t* addr); +/** + * Atomic add one to the value at addr. + * Equal to rsAtomicAdd(addr, 1) + * + * @param addr Address of value to increment + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicInc(volatile uint32_t* addr); + +/** + * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) + * + * @param addr Address of value to decrement + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicDec(volatile int32_t* addr); +/** + * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) + * + * @param addr Address of value to decrement + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicDec(volatile uint32_t* addr); + +/** + * Atomic add a value to the value at addr. addr[0] += value + * + * @param addr Address of value to modify + * @param value Amount to add to the value at addr + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicAdd(volatile int32_t* addr, int32_t value); +/** + * Atomic add a value to the value at addr. addr[0] += value + * + * @param addr Address of value to modify + * @param value Amount to add to the value at addr + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicAdd(volatile uint32_t* addr, uint32_t value); + +/** + * Atomic Subtract a value from the value at addr. addr[0] -= value + * + * @param addr Address of value to modify + * @param value Amount to subtract from the value at addr + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicSub(volatile int32_t* addr, int32_t value); +/** + * Atomic Subtract a value from the value at addr. addr[0] -= value + * + * @param addr Address of value to modify + * @param value Amount to subtract from the value at addr + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicSub(volatile uint32_t* addr, uint32_t value); + +/** + * Atomic Bitwise and a value from the value at addr. addr[0] &= value + * + * @param addr Address of value to modify + * @param value Amount to and with the value at addr + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicAnd(volatile int32_t* addr, int32_t value); +/** + * Atomic Bitwise and a value from the value at addr. addr[0] &= value + * + * @param addr Address of value to modify + * @param value Amount to and with the value at addr + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicAnd(volatile uint32_t* addr, uint32_t value); + +/** + * Atomic Bitwise or a value from the value at addr. addr[0] |= value + * + * @param addr Address of value to modify + * @param value Amount to or with the value at addr + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicOr(volatile int32_t* addr, int32_t value); +/** + * Atomic Bitwise or a value from the value at addr. addr[0] |= value + * + * @param addr Address of value to modify + * @param value Amount to or with the value at addr + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicOr(volatile uint32_t* addr, uint32_t value); + +/** + * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value + * + * @param addr Address of value to modify + * @param value Amount to xor with the value at addr + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicXor(volatile uint32_t* addr, uint32_t value); +/** + * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value + * + * @param addr Address of value to modify + * @param value Amount to xor with the value at addr + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicXor(volatile int32_t* addr, int32_t value); + +/** + * Atomic Set the value at addr to the min of addr and value + * addr[0] = rsMin(addr[0], value) + * + * @param addr Address of value to modify + * @param value comparison value + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicMin(volatile uint32_t* addr, uint32_t value); +/** + * Atomic Set the value at addr to the min of addr and value + * addr[0] = rsMin(addr[0], value) + * + * @param addr Address of value to modify + * @param value comparison value + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicMin(volatile int32_t* addr, int32_t value); + +/** + * Atomic Set the value at addr to the max of addr and value + * addr[0] = rsMax(addr[0], value) + * + * @param addr Address of value to modify + * @param value comparison value + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicMax(volatile uint32_t* addr, uint32_t value); +/** + * Atomic Set the value at addr to the max of addr and value + * addr[0] = rsMin(addr[0], value) + * + * @param addr Address of value to modify + * @param value comparison value + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicMax(volatile int32_t* addr, int32_t value); + +/** + * Compare-and-set operation with a full memory barrier. + * + * If the value at addr matches compareValue then newValue is written. + * + * @param addr The address to compare and replace if the compare passes. + * @param compareValue The value to test addr[0] against. + * @param newValue The value to write if the test passes. + * + * @return old value + */ +extern int32_t __attribute__((overloadable)) + rsAtomicCas(volatile int32_t* addr, int32_t compareValue, int32_t newValue); + +/** + * Compare-and-set operation with a full memory barrier. + * + * If the value at addr matches compareValue then newValue is written. + * + * @param addr The address to compare and replace if the compare passes. + * @param compareValue The value to test addr[0] against. + * @param newValue The value to write if the test passes. + * + * @return old value + */ +extern uint32_t __attribute__((overloadable)) + rsAtomicCas(volatile uint32_t* addr, int32_t compareValue, int32_t newValue); + + +#endif + diff --git a/libs/rs/scriptc/rs_cl.rsh b/libs/rs/scriptc/rs_cl.rsh index d78e62e..e402b86 100644 --- a/libs/rs/scriptc/rs_cl.rsh +++ b/libs/rs/scriptc/rs_cl.rsh @@ -1,8 +1,28 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_cl.rsh + * \brief Additional compute routines + * + * + */ + #ifndef __RS_CL_RSH__ #define __RS_CL_RSH__ -#define _RS_RUNTIME extern - // Conversions #define CVT_FUNC_2(typeout, typein) \ _RS_RUNTIME typeout##2 __attribute__((overloadable)) \ @@ -444,6 +464,5 @@ _RS_RUNTIME float4 __attribute__((overloadable)) normalize(float4 v); #undef IN_FUNC_IN #undef XN_FUNC_XN_XN_BODY #undef IN_FUNC_IN_IN_BODY -#undef _RS_RUNTIME #endif diff --git a/libs/rs/scriptc/rs_core.rsh b/libs/rs/scriptc/rs_core.rsh index 1583090..be900cb 100644 --- a/libs/rs/scriptc/rs_core.rsh +++ b/libs/rs/scriptc/rs_core.rsh @@ -1,889 +1,166 @@ -/** @file rs_core.rsh - * \brief todo-jsams +/* + * Copyright (C) 2011 The Android Open Source Project * - * todo-jsams + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - */ -#ifndef __RS_CORE_RSH__ -#define __RS_CORE_RSH__ - -#define _RS_RUNTIME extern - -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, float); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, float, float); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, float, float, float); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, float, float, float, float); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, double); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, const rs_matrix4x4 *); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, const rs_matrix3x3 *); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, const rs_matrix2x2 *); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, int); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, uint); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, long); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, unsigned long); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, long long); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, unsigned long long); -/** - * Debug function. Prints a string and value to the log. - */ -extern void __attribute__((overloadable)) - rsDebug(const char *, const void *); -#define RS_DEBUG(a) rsDebug(#a, a) -#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__) - - -/** - * Debug function. Prints a string and value to the log. - */ -_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float2 v); -/** - * Debug function. Prints a string and value to the log. - */ -_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float3 v); -/** - * Debug function. Prints a string and value to the log. - */ -_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float4 v); - - -/** - * Pack floating point (0-1) RGB values into a uchar4. The alpha component is - * set to 255 (1.0). - * - * @param r - * @param g - * @param b - * - * @return uchar4 - */ -_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b); - -/** - * Pack floating point (0-1) RGBA values into a uchar4. - * - * @param r - * @param g - * @param b - * @param a + * http://www.apache.org/licenses/LICENSE-2.0 * - * @return uchar4 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a); -/** - * Pack floating point (0-1) RGB values into a uchar4. The alpha component is - * set to 255 (1.0). +/** @file rs_core.rsh + * \brief todo-jsams * - * @param color + * todo-jsams * - * @return uchar4 */ -_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color); -/** - * Pack floating point (0-1) RGBA values into a uchar4. - * - * @param color - * - * @return uchar4 - */ -_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color); +#ifndef __RS_CORE_RSH__ +#define __RS_CORE_RSH__ -/** - * Unpack a uchar4 color to float4. The resulting float range will be (0-1). - * - * @param c - * - * @return float4 - */ -_RS_RUNTIME float4 rsUnpackColor8888(uchar4 c); +#define _RS_RUNTIME extern +#include "rs_types.rsh" +#include "rs_allocation.rsh" +#include "rs_atomic.rsh" +#include "rs_cl.rsh" +#include "rs_debug.rsh" +#include "rs_math.rsh" +#include "rs_matrix.rsh" +#include "rs_object.rsh" +#include "rs_quaternion.rsh" +#include "rs_time.rsh" -///////////////////////////////////////////////////// -// Matrix ops -///////////////////////////////////////////////////// -/** - * Set one element of a matrix. - * - * @param m The matrix to be set - * @param row - * @param col - * @param v - * - * @return void - */ -_RS_RUNTIME void __attribute__((overloadable)) -rsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); -/** - * \overload - */ -_RS_RUNTIME void __attribute__((overloadable)) -rsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); -/** - * \overload - */ -_RS_RUNTIME void __attribute__((overloadable)) -rsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); /** - * Get one element of a matrix. - * - * @param m The matrix to read from - * @param row - * @param col - * - * @return float + * Send a message back to the client. Will not block and returns true + * if the message was sendable and false if the fifo was full. + * A message ID is required. Data payload is optional. */ -_RS_RUNTIME float __attribute__((overloadable)) -rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); +extern bool __attribute__((overloadable)) + rsSendToClient(int cmdID); /** * \overload */ -_RS_RUNTIME float __attribute__((overloadable)) -rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); +extern bool __attribute__((overloadable)) + rsSendToClient(int cmdID, const void *data, uint len); /** - * \overload + * Send a message back to the client, blocking until the message is queued. + * A message ID is required. Data payload is optional. */ -_RS_RUNTIME float __attribute__((overloadable)) -rsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); - -/** - * Set the elements of a matrix to the identity matrix. - * - * @param m - */ -extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m); +extern void __attribute__((overloadable)) + rsSendToClientBlocking(int cmdID); /** * \overload */ -extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m); +extern void __attribute__((overloadable)) + rsSendToClientBlocking(int cmdID, const void *data, uint len); -/** - * Set the elements of a matrix from an array of floats. - * - * @param m - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v); /** - * Set the elements of a matrix from another matrix. + * Launch order hint for rsForEach calls. This provides a hint to the system to + * determine in which order the root function of the target is called with each + * cell of the allocation. * - * @param m - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v); -/** - * \overload + * This is a hint and implementations may not obey the order. */ -extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v); +enum rs_for_each_strategy { + RS_FOR_EACH_STRATEGY_SERIAL, + RS_FOR_EACH_STRATEGY_DONT_CARE, + RS_FOR_EACH_STRATEGY_DST_LINEAR, + RS_FOR_EACH_STRATEGY_TILE_SMALL, + RS_FOR_EACH_STRATEGY_TILE_MEDIUM, + RS_FOR_EACH_STRATEGY_TILE_LARGE +}; -/** - * Load a rotation matrix. - * - * @param m - * @param rot - * @param x - * @param y - * @param z - */ -extern void __attribute__((overloadable)) -rsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); /** - * Load a scale matrix. - * - * @param m - * @param x - * @param y - * @param z + * Structure to provide extra information to a rsForEach call. Primarly used to + * restrict the call to a subset of cells in the allocation. */ -extern void __attribute__((overloadable)) -rsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); +typedef struct rs_script_call { + enum rs_for_each_strategy strategy; + uint32_t xStart; + uint32_t xEnd; + uint32_t yStart; + uint32_t yEnd; + uint32_t zStart; + uint32_t zEnd; + uint32_t arrayStart; + uint32_t arrayEnd; +} rs_script_call_t; /** - * Load a translation matrix. + * Make a script to script call to launch work. One of the input or output is + * required to be a valid object. The input and output must be of the same + * dimensions. + * API 10-13 * - * @param m - * @param x - * @param y - * @param z - */ -extern void __attribute__((overloadable)) -rsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); - -/** - * Multiply two matrix (lhs, rhs) and place the result in m. + * @param script The target script to call + * @param input The allocation to source data from + * @param output the allocation to write date into + * @param usrData The user definied params to pass to the root script. May be + * NULL. + * @param sc Extra control infomation used to select a sub-region of the + * allocation to be processed or suggest a walking strategy. May be + * NULL. * - * @param m - * @param lhs - * @param rhs - */ -extern void __attribute__((overloadable)) -rsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs); -/** - * \overload - */ + * */ +#if !defined(RS_VERSION) || (RS_VERSION < 14) extern void __attribute__((overloadable)) -rsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs); + rsForEach(rs_script script, rs_allocation input, + rs_allocation output, const void * usrData, + const rs_script_call_t *sc); /** * \overload */ extern void __attribute__((overloadable)) -rsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs); + rsForEach(rs_script script, rs_allocation input, + rs_allocation output, const void * usrData); +#else /** - * Multiply the matrix m by rhs and place the result back into m. + * Make a script to script call to launch work. One of the input or output is + * required to be a valid object. The input and output must be of the same + * dimensions. + * API 14+ + * + * @param script The target script to call + * @param input The allocation to source data from + * @param output the allocation to write date into + * @param usrData The user definied params to pass to the root script. May be + * NULL. + * @param usrDataLen The size of the userData structure. This will be used to + * perform a shallow copy of the data if necessary. + * @param sc Extra control infomation used to select a sub-region of the + * allocation to be processed or suggest a walking strategy. May be + * NULL. * - * @param m (lhs) - * @param rhs */ extern void __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); + rsForEach(rs_script script, rs_allocation input, rs_allocation output, + const void * usrData, size_t usrDataLen, const rs_script_call_t *); /** * \overload */ extern void __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); + rsForEach(rs_script script, rs_allocation input, rs_allocation output, + const void * usrData, size_t usrDataLen); /** * \overload */ extern void __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); - -/** - * Multiple matrix m with a rotation matrix - * - * @param m - * @param rot - * @param x - * @param y - * @param z - */ -extern void __attribute__((overloadable)) -rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); - -/** - * Multiple matrix m with a scale matrix - * - * @param m - * @param x - * @param y - * @param z - */ -extern void __attribute__((overloadable)) -rsMatrixScale(rs_matrix4x4 *m, float x, float y, float z); - -/** - * Multiple matrix m with a translation matrix - * - * @param m - * @param x - * @param y - * @param z - */ -extern void __attribute__((overloadable)) -rsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); - -/** - * Load an Ortho projection matrix constructed from the 6 planes - * - * @param m - * @param left - * @param right - * @param bottom - * @param top - * @param near - * @param far - */ -extern void __attribute__((overloadable)) -rsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); - -/** - * Load an Frustum projection matrix constructed from the 6 planes - * - * @param m - * @param left - * @param right - * @param bottom - * @param top - * @param near - * @param far - */ -extern void __attribute__((overloadable)) -rsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); - -/** - * Load an perspective projection matrix constructed from the 6 planes - * - * @param m - * @param fovy Field of view, in degrees along the Y axis. - * @param aspect Ratio of x / y. - * @param near - * @param far - */ -extern void __attribute__((overloadable)) -rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); - -#if !defined(RS_VERSION) || (RS_VERSION < 14) -/** - * Multiply a vector by a matrix and return the result vector. - * API version 10-13 - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix4x4 *m, float4 in); - -/** - * \overload - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix4x4 *m, float3 in); - -/** - * \overload - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix4x4 *m, float2 in); - -/** - * \overload - */ -_RS_RUNTIME float3 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix3x3 *m, float3 in); - -/** - * \overload - */ -_RS_RUNTIME float3 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix3x3 *m, float2 in); - -/** - * \overload - */ -_RS_RUNTIME float2 __attribute__((overloadable)) -rsMatrixMultiply(rs_matrix2x2 *m, float2 in); -#else -/** - * Multiply a vector by a matrix and return the result vector. - * API version 10-13 - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix4x4 *m, float4 in); - -/** - * \overload - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix4x4 *m, float3 in); - -/** - * \overload - */ -_RS_RUNTIME float4 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix4x4 *m, float2 in); - -/** - * \overload - */ -_RS_RUNTIME float3 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix3x3 *m, float3 in); - -/** - * \overload - */ -_RS_RUNTIME float3 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix3x3 *m, float2 in); - -/** - * \overload - */ -_RS_RUNTIME float2 __attribute__((overloadable)) -rsMatrixMultiply(const rs_matrix2x2 *m, float2 in); + rsForEach(rs_script script, rs_allocation input, rs_allocation output); #endif -/** - * Returns true if the matrix was successfully inversed - * - * @param m - */ -extern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m); - -/** - * Returns true if the matrix was successfully inversed and transposed. - * - * @param m - */ -extern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m); - -/** - * Transpose the matrix m. - * - * @param m - */ -extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m); -/** - * \overload - */ -extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m); - -///////////////////////////////////////////////////// -// quaternion ops -///////////////////////////////////////////////////// - -/** - * Set the quaternion components - * @param w component - * @param x component - * @param y component - * @param z component - */ -static void __attribute__((overloadable)) -rsQuaternionSet(rs_quaternion *q, float w, float x, float y, float z) { - q->w = w; - q->x = x; - q->y = y; - q->z = z; -} - -/** - * Set the quaternion from another quaternion - * @param q destination quaternion - * @param rhs source quaternion - */ -static void __attribute__((overloadable)) -rsQuaternionSet(rs_quaternion *q, const rs_quaternion *rhs) { - q->w = rhs->w; - q->x = rhs->x; - q->y = rhs->y; - q->z = rhs->z; -} - -/** - * Multiply quaternion by a scalar - * @param q quaternion to multiply - * @param s scalar - */ -static void __attribute__((overloadable)) -rsQuaternionMultiply(rs_quaternion *q, float s) { - q->w *= s; - q->x *= s; - q->y *= s; - q->z *= s; -} - -/** - * Multiply quaternion by another quaternion - * @param q destination quaternion - * @param rhs right hand side quaternion to multiply by - */ -static void __attribute__((overloadable)) -rsQuaternionMultiply(rs_quaternion *q, const rs_quaternion *rhs) { - q->w = -q->x*rhs->x - q->y*rhs->y - q->z*rhs->z + q->w*rhs->w; - q->x = q->x*rhs->w + q->y*rhs->z - q->z*rhs->y + q->w*rhs->x; - q->y = -q->x*rhs->z + q->y*rhs->w + q->z*rhs->x + q->w*rhs->y; - q->z = q->x*rhs->y - q->y*rhs->x + q->z*rhs->w + q->w*rhs->z; -} - -/** - * Add two quaternions - * @param q destination quaternion to add to - * @param rsh right hand side quaternion to add - */ -static void -rsQuaternionAdd(rs_quaternion *q, const rs_quaternion *rhs) { - q->w *= rhs->w; - q->x *= rhs->x; - q->y *= rhs->y; - q->z *= rhs->z; -} - -/** - * Loads a quaternion that represents a rotation about an arbitrary unit vector - * @param q quaternion to set - * @param rot angle to rotate by - * @param x component of a vector - * @param y component of a vector - * @param x component of a vector - */ -static void -rsQuaternionLoadRotateUnit(rs_quaternion *q, float rot, float x, float y, float z) { - rot *= (float)(M_PI / 180.0f) * 0.5f; - float c = cos(rot); - float s = sin(rot); - - q->w = c; - q->x = x * s; - q->y = y * s; - q->z = z * s; -} - -/** - * Loads a quaternion that represents a rotation about an arbitrary vector - * (doesn't have to be unit) - * @param q quaternion to set - * @param rot angle to rotate by - * @param x component of a vector - * @param y component of a vector - * @param x component of a vector - */ -static void -rsQuaternionLoadRotate(rs_quaternion *q, float rot, float x, float y, float z) { - const float len = x*x + y*y + z*z; - if (len != 1) { - const float recipLen = 1.f / sqrt(len); - x *= recipLen; - y *= recipLen; - z *= recipLen; - } - rsQuaternionLoadRotateUnit(q, rot, x, y, z); -} - -/** - * Conjugates the quaternion - * @param q quaternion to conjugate - */ -static void -rsQuaternionConjugate(rs_quaternion *q) { - q->x = -q->x; - q->y = -q->y; - q->z = -q->z; -} - -/** - * Dot product of two quaternions - * @param q0 first quaternion - * @param q1 second quaternion - * @return dot product between q0 and q1 - */ -static float -rsQuaternionDot(const rs_quaternion *q0, const rs_quaternion *q1) { - return q0->w*q1->w + q0->x*q1->x + q0->y*q1->y + q0->z*q1->z; -} - -/** - * Normalizes the quaternion - * @param q quaternion to normalize - */ -static void -rsQuaternionNormalize(rs_quaternion *q) { - const float len = rsQuaternionDot(q, q); - if (len != 1) { - const float recipLen = 1.f / sqrt(len); - rsQuaternionMultiply(q, recipLen); - } -} - -/** - * Performs spherical linear interpolation between two quaternions - * @param q result quaternion from interpolation - * @param q0 first param - * @param q1 second param - * @param t how much to interpolate by - */ -static void -rsQuaternionSlerp(rs_quaternion *q, const rs_quaternion *q0, const rs_quaternion *q1, float t) { - if (t <= 0.0f) { - rsQuaternionSet(q, q0); - return; - } - if (t >= 1.0f) { - rsQuaternionSet(q, q1); - return; - } - - rs_quaternion tempq0, tempq1; - rsQuaternionSet(&tempq0, q0); - rsQuaternionSet(&tempq1, q1); - - float angle = rsQuaternionDot(q0, q1); - if (angle < 0) { - rsQuaternionMultiply(&tempq0, -1.0f); - angle *= -1.0f; - } - - float scale, invScale; - if (angle + 1.0f > 0.05f) { - if (1.0f - angle >= 0.05f) { - float theta = acos(angle); - float invSinTheta = 1.0f / sin(theta); - scale = sin(theta * (1.0f - t)) * invSinTheta; - invScale = sin(theta * t) * invSinTheta; - } else { - scale = 1.0f - t; - invScale = t; - } - } else { - rsQuaternionSet(&tempq1, tempq0.z, -tempq0.y, tempq0.x, -tempq0.w); - scale = sin(M_PI * (0.5f - t)); - invScale = sin(M_PI * t); - } - - rsQuaternionSet(q, tempq0.w*scale + tempq1.w*invScale, tempq0.x*scale + tempq1.x*invScale, - tempq0.y*scale + tempq1.y*invScale, tempq0.z*scale + tempq1.z*invScale); -} - -/** - * Computes rotation matrix from the normalized quaternion - * @param m resulting matrix - * @param p normalized quaternion - */ -static void rsQuaternionGetMatrixUnit(rs_matrix4x4 *m, const rs_quaternion *q) { - float x2 = 2.0f * q->x * q->x; - float y2 = 2.0f * q->y * q->y; - float z2 = 2.0f * q->z * q->z; - float xy = 2.0f * q->x * q->y; - float wz = 2.0f * q->w * q->z; - float xz = 2.0f * q->x * q->z; - float wy = 2.0f * q->w * q->y; - float wx = 2.0f * q->w * q->x; - float yz = 2.0f * q->y * q->z; - - m->m[0] = 1.0f - y2 - z2; - m->m[1] = xy - wz; - m->m[2] = xz + wy; - m->m[3] = 0.0f; - - m->m[4] = xy + wz; - m->m[5] = 1.0f - x2 - z2; - m->m[6] = yz - wx; - m->m[7] = 0.0f; - - m->m[8] = xz - wy; - m->m[9] = yz - wx; - m->m[10] = 1.0f - x2 - y2; - m->m[11] = 0.0f; - - m->m[12] = 0.0f; - m->m[13] = 0.0f; - m->m[14] = 0.0f; - m->m[15] = 1.0f; -} - -///////////////////////////////////////////////////// -// utility funcs -///////////////////////////////////////////////////// - -/** - * Computes 6 frustum planes from the view projection matrix - * @param viewProj matrix to extract planes from - * @param left plane - * @param right plane - * @param top plane - * @param bottom plane - * @param near plane - * @param far plane - */ -__inline__ static void __attribute__((overloadable, always_inline)) -rsExtractFrustumPlanes(const rs_matrix4x4 *viewProj, - float4 *left, float4 *right, - float4 *top, float4 *bottom, - float4 *near, float4 *far) { - // x y z w = a b c d in the plane equation - left->x = viewProj->m[3] + viewProj->m[0]; - left->y = viewProj->m[7] + viewProj->m[4]; - left->z = viewProj->m[11] + viewProj->m[8]; - left->w = viewProj->m[15] + viewProj->m[12]; - - right->x = viewProj->m[3] - viewProj->m[0]; - right->y = viewProj->m[7] - viewProj->m[4]; - right->z = viewProj->m[11] - viewProj->m[8]; - right->w = viewProj->m[15] - viewProj->m[12]; - - top->x = viewProj->m[3] - viewProj->m[1]; - top->y = viewProj->m[7] - viewProj->m[5]; - top->z = viewProj->m[11] - viewProj->m[9]; - top->w = viewProj->m[15] - viewProj->m[13]; - - bottom->x = viewProj->m[3] + viewProj->m[1]; - bottom->y = viewProj->m[7] + viewProj->m[5]; - bottom->z = viewProj->m[11] + viewProj->m[9]; - bottom->w = viewProj->m[15] + viewProj->m[13]; - - near->x = viewProj->m[3] + viewProj->m[2]; - near->y = viewProj->m[7] + viewProj->m[6]; - near->z = viewProj->m[11] + viewProj->m[10]; - near->w = viewProj->m[15] + viewProj->m[14]; - - far->x = viewProj->m[3] - viewProj->m[2]; - far->y = viewProj->m[7] - viewProj->m[6]; - far->z = viewProj->m[11] - viewProj->m[10]; - far->w = viewProj->m[15] - viewProj->m[14]; - - float len = length(left->xyz); - *left /= len; - len = length(right->xyz); - *right /= len; - len = length(top->xyz); - *top /= len; - len = length(bottom->xyz); - *bottom /= len; - len = length(near->xyz); - *near /= len; - len = length(far->xyz); - *far /= len; -} - -/** - * Checks if a sphere is withing the 6 frustum planes - * @param sphere float4 representing the sphere - * @param left plane - * @param right plane - * @param top plane - * @param bottom plane - * @param near plane - * @param far plane - */ -__inline__ static bool __attribute__((overloadable, always_inline)) -rsIsSphereInFrustum(float4 *sphere, - float4 *left, float4 *right, - float4 *top, float4 *bottom, - float4 *near, float4 *far) { - - float distToCenter = dot(left->xyz, sphere->xyz) + left->w; - if (distToCenter < -sphere->w) { - return false; - } - distToCenter = dot(right->xyz, sphere->xyz) + right->w; - if (distToCenter < -sphere->w) { - return false; - } - distToCenter = dot(top->xyz, sphere->xyz) + top->w; - if (distToCenter < -sphere->w) { - return false; - } - distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; - if (distToCenter < -sphere->w) { - return false; - } - distToCenter = dot(near->xyz, sphere->xyz) + near->w; - if (distToCenter < -sphere->w) { - return false; - } - distToCenter = dot(far->xyz, sphere->xyz) + far->w; - if (distToCenter < -sphere->w) { - return false; - } - return true; -} - - -///////////////////////////////////////////////////// -// int ops -///////////////////////////////////////////////////// - -/** - * Clamp the value amount between low and high. - * - * @param amount The value to clamp - * @param low - * @param high - */ -_RS_RUNTIME uint __attribute__((overloadable, always_inline)) rsClamp(uint amount, uint low, uint high); - -/** - * \overload - */ -_RS_RUNTIME int __attribute__((overloadable, always_inline)) rsClamp(int amount, int low, int high); -/** - * \overload - */ -_RS_RUNTIME ushort __attribute__((overloadable, always_inline)) rsClamp(ushort amount, ushort low, ushort high); -/** - * \overload - */ -_RS_RUNTIME short __attribute__((overloadable, always_inline)) rsClamp(short amount, short low, short high); -/** - * \overload - */ -_RS_RUNTIME uchar __attribute__((overloadable, always_inline)) rsClamp(uchar amount, uchar low, uchar high); -/** - * \overload - */ -_RS_RUNTIME char __attribute__((overloadable, always_inline)) rsClamp(char amount, char low, char high); #undef _RS_RUNTIME diff --git a/libs/rs/scriptc/rs_debug.rsh b/libs/rs/scriptc/rs_debug.rsh new file mode 100644 index 0000000..074c28f --- /dev/null +++ b/libs/rs/scriptc/rs_debug.rsh @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_debug.rsh + * \brief Utility debugging routines + * + * Routines intended to be used during application developement. These should + * not be used in shipping applications. All print a string and value pair to + * the standard log. + * + */ + +#ifndef __RS_DEBUG_RSH__ +#define __RS_DEBUG_RSH__ + + + +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, float); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, float, float); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, float, float, float); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, float, float, float, float); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, double); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, const rs_matrix4x4 *); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, const rs_matrix3x3 *); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, const rs_matrix2x2 *); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, int); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, uint); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, long); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, unsigned long); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, long long); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, unsigned long long); +/** + * Debug function. Prints a string and value to the log. + */ +extern void __attribute__((overloadable)) + rsDebug(const char *, const void *); +#define RS_DEBUG(a) rsDebug(#a, a) +#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__) + + +/** + * Debug function. Prints a string and value to the log. + */ +_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float2 v); +/** + * Debug function. Prints a string and value to the log. + */ +_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float3 v); +/** + * Debug function. Prints a string and value to the log. + */ +_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float4 v); + +#endif diff --git a/libs/rs/scriptc/rs_graphics.rsh b/libs/rs/scriptc/rs_graphics.rsh index 9a8a4e6..00fd1b1 100644 --- a/libs/rs/scriptc/rs_graphics.rsh +++ b/libs/rs/scriptc/rs_graphics.rsh @@ -1,3 +1,25 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_graphics.rsh + * \brief Renderscript graphics API + * + * A set of graphics functions used by Renderscript. + * + */ #ifndef __RS_GRAPHICS_RSH__ #define __RS_GRAPHICS_RSH__ @@ -37,7 +59,7 @@ extern void __attribute__((overloadable)) rsgClearAllRenderTargets(void); /** - * Force RenderScript to finish all rendering commands + * Force Renderscript to finish all rendering commands */ extern uint __attribute__((overloadable)) rsgFinish(void); @@ -94,16 +116,38 @@ extern void __attribute__((overloadable)) extern void __attribute__((overloadable)) rsgBindTexture(rs_program_fragment, uint slot, rs_allocation); - +/** + * Load the projection matrix for a currently bound fixed function + * vertex program. Calling this function with a custom vertex shader + * would result in an error. + * @param proj projection matrix + */ extern void __attribute__((overloadable)) - rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *); + rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj); +/** + * Load the model matrix for a currently bound fixed function + * vertex program. Calling this function with a custom vertex shader + * would result in an error. + * @param model model matrix + */ extern void __attribute__((overloadable)) - rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *); + rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model); +/** + * Load the texture matrix for a currently bound fixed function + * vertex program. Calling this function with a custom vertex shader + * would result in an error. + * @param tex texture matrix + */ extern void __attribute__((overloadable)) - rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *); - + rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex); +/** + * Get the projection matrix for a currently bound fixed function + * vertex program. Calling this function with a custom vertex shader + * would result in an error. + * @param proj matrix to store the current projection matrix into + */ extern void __attribute__((overloadable)) - rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *); + rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj); /** * Set the constant color for a fixed function emulation program. @@ -239,15 +283,29 @@ extern void __attribute__((overloadable)) rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h); /** - * Draw a mesh of geometry using the current context state. The whole mesh is + * Draw a mesh using the current context state. The whole mesh is * rendered. * * @param ism */ extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism); +/** + * Draw part of a mesh using the current context state. + * @param ism mesh object to render + * @param primitiveIndex for meshes that contain multiple primitive groups + * this parameter specifies the index of the group to draw. + */ extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism, uint primitiveIndex); +/** + * Draw specified index range of part of a mesh using the current context state. + * @param ism mesh object to render + * @param primitiveIndex for meshes that contain multiple primitive groups + * this parameter specifies the index of the group to draw. + * @param start starting index in the range + * @param len number of indices to draw + */ extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len); @@ -264,29 +322,54 @@ extern void __attribute__((overloadable)) /** * Clears the depth suface to the specified value. - * */ extern void __attribute__((overloadable)) rsgClearDepth(float value); - +/** + * Draws text given a string and location + */ extern void __attribute__((overloadable)) rsgDrawText(const char *, int x, int y); +/** + * \overload + */ extern void __attribute__((overloadable)) rsgDrawText(rs_allocation, int x, int y); +/** + * Binds the font object to be used for all subsequent font rendering calls + * @param font object to bind + */ extern void __attribute__((overloadable)) - rsgBindFont(rs_font); + rsgBindFont(rs_font font); +/** + * Sets the font color for all subsequent rendering calls + * @param r red component + * @param g green component + * @param b blue component + * @param a alpha component + */ extern void __attribute__((overloadable)) - rsgFontColor(float, float, float, float); -// Returns the bounding box of the text relative to (0, 0) -// Any of left, right, top, bottom could be NULL + rsgFontColor(float r, float g, float b, float a); +/** + * Returns the bounding box of the text relative to (0, 0) + * Any of left, right, top, bottom could be NULL + */ extern void __attribute__((overloadable)) rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom); +/** + * \overload + */ extern void __attribute__((overloadable)) rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom); - +/** + * Computes an axis aligned bounding box of a mesh object + */ extern void __attribute__((overloadable)) rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ); +/** + * \overload + */ __inline__ static void __attribute__((overloadable, always_inline)) rsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { float x1, y1, z1, x2, y2, z2; diff --git a/libs/rs/scriptc/rs_math.rsh b/libs/rs/scriptc/rs_math.rsh index e44c051..8117ca8 100644 --- a/libs/rs/scriptc/rs_math.rsh +++ b/libs/rs/scriptc/rs_math.rsh @@ -1,308 +1,29 @@ -/** @file rs_math.rsh - * \brief todo-jsams - * - * todo-jsams - * - */ -#ifndef __RS_MATH_RSH__ -#define __RS_MATH_RSH__ - - - -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_element *dst, rs_element src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_type *dst, rs_type src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_allocation *dst, rs_allocation src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_sampler *dst, rs_sampler src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_script *dst, rs_script src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_mesh *dst, rs_mesh src); -/** - * Copy reference to the specified object. +/* + * Copyright (C) 2011 The Android Open Source Project * - * @param dst - * @param src - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_program_fragment *dst, rs_program_fragment src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_program_vertex *dst, rs_program_vertex src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_program_raster *dst, rs_program_raster src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_program_store *dst, rs_program_store src); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSetObject(rs_font *dst, rs_font src); - -/** - * Sets the object to NULL. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * @return bool - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_element *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_type *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_allocation *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_sampler *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_script *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_mesh *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_program_fragment *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_program_vertex *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_program_raster *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_program_store *dst); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsClearObject(rs_font *dst); - -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_element); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_type); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_allocation); -/** - * Tests if the object is valid. Returns true if the object is valid, false if - * it is NULL. + * http://www.apache.org/licenses/LICENSE-2.0 * - * @return bool + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_sampler); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_script); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_mesh); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_program_fragment); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_program_vertex); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_program_raster); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_program_store); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsIsObject(rs_font); - - -/** - * Returns the Allocation for a given pointer. The pointer should point within - * a valid allocation. The results are undefined if the pointer is not from a - * valid allocation. - */ -extern rs_allocation __attribute__((overloadable)) - rsGetAllocation(const void *); - -/** - * Query the dimension of an allocation. - * - * @return uint32_t The X dimension of the allocation. - */ -extern uint32_t __attribute__((overloadable)) - rsAllocationGetDimX(rs_allocation); - -/** - * Query the dimension of an allocation. - * - * @return uint32_t The Y dimension of the allocation. - */ -extern uint32_t __attribute__((overloadable)) - rsAllocationGetDimY(rs_allocation); - -/** - * Query the dimension of an allocation. - * - * @return uint32_t The Z dimension of the allocation. - */ -extern uint32_t __attribute__((overloadable)) - rsAllocationGetDimZ(rs_allocation); - -/** - * Query an allocation for the presence of more than one LOD. - * - * @return uint32_t Returns 1 if more than one LOD is present, 0 otherwise. - */ -extern uint32_t __attribute__((overloadable)) - rsAllocationGetDimLOD(rs_allocation); - -/** - * Query an allocation for the presence of more than one face. - * - * @return uint32_t Returns 1 if more than one face is present, 0 otherwise. - */ -extern uint32_t __attribute__((overloadable)) - rsAllocationGetDimFaces(rs_allocation); - -/** - * Copy part of an allocation from another allocation. +/** @file rs_math.rsh + * \brief todo-jsams * - * @param dstAlloc Allocation to copy data into. - * @param dstOff The offset of the first element to be copied in - * the destination allocation. - * @param dstMip Mip level in the destination allocation. - * @param count The number of elements to be copied. - * @param srcAlloc The source data allocation. - * @param srcOff The offset of the first element in data to be - * copied in the source allocation. - * @param srcMip Mip level in the source allocation. - */ -extern void __attribute__((overloadable)) - rsAllocationCopy1DRange(rs_allocation dstAlloc, - uint32_t dstOff, uint32_t dstMip, - uint32_t count, - rs_allocation srcAlloc, - uint32_t srcOff, uint32_t srcMip); - -/** - * Copy a rectangular region into the allocation from another - * allocation. + * todo-jsams * - * @param dstAlloc allocation to copy data into. - * @param dstXoff X offset of the region to update in the - * destination allocation. - * @param dstYoff Y offset of the region to update in the - * destination allocation. - * @param dstMip Mip level in the destination allocation. - * @param dstFace Cubemap face of the destination allocation, - * ignored for allocations that aren't cubemaps. - * @param width Width of the incoming region to update. - * @param height Height of the incoming region to update. - * @param srcAlloc The source data allocation. - * @param srcXoff X offset in data of the source allocation. - * @param srcYoff Y offset in data of the source allocation. - * @param srcMip Mip level in the source allocation. - * @param srcFace Cubemap face of the source allocation, - * ignored for allocations that aren't cubemaps. */ -extern void __attribute__((overloadable)) - rsAllocationCopy2DRange(rs_allocation dstAlloc, - uint32_t dstXoff, uint32_t dstYoff, - uint32_t dstMip, - rs_allocation_cubemap_face dstFace, - uint32_t width, uint32_t height, - rs_allocation srcAlloc, - uint32_t srcXoff, uint32_t srcYoff, - uint32_t srcMip, - rs_allocation_cubemap_face srcFace); +#ifndef __RS_MATH_RSH__ +#define __RS_MATH_RSH__ -/** - * Extract a single element from an allocation. - */ -extern const void * __attribute__((overloadable)) - rsGetElementAt(rs_allocation, uint32_t x); -/** - * \overload - */ -extern const void * __attribute__((overloadable)) - rsGetElementAt(rs_allocation, uint32_t x, uint32_t y); -/** - * \overload - */ -extern const void * __attribute__((overloadable)) - rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z); /** * Return a random value between 0 (or min_value) and max_malue. @@ -331,346 +52,197 @@ extern float __attribute__((overloadable)) extern float __attribute__((overloadable)) rsFrac(float); -/** - * Send a message back to the client. Will not block and returns true - * if the message was sendable and false if the fifo was full. - * A message ID is required. Data payload is optional. - */ -extern bool __attribute__((overloadable)) - rsSendToClient(int cmdID); -/** - * \overload - */ -extern bool __attribute__((overloadable)) - rsSendToClient(int cmdID, const void *data, uint len); -/** - * Send a message back to the client, blocking until the message is queued. - * A message ID is required. Data payload is optional. - */ -extern void __attribute__((overloadable)) - rsSendToClientBlocking(int cmdID); -/** - * \overload - */ -extern void __attribute__((overloadable)) - rsSendToClientBlocking(int cmdID, const void *data, uint len); +///////////////////////////////////////////////////// +// int ops +///////////////////////////////////////////////////// /** - * Launch order hint for rsForEach calls. This provides a hint to the system to - * determine in which order the root function of the target is called with each - * cell of the allocation. + * Clamp the value amount between low and high. * - * This is a hint and implementations may not obey the order. + * @param amount The value to clamp + * @param low + * @param high */ -enum rs_for_each_strategy { - RS_FOR_EACH_STRATEGY_SERIAL, - RS_FOR_EACH_STRATEGY_DONT_CARE, - RS_FOR_EACH_STRATEGY_DST_LINEAR, - RS_FOR_EACH_STRATEGY_TILE_SMALL, - RS_FOR_EACH_STRATEGY_TILE_MEDIUM, - RS_FOR_EACH_STRATEGY_TILE_LARGE -}; - +_RS_RUNTIME uint __attribute__((overloadable, always_inline)) rsClamp(uint amount, uint low, uint high); /** - * Structure to provide extra information to a rsForEach call. Primarly used to - * restrict the call to a subset of cells in the allocation. + * \overload */ -typedef struct rs_script_call { - enum rs_for_each_strategy strategy; - uint32_t xStart; - uint32_t xEnd; - uint32_t yStart; - uint32_t yEnd; - uint32_t zStart; - uint32_t zEnd; - uint32_t arrayStart; - uint32_t arrayEnd; -} rs_script_call_t; - -/** - * Make a script to script call to launch work. One of the input or output is - * required to be a valid object. The input and output must be of the same - * dimensions. - * API 10-13 - * - * @param script The target script to call - * @param input The allocation to source data from - * @param output the allocation to write date into - * @param usrData The user definied params to pass to the root script. May be - * NULL. - * @param sc Extra control infomation used to select a sub-region of the - * allocation to be processed or suggest a walking strategy. May be - * NULL. - * - * */ -#if !defined(RS_VERSION) || (RS_VERSION < 14) -extern void __attribute__((overloadable)) - rsForEach(rs_script script script, rs_allocation input, - rs_allocation output, const void * usrData, - const rs_script_call_t *sc); +_RS_RUNTIME int __attribute__((overloadable, always_inline)) rsClamp(int amount, int low, int high); /** * \overload */ -extern void __attribute__((overloadable)) - rsForEach(rs_script script, rs_allocation input, - rs_allocation output, const void * usrData); -#else - +_RS_RUNTIME ushort __attribute__((overloadable, always_inline)) rsClamp(ushort amount, ushort low, ushort high); /** - * Make a script to script call to launch work. One of the input or output is - * required to be a valid object. The input and output must be of the same - * dimensions. - * API 14+ - * - * @param script The target script to call - * @param input The allocation to source data from - * @param output the allocation to write date into - * @param usrData The user definied params to pass to the root script. May be - * NULL. - * @param usrDataLen The size of the userData structure. This will be used to - * perform a shallow copy of the data if necessary. - * @param sc Extra control infomation used to select a sub-region of the - * allocation to be processed or suggest a walking strategy. May be - * NULL. - * + * \overload */ -extern void __attribute__((overloadable)) - rsForEach(rs_script script, rs_allocation input, rs_allocation output, - const void * usrData, size_t usrDataLen, const rs_script_call_t *); +_RS_RUNTIME short __attribute__((overloadable, always_inline)) rsClamp(short amount, short low, short high); /** * \overload */ -extern void __attribute__((overloadable)) - rsForEach(rs_script script, rs_allocation input, rs_allocation output, - const void * usrData, size_t usrDataLen); +_RS_RUNTIME uchar __attribute__((overloadable, always_inline)) rsClamp(uchar amount, uchar low, uchar high); /** * \overload */ -extern void __attribute__((overloadable)) - rsForEach(rs_script script, rs_allocation input, rs_allocation output); -#endif +_RS_RUNTIME char __attribute__((overloadable, always_inline)) rsClamp(char amount, char low, char high); /** - * Atomic add one to the value at addr. - * Equal to rsAtomicAdd(addr, 1) - * - * @param addr Address of value to increment - * - * @return old value + * Computes 6 frustum planes from the view projection matrix + * @param viewProj matrix to extract planes from + * @param left plane + * @param right plane + * @param top plane + * @param bottom plane + * @param near plane + * @param far plane */ -extern int32_t __attribute__((overloadable)) - rsAtomicInc(volatile int32_t* addr); -/** - * Atomic add one to the value at addr. - * Equal to rsAtomicAdd(addr, 1) - * - * @param addr Address of value to increment - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicInc(volatile uint32_t* addr); +__inline__ static void __attribute__((overloadable, always_inline)) +rsExtractFrustumPlanes(const rs_matrix4x4 *viewProj, + float4 *left, float4 *right, + float4 *top, float4 *bottom, + float4 *near, float4 *far) { + // x y z w = a b c d in the plane equation + left->x = viewProj->m[3] + viewProj->m[0]; + left->y = viewProj->m[7] + viewProj->m[4]; + left->z = viewProj->m[11] + viewProj->m[8]; + left->w = viewProj->m[15] + viewProj->m[12]; -/** - * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) - * - * @param addr Address of value to decrement - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicDec(volatile int32_t* addr); -/** - * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) - * - * @param addr Address of value to decrement - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicDec(volatile uint32_t* addr); + right->x = viewProj->m[3] - viewProj->m[0]; + right->y = viewProj->m[7] - viewProj->m[4]; + right->z = viewProj->m[11] - viewProj->m[8]; + right->w = viewProj->m[15] - viewProj->m[12]; -/** - * Atomic add a value to the value at addr. addr[0] += value - * - * @param addr Address of value to modify - * @param value Amount to add to the value at addr - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicAdd(volatile int32_t* addr, int32_t value); -/** - * Atomic add a value to the value at addr. addr[0] += value - * - * @param addr Address of value to modify - * @param value Amount to add to the value at addr - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicAdd(volatile uint32_t* addr, uint32_t value); + top->x = viewProj->m[3] - viewProj->m[1]; + top->y = viewProj->m[7] - viewProj->m[5]; + top->z = viewProj->m[11] - viewProj->m[9]; + top->w = viewProj->m[15] - viewProj->m[13]; -/** - * Atomic Subtract a value from the value at addr. addr[0] -= value - * - * @param addr Address of value to modify - * @param value Amount to subtract from the value at addr - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicSub(volatile int32_t* addr, int32_t value); -/** - * Atomic Subtract a value from the value at addr. addr[0] -= value - * - * @param addr Address of value to modify - * @param value Amount to subtract from the value at addr - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicSub(volatile uint32_t* addr, uint32_t value); + bottom->x = viewProj->m[3] + viewProj->m[1]; + bottom->y = viewProj->m[7] + viewProj->m[5]; + bottom->z = viewProj->m[11] + viewProj->m[9]; + bottom->w = viewProj->m[15] + viewProj->m[13]; -/** - * Atomic Bitwise and a value from the value at addr. addr[0] &= value - * - * @param addr Address of value to modify - * @param value Amount to and with the value at addr - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicAnd(volatile int32_t* addr, int32_t value); -/** - * Atomic Bitwise and a value from the value at addr. addr[0] &= value - * - * @param addr Address of value to modify - * @param value Amount to and with the value at addr - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicAnd(volatile uint32_t* addr, uint32_t value); + near->x = viewProj->m[3] + viewProj->m[2]; + near->y = viewProj->m[7] + viewProj->m[6]; + near->z = viewProj->m[11] + viewProj->m[10]; + near->w = viewProj->m[15] + viewProj->m[14]; -/** - * Atomic Bitwise or a value from the value at addr. addr[0] |= value - * - * @param addr Address of value to modify - * @param value Amount to or with the value at addr - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicOr(volatile int32_t* addr, int32_t value); -/** - * Atomic Bitwise or a value from the value at addr. addr[0] |= value - * - * @param addr Address of value to modify - * @param value Amount to or with the value at addr - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicOr(volatile uint32_t* addr, uint32_t value); + far->x = viewProj->m[3] - viewProj->m[2]; + far->y = viewProj->m[7] - viewProj->m[6]; + far->z = viewProj->m[11] - viewProj->m[10]; + far->w = viewProj->m[15] - viewProj->m[14]; -/** - * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value - * - * @param addr Address of value to modify - * @param value Amount to xor with the value at addr - * - * @return old value - */ -extern uint32_t __attribute__((overloadable)) - rsAtomicXor(volatile uint32_t* addr, uint32_t value); -/** - * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value - * - * @param addr Address of value to modify - * @param value Amount to xor with the value at addr - * - * @return old value - */ -extern int32_t __attribute__((overloadable)) - rsAtomicXor(volatile int32_t* addr, int32_t value); + float len = length(left->xyz); + *left /= len; + len = length(right->xyz); + *right /= len; + len = length(top->xyz); + *top /= len; + len = length(bottom->xyz); + *bottom /= len; + len = length(near->xyz); + *near /= len; + len = length(far->xyz); + *far /= len; +} /** - * Atomic Set the value at addr to the min of addr and value - * addr[0] = rsMin(addr[0], value) - * - * @param addr Address of value to modify - * @param value comparison value - * - * @return old value + * Checks if a sphere is withing the 6 frustum planes + * @param sphere float4 representing the sphere + * @param left plane + * @param right plane + * @param top plane + * @param bottom plane + * @param near plane + * @param far plane */ -extern uint32_t __attribute__((overloadable)) - rsAtomicMin(volatile uint32_t* addr, uint32_t value); +__inline__ static bool __attribute__((overloadable, always_inline)) +rsIsSphereInFrustum(float4 *sphere, + float4 *left, float4 *right, + float4 *top, float4 *bottom, + float4 *near, float4 *far) { + + float distToCenter = dot(left->xyz, sphere->xyz) + left->w; + if (distToCenter < -sphere->w) { + return false; + } + distToCenter = dot(right->xyz, sphere->xyz) + right->w; + if (distToCenter < -sphere->w) { + return false; + } + distToCenter = dot(top->xyz, sphere->xyz) + top->w; + if (distToCenter < -sphere->w) { + return false; + } + distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; + if (distToCenter < -sphere->w) { + return false; + } + distToCenter = dot(near->xyz, sphere->xyz) + near->w; + if (distToCenter < -sphere->w) { + return false; + } + distToCenter = dot(far->xyz, sphere->xyz) + far->w; + if (distToCenter < -sphere->w) { + return false; + } + return true; +} + + /** - * Atomic Set the value at addr to the min of addr and value - * addr[0] = rsMin(addr[0], value) + * Pack floating point (0-1) RGB values into a uchar4. The alpha component is + * set to 255 (1.0). * - * @param addr Address of value to modify - * @param value comparison value + * @param r + * @param g + * @param b * - * @return old value + * @return uchar4 */ -extern int32_t __attribute__((overloadable)) - rsAtomicMin(volatile int32_t* addr, int32_t value); +_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b); /** - * Atomic Set the value at addr to the max of addr and value - * addr[0] = rsMax(addr[0], value) + * Pack floating point (0-1) RGBA values into a uchar4. * - * @param addr Address of value to modify - * @param value comparison value + * @param r + * @param g + * @param b + * @param a * - * @return old value + * @return uchar4 */ -extern uint32_t __attribute__((overloadable)) - rsAtomicMax(volatile uint32_t* addr, uint32_t value); +_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a); + /** - * Atomic Set the value at addr to the max of addr and value - * addr[0] = rsMin(addr[0], value) + * Pack floating point (0-1) RGB values into a uchar4. The alpha component is + * set to 255 (1.0). * - * @param addr Address of value to modify - * @param value comparison value + * @param color * - * @return old value + * @return uchar4 */ -extern int32_t __attribute__((overloadable)) - rsAtomicMax(volatile int32_t* addr, int32_t value); +_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color); /** - * Compare-and-set operation with a full memory barrier. - * - * If the value at addr matches compareValue then newValue is written. + * Pack floating point (0-1) RGBA values into a uchar4. * - * @param addr The address to compare and replace if the compare passes. - * @param compareValue The value to test addr[0] against. - * @param newValue The value to write if the test passes. + * @param color * - * @return old value + * @return uchar4 */ -extern int32_t __attribute__((overloadable)) - rsAtomicCas(volatile int32_t* addr, int32_t compareValue, int32_t newValue); +_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color); /** - * Compare-and-set operation with a full memory barrier. - * - * If the value at addr matches compareValue then newValue is written. + * Unpack a uchar4 color to float4. The resulting float range will be (0-1). * - * @param addr The address to compare and replace if the compare passes. - * @param compareValue The value to test addr[0] against. - * @param newValue The value to write if the test passes. + * @param c * - * @return old value + * @return float4 */ -extern uint32_t __attribute__((overloadable)) - rsAtomicCas(volatile uint32_t* addr, int32_t compareValue, int32_t newValue); +_RS_RUNTIME float4 rsUnpackColor8888(uchar4 c); #endif diff --git a/libs/rs/scriptc/rs_matrix.rsh b/libs/rs/scriptc/rs_matrix.rsh new file mode 100644 index 0000000..ab3cd3b --- /dev/null +++ b/libs/rs/scriptc/rs_matrix.rsh @@ -0,0 +1,378 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_matrix.rsh + * \brief Matrix routines + * + * + */ + +#ifndef __RS_MATRIX_RSH__ +#define __RS_MATRIX_RSH__ + +/** + * Set one element of a matrix. + * + * @param m The matrix to be set + * @param row + * @param col + * @param v + * + * @return void + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); +/** + * \overload + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); +/** + * \overload + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); + +/** + * Get one element of a matrix. + * + * @param m The matrix to read from + * @param row + * @param col + * + * @return float + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); +/** + * \overload + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); +/** + * \overload + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); + +/** + * Set the elements of a matrix to the identity matrix. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m); + +/** + * Set the elements of a matrix from an array of floats. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v); + +/** + * Set the elements of a matrix from another matrix. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v); + +/** + * Load a rotation matrix. + * + * @param m + * @param rot + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); + +/** + * Load a scale matrix. + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Load a translation matrix. + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Multiply two matrix (lhs, rhs) and place the result in m. + * + * @param m + * @param lhs + * @param rhs + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs); + +/** + * Multiply the matrix m by rhs and place the result back into m. + * + * @param m (lhs) + * @param rhs + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); + +/** + * Multiple matrix m with a rotation matrix + * + * @param m + * @param rot + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); + +/** + * Multiple matrix m with a scale matrix + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixScale(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Multiple matrix m with a translation matrix + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Load an Ortho projection matrix constructed from the 6 planes + * + * @param m + * @param left + * @param right + * @param bottom + * @param top + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); + +/** + * Load an Frustum projection matrix constructed from the 6 planes + * + * @param m + * @param left + * @param right + * @param bottom + * @param top + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); + +/** + * Load an perspective projection matrix constructed from the 6 planes + * + * @param m + * @param fovy Field of view, in degrees along the Y axis. + * @param aspect Ratio of x / y. + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); + +#if !defined(RS_VERSION) || (RS_VERSION < 14) +/** + * Multiply a vector by a matrix and return the result vector. + * API version 10-13 + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float4 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float2 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix2x2 *m, float2 in); +#else +/** + * Multiply a vector by a matrix and return the result vector. + * API version 10-13 + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float4 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix3x3 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix3x3 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float2 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix2x2 *m, float2 in); +#endif + + +/** + * Returns true if the matrix was successfully inversed + * + * @param m + */ +extern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m); + +/** + * Returns true if the matrix was successfully inversed and transposed. + * + * @param m + */ +extern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m); + +/** + * Transpose the matrix m. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m); + + +#endif diff --git a/libs/rs/scriptc/rs_object.rsh b/libs/rs/scriptc/rs_object.rsh new file mode 100644 index 0000000..a431219 --- /dev/null +++ b/libs/rs/scriptc/rs_object.rsh @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_object.rsh + * \brief Object routines + * + * + */ + +#ifndef __RS_OBJECT_RSH__ +#define __RS_OBJECT_RSH__ + + +/** + * Copy reference to the specified object. + * + * @param dst + * @param src + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_element *dst, rs_element src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_type *dst, rs_type src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_allocation *dst, rs_allocation src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_sampler *dst, rs_sampler src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_script *dst, rs_script src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_mesh *dst, rs_mesh src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_program_fragment *dst, rs_program_fragment src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_program_vertex *dst, rs_program_vertex src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_program_raster *dst, rs_program_raster src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_program_store *dst, rs_program_store src); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsSetObject(rs_font *dst, rs_font src); + +/** + * Sets the object to NULL. + * + * @return bool + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_element *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_type *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_allocation *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_sampler *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_script *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_mesh *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_program_fragment *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_program_vertex *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_program_raster *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_program_store *dst); +/** + * \overload + */ +extern void __attribute__((overloadable)) + rsClearObject(rs_font *dst); + + + +/** + * Tests if the object is valid. Returns true if the object is valid, false if + * it is NULL. + * + * @return bool + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_element); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_type); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_allocation); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_sampler); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_script); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_mesh); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_program_fragment); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_program_vertex); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_program_raster); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_program_store); +/** + * \overload + */ +extern bool __attribute__((overloadable)) + rsIsObject(rs_font); + +#endif diff --git a/libs/rs/scriptc/rs_quaternion.rsh b/libs/rs/scriptc/rs_quaternion.rsh new file mode 100644 index 0000000..36e6736 --- /dev/null +++ b/libs/rs/scriptc/rs_quaternion.rsh @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_matrix.rsh + * \brief Quaternion routines + * + * + */ + +#ifndef __RS_QUATERNION_RSH__ +#define __RS_QUATERNION_RSH__ + + +/** + * Set the quaternion components + * @param w component + * @param x component + * @param y component + * @param z component + */ +static void __attribute__((overloadable)) +rsQuaternionSet(rs_quaternion *q, float w, float x, float y, float z) { + q->w = w; + q->x = x; + q->y = y; + q->z = z; +} + +/** + * Set the quaternion from another quaternion + * @param q destination quaternion + * @param rhs source quaternion + */ +static void __attribute__((overloadable)) +rsQuaternionSet(rs_quaternion *q, const rs_quaternion *rhs) { + q->w = rhs->w; + q->x = rhs->x; + q->y = rhs->y; + q->z = rhs->z; +} + +/** + * Multiply quaternion by a scalar + * @param q quaternion to multiply + * @param s scalar + */ +static void __attribute__((overloadable)) +rsQuaternionMultiply(rs_quaternion *q, float s) { + q->w *= s; + q->x *= s; + q->y *= s; + q->z *= s; +} + +/** + * Multiply quaternion by another quaternion + * @param q destination quaternion + * @param rhs right hand side quaternion to multiply by + */ +static void __attribute__((overloadable)) +rsQuaternionMultiply(rs_quaternion *q, const rs_quaternion *rhs) { + q->w = -q->x*rhs->x - q->y*rhs->y - q->z*rhs->z + q->w*rhs->w; + q->x = q->x*rhs->w + q->y*rhs->z - q->z*rhs->y + q->w*rhs->x; + q->y = -q->x*rhs->z + q->y*rhs->w + q->z*rhs->x + q->w*rhs->y; + q->z = q->x*rhs->y - q->y*rhs->x + q->z*rhs->w + q->w*rhs->z; +} + +/** + * Add two quaternions + * @param q destination quaternion to add to + * @param rsh right hand side quaternion to add + */ +static void +rsQuaternionAdd(rs_quaternion *q, const rs_quaternion *rhs) { + q->w *= rhs->w; + q->x *= rhs->x; + q->y *= rhs->y; + q->z *= rhs->z; +} + +/** + * Loads a quaternion that represents a rotation about an arbitrary unit vector + * @param q quaternion to set + * @param rot angle to rotate by + * @param x component of a vector + * @param y component of a vector + * @param x component of a vector + */ +static void +rsQuaternionLoadRotateUnit(rs_quaternion *q, float rot, float x, float y, float z) { + rot *= (float)(M_PI / 180.0f) * 0.5f; + float c = cos(rot); + float s = sin(rot); + + q->w = c; + q->x = x * s; + q->y = y * s; + q->z = z * s; +} + +/** + * Loads a quaternion that represents a rotation about an arbitrary vector + * (doesn't have to be unit) + * @param q quaternion to set + * @param rot angle to rotate by + * @param x component of a vector + * @param y component of a vector + * @param x component of a vector + */ +static void +rsQuaternionLoadRotate(rs_quaternion *q, float rot, float x, float y, float z) { + const float len = x*x + y*y + z*z; + if (len != 1) { + const float recipLen = 1.f / sqrt(len); + x *= recipLen; + y *= recipLen; + z *= recipLen; + } + rsQuaternionLoadRotateUnit(q, rot, x, y, z); +} + +/** + * Conjugates the quaternion + * @param q quaternion to conjugate + */ +static void +rsQuaternionConjugate(rs_quaternion *q) { + q->x = -q->x; + q->y = -q->y; + q->z = -q->z; +} + +/** + * Dot product of two quaternions + * @param q0 first quaternion + * @param q1 second quaternion + * @return dot product between q0 and q1 + */ +static float +rsQuaternionDot(const rs_quaternion *q0, const rs_quaternion *q1) { + return q0->w*q1->w + q0->x*q1->x + q0->y*q1->y + q0->z*q1->z; +} + +/** + * Normalizes the quaternion + * @param q quaternion to normalize + */ +static void +rsQuaternionNormalize(rs_quaternion *q) { + const float len = rsQuaternionDot(q, q); + if (len != 1) { + const float recipLen = 1.f / sqrt(len); + rsQuaternionMultiply(q, recipLen); + } +} + +/** + * Performs spherical linear interpolation between two quaternions + * @param q result quaternion from interpolation + * @param q0 first param + * @param q1 second param + * @param t how much to interpolate by + */ +static void +rsQuaternionSlerp(rs_quaternion *q, const rs_quaternion *q0, const rs_quaternion *q1, float t) { + if (t <= 0.0f) { + rsQuaternionSet(q, q0); + return; + } + if (t >= 1.0f) { + rsQuaternionSet(q, q1); + return; + } + + rs_quaternion tempq0, tempq1; + rsQuaternionSet(&tempq0, q0); + rsQuaternionSet(&tempq1, q1); + + float angle = rsQuaternionDot(q0, q1); + if (angle < 0) { + rsQuaternionMultiply(&tempq0, -1.0f); + angle *= -1.0f; + } + + float scale, invScale; + if (angle + 1.0f > 0.05f) { + if (1.0f - angle >= 0.05f) { + float theta = acos(angle); + float invSinTheta = 1.0f / sin(theta); + scale = sin(theta * (1.0f - t)) * invSinTheta; + invScale = sin(theta * t) * invSinTheta; + } else { + scale = 1.0f - t; + invScale = t; + } + } else { + rsQuaternionSet(&tempq1, tempq0.z, -tempq0.y, tempq0.x, -tempq0.w); + scale = sin(M_PI * (0.5f - t)); + invScale = sin(M_PI * t); + } + + rsQuaternionSet(q, tempq0.w*scale + tempq1.w*invScale, tempq0.x*scale + tempq1.x*invScale, + tempq0.y*scale + tempq1.y*invScale, tempq0.z*scale + tempq1.z*invScale); +} + +/** + * Computes rotation matrix from the normalized quaternion + * @param m resulting matrix + * @param p normalized quaternion + */ +static void rsQuaternionGetMatrixUnit(rs_matrix4x4 *m, const rs_quaternion *q) { + float x2 = 2.0f * q->x * q->x; + float y2 = 2.0f * q->y * q->y; + float z2 = 2.0f * q->z * q->z; + float xy = 2.0f * q->x * q->y; + float wz = 2.0f * q->w * q->z; + float xz = 2.0f * q->x * q->z; + float wy = 2.0f * q->w * q->y; + float wx = 2.0f * q->w * q->x; + float yz = 2.0f * q->y * q->z; + + m->m[0] = 1.0f - y2 - z2; + m->m[1] = xy - wz; + m->m[2] = xz + wy; + m->m[3] = 0.0f; + + m->m[4] = xy + wz; + m->m[5] = 1.0f - x2 - z2; + m->m[6] = yz - wx; + m->m[7] = 0.0f; + + m->m[8] = xz - wy; + m->m[9] = yz - wx; + m->m[10] = 1.0f - x2 - y2; + m->m[11] = 0.0f; + + m->m[12] = 0.0f; + m->m[13] = 0.0f; + m->m[14] = 0.0f; + m->m[15] = 1.0f; +} + +#endif + diff --git a/libs/rs/scriptc/rs_time.rsh b/libs/rs/scriptc/rs_time.rsh index f1abed6..f8f297d 100644 --- a/libs/rs/scriptc/rs_time.rsh +++ b/libs/rs/scriptc/rs_time.rsh @@ -1,3 +1,25 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_time.rsh + * \brief Time routines + * + * + */ + #ifndef __RS_TIME_RSH__ #define __RS_TIME_RSH__ diff --git a/libs/rs/scriptc/rs_types.rsh b/libs/rs/scriptc/rs_types.rsh index 9a79f5e..875beb9 100644 --- a/libs/rs/scriptc/rs_types.rsh +++ b/libs/rs/scriptc/rs_types.rsh @@ -1,4 +1,20 @@ -/** @file rs_time.rsh +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_types.rsh * * Define the standard Renderscript types * diff --git a/libs/utils/RefBase.cpp b/libs/utils/RefBase.cpp index 8db2009..37d061c 100644 --- a/libs/utils/RefBase.cpp +++ b/libs/utils/RefBase.cpp @@ -49,11 +49,6 @@ namespace android { // --------------------------------------------------------------------------- -RefBase::Destroyer::~Destroyer() { -} - -// --------------------------------------------------------------------------- - class RefBase::weakref_impl : public RefBase::weakref_type { public: @@ -61,7 +56,6 @@ public: volatile int32_t mWeak; RefBase* const mBase; volatile int32_t mFlags; - Destroyer* mDestroyer; #if !DEBUG_REFS @@ -70,7 +64,6 @@ public: , mWeak(0) , mBase(base) , mFlags(0) - , mDestroyer(0) { } @@ -113,7 +106,7 @@ public: LOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref); #if DEBUG_REFS_CALLSTACK_ENABLED refs->stack.dump(); -#endif; +#endif refs = refs->next; } } @@ -131,7 +124,7 @@ public: LOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref); #if DEBUG_REFS_CALLSTACK_ENABLED refs->stack.dump(); -#endif; +#endif refs = refs->next; } } @@ -193,7 +186,7 @@ public: String8 text; { - Mutex::Autolock _l(const_cast<weakref_impl*>(this)->mMutex); + Mutex::Autolock _l(mMutex); char buf[128]; sprintf(buf, "Strong references on RefBase %p (weakref_type %p):\n", mBase, this); text.append(buf); @@ -318,7 +311,7 @@ private: } } - Mutex mMutex; + mutable Mutex mMutex; ref_entry* mStrongRefs; ref_entry* mWeakRefs; @@ -348,7 +341,7 @@ void RefBase::incStrong(const void* id) const } android_atomic_add(-INITIAL_STRONG_VALUE, &refs->mStrong); - const_cast<RefBase*>(this)->onFirstRef(); + refs->mBase->onFirstRef(); } void RefBase::decStrong(const void* id) const @@ -361,13 +354,9 @@ void RefBase::decStrong(const void* id) const #endif LOG_ASSERT(c >= 1, "decStrong() called on %p too many times", refs); if (c == 1) { - const_cast<RefBase*>(this)->onLastStrongRef(id); - if ((refs->mFlags&OBJECT_LIFETIME_WEAK) != OBJECT_LIFETIME_WEAK) { - if (refs->mDestroyer) { - refs->mDestroyer->destroy(this); - } else { - delete this; - } + refs->mBase->onLastStrongRef(id); + if ((refs->mFlags&OBJECT_LIFETIME_MASK) == OBJECT_LIFETIME_STRONG) { + delete this; } } refs->decWeak(id); @@ -391,7 +380,7 @@ void RefBase::forceIncStrong(const void* id) const android_atomic_add(-INITIAL_STRONG_VALUE, &refs->mStrong); // fall through... case 0: - const_cast<RefBase*>(this)->onFirstRef(); + refs->mBase->onFirstRef(); } } @@ -400,10 +389,6 @@ int32_t RefBase::getStrongCount() const return mRefs->mStrong; } -void RefBase::setDestroyer(RefBase::Destroyer* destroyer) { - mRefs->mDestroyer = destroyer; -} - RefBase* RefBase::weakref_type::refBase() const { return static_cast<const weakref_impl*>(this)->mBase; @@ -417,6 +402,7 @@ void RefBase::weakref_type::incWeak(const void* id) LOG_ASSERT(c >= 0, "incWeak called on %p after last weak ref", this); } + void RefBase::weakref_type::decWeak(const void* id) { weakref_impl* const impl = static_cast<weakref_impl*>(this); @@ -424,30 +410,27 @@ void RefBase::weakref_type::decWeak(const void* id) const int32_t c = android_atomic_dec(&impl->mWeak); LOG_ASSERT(c >= 1, "decWeak called on %p too many times", this); if (c != 1) return; - - if ((impl->mFlags&OBJECT_LIFETIME_WEAK) != OBJECT_LIFETIME_WEAK) { + + if ((impl->mFlags&OBJECT_LIFETIME_WEAK) == OBJECT_LIFETIME_STRONG) { + // This is the regular lifetime case. The object is destroyed + // when the last strong reference goes away. Since weakref_impl + // outlive the object, it is not destroyed in the dtor, and + // we'll have to do it here. if (impl->mStrong == INITIAL_STRONG_VALUE) { - if (impl->mBase) { - if (impl->mDestroyer) { - impl->mDestroyer->destroy(impl->mBase); - } else { - delete impl->mBase; - } - } + // Special case: we never had a strong reference, so we need to + // destroy the object now. + delete impl->mBase; } else { // LOGV("Freeing refs %p of old RefBase %p\n", this, impl->mBase); delete impl; } } else { + // less common case: lifetime is OBJECT_LIFETIME_{WEAK|FOREVER} impl->mBase->onLastWeakRef(id); - if ((impl->mFlags&OBJECT_LIFETIME_FOREVER) != OBJECT_LIFETIME_FOREVER) { - if (impl->mBase) { - if (impl->mDestroyer) { - impl->mDestroyer->destroy(impl->mBase); - } else { - delete impl->mBase; - } - } + if ((impl->mFlags&OBJECT_LIFETIME_MASK) == OBJECT_LIFETIME_WEAK) { + // this is the OBJECT_LIFETIME_WEAK case. The last weak-reference + // is gone, we can destroy the object. + delete impl->mBase; } } } @@ -569,11 +552,23 @@ RefBase::RefBase() RefBase::~RefBase() { - if ((mRefs->mFlags & OBJECT_LIFETIME_WEAK) == OBJECT_LIFETIME_WEAK) { - if (mRefs->mWeak == 0) { - delete mRefs; + if (mRefs->mStrong == INITIAL_STRONG_VALUE) { + // we never acquired a strong (and/or weak) reference on this object. + delete mRefs; + } else { + // life-time of this object is extended to WEAK or FOREVER, in + // which case weakref_impl doesn't out-live the object and we + // can free it now. + if ((mRefs->mFlags & OBJECT_LIFETIME_MASK) != OBJECT_LIFETIME_STRONG) { + // It's possible that the weak count is not 0 if the object + // re-acquired a weak reference in its destructor + if (mRefs->mWeak == 0) { + delete mRefs; + } } } + // for debugging purposes, clear this. + const_cast<weakref_impl*&>(mRefs) = NULL; } void RefBase::extendObjectLifetime(int32_t mode) diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index e613523..da7a050 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -1777,27 +1777,6 @@ public class AudioManager { /** * @hide - * Returns the current remote control client flags describing what information has changed. - * The flags are reset everytime this method is called with a valid rcClientId. - * @param rcClientId the counter value that matches the extra - * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT} in the - * {@link AudioManager#REMOTE_CONTROL_CLIENT_CHANGED} event - * @return the "information changed" flags from the current IRemoteControlClient from - * which information to display on the remote control can be retrieved, - * or 0 if rcClientId doesn't match the current generation counter. - */ - public int getRemoteControlClientInformationChangedFlags(int rcClientId) { - IAudioService service = getService(); - try { - return service.getRemoteControlClientInformationChangedFlags(rcClientId); - } catch (RemoteException e) { - Log.e(TAG, "Dead object in getRemoteControlClientInformationChangedFlags "+e); - return 0; - } - } - - /** - * @hide * Definitions of constants to be used in {@link android.media.IRemoteControlClient}. */ public final class RemoteControlParameters { @@ -1848,6 +1827,15 @@ public class AudioManager { /** * @hide + * The flags describing what information has changed in the current remote control client. + * + * @see #REMOTE_CONTROL_CLIENT_CHANGED_ACTION + */ + public static final String EXTRA_REMOTE_CONTROL_CLIENT_INFO_CHANGED = + "android.media.EXTRA_REMOTE_CONTROL_CLIENT_INFO_CHANGED"; + + /** + * @hide * Notifies the users of the associated remote control client that the information to display * has changed. @param eventReceiver identifier of a {@link android.content.BroadcastReceiver} diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 4e9f752..8ebb07c 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -55,7 +55,6 @@ import com.android.internal.telephony.ITelephony; import java.io.FileDescriptor; import java.io.IOException; import java.io.PrintWriter; -import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -753,10 +752,12 @@ public class AudioService extends IAudioService.Stub { private class SetModeDeathHandler implements IBinder.DeathRecipient { private IBinder mCb; // To be notified of client's death + private int mPid; private int mMode = AudioSystem.MODE_NORMAL; // Current mode set by this client SetModeDeathHandler(IBinder cb) { mCb = cb; + mPid = Binder.getCallingPid(); } public void binderDied() { @@ -787,6 +788,10 @@ public class AudioService extends IAudioService.Stub { } } + public int getPid() { + return mPid; + } + public void setMode(int mode) { mMode = mode; } @@ -1228,10 +1233,12 @@ public class AudioService extends IAudioService.Stub { private class ScoClient implements IBinder.DeathRecipient { private IBinder mCb; // To be notified of client's death + private int mCreatorPid; private int mStartcount; // number of SCO connections started by this client ScoClient(IBinder cb) { mCb = cb; + mCreatorPid = Binder.getCallingPid(); mStartcount = 0; } @@ -1324,9 +1331,9 @@ public class AudioService extends IAudioService.Stub { // the connection. broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTING); // Accept SCO audio activation only in NORMAL audio mode or if the mode is - // currently controlled by the same client. + // currently controlled by the same client process. if ((AudioService.this.mMode == AudioSystem.MODE_NORMAL || - mSetModeDeathHandlers.get(0).getBinder() == mCb) && + mSetModeDeathHandlers.get(0).getPid() == mCreatorPid) && mBluetoothHeadsetDevice != null && (mScoAudioState == SCO_STATE_INACTIVE || mScoAudioState == SCO_STATE_DEACTIVATE_REQ)) { @@ -2150,6 +2157,7 @@ public class AudioService extends IAudioService.Stub { break; case MSG_RCDISPLAY_CLEAR: + // TODO remove log before release Log.i(TAG, "Clear remote control display"); Intent clearIntent = new Intent(AudioManager.REMOTE_CONTROL_CLIENT_CHANGED); // no extra means no IRemoteControlClient, which is a request to clear @@ -2159,17 +2167,22 @@ public class AudioService extends IAudioService.Stub { case MSG_RCDISPLAY_UPDATE: synchronized(mCurrentRcLock) { - if (mCurrentRcClientRef.get() == null) { + if ((mCurrentRcClient == null) || + (!mCurrentRcClient.equals((IRemoteControlClient)msg.obj))) { // the remote control display owner has changed between the // the message to update the display was sent, and the time it // gets to be processed (now) } else { mCurrentRcClientGen++; + // TODO remove log before release Log.i(TAG, "Display/update remote control "); Intent rcClientIntent = new Intent( AudioManager.REMOTE_CONTROL_CLIENT_CHANGED); rcClientIntent.putExtra(AudioManager.EXTRA_REMOTE_CONTROL_CLIENT, mCurrentRcClientGen); + rcClientIntent.putExtra( + AudioManager.EXTRA_REMOTE_CONTROL_CLIENT_INFO_CHANGED, + msg.arg1); rcClientIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); mContext.sendBroadcast(rcClientIntent); } @@ -2623,7 +2636,7 @@ public class AudioService extends IAudioService.Stub { notifyTopOfAudioFocusStack(); // there's a new top of the stack, let the remote control know synchronized(mRCStack) { - checkUpdateRemoteControlDisplay(); + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } } } else { @@ -2665,7 +2678,7 @@ public class AudioService extends IAudioService.Stub { notifyTopOfAudioFocusStack(); // there's a new top of the stack, let the remote control know synchronized(mRCStack) { - checkUpdateRemoteControlDisplay(); + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } } } @@ -2757,7 +2770,7 @@ public class AudioService extends IAudioService.Stub { // there's a new top of the stack, let the remote control know synchronized(mRCStack) { - checkUpdateRemoteControlDisplay(); + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } }//synchronized(mAudioFocusLock) @@ -2848,11 +2861,10 @@ public class AudioService extends IAudioService.Stub { private final Object mCurrentRcLock = new Object(); /** * The one remote control client to be polled for display information. - * This object is never null, but its reference might. + * This object may be null. * Access protected by mCurrentRcLock. */ - private SoftReference<IRemoteControlClient> mCurrentRcClientRef = - new SoftReference<IRemoteControlClient>(null); + private IRemoteControlClient mCurrentRcClient = null; private final static int RC_INFO_NONE = 0; private final static int RC_INFO_ALL = @@ -2862,14 +2874,9 @@ public class AudioService extends IAudioService.Stub { AudioManager.RemoteControlParameters.FLAG_INFORMATION_CHANGED_PLAYSTATE; /** - * The flags indicating what type of information changed since the last time it was queried. - * Access protected by mCurrentRcLock. - */ - private int mCurrentRcClientInfoFlags = RC_INFO_ALL; - - /** - * A monotonically increasing generation counter for mCurrentRcClientRef. + * A monotonically increasing generation counter for mCurrentRcClient. * Only accessed with a lock on mCurrentRcLock. + * No value wrap-around issues as we only act on equal values. */ private int mCurrentRcClientGen = 0; @@ -2885,7 +2892,7 @@ public class AudioService extends IAudioService.Stub { public IRemoteControlClient getRemoteControlClient(int rcClientId) { synchronized(mCurrentRcLock) { if (rcClientId == mCurrentRcClientGen) { - return mCurrentRcClientRef.get(); + return mCurrentRcClient; } else { return null; } @@ -2893,27 +2900,6 @@ public class AudioService extends IAudioService.Stub { } /** - * Returns the current flags of information that changed on the current remote control client. - * Requesting this information clears it. - * @param rcClientId the counter value that matches the extra - * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT} in the - * {@link AudioManager#REMOTE_CONTROL_CLIENT_CHANGED} event - * @return the flags indicating which type of information changed since the client notified - * that its information had changed. - */ - public int getRemoteControlClientInformationChangedFlags(int rcClientId) { - synchronized(mCurrentRcLock) { - if (rcClientId == mCurrentRcClientGen) { - int flags = mCurrentRcClientInfoFlags; - mCurrentRcClientInfoFlags = RC_INFO_NONE; - return flags; - } else { - return RC_INFO_NONE; - } - } - } - - /** * Inner class to monitor remote control client deaths, and remove the client for the * remote control stack if necessary. */ @@ -2945,13 +2931,13 @@ public class AudioService extends IAudioService.Stub { public int mCallingUid; /** provides access to the information to display on the remote control */ - public SoftReference<IRemoteControlClient> mRcClientRef; + public IRemoteControlClient mRcClient; public RcClientDeathHandler mRcClientDeathHandler; public RemoteControlStackEntry(ComponentName r) { mReceiverComponent = r; mCallingUid = -1; - mRcClientRef = new SoftReference<IRemoteControlClient>(null); + mRcClient = null; } public void unlinkToRcClientDeath() { @@ -2986,7 +2972,7 @@ public class AudioService extends IAudioService.Stub { while(stackIterator.hasNext()) { RemoteControlStackEntry rcse = stackIterator.next(); pw.println(" receiver: " + rcse.mReceiverComponent + - " -- client: " + rcse.mRcClientRef.get() + + " -- client: " + rcse.mRcClient + " -- uid: " + rcse.mCallingUid); } } @@ -3105,8 +3091,7 @@ public class AudioService extends IAudioService.Stub { */ private void clearRemoteControlDisplay() { synchronized(mCurrentRcLock) { - mCurrentRcClientRef.clear(); - mCurrentRcClientInfoFlags = RC_INFO_NONE; + mCurrentRcClient = null; } mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_CLEAR) ); } @@ -3116,32 +3101,36 @@ public class AudioService extends IAudioService.Stub { * Called synchronized on mRCStack * mRCStack.empty() is false */ - private void updateRemoteControlDisplay() { + private void updateRemoteControlDisplay(int infoChangedFlags) { RemoteControlStackEntry rcse = mRCStack.peek(); + int infoFlagsAboutToBeUsed = infoChangedFlags; // this is where we enforce opt-in for information display on the remote controls // with the new AudioManager.registerRemoteControlClient() API - if (rcse.mRcClientRef.get() == null) { - // FIXME remove log before release: this warning will be displayed for every AF change - Log.w(TAG, "Can't update remote control display with null remote control client"); + if (rcse.mRcClient == null) { + //Log.w(TAG, "Can't update remote control display with null remote control client"); clearRemoteControlDisplay(); return; } synchronized(mCurrentRcLock) { - if (!rcse.mRcClientRef.get().equals(mCurrentRcClientRef.get())) { + if (!rcse.mRcClient.equals(mCurrentRcClient)) { // new RC client, assume every type of information shall be queried - mCurrentRcClientInfoFlags = RC_INFO_ALL; + infoFlagsAboutToBeUsed = RC_INFO_ALL; } - mCurrentRcClientRef = rcse.mRcClientRef; + mCurrentRcClient = rcse.mRcClient; } - mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_UPDATE, 0, 0, rcse) ); + mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_UPDATE, + infoFlagsAboutToBeUsed /* arg1 */, 0, rcse.mRcClient /* obj */) ); } /** * Helper function: * Called synchronized on mFocusLock, then mRCStack * Check whether the remote control display should be updated, triggers the update if required + * @param infoChangedFlags the flags corresponding to the remote control client information + * that has changed, if applicable (checking for the update conditions might trigger a + * clear, rather than an update event). */ - private void checkUpdateRemoteControlDisplay() { + private void checkUpdateRemoteControlDisplay(int infoChangedFlags) { // determine whether the remote control display should be refreshed // if either stack is empty, there is a mismatch, so clear the RC display if (mRCStack.isEmpty() || mFocusStack.isEmpty()) { @@ -3163,7 +3152,7 @@ public class AudioService extends IAudioService.Stub { return; } // refresh conditions were verified: update the remote controls - updateRemoteControlDisplay(); + updateRemoteControlDisplay(infoChangedFlags); } /** see AudioManager.registerMediaButtonEventReceiver(ComponentName eventReceiver) */ @@ -3173,7 +3162,8 @@ public class AudioService extends IAudioService.Stub { synchronized(mAudioFocusLock) { synchronized(mRCStack) { pushMediaButtonReceiver(eventReceiver); - checkUpdateRemoteControlDisplay(); + // new RC client, assume every type of information shall be queried + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } } } @@ -3187,7 +3177,8 @@ public class AudioService extends IAudioService.Stub { boolean topOfStackWillChange = isCurrentRcController(eventReceiver); removeMediaButtonReceiver(eventReceiver); if (topOfStackWillChange) { - checkUpdateRemoteControlDisplay(); + // current RC client will change, assume every type of info needs to be queried + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } } } @@ -3209,7 +3200,7 @@ public class AudioService extends IAudioService.Stub { rcse.unlinkToRcClientDeath(); } // save the new remote control client - rcse.mRcClientRef = new SoftReference<IRemoteControlClient>(rcClient); + rcse.mRcClient = rcClient; rcse.mCallingPackageName = callingPackageName; rcse.mCallingUid = Binder.getCallingUid(); if (rcClient == null) { @@ -3224,7 +3215,7 @@ public class AudioService extends IAudioService.Stub { } catch (RemoteException e) { // remote control client is DOA, disqualify it Log.w(TAG, "registerRemoteControlClient() has a dead client " + b); - rcse.mRcClientRef.clear(); + rcse.mRcClient = null; } rcse.mRcClientDeathHandler = rcdh; break; @@ -3233,7 +3224,7 @@ public class AudioService extends IAudioService.Stub { // if the eventReceiver is at the top of the stack // then check for potential refresh of the remote controls if (isCurrentRcController(eventReceiver)) { - checkUpdateRemoteControlDisplay(); + checkUpdateRemoteControlDisplay(RC_INFO_ALL); } } } @@ -3245,13 +3236,7 @@ public class AudioService extends IAudioService.Stub { synchronized(mRCStack) { // only refresh if the eventReceiver is at the top of the stack if (isCurrentRcController(eventReceiver)) { - // there is a refresh request for the current event receiver: it might not be - // displayed on the remote control display, but we can cache what new - // information has changed. - synchronized(mCurrentRcLock) { - mCurrentRcClientInfoFlags |= infoFlag; - } - checkUpdateRemoteControlDisplay(); + checkUpdateRemoteControlDisplay(infoFlag); } } } diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 1061f13..c259aa3 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -95,8 +95,6 @@ interface IAudioService { IRemoteControlClient getRemoteControlClient(in int rcClientId); - int getRemoteControlClientInformationChangedFlags(in int rcClientId); - void notifyRemoteControlInformationChanged(in ComponentName eventReceiver, int infoFlag); void startBluetoothSco(IBinder cb); diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index 816d215..8793841 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -67,8 +67,9 @@ public class MediaFile { public static final int FILE_TYPE_MKV = 27; public static final int FILE_TYPE_MP2TS = 28; public static final int FILE_TYPE_AVI = 29; + public static final int FILE_TYPE_WEBM = 30; private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4; - private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_AVI; + private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM; // Image file types public static final int FILE_TYPE_JPEG = 31; @@ -198,7 +199,7 @@ public class MediaFile { addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER); addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER); addFileType("MKV", FILE_TYPE_MKV, "video/x-matroska"); - addFileType("WEBM", FILE_TYPE_MKV, "video/x-matroska"); + addFileType("WEBM", FILE_TYPE_WEBM, "video/webm"); addFileType("TS", FILE_TYPE_MP2TS, "video/mp2ts"); addFileType("AVI", FILE_TYPE_AVI, "video/avi"); diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 1bacdbb..66bd56a 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -30,7 +30,6 @@ import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.graphics.Bitmap; -import android.graphics.ParcelSurfaceTexture; import android.graphics.SurfaceTexture; import android.media.AudioManager; @@ -527,10 +526,9 @@ public class MediaPlayer private final static String IMEDIA_PLAYER = "android.media.IMediaPlayer"; private int mNativeContext; // accessed by native methods + private int mNativeSurfaceTexture; // accessed by native methods private int mListenerContext; // accessed by native methods - private Surface mSurface; // accessed by native methods - private SurfaceHolder mSurfaceHolder; - private ParcelSurfaceTexture mParcelSurfaceTexture; // accessed by native methods + private SurfaceHolder mSurfaceHolder; private EventHandler mEventHandler; private PowerManager.WakeLock mWakeLock = null; private boolean mScreenOnWhilePlaying; @@ -561,10 +559,10 @@ public class MediaPlayer } /* - * Update the MediaPlayer ISurface and ISurfaceTexture. - * Call after updating mSurface and/or mParcelSurfaceTexture. + * Update the MediaPlayer SurfaceTexture. + * Call after setting a new display surface. */ - private native void _setVideoSurfaceOrSurfaceTexture(); + private native void _setVideoSurface(Surface surface); /** * Create a request parcel which can be routed to the native media @@ -607,25 +605,25 @@ public class MediaPlayer /** * Sets the {@link SurfaceHolder} to use for displaying the video - * portion of the media. A surface must be set if a display is - * needed. Not calling this method when playing back a video will - * result in only the audio track being played. + * portion of the media. * * Either a surface holder or surface must be set if a display or video sink * is needed. Not calling this method or {@link #setTexture(SurfaceTexture)} * when playing back a video will result in only the audio track being played. + * A null surface holder or surface will result in only the audio track being + * played. * * @param sh the SurfaceHolder to use for video display */ public void setDisplay(SurfaceHolder sh) { mSurfaceHolder = sh; + Surface surface; if (sh != null) { - mSurface = sh.getSurface(); + surface = sh.getSurface(); } else { - mSurface = null; + surface = null; } - mParcelSurfaceTexture = null; - _setVideoSurfaceOrSurfaceTexture(); + _setVideoSurface(surface); updateSurfaceScreenOn(); } @@ -634,19 +632,18 @@ public class MediaPlayer * the media. This is similar to {@link #setDisplay(SurfaceHolder)}, but does not * support {@link #setScreenOnWhilePlaying(boolean)} or {@link #updateSurfaceScreenOn()}. * Setting a Surface will un-set any Surface or SurfaceHolder that was previously set. + * A null surface will result in only the audio track being played. * * @param surface The {@link Surface} to be used for the video portion of the media. * * @hide Pending review by API council. */ public void setSurface(Surface surface) { - if (mScreenOnWhilePlaying && surface != null && mSurface != null) { + if (mScreenOnWhilePlaying && surface != null) { Log.w(TAG, "setScreenOnWhilePlaying(true) is ineffective for Surface"); } mSurfaceHolder = null; - mSurface = surface; - mParcelSurfaceTexture = null; // TODO(tedbo): Remove. - _setVideoSurfaceOrSurfaceTexture(); + _setVideoSurface(surface); updateSurfaceScreenOn(); } @@ -669,34 +666,19 @@ public class MediaPlayer * by time-of-day adjustments, but is reset when the position is set. */ public void setTexture(SurfaceTexture st) { - ParcelSurfaceTexture pst = null; + // TODO: This method should be hidden before it is published and setSurface + // should be unhidden and made public instead. if (st != null) { - pst = ParcelSurfaceTexture.fromSurfaceTexture(st); - } - setParcelSurfaceTexture(pst); - } + Surface surface = new Surface(st); + setSurface(surface); - /** - * Sets the {@link ParcelSurfaceTexture} to be used as the sink for the video portion of - * the media. This is similar to {@link #setTexture(SurfaceTexture)}, but supports using - * a {@link ParcelSurfaceTexture} to transport the texture to be used via Binder. Setting - * a parceled surface texture will un-set any surface or surface texture that was previously - * set. See {@link #setTexture(SurfaceTexture)} for more details. - * - * @param pst The {@link ParcelSurfaceTexture} to be used as the sink for - * the video portion of the media. - * - * @hide Pending removal when there are no more callers. - */ - public void setParcelSurfaceTexture(ParcelSurfaceTexture pst) { - if (mScreenOnWhilePlaying && pst != null && mParcelSurfaceTexture == null) { - Log.w(TAG, "setScreenOnWhilePlaying(true) is ineffective for SurfaceTexture"); + // It is safe and desired to release the newly created Surface here since the + // native code will grab a reference to the underlying ISurfaceTexture. At that + // point the Surface we just created is no longer needed. + surface.release(); + } else { + setSurface(null); } - mSurfaceHolder = null; - mSurface = null; - mParcelSurfaceTexture = pst; - _setVideoSurfaceOrSurfaceTexture(); - updateSurfaceScreenOn(); } /** diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 02017a1..2d1761f 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -312,9 +312,23 @@ public class MediaScanner private final String mExternalStoragePath; + // WARNING: Bulk inserts sounded like a great idea and gave us a good performance improvement, + // but unfortunately it also introduced a number of bugs. Many of those bugs were fixed, + // but (at least) two problems are still outstanding: + // + // 1) Bulk inserts broke the code that sets the default ringtones on first boot + // 2) Bulk inserts broke file based playlists in the case where the playlist is processed + // at the same time the files in the playlist are inserted in the database + // + // These problems might be solvable by moving the logic to the media provider instead, + // but for now we are disabling bulk inserts until we have solid fixes for these problems. + private static final boolean ENABLE_BULK_INSERTS = false; + // used when scanning the image database so we know whether we have to prune // old thumbnail files private int mOriginalCount; + /** Whether the database had any entries in it before the scan started */ + private boolean mWasEmptyPriorToScan = false; /** Whether the scanner has set a default sound for the ringer ringtone. */ private boolean mDefaultRingtoneSet; /** Whether the scanner has set a default sound for the notification ringtone. */ @@ -535,6 +549,7 @@ public class MediaScanner return entry; } + @Override public void scanFile(String path, long lastModified, long fileSize, boolean isDirectory, boolean noMedia) { // This is the callback funtion from native codes. @@ -889,19 +904,19 @@ public class MediaScanner mMediaProvider.update(result, values, null, null); } - if (notifications && !mDefaultNotificationSet) { + if (notifications && mWasEmptyPriorToScan && !mDefaultNotificationSet) { if (TextUtils.isEmpty(mDefaultNotificationFilename) || doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) { setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId); mDefaultNotificationSet = true; } - } else if (ringtones && !mDefaultRingtoneSet) { + } else if (ringtones && mWasEmptyPriorToScan && !mDefaultRingtoneSet) { if (TextUtils.isEmpty(mDefaultRingtoneFilename) || doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId); mDefaultRingtoneSet = true; } - } else if (alarms && !mDefaultAlarmSet) { + } else if (alarms && mWasEmptyPriorToScan && !mDefaultAlarmSet) { if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) || doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) { setSettingIfNotSet(Settings.System.ALARM_ALERT, tableUri, rowId); @@ -985,6 +1000,7 @@ public class MediaScanner where, selectionArgs, null); if (c != null) { + mWasEmptyPriorToScan = c.getCount() == 0; while (c.moveToNext()) { long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX); String path = c.getString(FILES_PRESCAN_PATH_COLUMN_INDEX); @@ -1166,25 +1182,29 @@ public class MediaScanner prescan(null, true); long prescan = System.currentTimeMillis(); - // create FileInserters for bulk inserts - mAudioInserter = new FileInserter(mAudioUri, 500); - mVideoInserter = new FileInserter(mVideoUri, 500); - mImageInserter = new FileInserter(mImagesUri, 500); - mFileInserter = new FileInserter(mFilesUri, 500); + if (ENABLE_BULK_INSERTS) { + // create FileInserters for bulk inserts + mAudioInserter = new FileInserter(mAudioUri, 500); + mVideoInserter = new FileInserter(mVideoUri, 500); + mImageInserter = new FileInserter(mImagesUri, 500); + mFileInserter = new FileInserter(mFilesUri, 500); + } for (int i = 0; i < directories.length; i++) { processDirectory(directories[i], mClient); } - // flush remaining inserts - mAudioInserter.flush(); - mVideoInserter.flush(); - mImageInserter.flush(); - mFileInserter.flush(); - mAudioInserter = null; - mVideoInserter = null; - mImageInserter = null; - mFileInserter = null; + if (ENABLE_BULK_INSERTS) { + // flush remaining inserts + mAudioInserter.flush(); + mVideoInserter.flush(); + mImageInserter.flush(); + mFileInserter.flush(); + mAudioInserter = null; + mVideoInserter = null; + mImageInserter = null; + mFileInserter = null; + } long scan = System.currentTimeMillis(); postscan(directories); diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5663683..13ed152 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -30,7 +30,7 @@ #include "jni.h" #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" -#include "android_runtime/android_graphics_ParcelSurfaceTexture.h" +#include "android_runtime/android_view_Surface.h" #include "utils/Errors.h" // for status_t #include "utils/KeyedVector.h" #include "utils/String8.h" @@ -51,10 +51,7 @@ using namespace android; struct fields_t { jfieldID context; - jfieldID surface; - jfieldID parcelSurfaceTexture; - /* actually in android.view.Surface XXX */ - jfieldID surface_native; + jfieldID surface_texture; jmethodID post_event; }; @@ -123,11 +120,6 @@ void JNIMediaPlayerListener::notify(int msg, int ext1, int ext2, const Parcel *o // ---------------------------------------------------------------------------- -static Surface* get_surface(JNIEnv* env, jobject clazz) -{ - return (Surface*)env->GetIntField(clazz, fields.surface_native); -} - static sp<MediaPlayer> getMediaPlayer(JNIEnv* env, jobject thiz) { Mutex::Autolock l(sLock); @@ -244,39 +236,38 @@ android_media_MediaPlayer_setDataSourceFD(JNIEnv *env, jobject thiz, jobject fil process_media_player_call( env, thiz, mp->setDataSource(fd, offset, length), "java/io/IOException", "setDataSourceFD failed." ); } -static void setVideoSurfaceOrSurfaceTexture( - const sp<MediaPlayer>& mp, JNIEnv *env, jobject thiz, const char *prefix) -{ - // The Java MediaPlayer class makes sure that at most one of mSurface and - // mParcelSurfaceTexture is non-null. But just in case, we give priority to - // mSurface over mParcelSurfaceTexture. - jobject surface = env->GetObjectField(thiz, fields.surface); - if (surface != NULL) { - sp<Surface> native_surface(get_surface(env, surface)); - LOGV("%s: surface=%p (id=%d)", prefix, - native_surface.get(), native_surface->getIdentity()); - mp->setVideoSurface(native_surface); - } else { - jobject parcelSurfaceTexture = env->GetObjectField(thiz, fields.parcelSurfaceTexture); - if (parcelSurfaceTexture != NULL) { - sp<ISurfaceTexture> native_surfaceTexture( - ParcelSurfaceTexture_getISurfaceTexture(env, parcelSurfaceTexture)); - LOGV("%s: texture=%p", prefix, native_surfaceTexture.get()); - mp->setVideoSurfaceTexture(native_surfaceTexture); - } - } +static sp<ISurfaceTexture> +getVideoSurfaceTexture(JNIEnv* env, jobject thiz) { + ISurfaceTexture * const p = (ISurfaceTexture*)env->GetIntField(thiz, fields.surface_texture); + return sp<ISurfaceTexture>(p); } static void -android_media_MediaPlayer_setVideoSurfaceOrSurfaceTexture(JNIEnv *env, jobject thiz) +android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface) { sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); return; } - setVideoSurfaceOrSurfaceTexture(mp, env, thiz, - "_setVideoSurfaceOrSurfaceTexture"); + + sp<ISurfaceTexture> old_st = getVideoSurfaceTexture(env, thiz); + sp<ISurfaceTexture> new_st; + if (jsurface) { + sp<Surface> surface(Surface_getSurface(env, jsurface)); + new_st = surface->getSurfaceTexture(); + new_st->incStrong(thiz); + } + if (old_st != NULL) { + old_st->decStrong(thiz); + } + env->SetIntField(thiz, fields.surface_texture, (int)new_st.get()); + + // This will fail if the media player has not been initialized yet. This + // can be the case if setDisplay() on MediaPlayer.java has been called + // before setDataSource(). The redundant call to setVideoSurfaceTexture() + // in prepare/prepareAsync covers for this case. + mp->setVideoSurfaceTexture(new_st); } static void @@ -287,7 +278,12 @@ android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz) jniThrowException(env, "java/lang/IllegalStateException", NULL); return; } - setVideoSurfaceOrSurfaceTexture(mp, env, thiz, "prepare"); + + // Handle the case where the display surface was set before the mp was + // initialized. We try again to make it stick. + sp<ISurfaceTexture> st = getVideoSurfaceTexture(env, thiz); + mp->setVideoSurfaceTexture(st); + process_media_player_call( env, thiz, mp->prepare(), "java/io/IOException", "Prepare failed." ); } @@ -299,7 +295,12 @@ android_media_MediaPlayer_prepareAsync(JNIEnv *env, jobject thiz) jniThrowException(env, "java/lang/IllegalStateException", NULL); return; } - setVideoSurfaceOrSurfaceTexture(mp, env, thiz, "prepareAsync"); + + // Handle the case where the display surface was set before the mp was + // initialized. We try again to make it stick. + sp<ISurfaceTexture> st = getVideoSurfaceTexture(env, thiz); + mp->setVideoSurfaceTexture(st); + process_media_player_call( env, thiz, mp->prepareAsync(), "java/io/IOException", "Prepare Async failed." ); } @@ -586,24 +587,8 @@ android_media_MediaPlayer_native_init(JNIEnv *env) return; } - fields.surface = env->GetFieldID(clazz, "mSurface", "Landroid/view/Surface;"); - if (fields.surface == NULL) { - return; - } - - jclass surface = env->FindClass("android/view/Surface"); - if (surface == NULL) { - return; - } - - fields.surface_native = env->GetFieldID(surface, ANDROID_VIEW_SURFACE_JNI_ID, "I"); - if (fields.surface_native == NULL) { - return; - } - - fields.parcelSurfaceTexture = env->GetFieldID(clazz, "mParcelSurfaceTexture", - "Landroid/graphics/ParcelSurfaceTexture;"); - if (fields.parcelSurfaceTexture == NULL) { + fields.surface_texture = env->GetFieldID(clazz, "mNativeSurfaceTexture", "I"); + if (fields.surface_texture == NULL) { return; } } @@ -642,6 +627,7 @@ static void android_media_MediaPlayer_native_finalize(JNIEnv *env, jobject thiz) { LOGV("native_finalize"); + android_media_MediaPlayer_setVideoSurface(env, thiz, NULL); android_media_MediaPlayer_release(env, thiz); } @@ -748,7 +734,7 @@ static JNINativeMethod gMethods[] = { }, {"setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer_setDataSourceFD}, - {"_setVideoSurfaceOrSurfaceTexture", "()V", (void *)android_media_MediaPlayer_setVideoSurfaceOrSurfaceTexture}, + {"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer_setVideoSurface}, {"prepare", "()V", (void *)android_media_MediaPlayer_prepare}, {"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync}, {"_start", "()V", (void *)android_media_MediaPlayer_start}, diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp index 57cabe2..277ea55 100644 --- a/media/jni/audioeffect/android_media_AudioEffect.cpp +++ b/media/jni/audioeffect/android_media_AudioEffect.cpp @@ -360,6 +360,8 @@ android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_t if ((desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) { jdescConnect = env->NewStringUTF("Auxiliary"); + } else if ((desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_PRE_PROC) { + jdescConnect = env->NewStringUTF("Pre Processing"); } else { jdescConnect = env->NewStringUTF("Insert"); } diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 16554c2..e5062ab 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -114,6 +114,7 @@ AudioRecord::~AudioRecord() } mAudioRecord.clear(); IPCThreadState::self()->flushCommands(); + AudioSystem::releaseAudioSessionId(mSessionId); } } @@ -233,6 +234,7 @@ status_t AudioRecord::set( mInputSource = (uint8_t)inputSource; mFlags = flags; mInput = input; + AudioSystem::acquireAudioSessionId(mSessionId); return NO_ERROR; } @@ -465,6 +467,7 @@ status_t AudioRecord::openRecord_l( ((uint16_t)flags) << 16, &mSessionId, &status); + if (record == 0) { LOGE("AudioFlinger could not create record track, status: %d", status); return status; diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 5009957..bb91fa9 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -356,6 +356,20 @@ int AudioSystem::newAudioSessionId() { return af->newAudioSessionId(); } +void AudioSystem::acquireAudioSessionId(int audioSession) { + const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); + if (af != 0) { + af->acquireAudioSessionId(audioSession); + } +} + +void AudioSystem::releaseAudioSessionId(int audioSession) { + const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); + if (af != 0) { + af->releaseAudioSessionId(audioSession); + } +} + // --------------------------------------------------------------------------- void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who) { @@ -696,6 +710,13 @@ status_t AudioSystem::unregisterEffect(int id) return aps->unregisterEffect(id); } +status_t AudioSystem::setEffectEnabled(int id, bool enabled) +{ + const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); + if (aps == 0) return PERMISSION_DENIED; + return aps->setEffectEnabled(id, enabled); +} + status_t AudioSystem::isStreamActive(int stream, bool* state, uint32_t inPastMs) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 31eb97a..3949c39 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -134,6 +134,7 @@ AudioTrack::~AudioTrack() } mAudioTrack.clear(); IPCThreadState::self()->flushCommands(); + AudioSystem::releaseAudioSessionId(mSessionId); } } @@ -259,6 +260,7 @@ status_t AudioTrack::set( mNewPosition = 0; mUpdatePeriod = 0; mFlags = flags; + AudioSystem::acquireAudioSessionId(mSessionId); return NO_ERROR; } diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index 4a12962..d58834b 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -1,4 +1,4 @@ -/* //device/extlibs/pv/android/IAudioflinger.cpp +/* ** ** Copyright 2007, The Android Open Source Project ** @@ -63,6 +63,8 @@ enum { GET_RENDER_POSITION, GET_INPUT_FRAMES_LOST, NEW_AUDIO_SESSION_ID, + ACQUIRE_AUDIO_SESSION_ID, + RELEASE_AUDIO_SESSION_ID, QUERY_NUM_EFFECTS, QUERY_EFFECT, GET_EFFECT_DESCRIPTOR, @@ -526,6 +528,22 @@ public: return id; } + virtual void acquireAudioSessionId(int audioSession) + { + Parcel data, reply; + data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); + data.writeInt32(audioSession); + remote()->transact(ACQUIRE_AUDIO_SESSION_ID, data, &reply); + } + + virtual void releaseAudioSessionId(int audioSession) + { + Parcel data, reply; + data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); + data.writeInt32(audioSession); + remote()->transact(RELEASE_AUDIO_SESSION_ID, data, &reply); + } + virtual status_t queryNumberEffects(uint32_t *numEffects) { Parcel data, reply; @@ -919,6 +937,18 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(newAudioSessionId()); return NO_ERROR; } break; + case ACQUIRE_AUDIO_SESSION_ID: { + CHECK_INTERFACE(IAudioFlinger, data, reply); + int audioSession = data.readInt32(); + acquireAudioSessionId(audioSession); + return NO_ERROR; + } break; + case RELEASE_AUDIO_SESSION_ID: { + CHECK_INTERFACE(IAudioFlinger, data, reply); + int audioSession = data.readInt32(); + releaseAudioSessionId(audioSession); + return NO_ERROR; + } break; case QUERY_NUM_EFFECTS: { CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t numEffects; diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index 15f4be0..50b4855 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -53,7 +53,8 @@ enum { UNREGISTER_EFFECT, IS_STREAM_ACTIVE, GET_DEVICES_FOR_STREAM, - QUERY_DEFAULT_PRE_PROCESSING + QUERY_DEFAULT_PRE_PROCESSING, + SET_EFFECT_ENABLED }; class BpAudioPolicyService : public BpInterface<IAudioPolicyService> @@ -313,6 +314,16 @@ public: return static_cast <status_t> (reply.readInt32()); } + virtual status_t setEffectEnabled(int id, bool enabled) + { + Parcel data, reply; + data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); + data.writeInt32(id); + data.writeInt32(enabled); + remote()->transact(SET_EFFECT_ENABLED, data, &reply); + return static_cast <status_t> (reply.readInt32()); + } + virtual bool isStreamActive(int stream, uint32_t inPastMs) const { Parcel data, reply; @@ -577,6 +588,14 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } break; + case SET_EFFECT_ENABLED: { + CHECK_INTERFACE(IAudioPolicyService, data, reply); + int id = data.readInt32(); + bool enabled = static_cast <bool>(data.readInt32()); + reply->writeInt32(static_cast <int32_t>(setEffectEnabled(id, enabled))); + return NO_ERROR; + } break; + case IS_STREAM_ACTIVE: { CHECK_INTERFACE(IAudioPolicyService, data, reply); int stream = data.readInt32(); diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 3dd9249..67a66a2 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -61,12 +61,14 @@ MediaPlayer::MediaPlayer() mVideoWidth = mVideoHeight = 0; mLockThreadId = 0; mAudioSessionId = AudioSystem::newAudioSessionId(); + AudioSystem::acquireAudioSessionId(mAudioSessionId); mSendLevel = 0; } MediaPlayer::~MediaPlayer() { LOGV("destructor"); + AudioSystem::releaseAudioSessionId(mAudioSessionId); disconnect(); IPCThreadState::self()->flushCommands(); } @@ -618,7 +620,11 @@ status_t MediaPlayer::setAudioSessionId(int sessionId) if (sessionId < 0) { return BAD_VALUE; } - mAudioSessionId = sessionId; + if (sessionId != mAudioSessionId) { + AudioSystem::releaseAudioSessionId(mAudioSessionId); + AudioSystem::acquireAudioSessionId(sessionId); + mAudioSessionId = sessionId; + } return NO_ERROR; } diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 1e7c969..2051b3b 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -255,8 +255,8 @@ sp<IMediaPlayer> MediaPlayerService::create( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); - LOGV("Create new client(%d) from pid %d, url=%s, connId=%d, audioSessionId=%d", - connId, pid, url, connId, audioSessionId); + LOGV("Create new client(%d) from pid %d, uid %d, url=%s, connId=%d, audioSessionId=%d", + connId, pid, IPCThreadState::self()->getCallingUid(), url, connId, audioSessionId); if (NO_ERROR != c->setDataSource(url, headers)) { c.clear(); @@ -277,8 +277,9 @@ sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClie this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); - LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld, audioSessionId=%d", - connId, pid, fd, offset, length, audioSessionId); + LOGV("Create new client(%d) from pid %d, uid %d, fd=%d, offset=%lld, " + "length=%lld, audioSessionId=%d", connId, pid, + IPCThreadState::self()->getCallingUid(), fd, offset, length, audioSessionId); if (NO_ERROR != c->setDataSource(fd, offset, length)) { c.clear(); } else { @@ -686,7 +687,9 @@ sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerT p = android::createPlayer(playerType, this, notify); } - p->setUID(mUID); + if (p != NULL) { + p->setUID(mUID); + } return p; } diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk index 3f4dace..b9e4f9f 100644 --- a/media/libstagefright/Android.mk +++ b/media/libstagefright/Android.mk @@ -133,8 +133,9 @@ LOCAL_SHARED_LIBRARIES += \ LOCAL_STATIC_LIBRARIES += \ libstagefright_chromium_http \ libwebcore \ + libchromium_net \ -LOCAL_SHARED_LIBRARIES += libstlport libchromium_net +LOCAL_SHARED_LIBRARIES += libstlport include external/stlport/libstlport.mk LOCAL_CPPFLAGS += -DCHROMIUM_AVAILABLE=1 diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 67f6c79..0ea880b 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -63,7 +63,7 @@ namespace android { static int64_t kLowWaterMarkUs = 2000000ll; // 2secs -static int64_t kHighWaterMarkUs = 10000000ll; // 10secs +static int64_t kHighWaterMarkUs = 5000000ll; // 5secs static int64_t kHighWaterMarkRTSPUs = 4000000ll; // 4secs static const size_t kLowWaterMarkBytes = 40000; static const size_t kHighWaterMarkBytes = 200000; @@ -1157,6 +1157,8 @@ void AwesomePlayer::setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) mSurface.clear(); if (surfaceTexture != NULL) { setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); + } else { + setNativeWindow_l(NULL); } } @@ -1769,7 +1771,8 @@ void AwesomePlayer::onVideoEvent() { } } - if (mVideoRendererIsPreview || mVideoRenderer == NULL) { + if ((mNativeWindow != NULL) + && (mVideoRendererIsPreview || mVideoRenderer == NULL)) { mVideoRendererIsPreview = false; initRenderer_l(); diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index ea8eaa4..ac3565f 100755 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -665,7 +665,7 @@ void CameraSource::releaseRecordingFrame(const sp<IMemory>& frame) { LOGV("releaseRecordingFrame"); if (mCameraRecordingProxy != NULL) { mCameraRecordingProxy->releaseRecordingFrame(frame); - } else { + } else if (mCamera != NULL) { int64_t token = IPCThreadState::self()->clearCallingIdentity(); mCamera->releaseRecordingFrame(frame); IPCThreadState::self()->restoreCallingIdentity(token); diff --git a/media/libstagefright/HTTPBase.cpp b/media/libstagefright/HTTPBase.cpp index f9d8501..3c5a8a5 100644 --- a/media/libstagefright/HTTPBase.cpp +++ b/media/libstagefright/HTTPBase.cpp @@ -39,7 +39,8 @@ HTTPBase::HTTPBase() mPrevBandwidthMeasureTimeUs(0), mPrevEstimatedBandWidthKbps(0), mBandWidthCollectFreqMs(5000), - mUIDValid(false) { + mUIDValid(false), + mUID(0) { } // static @@ -135,9 +136,19 @@ bool HTTPBase::getUID(uid_t *uid) const { } // static -void HTTPBase::RegisterSocketUser(int s, uid_t uid) { - static const uint32_t kTag = 0xdeadbeef; - set_qtaguid(s, kTag, uid); +void HTTPBase::RegisterSocketUserTag(int sockfd, uid_t uid, uint32_t kTag) { + int res = qtaguid_tagSocket(sockfd, kTag, uid); + if (res != 0) { + LOGE("Failed tagging socket %d for uid %d (My UID=%d)", sockfd, uid, geteuid()); + } +} + +// static +void HTTPBase::UnRegisterSocketUserTag(int sockfd) { + int res = qtaguid_untagSocket(sockfd); + if (res != 0) { + LOGE("Failed untagging socket %d (My UID=%d)", sockfd, geteuid()); + } } } // namespace android diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 8c9ff87..5f58090 100755 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -1172,6 +1172,9 @@ void MPEG4Writer::Track::addOneStssTableEntry(size_t sampleId) { void MPEG4Writer::Track::addOneSttsTableEntry( size_t sampleCount, int32_t duration) { + if (duration == 0) { + LOGW("%d 0-duration samples found: %d", sampleCount); + } SttsTableEntry sttsEntry(sampleCount, duration); mSttsTableEntries.push_back(sttsEntry); ++mNumSttsTableEntries; @@ -2001,17 +2004,18 @@ status_t MPEG4Writer::Track::threadEntry() { mTrackDurationUs = timestampUs; } + // We need to use the time scale based ticks, rather than the + // timestamp itself to determine whether we have to use a new + // stts entry, since we may have rounding errors. + // The calculation is intended to reduce the accumulated + // rounding errors. + currDurationTicks = + ((timestampUs * mTimeScale + 500000LL) / 1000000LL - + (lastTimestampUs * mTimeScale + 500000LL) / 1000000LL); + mSampleSizes.push_back(sampleSize); ++mNumSamples; if (mNumSamples > 2) { - // We need to use the time scale based ticks, rather than the - // timestamp itself to determine whether we have to use a new - // stts entry, since we may have rounding errors. - // The calculation is intended to reduce the accumulated - // rounding errors. - currDurationTicks = - ((timestampUs * mTimeScale + 500000LL) / 1000000LL - - (lastTimestampUs * mTimeScale + 500000LL) / 1000000LL); // Force the first sample to have its own stts entry so that // we can adjust its value later to maintain the A/V sync. diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 5327f3b..644c413 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -442,9 +442,17 @@ sp<MediaSource> OMXCodec::Create( sp<OMXCodecObserver> observer = new OMXCodecObserver; IOMX::node_id node = 0; - const char *componentName; for (size_t i = 0; i < matchingCodecs.size(); ++i) { - componentName = matchingCodecs[i].string(); + const char *componentNameBase = matchingCodecs[i].string(); + const char *componentName = componentNameBase; + + AString tmp; + if (flags & kUseSecureInputBuffers) { + tmp = componentNameBase; + tmp.append(".secure"); + + componentName = tmp.c_str(); + } if (createEncoder) { sp<MediaSource> softwareCodec = @@ -459,7 +467,7 @@ sp<MediaSource> OMXCodec::Create( LOGV("Attempting to allocate OMX node '%s'", componentName); - uint32_t quirks = getComponentQuirks(componentName, createEncoder); + uint32_t quirks = getComponentQuirks(componentNameBase, createEncoder); if (!createEncoder && (quirks & kOutputBuffersAreUnreadable) @@ -720,32 +728,9 @@ status_t OMXCodec::configureCodec(const sp<MetaData> &meta) { } } - if (mFlags & kUseSecureInputBuffers) { - (void)enableSecureMode(); - } - return OK; } -status_t OMXCodec::enableSecureMode() { - OMX_INDEXTYPE index; - - status_t err = - mOMX->getExtensionIndex( - mNode, "OMX.google.android.index.enableSecureMode", &index); - - if (err != OK) { - return err; - } - - EnableSecureModeParams params; - InitOMXParams(¶ms); - - params.bEnableSecureMode = OMX_TRUE; - - return mOMX->setConfig(mNode, index, ¶ms, sizeof(params)); -} - void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) { OMX_PARAM_PORTDEFINITIONTYPE def; InitOMXParams(&def); diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp index 3d8c56a..ddfd9ff 100644 --- a/media/libstagefright/SurfaceMediaSource.cpp +++ b/media/libstagefright/SurfaceMediaSource.cpp @@ -371,7 +371,8 @@ status_t SurfaceMediaSource::setSynchronousMode(bool enabled) { return err; } -status_t SurfaceMediaSource::connect(int api) { +status_t SurfaceMediaSource::connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { LOGV("SurfaceMediaSource::connect"); Mutex::Autolock lock(mMutex); status_t err = NO_ERROR; @@ -384,6 +385,9 @@ status_t SurfaceMediaSource::connect(int api) { err = -EINVAL; } else { mConnectedApi = api; + *outWidth = mDefaultWidth; + *outHeight = mDefaultHeight; + *outTransform = 0; } break; default: diff --git a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp index 887fe7c..180460b 100644 --- a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp +++ b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp @@ -61,6 +61,12 @@ status_t ChromiumHTTPDataSource::connect( off64_t offset) { Mutex::Autolock autoLock(mLock); + uid_t uid; + if (getUID(&uid)) { + mDelegate->setUID(uid); + } + LOG_PRI(ANDROID_LOG_VERBOSE, LOG_TAG, "connect on behalf of uid %d", uid); + return connect_l(uri, headers, offset); } diff --git a/media/libstagefright/chromium_http/support.cpp b/media/libstagefright/chromium_http/support.cpp index 26c3eda..de936c4 100644 --- a/media/libstagefright/chromium_http/support.cpp +++ b/media/libstagefright/chromium_http/support.cpp @@ -23,6 +23,7 @@ #include "support.h" #include "android/net/android_network_library_impl.h" +#include "base/logging.h" #include "base/threading/thread.h" #include "net/base/cert_verifier.h" #include "net/base/cookie_monster.h" @@ -34,8 +35,10 @@ #include "include/ChromiumHTTPDataSource.h" +#include <cutils/log.h> #include <cutils/properties.h> #include <media/stagefright/MediaErrors.h> +#include <string> namespace android { @@ -44,6 +47,34 @@ static base::Thread *gNetworkThread = NULL; static scoped_refptr<net::URLRequestContext> gReqContext; static scoped_ptr<net::NetworkChangeNotifier> gNetworkChangeNotifier; +bool logMessageHandler( + int severity, + const char* file, + int line, + size_t message_start, + const std::string& str) { + int androidSeverity = ANDROID_LOG_VERBOSE; + switch(severity) { + case logging::LOG_FATAL: + androidSeverity = ANDROID_LOG_FATAL; + break; + case logging::LOG_ERROR_REPORT: + case logging::LOG_ERROR: + androidSeverity = ANDROID_LOG_ERROR; + break; + case logging::LOG_WARNING: + androidSeverity = ANDROID_LOG_WARN; + break; + default: + androidSeverity = ANDROID_LOG_VERBOSE; + break; + } + android_printLog(androidSeverity, "chromium-libstagefright", + "%s:%d: %s", file, line, str.c_str()); + return false; +} + + static void InitializeNetworkThreadIfNecessary() { Mutex::Autolock autoLock(gNetworkThreadLock); if (gNetworkThread == NULL) { @@ -58,6 +89,7 @@ static void InitializeNetworkThreadIfNecessary() { net::AndroidNetworkLibrary::RegisterSharedInstance( new SfNetworkLibrary); + logging::SetLogMessageHandler(logMessageHandler); } } @@ -181,6 +213,14 @@ void SfDelegate::setOwner(ChromiumHTTPDataSource *owner) { mOwner = owner; } +void SfDelegate::setUID(uid_t uid) { + gReqContext->setUID(uid); +} + +bool SfDelegate::getUID(uid_t *uid) const { + return gReqContext->getUID(uid); +} + void SfDelegate::OnReceivedRedirect( net::URLRequest *request, const GURL &new_url, bool *defer_redirect) { MY_LOGV("OnReceivedRedirect"); diff --git a/media/libstagefright/chromium_http/support.h b/media/libstagefright/chromium_http/support.h index 8fe8db1..d2c5bc0 100644 --- a/media/libstagefright/chromium_http/support.h +++ b/media/libstagefright/chromium_http/support.h @@ -91,6 +91,11 @@ struct SfDelegate : public net::URLRequest::Delegate { void setOwner(ChromiumHTTPDataSource *mOwner); + // Gets the UID of the calling process + bool getUID(uid_t *uid) const; + + void setUID(uid_t uid); + virtual void OnReceivedRedirect( net::URLRequest *request, const GURL &new_url, bool *defer_redirect); diff --git a/media/libstagefright/codecs/aacdec/SoftAAC.cpp b/media/libstagefright/codecs/aacdec/SoftAAC.cpp index bbd6dbb..f0a330f 100644 --- a/media/libstagefright/codecs/aacdec/SoftAAC.cpp +++ b/media/libstagefright/codecs/aacdec/SoftAAC.cpp @@ -316,7 +316,7 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { * Thus, we could not say for sure whether a stream is * AAC+/eAAC+ until the first data frame is decoded. */ - if (mInputBufferCount <= 2) { + if (decoderErr == MP4AUDEC_SUCCESS && mInputBufferCount <= 2) { LOGV("audio/extended audio object type: %d + %d", mConfig->audioObjectType, mConfig->extendedAudioObjectType); LOGV("aac+ upsampling factor: %d desired channels: %d", @@ -410,7 +410,9 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { notifyFillBufferDone(outHeader); outHeader = NULL; - ++mInputBufferCount; + if (decoderErr == MP4AUDEC_SUCCESS) { + ++mInputBufferCount; + } } } diff --git a/media/libstagefright/include/HTTPBase.h b/media/libstagefright/include/HTTPBase.h index 0e9af69..b8e10f7 100644 --- a/media/libstagefright/include/HTTPBase.h +++ b/media/libstagefright/include/HTTPBase.h @@ -53,7 +53,8 @@ struct HTTPBase : public DataSource { static sp<HTTPBase> Create(uint32_t flags = 0); - static void RegisterSocketUser(int s, uid_t uid); + static void RegisterSocketUserTag(int sockfd, uid_t uid, uint32_t kTag); + static void UnRegisterSocketUserTag(int sockfd); protected: void addBandwidthMeasurement(size_t numBytes, int64_t delayUs); diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp index b398c9d..bd0e491 100644 --- a/media/libstagefright/rtsp/ARTSPConnection.cpp +++ b/media/libstagefright/rtsp/ARTSPConnection.cpp @@ -56,6 +56,9 @@ ARTSPConnection::ARTSPConnection(bool uidValid, uid_t uid) ARTSPConnection::~ARTSPConnection() { if (mSocket >= 0) { LOGE("Connection is still open, closing the socket."); + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(mSocket); + } close(mSocket); mSocket = -1; } @@ -202,6 +205,9 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { ++mConnectionID; if (mState != DISCONNECTED) { + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(mSocket); + } close(mSocket); mSocket = -1; @@ -251,7 +257,8 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { mSocket = socket(AF_INET, SOCK_STREAM, 0); if (mUIDValid) { - HTTPBase::RegisterSocketUser(mSocket, mUID); + HTTPBase::RegisterSocketUserTag(mSocket, mUID, + (uint32_t)*(uint32_t*) "RTSP"); } MakeSocketBlocking(mSocket, false); @@ -279,6 +286,9 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { reply->setInt32("result", -errno); mState = DISCONNECTED; + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(mSocket); + } close(mSocket); mSocket = -1; } else { @@ -294,6 +304,9 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { void ARTSPConnection::onDisconnect(const sp<AMessage> &msg) { if (mState == CONNECTED || mState == CONNECTING) { + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(mSocket); + } close(mSocket); mSocket = -1; @@ -358,6 +371,9 @@ void ARTSPConnection::onCompleteConnection(const sp<AMessage> &msg) { reply->setInt32("result", -err); mState = DISCONNECTED; + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(mSocket); + } close(mSocket); mSocket = -1; } else { diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index 71d68f6..8128813 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -545,6 +545,12 @@ struct MyHandler : public AHandler { if (result != OK) { if (track) { if (!track->mUsingInterleavedTCP) { + // Clear the tag + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(track->mRTPSocket); + HTTPBase::UnRegisterSocketUserTag(track->mRTCPSocket); + } + close(track->mRTPSocket); close(track->mRTCPSocket); } @@ -618,6 +624,12 @@ struct MyHandler : public AHandler { if (!info->mUsingInterleavedTCP) { mRTPConn->removeStream(info->mRTPSocket, info->mRTCPSocket); + // Clear the tag + if (mUIDValid) { + HTTPBase::UnRegisterSocketUserTag(info->mRTPSocket); + HTTPBase::UnRegisterSocketUserTag(info->mRTCPSocket); + } + close(info->mRTPSocket); close(info->mRTCPSocket); } @@ -1181,8 +1193,10 @@ private: &info->mRTPSocket, &info->mRTCPSocket, &rtpPort); if (mUIDValid) { - HTTPBase::RegisterSocketUser(info->mRTPSocket, mUID); - HTTPBase::RegisterSocketUser(info->mRTCPSocket, mUID); + HTTPBase::RegisterSocketUserTag(info->mRTPSocket, mUID, + (uint32_t)*(uint32_t*) "RTP_"); + HTTPBase::RegisterSocketUserTag(info->mRTCPSocket, mUID, + (uint32_t)*(uint32_t*) "RTP_"); } request.append("Transport: RTP/AVP/UDP;unicast;client_port="); diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java index 90be041..1511cd7 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java @@ -23,9 +23,11 @@ import android.media.audiofx.AudioEffect; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; +import android.media.AudioRecord; import android.media.audiofx.EnvironmentalReverb; import android.media.audiofx.Equalizer; import android.media.MediaPlayer; +import android.media.MediaRecorder; import android.os.Looper; import android.test.suitebuilder.annotation.LargeTest; @@ -54,6 +56,7 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media private Looper mLooper = null; private int mError = 0; private final Object lock = new Object(); + private final static int SAMPLING_RATE = 44100; public MediaAudioEffectTest() { super("com.android.mediaframeworktest", MediaFrameworkTest.class); @@ -124,6 +127,25 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media // 1 - constructor //---------------------------------- + private AudioRecord getAudioRecord() { + AudioRecord ar = null; + try { + ar = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, + SAMPLING_RATE, + AudioFormat.CHANNEL_CONFIGURATION_MONO, + AudioFormat.ENCODING_PCM_16BIT, + AudioRecord.getMinBufferSize(SAMPLING_RATE, + AudioFormat.CHANNEL_CONFIGURATION_MONO, + AudioFormat.ENCODING_PCM_16BIT) * 10); + assertNotNull("Could not create AudioRecord", ar); + assertEquals("AudioRecord not initialized", + AudioRecord.STATE_INITIALIZED, ar.getState()); + } catch (IllegalArgumentException e) { + fail("AudioRecord invalid parameter"); + } + return ar; + } + //Test case 1.0: test constructor from effect type and get effect ID @LargeTest public void test1_0ConstructorFromType() throws Exception { @@ -132,10 +154,19 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media AudioEffect.Descriptor[] desc = AudioEffect.queryEffects(); assertTrue(msg+": no effects found", (desc.length != 0)); try { + int sessionId; + AudioRecord ar = null; + if (AudioEffect.EFFECT_PRE_PROCESSING.equals(desc[0].connectMode)) { + ar = getAudioRecord(); + sessionId = ar.getAudioSessionId(); + } else { + sessionId = 0; + } + AudioEffect effect = new AudioEffect(desc[0].type, AudioEffect.EFFECT_TYPE_NULL, 0, - 0); + sessionId); assertNotNull(msg + ": could not create AudioEffect", effect); try { assertTrue(msg +": invalid effect ID", (effect.getId() != 0)); @@ -144,6 +175,9 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media result = false; } finally { effect.release(); + if (ar != null) { + ar.release(); + } } } catch (IllegalArgumentException e) { msg = msg.concat(": Effect not found: "+desc[0].name); @@ -163,12 +197,23 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media AudioEffect.Descriptor[] desc = AudioEffect.queryEffects(); assertTrue(msg+"no effects found", (desc.length != 0)); try { + int sessionId; + AudioRecord ar = null; + if (AudioEffect.EFFECT_PRE_PROCESSING.equals(desc[0].connectMode)) { + ar = getAudioRecord(); + sessionId = ar.getAudioSessionId(); + } else { + sessionId = 0; + } AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_NULL, desc[0].uuid, 0, - 0); + sessionId); assertNotNull(msg + ": could not create AudioEffect", effect); effect.release(); + if (ar != null) { + ar.release(); + } } catch (IllegalArgumentException e) { msg = msg.concat(": Effect not found: "+desc[0].name); result = false; diff --git a/media/tests/ScoAudioTest/Android.mk b/media/tests/ScoAudioTest/Android.mk new file mode 100755 index 0000000..ab12865 --- /dev/null +++ b/media/tests/ScoAudioTest/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +#LOCAL_SDK_VERSION := current + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_PACKAGE_NAME := scoaudiotest + +include $(BUILD_PACKAGE) diff --git a/media/tests/ScoAudioTest/AndroidManifest.xml b/media/tests/ScoAudioTest/AndroidManifest.xml new file mode 100755 index 0000000..8ff973e --- /dev/null +++ b/media/tests/ScoAudioTest/AndroidManifest.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2010 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.scoaudiotest"> + + <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> + <uses-permission android:name="android.permission.RECORD_AUDIO" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.BROADCAST_STICKY" /> + <uses-permission android:name="android.permission.BLUETOOTH" /> + + <application> + <activity android:label="@string/app_name" + android:name="ScoAudioTest"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + </activity> + + </application> +</manifest> diff --git a/media/tests/ScoAudioTest/res/drawable/icon.png b/media/tests/ScoAudioTest/res/drawable/icon.png Binary files differnew file mode 100755 index 0000000..64e3601 --- /dev/null +++ b/media/tests/ScoAudioTest/res/drawable/icon.png diff --git a/media/tests/ScoAudioTest/res/drawable/record.png b/media/tests/ScoAudioTest/res/drawable/record.png Binary files differnew file mode 100755 index 0000000..ae518d5 --- /dev/null +++ b/media/tests/ScoAudioTest/res/drawable/record.png diff --git a/media/tests/ScoAudioTest/res/drawable/stop.png b/media/tests/ScoAudioTest/res/drawable/stop.png Binary files differnew file mode 100755 index 0000000..83f012c --- /dev/null +++ b/media/tests/ScoAudioTest/res/drawable/stop.png diff --git a/media/tests/ScoAudioTest/res/layout/scoaudiotest.xml b/media/tests/ScoAudioTest/res/layout/scoaudiotest.xml new file mode 100755 index 0000000..b769a0c --- /dev/null +++ b/media/tests/ScoAudioTest/res/layout/scoaudiotest.xml @@ -0,0 +1,181 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2009 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout android:id="@+id/playPause1Frame" + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:layout_marginTop="3dip" + android:layout_marginRight="10dip" + android:layout_marginBottom="3dip" > + + <TextView android:id="@+id/playPause1Text" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_weight="1.0" + android:text="@string/playback_name" + android:layout_gravity="center_vertical|left" + style="@android:style/TextAppearance.Medium" /> + + <ImageButton android:id="@+id/stop1" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:layout_gravity="center_vertical|right" + android:layout_weight="0.0" + android:src="@drawable/stop"/> + + <ImageButton android:id="@+id/playPause1" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:layout_gravity="center_vertical|right" + android:layout_weight="0.0" + android:src="@android:drawable/ic_media_play"/> + + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout android:id="@+id/record1Frame" + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:layout_marginTop="3dip" + android:layout_marginRight="10dip" + android:layout_marginBottom="3dip" > + + <TextView android:id="@+id/record1Text" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_weight="1.0" + android:text="@string/record_name" + android:layout_gravity="center_vertical|left" + style="@android:style/TextAppearance.Medium" /> + + <ImageButton android:id="@+id/recStop1" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:layout_gravity="center_vertical|right" + android:layout_weight="0.0" + android:src="@drawable/record"/> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout android:id="@+id/forceFrame" + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:layout_marginTop="3dip" + android:layout_marginRight="10dip" + android:layout_marginBottom="3dip" > + + <ToggleButton android:id="@+id/ForceScoButton" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:layout_gravity="center_vertical|left" + android:layout_weight="0.0" + android:textOff="@string/force_sco_off" + android:textOn="@string/force_sco_on" /> + + <TextView android:id="@+id/scoStateTxt" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_weight="1.0" + android:layout_gravity="center_vertical|right" + style="@android:style/TextAppearance.Medium" /> + </LinearLayout> + <CheckBox + android:id="@+id/useSecondAudioManager" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/audiomanagertwo" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout android:id="@+id/voiceDialerFrame" + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:layout_marginTop="3dip" + android:layout_marginRight="10dip" + android:layout_marginBottom="3dip" > + + <ToggleButton android:id="@+id/VoiceDialerButton" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:layout_gravity="center_vertical|left" + android:layout_weight="0.0" + android:textOff="@string/vd_off" + android:textOn="@string/vd_on" /> + + <TextView android:id="@+id/vdStateTxt" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_weight="1.0" + android:layout_gravity="center_vertical|right" + style="@android:style/TextAppearance.Medium" /> + + </LinearLayout> + + </LinearLayout> + + <EditText android:id="@+id/speakTextEdit" + android:layout_width="fill_parent" + android:layout_height="wrap_content" /> + + <ToggleButton android:id="@+id/TtsToFileButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textOff="@string/tts_speak" + android:textOn="@string/tts_to_file" /> + + + <Spinner android:id="@+id/modeSpinner" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:drawSelectorOnTop="true" + /> + +</LinearLayout> diff --git a/media/tests/ScoAudioTest/res/raw/sine440_mo_16b_16k.wav b/media/tests/ScoAudioTest/res/raw/sine440_mo_16b_16k.wav Binary files differnew file mode 100644 index 0000000..2538b4d6 --- /dev/null +++ b/media/tests/ScoAudioTest/res/raw/sine440_mo_16b_16k.wav diff --git a/media/tests/ScoAudioTest/res/values/strings.xml b/media/tests/ScoAudioTest/res/values/strings.xml new file mode 100755 index 0000000..c3ff6d5 --- /dev/null +++ b/media/tests/ScoAudioTest/res/values/strings.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="app_name">Sco Audio Test</string> + <string name="playback_name">Playback</string> + <string name="record_name">Record</string> + <string name="force_sco_off">NO SCO</string> + <string name="force_sco_on">USE SCO</string> + <string name="vd_off">Start Voice Dialer</string> + <string name="vd_on">Voice Dialer On</string> + <string name="tts_speak">Speak TTS</string> + <string name="tts_to_file">TTS to file</string> + <string name="audiomanagertwo">Use different AudioManager for starting SCO</string> + +</resources> diff --git a/media/tests/ScoAudioTest/src/com/android/scoaudiotest/ScoAudioTest.java b/media/tests/ScoAudioTest/src/com/android/scoaudiotest/ScoAudioTest.java new file mode 100644 index 0000000..fe3929d --- /dev/null +++ b/media/tests/ScoAudioTest/src/com/android/scoaudiotest/ScoAudioTest.java @@ -0,0 +1,700 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.scoaudiotest; + +import android.app.Activity; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothProfile; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.AssetFileDescriptor; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaRecorder; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.speech.tts.TextToSpeech; +import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.ToggleButton; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; + +public class ScoAudioTest extends Activity { + + final static String TAG = "ScoAudioTest"; + + AudioManager mAudioManager; + AudioManager mAudioManager2; + boolean mForceScoOn; + ToggleButton mScoButton; + ToggleButton mVoiceDialerButton; + boolean mVoiceDialerOn; + String mLastRecordedFile; + SimpleMediaController mMediaControllers[] = new SimpleMediaController[2]; + private TextToSpeech mTts; + private HashMap<String, String> mTtsParams; + private int mOriginalVoiceVolume; + EditText mSpeakText; + boolean mTtsInited; + private Handler mHandler; + private static final String UTTERANCE = "utterance"; + private static Intent sVoiceCommandIntent; + private File mSampleFile; + ToggleButton mTtsToFileButton; + private boolean mTtsToFile; + private int mCurrentMode; + Spinner mModeSpinner; + private BluetoothHeadset mBluetoothHeadset; + private BluetoothDevice mBluetoothHeadsetDevice; + TextView mScoStateTxt; + TextView mVdStateTxt; + + private final BroadcastReceiver mReceiver = new ScoBroadcastReceiver(); + + public ScoAudioTest() { + Log.e(TAG, "contructor"); + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + setContentView(R.layout.scoaudiotest); + + mScoStateTxt = (TextView) findViewById(R.id.scoStateTxt); + mVdStateTxt = (TextView) findViewById(R.id.vdStateTxt); + + IntentFilter intentFilter = + new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED); + intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED); + intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED); + registerReceiver(mReceiver, intentFilter); + + mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + mAudioManager2 = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); + mHandler = new Handler(); + + mMediaControllers[0] = new SimplePlayerController(this, R.id.playPause1, R.id.stop1, + R.raw.sine440_mo_16b_16k, AudioManager.STREAM_BLUETOOTH_SCO); + TextView name = (TextView) findViewById(R.id.playPause1Text); + name.setText("VOICE_CALL stream"); + + mScoButton = (ToggleButton)findViewById(R.id.ForceScoButton); + mScoButton.setOnCheckedChangeListener(mForceScoChanged); + mForceScoOn = false; + mScoButton.setChecked(mForceScoOn); + + mVoiceDialerButton = (ToggleButton)findViewById(R.id.VoiceDialerButton); + mVoiceDialerButton.setOnCheckedChangeListener(mVoiceDialerChanged); + mVoiceDialerOn = false; + mVoiceDialerButton.setChecked(mVoiceDialerOn); + + + mMediaControllers[1] = new SimpleRecordController(this, R.id.recStop1, 0, "Sco_record_"); + mTtsInited = false; + mTts = new TextToSpeech(this, new TtsInitListener()); + mTtsParams = new HashMap<String, String>(); + mTtsParams.put(TextToSpeech.Engine.KEY_PARAM_STREAM, + String.valueOf(AudioManager.STREAM_BLUETOOTH_SCO)); + mTtsParams.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, + UTTERANCE); + + mSpeakText = (EditText) findViewById(R.id.speakTextEdit); + mSpeakText.setOnKeyListener(mSpeakKeyListener); + mSpeakText.setText("sco audio test sentence"); + mTtsToFileButton = (ToggleButton)findViewById(R.id.TtsToFileButton); + mTtsToFileButton.setOnCheckedChangeListener(mTtsToFileChanged); + mTtsToFile = true; + mTtsToFileButton.setChecked(mTtsToFile); + + mModeSpinner = (Spinner) findViewById(R.id.modeSpinner); + ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, + android.R.layout.simple_spinner_item, mModeStrings); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + mModeSpinner.setAdapter(adapter); + mModeSpinner.setOnItemSelectedListener(mModeChanged); + mCurrentMode = mAudioManager.getMode(); + mModeSpinner.setSelection(mCurrentMode); + + mBluetoothHeadsetDevice = null; + BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); + if (btAdapter != null) { + btAdapter.getProfileProxy(this, mBluetoothProfileServiceListener, + BluetoothProfile.HEADSET); + } + + sVoiceCommandIntent = new Intent(Intent.ACTION_VOICE_COMMAND); + sVoiceCommandIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mTts.shutdown(); + unregisterReceiver(mReceiver); + if (mBluetoothHeadset != null) { + BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); + if (btAdapter != null) { + btAdapter.closeProfileProxy(BluetoothProfile.HEADSET, mBluetoothHeadset); + } + } + } + + @Override + protected void onPause() { + super.onPause(); +// mForceScoOn = false; +// mScoButton.setChecked(mForceScoOn); + mMediaControllers[0].stop(); + mMediaControllers[1].stop(); + mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, + mOriginalVoiceVolume, 0); + } + + @Override + protected void onResume() { + super.onResume(); + mLastRecordedFile = ""; + mMediaControllers[0].mFileName = ""; + mOriginalVoiceVolume = mAudioManager.getStreamVolume( + AudioManager.STREAM_BLUETOOTH_SCO); + setVolumeControlStream(AudioManager.STREAM_BLUETOOTH_SCO); + mCurrentMode = mAudioManager.getMode(); + mModeSpinner.setSelection(mCurrentMode); + } + + private OnCheckedChangeListener mForceScoChanged + = new OnCheckedChangeListener(){ + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (mForceScoOn != isChecked) { + mForceScoOn = isChecked; + AudioManager mngr = mAudioManager; + CheckBox box = (CheckBox) findViewById(R.id.useSecondAudioManager); + if (box.isChecked()) { + Log.i(TAG, "Using 2nd audio manager"); + mngr = mAudioManager2; + } + + if (mForceScoOn) { + Log.e(TAG, "startBluetoothSco() IN"); + mngr.startBluetoothSco(); + Log.e(TAG, "startBluetoothSco() OUT"); + } else { + Log.e(TAG, "stopBluetoothSco() IN"); + mngr.stopBluetoothSco(); + Log.e(TAG, "stopBluetoothSco() OUT"); + } + } + } + }; + + private OnCheckedChangeListener mVoiceDialerChanged + = new OnCheckedChangeListener(){ + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (mVoiceDialerOn != isChecked) { + mVoiceDialerOn = isChecked; + if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null) { + if (mVoiceDialerOn) { + mBluetoothHeadset.startVoiceRecognition(mBluetoothHeadsetDevice); + } else { + mBluetoothHeadset.stopVoiceRecognition(mBluetoothHeadsetDevice); + } + } + } + } + }; + + private OnCheckedChangeListener mTtsToFileChanged + = new OnCheckedChangeListener(){ + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + mTtsToFile = isChecked; + } + }; + + private class SimpleMediaController implements OnClickListener { + int mPlayPauseButtonId; + int mStopButtonId; + Context mContext; + ImageView mPlayPauseButton; + int mPlayImageResource; + int mPauseImageResource; + String mFileNameBase; + String mFileName; + int mFileResId; + + SimpleMediaController(Context context, int playPausebuttonId, int stopButtonId, String fileName) { + mContext = context; + mPlayPauseButtonId = playPausebuttonId; + mStopButtonId = stopButtonId; + mFileNameBase = fileName; + mPlayPauseButton = (ImageButton) findViewById(playPausebuttonId); + ImageButton stop = (ImageButton) findViewById(stopButtonId); + + mPlayPauseButton.setOnClickListener(this); + mPlayPauseButton.requestFocus(); + if (stop != null) { + stop.setOnClickListener(this); + } + } + + SimpleMediaController(Context context, int playPausebuttonId, int stopButtonId, int fileResId) { + mContext = context; + mPlayPauseButtonId = playPausebuttonId; + mStopButtonId = stopButtonId; + mFileNameBase = ""; + mFileResId = fileResId; + mPlayPauseButton = (ImageButton) findViewById(playPausebuttonId); + ImageButton stop = (ImageButton) findViewById(stopButtonId); + + mPlayPauseButton.setOnClickListener(this); + mPlayPauseButton.requestFocus(); + if (stop != null) { + stop.setOnClickListener(this); + } + } + + @Override + public void onClick(View v) { + if (v.getId() == mPlayPauseButtonId) { + playOrPause(); + } else if (v.getId() == mStopButtonId) { + stop(); + } + } + + public void playOrPause() { + } + + public void stop() { + } + + public boolean isPlaying() { + return false; + } + + public void updatePlayPauseButton() { + mPlayPauseButton.setImageResource(isPlaying() ? mPauseImageResource : mPlayImageResource); + } + } + + private class SimplePlayerController extends SimpleMediaController { + private MediaPlayer mMediaPlayer; + private int mStreamType; + SimplePlayerController(Context context, int playPausebuttonId, int stopButtonId, String fileName, int stream) { + super(context, playPausebuttonId, stopButtonId, fileName); + + mPlayImageResource = android.R.drawable.ic_media_play; + mPauseImageResource = android.R.drawable.ic_media_pause; + mStreamType = stream; + mFileName = Environment.getExternalStorageDirectory().toString() + "/music/" + + mFileNameBase + "_" + ".wav"; + } + + SimplePlayerController(Context context, int playPausebuttonId, int stopButtonId, int fileResId, int stream) { + super(context, playPausebuttonId, stopButtonId, fileResId); + + mPlayImageResource = android.R.drawable.ic_media_play; + mPauseImageResource = android.R.drawable.ic_media_pause; + mStreamType = stream; + mFileName = ""; + } + + @Override + public void playOrPause() { + Log.e(TAG, "playOrPause playing: "+((mMediaPlayer == null)?false:!mMediaPlayer.isPlaying())+ + " mMediaPlayer: "+mMediaPlayer+ + " mFileName: "+mFileName+ + " mLastRecordedFile: "+mLastRecordedFile); + if (mMediaPlayer == null || !mMediaPlayer.isPlaying()){ + if (mMediaPlayer == null) { + if (mFileName != mLastRecordedFile) { + mFileName = mLastRecordedFile; + Log.e(TAG, "new recorded file: "+mFileName); + } + try { + mMediaPlayer = new MediaPlayer(); + if (mFileName.equals("")) { + Log.e(TAG, "Playing from resource"); + AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(mFileResId); + mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); + afd.close(); + } else { + Log.e(TAG, "Playing file: "+mFileName); + mMediaPlayer.setDataSource(mFileName); + } + mMediaPlayer.setAudioStreamType(mStreamType); + mMediaPlayer.prepare(); + mMediaPlayer.setLooping(true); + } catch (Exception ex) { + Log.e(TAG, "mMediaPlayercreate failed:", ex); + mMediaPlayer.release(); + mMediaPlayer = null; + } + + if (mMediaPlayer != null) { + mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + updatePlayPauseButton(); + } + }); + } + } + if (mMediaPlayer != null) { + mMediaPlayer.start(); + } + } else { + mMediaPlayer.pause(); + } + updatePlayPauseButton(); + } + @Override + public void stop() { + if (mMediaPlayer != null) { + mMediaPlayer.stop(); + mMediaPlayer.release(); + mMediaPlayer = null; + } + updatePlayPauseButton(); + } + + @Override + public boolean isPlaying() { + if (mMediaPlayer != null) { + return mMediaPlayer.isPlaying(); + } else { + return false; + } + } + } + + private class SimpleRecordController extends SimpleMediaController { + private MediaRecorder mMediaRecorder; + private int mFileCount = 0; + private int mState = 0; + SimpleRecordController(Context context, int playPausebuttonId, int stopButtonId, String fileName) { + super(context, playPausebuttonId, stopButtonId, fileName); + Log.e(TAG, "SimpleRecordController cstor"); + mPlayImageResource = R.drawable.record; + mPauseImageResource = R.drawable.stop; + } + + @Override + public void playOrPause() { + if (mState == 0) { + setup(); + try { + mMediaRecorder.start(); + mState = 1; + } catch (Exception e) { + Log.e(TAG, "Could start MediaRecorder: " + e.toString()); + mMediaRecorder.release(); + mMediaRecorder = null; + mState = 0; + } + } else { + try { + mMediaRecorder.stop(); + mMediaRecorder.reset(); + } catch (Exception e) { + Log.e(TAG, "Could not stop MediaRecorder: " + e.toString()); + mMediaRecorder.release(); + mMediaRecorder = null; + } finally { + mState = 0; + } + } + updatePlayPauseButton(); + } + + public void setup() { + Log.e(TAG, "SimpleRecordController setup()"); + if (mMediaRecorder == null) { + mMediaRecorder = new MediaRecorder(); + } + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); + mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + mFileName = Environment.getExternalStorageDirectory().toString() + "/music/" + + mFileNameBase + "_" + ++mFileCount + ".amr"; + mLastRecordedFile = mFileName; + Log.e(TAG, "recording to file: "+mLastRecordedFile); + mMediaRecorder.setOutputFile(mFileName); + try { + mMediaRecorder.prepare(); + } + catch (Exception e) { + Log.e(TAG, "Could not prepare MediaRecorder: " + e.toString()); + mMediaRecorder.release(); + mMediaRecorder = null; + } + } + + @Override + public void stop() { + if (mMediaRecorder != null) { + mMediaRecorder.stop(); + mMediaRecorder.release(); + mMediaRecorder = null; + } + updatePlayPauseButton(); + } + + @Override + public boolean isPlaying() { + if (mState == 1) { + return true; + } else { + return false; + } + } + } + + class TtsInitListener implements TextToSpeech.OnInitListener { + @Override + public void onInit(int status) { + // status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR. + Log.e(TAG, "onInit for tts"); + if (status != TextToSpeech.SUCCESS) { + // Initialization failed. + Log.e(TAG, "Could not initialize TextToSpeech."); + return; + } + + if (mTts == null) { + Log.e(TAG, "null tts"); + return; + } + + int result = mTts.setLanguage(Locale.US); + if (result == TextToSpeech.LANG_MISSING_DATA || + result == TextToSpeech.LANG_NOT_SUPPORTED) { + // Lanuage data is missing or the language is not supported. + Log.e(TAG, "Language is not available."); + return; + } + mTts.setOnUtteranceCompletedListener(new MyUtteranceCompletedListener(UTTERANCE)); + mTtsInited = true; + } + } + + class MyUtteranceCompletedListener implements OnUtteranceCompletedListener { + private final String mExpectedUtterance; + + public MyUtteranceCompletedListener(String expectedUtteranceId) { + mExpectedUtterance = expectedUtteranceId; + } + + @Override + public void onUtteranceCompleted(String utteranceId) { + Log.e(TAG, "onUtteranceCompleted " + utteranceId); + if (mTtsToFile) { + if (mSampleFile != null && mSampleFile.exists()) { + MediaPlayer mediaPlayer = new MediaPlayer(); + try { + mediaPlayer.setDataSource(mSampleFile.getPath()); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_BLUETOOTH_SCO); + mediaPlayer.prepare(); + } catch (Exception ex) { + Log.e(TAG, "mMediaPlayercreate failed:", ex); + mediaPlayer.release(); + mediaPlayer = null; + } + + if (mediaPlayer != null) { + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + mp.release(); + if (mSampleFile != null && mSampleFile.exists()) { + mSampleFile.delete(); + mSampleFile = null; + } + mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, + mOriginalVoiceVolume, 0); +// Debug.stopMethodTracing(); + } + }); + mediaPlayer.start(); + } + } else { + Log.e(TAG, "synthesizeToFile did not create file"); + } + } else { + mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, + mOriginalVoiceVolume, 0); +// Debug.stopMethodTracing(); + } + + Log.e(TAG, "end speak, volume: "+mOriginalVoiceVolume); + } + } + + + private View.OnKeyListener mSpeakKeyListener + = new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_CENTER: + case KeyEvent.KEYCODE_ENTER: + if (!mTtsInited) { + Log.e(TAG, "Tts not inited "); + return false; + } + mOriginalVoiceVolume = mAudioManager.getStreamVolume( + AudioManager.STREAM_BLUETOOTH_SCO); + Log.e(TAG, "start speak, volume: "+mOriginalVoiceVolume); + mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, + mOriginalVoiceVolume/2, 0); + + // we now have SCO connection and TTS, so we can start. + mHandler.post(new Runnable() { + @Override + public void run() { +// Debug.startMethodTracing("tts"); + + if (mTtsToFile) { + if (mSampleFile != null && mSampleFile.exists()) { + mSampleFile.delete(); + mSampleFile = null; + } + mSampleFile = new File(Environment.getExternalStorageDirectory(), "mytts.wav"); + mTts.synthesizeToFile(mSpeakText.getText().toString(), mTtsParams, mSampleFile.getPath()); + } else { + mTts.speak(mSpeakText.getText().toString(), + TextToSpeech.QUEUE_FLUSH, + mTtsParams); + } + } + }); + return true; + } + } + return false; + } + }; + + private static final String[] mModeStrings = { + "NORMAL", "RINGTONE", "IN_CALL", "IN_COMMUNICATION" + }; + + private Spinner.OnItemSelectedListener mModeChanged + = new Spinner.OnItemSelectedListener() { + @Override + public void onItemSelected(android.widget.AdapterView av, View v, + int position, long id) { + if (mCurrentMode != position) { + mCurrentMode = position; + mAudioManager.setMode(mCurrentMode); + } + } + + @Override + public void onNothingSelected(android.widget.AdapterView av) { + } + }; + + private BluetoothProfile.ServiceListener mBluetoothProfileServiceListener = + new BluetoothProfile.ServiceListener() { + @Override + public void onServiceConnected(int profile, BluetoothProfile proxy) { + mBluetoothHeadset = (BluetoothHeadset) proxy; + List<BluetoothDevice> deviceList = mBluetoothHeadset.getConnectedDevices(); + if (deviceList.size() > 0) { + mBluetoothHeadsetDevice = deviceList.get(0); + } else { + mBluetoothHeadsetDevice = null; + } + } + @Override + public void onServiceDisconnected(int profile) { + if (mBluetoothHeadset != null) { + List<BluetoothDevice> devices = mBluetoothHeadset.getConnectedDevices(); + if (devices.size() == 0) { + mBluetoothHeadsetDevice = null; + } + mBluetoothHeadset = null; + } + } + }; + + private int mChangedState = -1; + private int mUpdatedState = -1; + private int mUpdatedPrevState = -1; + + private class ScoBroadcastReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED)) { + int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); + mVdStateTxt.setText(Integer.toString(state)); + Log.e(TAG, "BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED: "+state); + } else if (action.equals(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)) { + mChangedState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); + Log.e(TAG, "ACTION_SCO_AUDIO_STATE_CHANGED: "+mChangedState); + mScoStateTxt.setText("changed: "+Integer.toString(mChangedState)+ + " updated: "+Integer.toString(mUpdatedState)+ + " prev updated: "+Integer.toString(mUpdatedPrevState)); + } else if (action.equals(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) { + mUpdatedState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); + mUpdatedPrevState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE, -1); + Log.e(TAG, "ACTION_SCO_AUDIO_STATE_UPDATED, state: "+mUpdatedState+" prev state: "+mUpdatedPrevState); + mScoStateTxt.setText("changed: "+Integer.toString(mChangedState)+ + " updated: "+Integer.toString(mUpdatedState)+ + " prev updated: "+Integer.toString(mUpdatedPrevState)); + if (mForceScoOn && mUpdatedState == AudioManager.SCO_AUDIO_STATE_DISCONNECTED) { + mForceScoOn = false; + mScoButton.setChecked(mForceScoOn); + mAudioManager.stopBluetoothSco(); + } + } + } + } + +} diff --git a/native/android/native_window.cpp b/native/android/native_window.cpp index 36fc9bf..d266fc6 100644 --- a/native/android/native_window.cpp +++ b/native/android/native_window.cpp @@ -20,20 +20,12 @@ #include <android/native_window_jni.h> #include <surfaceflinger/Surface.h> #include <android_runtime/android_view_Surface.h> -#include <android_runtime/android_graphics_ParcelSurfaceTexture.h> #include <android_runtime/android_graphics_SurfaceTexture.h> using namespace android; ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface) { - sp<ANativeWindow> win; - if (android_Surface_isInstanceOf(env, surface)) { - win = android_Surface_getNativeWindow(env, surface); - } else if (android_SurfaceTexture_isInstanceOf(env, surface)) { - win = android_SurfaceTexture_getNativeWindow(env, surface); - } else if (android_ParcelSurfaceTexture_isInstanceOf(env, surface)) { - win = android_ParcelSurfaceTexture_getNativeWindow(env, surface); - } + sp<ANativeWindow> win = android_Surface_getNativeWindow(env, surface); if (win != NULL) { win->incStrong((void*)ANativeWindow_acquire); } diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java index eae6112..8c57595 100644 --- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java @@ -20,6 +20,7 @@ import com.android.internal.app.IMediaContainerService; import com.android.internal.content.NativeLibraryHelper; import com.android.internal.content.PackageHelper; +import android.app.IntentService; import android.content.Intent; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; @@ -30,25 +31,24 @@ import android.content.res.ObbInfo; import android.content.res.ObbScanner; import android.net.Uri; import android.os.Environment; +import android.os.FileUtils; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StatFs; -import android.app.IntentService; +import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Slog; +import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; - -import android.os.FileUtils; -import android.provider.Settings; +import java.io.OutputStream; /* * This service copies a downloaded apk to a file passed in as @@ -88,19 +88,32 @@ public class DefaultContainerService extends IntentService { /* * Copy specified resource to output stream - * @param packageURI the uri of resource to be copied. Should be a - * file uri + * @param packageURI the uri of resource to be copied. Should be a file + * uri * @param outStream Remote file descriptor to be used for copying - * @return Returns true if copy succeded or false otherwise. + * @return returns status code according to those in {@link + * PackageManager} */ - public boolean copyResource(final Uri packageURI, - ParcelFileDescriptor outStream) { - if (packageURI == null || outStream == null) { - return false; + public int copyResource(final Uri packageURI, ParcelFileDescriptor outStream) { + if (packageURI == null || outStream == null) { + return PackageManager.INSTALL_FAILED_INVALID_URI; + } + + ParcelFileDescriptor.AutoCloseOutputStream autoOut + = new ParcelFileDescriptor.AutoCloseOutputStream(outStream); + + try { + copyFile(packageURI, autoOut); + return PackageManager.INSTALL_SUCCEEDED; + } catch (FileNotFoundException e) { + Slog.e(TAG, "Could not copy URI " + packageURI.toString() + " FNF: " + + e.getMessage()); + return PackageManager.INSTALL_FAILED_INVALID_URI; + } catch (IOException e) { + Slog.e(TAG, "Could not copy URI " + packageURI.toString() + " IO: " + + e.getMessage()); + return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE; } - ParcelFileDescriptor.AutoCloseOutputStream - autoOut = new ParcelFileDescriptor.AutoCloseOutputStream(outStream); - return copyFile(packageURI, autoOut); } /* @@ -315,76 +328,63 @@ public class DefaultContainerService extends IntentService { return newCachePath; } - private static boolean copyToFile(InputStream inputStream, FileOutputStream out) { - try { - byte[] buffer = new byte[4096]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) >= 0) { - out.write(buffer, 0, bytesRead); - } - return true; - } catch (IOException e) { - Slog.i(TAG, "Exception : " + e + " when copying file"); - return false; + private static void copyToFile(InputStream inputStream, OutputStream out) throws IOException { + byte[] buffer = new byte[16384]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) >= 0) { + out.write(buffer, 0, bytesRead); } } - private static boolean copyToFile(File srcFile, FileOutputStream out) { - InputStream inputStream = null; + private static void copyToFile(File srcFile, OutputStream out) + throws FileNotFoundException, IOException { + InputStream inputStream = new BufferedInputStream(new FileInputStream(srcFile)); try { - inputStream = new FileInputStream(srcFile); - return copyToFile(inputStream, out); - } catch (IOException e) { - return false; + copyToFile(inputStream, out); } finally { - try { if (inputStream != null) inputStream.close(); } catch (IOException e) {} + try { inputStream.close(); } catch (IOException e) {} } } - private boolean copyFile(Uri pPackageURI, FileOutputStream outStream) { + private void copyFile(Uri pPackageURI, OutputStream outStream) throws FileNotFoundException, + IOException { String scheme = pPackageURI.getScheme(); if (scheme == null || scheme.equals("file")) { final File srcPackageFile = new File(pPackageURI.getPath()); // We copy the source package file to a temp file and then rename it to the // destination file in order to eliminate a window where the package directory // scanner notices the new package file but it's not completely copied yet. - if (!copyToFile(srcPackageFile, outStream)) { - Slog.e(TAG, "Couldn't copy file: " + srcPackageFile); - return false; - } + copyToFile(srcPackageFile, outStream); } else if (scheme.equals("content")) { ParcelFileDescriptor fd = null; try { fd = getContentResolver().openFileDescriptor(pPackageURI, "r"); } catch (FileNotFoundException e) { - Slog.e(TAG, - "Couldn't open file descriptor from download service. Failed with exception " - + e); - return false; + Slog.e(TAG, "Couldn't open file descriptor from download service. " + + "Failed with exception " + e); + throw e; } + if (fd == null) { - Slog.e(TAG, "Couldn't open file descriptor from download service (null)."); - return false; + Slog.e(TAG, "Provider returned no file descriptor for " + pPackageURI.toString()); + throw new FileNotFoundException("provider returned no file descriptor"); } else { if (localLOGV) { Slog.i(TAG, "Opened file descriptor from download service."); } - ParcelFileDescriptor.AutoCloseInputStream - dlStream = new ParcelFileDescriptor.AutoCloseInputStream(fd); + ParcelFileDescriptor.AutoCloseInputStream dlStream + = new ParcelFileDescriptor.AutoCloseInputStream(fd); + // We copy the source package file to a temp file and then rename it to the // destination file in order to eliminate a window where the package directory // scanner notices the new package file but it's not completely - // cop - if (!copyToFile(dlStream, outStream)) { - Slog.e(TAG, "Couldn't copy " + pPackageURI + " to temp file."); - return false; - } + // copied + copyToFile(dlStream, outStream); } } else { Slog.e(TAG, "Package URI is not 'file:' or 'content:' - " + pPackageURI); - return false; + throw new FileNotFoundException("Package URI is not 'file:' or 'content:'"); } - return true; } private static final int PREFER_INTERNAL = 1; diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 12dbdf9..3920257 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -21,8 +21,8 @@ <integer name="def_screen_off_timeout">60000</integer> <bool name="def_airplane_mode_on">false</bool> <!-- Comma-separated list of bluetooth, wifi, and cell. --> - <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi</string> - <string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi</string> + <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc</string> + <string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi,nfc</string> <bool name="def_auto_time">true</bool> <bool name="def_auto_time_zone">true</bool> <bool name="def_accelerometer_rotation">true</bool> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index f4890e0..5495d08 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -63,7 +63,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion' // is properly propagated through your change. Not doing so will result in a loss of user // settings. - private static final int DATABASE_VERSION = 69; + private static final int DATABASE_VERSION = 70; private Context mContext; @@ -917,6 +917,25 @@ public class DatabaseHelper extends SQLiteOpenHelper { upgradeVersion = 69; } + if (upgradeVersion == 69) { + // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS + String airplaneRadios = mContext.getResources().getString( + R.string.def_airplane_mode_radios); + String toggleableRadios = mContext.getResources().getString( + R.string.airplane_mode_toggleable_radios); + db.beginTransaction(); + try { + db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " + + "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'"); + db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " + + "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'"); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + upgradeVersion = 70; + } + // *** Remember to update DATABASE_VERSION above! if (upgradeVersion != currentVersion) { diff --git a/packages/SystemUI/res/drawable-hdpi/notify_panel_bg.9.png b/packages/SystemUI/res/drawable-hdpi/notify_panel_bg.9.png Binary files differdeleted file mode 100644 index d5503f7..0000000 --- a/packages/SystemUI/res/drawable-hdpi/notify_panel_bg.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/notify_panel_bg_protect.png b/packages/SystemUI/res/drawable-hdpi/notify_panel_bg_protect.png Binary files differdeleted file mode 100644 index a8f2236..0000000 --- a/packages/SystemUI/res/drawable-hdpi/notify_panel_bg_protect.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png Binary files differindex 4cabd9e..33e248b 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png Binary files differindex 3d1e89d..64f8027 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png Binary files differindex 8a77137..60568e3 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png Binary files differindex dbfcfda..4e2a38e 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png Binary files differindex cb7a692..4ee2551 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png Binary files differindex 8d1b95c..b28b4e1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png Binary files differindex 4d2b2f5..73cdf33 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png Binary files differindex aafc621..e105a10 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png Binary files differindex b6c7450..46d5967 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png Binary files differindex 67eaebd..2cd22c1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png Binary files differindex 14450ce..a4d2544 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png Binary files differindex 0578085..aea3a31 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png Binary files differindex 12a7ca8..8b141ae 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png Binary files differindex 8ac9023..23f6fb1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png Binary files differindex 4debc5f..4f27e0a 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png Binary files differindex 92069c8..89aa4a6 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png Binary files differindex 290e34b..e6c9e80 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png Binary files differindex 2538ab8..901839a 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png Binary files differindex cfc6344..e427534 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png Binary files differindex 02757b1..bf708be 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png Binary files differindex 4bfb8f2..367d954 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png Binary files differindex ff4e040..5912575 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png Binary files differindex 71050c8..b112620 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png Binary files differindex aa25d50..99c9284 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png Binary files differindex 5641b7a..9ab3454 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png Binary files differindex a6b0762..e32f584 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png Binary files differindex 6af7f65..354f5ab 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 29d8f7b..ab4dbff 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png Binary files differindex e80265c..838085b 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png Binary files differindex c7ff314..1d68907 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png Binary files differindex 2396c01..7cf63ed 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png Binary files differindex 5256041..2c5a5bf 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 5d728e7..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 4b0472a..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index b216c2a..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index d184206..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index fd2d6c1..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 80ceea0..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index cdfa661..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index c8bd44f..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index ecdd61f..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index c7c6a92..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 795e610..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 3b012cd..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index ca435ce..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 63823be..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index b16455f..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index db44420..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index d99b977..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 72e5d5c..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png Binary files differindex 3405e1c..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png Binary files differindex 940be0f..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png Binary files differindex 199e021..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png Binary files differindex 50cbbba..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png Binary files differindex c571496..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png Binary files differindex 1920d0d..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inadnout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inadnout_e.png Binary files differdeleted file mode 100644 index 466c84c..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inadnout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png Binary files differindex 2226bab..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png Binary files differindex 200b9a9..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png Binary files differindex 5a592e3..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png Binary files differindex db40781..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png Binary files differindex 6bf4841..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png Binary files differindex f323073..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png Binary files differindex 2650479..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png Binary files differindex d00f2af..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png Binary files differindex a60e4e7..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png Binary files differindex 00d9149..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png Binary files differindex cddd68c..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png Binary files differindex e43e1a9..b2e725c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png Binary files differindex 081233b..faa4d71 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0.png Binary files differdeleted file mode 100644 index b30b240..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully.png Binary files differdeleted file mode 100644 index b30b240..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1.png Binary files differdeleted file mode 100644 index d018f95..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully.png Binary files differdeleted file mode 100644 index c4f34cb..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2.png Binary files differdeleted file mode 100644 index abdb7a6..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully.png Binary files differdeleted file mode 100644 index f4806cc..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3.png Binary files differdeleted file mode 100644 index 67aeef6..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully.png Binary files differdeleted file mode 100644 index fea1863..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4.png Binary files differdeleted file mode 100644 index 1bd644c..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully.png Binary files differdeleted file mode 100644 index 46881b2..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png Binary files differindex 3dfb469..f826905 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png Binary files differindex 2506e58..32d6320 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png Binary files differindex 2aeb84a..e007be4 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png Binary files differindex 2aeb84a..fd76878 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png Binary files differindex 4811a30..ded320a 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png Binary files differindex 3c25920..5f92916 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x.png Binary files differdeleted file mode 100644 index cac47a7..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png Binary files differindex 6d115b9..47bbed2 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png Binary files differindex 43803e4..9afd5f6 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png Binary files differindex bff9fac..a81806d 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png Binary files differindex 8316842..366ee35 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g.png Binary files differdeleted file mode 100644 index fabcd91..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png Binary files differindex 6f2402d..89d12c7 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png Binary files differindex 0968cdd..c1f017f 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g.png Binary files differdeleted file mode 100644 index c5301a8..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_edge.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_edge.png Binary files differdeleted file mode 100644 index 36b7327..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_edge.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png Binary files differindex a21c7ce..35f6a40 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_gprs.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_gprs.png Binary files differdeleted file mode 100644 index 931997e..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_gprs.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hsdpa.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hsdpa.png Binary files differdeleted file mode 100644 index 54c0a07..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hsdpa.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png Binary files differindex afec31d..c7d5eb2 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png Binary files differindex fa8ab31..54a98cc 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index 2aeb84a..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png Binary files differindex 0ec7307..7fc630d 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_roam.png Binary files differdeleted file mode 100644 index 4d29193..0000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png Binary files differindex 8349da5..90e88d1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png Binary files differindex f06e5d1..8e736b1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png Binary files differindex c390437..624c756 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png Binary files differindex 20cf07f..83e3aa1 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png Binary files differindex f11b58e..a2e2428 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png Binary files differindex 15b0992..28c8414 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png Binary files differindex 8bea46d..5d75227 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png Binary files differindex 6d3151d..a29398a 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png Binary files differindex ad1245e..27bae24 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png Binary files differindex cb67d57..bfa13d2 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png Binary files differindex 117ac31..0712062 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png Binary files differindex df34c27..1916819 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png Binary files differnew file mode 100644 index 0000000..37cad22 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_hr.9.png b/packages/SystemUI/res/drawable-hdpi/status_bar_hr.9.png Binary files differnew file mode 100644 index 0000000..f5e6031 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/status_bar_hr.9.png diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index 0809456..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index 0e8ec07..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index f9d2737..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index f5b2c9a..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index eb1b18a..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index 1abe28a..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index e896cbb..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index b44123c..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index d0cc579..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index 903b03e..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 9578a21..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index c5e5cda..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index 0730e3e..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index eafed59..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index ea66c75..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index a885aab..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index 32f08c8..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index 0111893..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index a9c547e..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index 6801953..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index 3ae2537..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 8a9f2e2..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index 8c5c482..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index 36c2cf8..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index aee1eed..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 30884a9..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index ce91aa9..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index 82a4f61..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index 55b6b38..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index 519154d..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index a39e5e0..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index ffe4546..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index a78cd14..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index a43ba99..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index cfeb769..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index b39d233..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 5e0617f..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index da2926f..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index 41fd66c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index 745717b..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 1deb1f2..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index 2dce223..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index e13e73f..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index 6c9193b..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index e9bb9c2..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-large-xhdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/notify_panel_bg.9.png b/packages/SystemUI/res/drawable-mdpi/notify_panel_bg.9.png Binary files differdeleted file mode 100644 index 8725e58..0000000 --- a/packages/SystemUI/res/drawable-mdpi/notify_panel_bg.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/notify_panel_bg_protect.png b/packages/SystemUI/res/drawable-mdpi/notify_panel_bg_protect.png Binary files differdeleted file mode 100644 index f7225ed..0000000 --- a/packages/SystemUI/res/drawable-mdpi/notify_panel_bg_protect.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png Binary files differindex 95a797d..bda766d 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png Binary files differindex 6184516..058ef2a 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png Binary files differindex cfbdb09..a78263c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png Binary files differindex 218a0a6..11ecb6c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png Binary files differindex 6072855..d0f1985 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png Binary files differindex fdfbd33..1ddd12a 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png Binary files differindex 99f9120..3716a84 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png Binary files differindex 7903132..e503e18 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png Binary files differindex ec514af..a672990 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png Binary files differindex 3ef6ce4..5a6054a 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png Binary files differindex cd748ef..bd6e438 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png Binary files differindex 5cbc673..1e1e095 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png Binary files differindex 2005d00..222edbd 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png Binary files differindex e94765e..7016993 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png Binary files differindex 31b1b25..204e6c9 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png Binary files differindex f06e81f..ce20d6d 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png Binary files differindex b544180..d4dca3e 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png Binary files differindex 44b4272..5469a4c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png Binary files differindex 83edad5..40c7c28 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png Binary files differindex 24fd220..1e3d49d 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png Binary files differindex a409313..1b3a98b 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png Binary files differindex d4f75cb..2e7b19c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png Binary files differindex 115ea1a..2f3f519 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png Binary files differindex 13b1c23..4746ef4 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png Binary files differindex 400869e..7edc2b9 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png Binary files differindex 6234c9a..ae8c769 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png Binary files differindex cde53f5..675be67 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 9e1f8dc..b665305 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png Binary files differindex 13d9ae3..1900f3c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png Binary files differindex e53ddac..3a3d40c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png Binary files differindex 3146ebf..908fa11 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png Binary files differindex 432bb20..d702fae 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 50756bc..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index f8c4a65..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index a278ed9..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 14b2a21..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 8072951..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index da4e7bb..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 68330a9..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index c65b161..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index a26a05e..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index afae625..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 1f88c31..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index d2a5340..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 9f0941a..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index c568da6..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index c22ae56..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 345f351..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 4f931e0..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 2897ddb..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png Binary files differindex 0a58322..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png Binary files differindex 3a9af15..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png Binary files differindex 260634a..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png Binary files differindex 2521f00..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png Binary files differindex 441af6e..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png Binary files differindex 65a74aa..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inadnout_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inadnout_e.png Binary files differdeleted file mode 100644 index addfcf2..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inadnout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png Binary files differindex b87ce50..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png Binary files differindex 9b8e776..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png Binary files differindex 6a3c498..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png Binary files differindex 07c9218..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png Binary files differindex c612b94..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png Binary files differindex 7c66e93..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png Binary files differindex c76490a..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png Binary files differindex a2fff6f..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png Binary files differindex 1259050..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png Binary files differindex bd08b97..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png Binary files differindex 0c3c0ed..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png Binary files differindex 40e6f7e..eecdefb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png Binary files differindex 6ac52f9..d904048 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0.png Binary files differdeleted file mode 100644 index f8c4b81..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully.png Binary files differdeleted file mode 100644 index f8c4b81..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1.png Binary files differdeleted file mode 100644 index d5a768c..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully.png Binary files differdeleted file mode 100644 index a697fa6..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2.png Binary files differdeleted file mode 100644 index 018c951..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully.png Binary files differdeleted file mode 100644 index 95b5d3d..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3.png Binary files differdeleted file mode 100644 index 922790e..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully.png Binary files differdeleted file mode 100644 index df74fc3..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4.png Binary files differdeleted file mode 100644 index 2a527c9..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully.png Binary files differdeleted file mode 100644 index bf88418..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png Binary files differindex 8e04b25..ddec9a9 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png Binary files differindex 44bd99f..9ca5533 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png Binary files differindex d52cb1a..c108bbb 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png Binary files differindex d52cb1a..b35e15a 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png Binary files differindex 4b805c4..52d9af1 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png Binary files differindex ef8ac73..ffbb3bf 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1x.png Binary files differdeleted file mode 100644 index 632127a..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png Binary files differindex 0b48667..1aa2ad11 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png Binary files differindex b0182a0..7387d37 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png Binary files differindex db75f74..d440b65 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png Binary files differindex 9e22573..53adbe1 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3g.png Binary files differdeleted file mode 100644 index a0c3bc7..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png Binary files differindex 504990e..0d0fc8c 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png Binary files differindex d35736e..56738e1 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4g.png Binary files differdeleted file mode 100644 index 3416151..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_edge.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_edge.png Binary files differdeleted file mode 100644 index 435d25d..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_edge.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png Binary files differindex 0e1964c..01b2709 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_gprs.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_gprs.png Binary files differdeleted file mode 100644 index 68f4530..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_gprs.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_hsdpa.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_hsdpa.png Binary files differdeleted file mode 100644 index 584e703..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_hsdpa.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png Binary files differindex b114fea..48e123e 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png Binary files differindex de3f56f..fba5678 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index d52cb1a..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png Binary files differindex 7f7074e..30d2c24 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_roam.png Binary files differdeleted file mode 100644 index 2b4af59..0000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png Binary files differindex ca3d5bf..06a9fc4 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png Binary files differindex a17e1d7..3ab3a99 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png Binary files differindex b5ab8b3..a8934e6 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png Binary files differindex 8e9c451..7ec7805b 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png Binary files differindex 25e9394..df24b68 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png Binary files differindex 6de73be..55fc427 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png Binary files differindex 02d4b3f..ca546f5 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png Binary files differindex 108c054..3343808 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png Binary files differindex a9d22d6..5eecfd9 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png Binary files differindex 0ed3c8f..84fc68d 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png Binary files differindex dc36e0e..4cdece1 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png Binary files differindex f3fd89a..894fd44 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png Binary files differnew file mode 100644 index 0000000..83d106d --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_hr.9.png b/packages/SystemUI/res/drawable-mdpi/status_bar_hr.9.png Binary files differnew file mode 100644 index 0000000..f5e6031 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_hr.9.png diff --git a/packages/SystemUI/res/drawable-nodpi/notify_panel_bg.png b/packages/SystemUI/res/drawable-nodpi/notify_panel_bg.png Binary files differdeleted file mode 100644 index 1ea924f..0000000 --- a/packages/SystemUI/res/drawable-nodpi/notify_panel_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png Binary files differnew file mode 100644 index 0000000..4adff32 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png Binary files differnew file mode 100644 index 0000000..aa6b550 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png Binary files differnew file mode 100644 index 0000000..e0e8f14 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png Binary files differnew file mode 100644 index 0000000..0e7241f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png Binary files differnew file mode 100644 index 0000000..d4dc522 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png Binary files differnew file mode 100644 index 0000000..62e48cc --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png Binary files differnew file mode 100644 index 0000000..1026a16 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png Binary files differnew file mode 100644 index 0000000..38a8091 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png Binary files differnew file mode 100644 index 0000000..b1ce7b1 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png Binary files differnew file mode 100644 index 0000000..39ec52d --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png Binary files differnew file mode 100644 index 0000000..1eef45d --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png Binary files differnew file mode 100644 index 0000000..ed936d6 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png Binary files differnew file mode 100644 index 0000000..6d0c742 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png Binary files differnew file mode 100644 index 0000000..97a33db --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png Binary files differnew file mode 100644 index 0000000..967cac0 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png Binary files differnew file mode 100644 index 0000000..a53de23 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png Binary files differnew file mode 100644 index 0000000..004aee3 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png Binary files differnew file mode 100644 index 0000000..7001875 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png Binary files differnew file mode 100644 index 0000000..05be4ba --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png Binary files differindex 1629575..bd402af 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png Binary files differindex e87bcec..16989f9 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png Binary files differindex fd44002..6cd6d4c 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png Binary files differindex e455ad6..1b418f8 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png Binary files differindex 6613585..8081290 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png Binary files differindex 7502a54..438c7d1 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 5f88279..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index 8c04bd6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 456d0b6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png Binary files differindex 1309176..3861bfe 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png Binary files differindex 810714e..6435b67 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 72176ba..bb19dd3 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png Binary files differindex 82a2bf0..1351a72 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png Binary files differindex 1e6c604..fbc645c 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png Binary files differindex 13aee06..584d0ba 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png Binary files differindex 76c48a8..513890b 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 456d0b6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 456d0b6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 39dfcd3..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index e78d872..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 456d0b6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index ad73252..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index d02de5b..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index cb13b91..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..1406399 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..3106dc6 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..41898c5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..7dc95c6 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..b81ff91 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..b5213ee --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..d0f3e05 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..b0d9e8b --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..4ced319 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..98a49ad --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..f1bd212 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..6fd5ee6 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..b3d7009 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..ead3e0c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png Binary files differnew file mode 100644 index 0000000..bab05a5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png Binary files differnew file mode 100644 index 0000000..dcab427 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png Binary files differnew file mode 100644 index 0000000..d763537 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png Binary files differnew file mode 100644 index 0000000..a79f160 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png Binary files differnew file mode 100644 index 0000000..0d18c9a --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..9cc2883 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png Binary files differnew file mode 100644 index 0000000..f063167 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..57b0b20 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png Binary files differnew file mode 100644 index 0000000..b5ba6ce --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..ba9b6b3 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png Binary files differnew file mode 100644 index 0000000..afd259c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..6c3851c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png Binary files differnew file mode 100644 index 0000000..d1a1d4c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png Binary files differnew file mode 100644 index 0000000..270a4b6 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png Binary files differnew file mode 100644 index 0000000..02290b7 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png Binary files differnew file mode 100644 index 0000000..cf4540a --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png Binary files differnew file mode 100644 index 0000000..0e70a88 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png Binary files differnew file mode 100644 index 0000000..4d0f2e4 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png Binary files differnew file mode 100644 index 0000000..8bb5b80 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png Binary files differnew file mode 100644 index 0000000..15ed5f2 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png Binary files differnew file mode 100644 index 0000000..31d84fb --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png Binary files differnew file mode 100644 index 0000000..033d413 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png Binary files differnew file mode 100644 index 0000000..6599c56 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png Binary files differnew file mode 100644 index 0000000..62ecbf8 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png Binary files differnew file mode 100644 index 0000000..f819830 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png Binary files differnew file mode 100644 index 0000000..0d2c11d --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png Binary files differnew file mode 100644 index 0000000..e96cb74 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png Binary files differnew file mode 100644 index 0000000..783ae63 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png Binary files differnew file mode 100644 index 0000000..d71738d --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png Binary files differnew file mode 100644 index 0000000..4b800f1 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png Binary files differnew file mode 100644 index 0000000..da0b81e --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png Binary files differindex 73cdabe..76323a3 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png Binary files differindex b5a39cc..6413129 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png Binary files differindex 6de880c..800feb5 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png Binary files differindex 2dbbfc0..60f34f8 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png Binary files differindex a45f011..b5a03c5 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png Binary files differindex 517a6bb..1e642ba 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 821d00e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index 4cdce84..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 5a2662a..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png Binary files differindex 5226c1c..ee2e99e 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png Binary files differindex a845648..0432a00 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 1d15587..2b845c6 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png Binary files differindex 52d5736..e6adbcd 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png Binary files differindex 79a2a05..7d1ac1e 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png Binary files differindex b032594..28dcb63 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png Binary files differindex c4abcc9..bf92415 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 5a2662a..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 5a2662a..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index f50c987..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 1fff17e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 5a2662a..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index e27439e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 8b53f0f..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index a23ec6e..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..39be951 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..a321f99 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..3b628a8 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..1642486 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..a7b200c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..f295536 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..6c87397 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..a97e3aa --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..e161245 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..5296baf --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..c1d4417 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..d106a54 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..3f385c5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..d5c47af --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png Binary files differnew file mode 100644 index 0000000..0ea6312 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png Binary files differnew file mode 100644 index 0000000..139cc4f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png Binary files differnew file mode 100644 index 0000000..011bd43 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png Binary files differnew file mode 100644 index 0000000..d7da486 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png Binary files differnew file mode 100644 index 0000000..276cde5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..9a7496c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png Binary files differnew file mode 100644 index 0000000..c3f6f9c --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..f603753 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png Binary files differnew file mode 100644 index 0000000..3a4a8fb --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..21fb6c5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png Binary files differnew file mode 100644 index 0000000..8c6ab93 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..9848f65 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png Binary files differnew file mode 100644 index 0000000..db5cf1e --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png Binary files differnew file mode 100644 index 0000000..aa0a675 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png Binary files differnew file mode 100644 index 0000000..6f9c4df --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png Binary files differnew file mode 100644 index 0000000..0693213 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png Binary files differnew file mode 100644 index 0000000..b2d90f8 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png Binary files differnew file mode 100644 index 0000000..a21b1ce --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png Binary files differnew file mode 100644 index 0000000..2f6d19f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png Binary files differnew file mode 100644 index 0000000..8950439 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png Binary files differnew file mode 100644 index 0000000..255ae10 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png Binary files differnew file mode 100644 index 0000000..afb58eb --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png Binary files differnew file mode 100644 index 0000000..9e06eb8 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png Binary files differnew file mode 100644 index 0000000..ebf3d18 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png Binary files differnew file mode 100644 index 0000000..528e6ff --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png Binary files differnew file mode 100644 index 0000000..46de2ac --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png Binary files differnew file mode 100644 index 0000000..89b5f48 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png Binary files differnew file mode 100644 index 0000000..b80e5ae --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png Binary files differnew file mode 100644 index 0000000..4394f92 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png Binary files differnew file mode 100644 index 0000000..ad51789 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png Binary files differnew file mode 100644 index 0000000..1844208 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png Binary files differnew file mode 100644 index 0000000..bf45cff --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png Binary files differnew file mode 100644 index 0000000..3102e07 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png Binary files differnew file mode 100644 index 0000000..85bc70f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png Binary files differnew file mode 100644 index 0000000..afc7295 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png Binary files differnew file mode 100644 index 0000000..9efae5f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png Binary files differnew file mode 100644 index 0000000..3be3fa4 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_roam.png Binary files differnew file mode 100644 index 0000000..0edc9b5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png Binary files differnew file mode 100644 index 0000000..b8d7d80 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png Binary files differnew file mode 100644 index 0000000..bad3f5f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png Binary files differnew file mode 100644 index 0000000..e2459dc --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png Binary files differnew file mode 100644 index 0000000..4dd84d9 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png Binary files differnew file mode 100644 index 0000000..34e018f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png Binary files differnew file mode 100644 index 0000000..a84771b --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..a343c50 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..8a79917 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..643a122 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..83832eb --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..b504121 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..72d8f42 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..8945f42 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..1d4b788 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..889e48f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..4810d47 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..b6121eb --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..dc0f361 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..f0a98eb0 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..10df40e --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png Binary files differnew file mode 100644 index 0000000..22410f1 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png Binary files differnew file mode 100644 index 0000000..f7fe0be --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png Binary files differnew file mode 100644 index 0000000..2555d65 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png Binary files differnew file mode 100644 index 0000000..317e89f --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png Binary files differnew file mode 100644 index 0000000..fb1d235 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..08b2ec7 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png Binary files differnew file mode 100644 index 0000000..a7fe3f3 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..3eb6fc5 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png Binary files differnew file mode 100644 index 0000000..ca10b4e --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..a88aa54 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png Binary files differnew file mode 100644 index 0000000..0174b98 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..fa114d4 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png Binary files differindex bcea4f9..80bd4d2 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png Binary files differindex d915a9d..b16c738 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png Binary files differindex 6cf2053..eabe427 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png Binary files differindex d4a2068..cc2de13 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png Binary files differindex 4be3873..0b24ead 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png Binary files differindex 31e4813..3d122bb 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png Binary files differindex 032fa29..096c724 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png Binary files differindex 52ad541..20482b2 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png Binary files differindex d7248b4..276e0bf 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png Binary files differindex 5d1a99c..d838103 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png Binary files differindex b342507..896a58a 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png Binary files differindex b618f75..986093c 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png Binary files differindex 11946cd..a80b024 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png Binary files differindex e227309..7a19040 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png Binary files differindex 4b0838c..ee09d0b 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png Binary files differindex ecd4396e..09b9c92 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png Binary files differindex 8c5465a..ffac512 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png Binary files differindex 9e7992a..791b70a 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png Binary files differindex ccf5b0e..637367b 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png Binary files differindex 04918c8..14f8176 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png Binary files differindex 34da296..4169465 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png Binary files differindex f6cb0ce..713f09b 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png Binary files differindex eb4927a..8c37831 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png Binary files differindex 14087e4..8e8770a 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png Binary files differindex 87b67b3..4db2986 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png Binary files differindex 33fa2ae..0f35728 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png Binary files differindex a84382f..c60a559 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png Binary files differindex b59a72e..d262f5f 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png Binary files differindex c7927d9..24ebdcd 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png Binary files differindex eddb4eb..88792d9 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png Binary files differindex 2759a8e..8be35c0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png Binary files differindex f129965..62f288c 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 1abe164..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 06dc700..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index d1ae45d..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 0c93241..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 3be20a2..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 502382e..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index b423454..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index b084871..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 8cbaff3..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 0e53656..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 55c66b4..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 103927b..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 2a0c21a..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 23dfd7a..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 1258359..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 32c1432..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index b56be83..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index cd37477..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png Binary files differindex 347b219..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png Binary files differindex ef5b653..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png Binary files differindex cd96a4a..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png Binary files differindex 02461a9..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png Binary files differindex 033267f..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png Binary files differindex 73ae175..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inadnout_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inadnout_e.png Binary files differdeleted file mode 100644 index 1355da1..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inadnout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png Binary files differindex ceb316c..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png Binary files differindex ff4a0b3..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png Binary files differindex b2ebf40..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png Binary files differindex 7f833ad..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png Binary files differindex b47e4c3..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png Binary files differindex 4f88492..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png Binary files differindex 7f7e1ef..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png Binary files differindex f0ab081..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png Binary files differindex e556da1..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png Binary files differindex a28d771..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png Binary files differindex 7be9754..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png Binary files differindex 16271a8..48038f0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png Binary files differindex edff8db..da933a3 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0.png Binary files differdeleted file mode 100644 index e7938f1..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully.png Binary files differdeleted file mode 100644 index e7938f1..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1.png Binary files differdeleted file mode 100644 index 33fda46..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully.png Binary files differdeleted file mode 100644 index 1d5484b..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2.png Binary files differdeleted file mode 100644 index 478b293..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_fully.png Binary files differdeleted file mode 100644 index b9cff0e..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3.png Binary files differdeleted file mode 100644 index 4945e23..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully.png Binary files differdeleted file mode 100644 index a55ecd8..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4.png Binary files differdeleted file mode 100644 index 0641c9a..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_fully.png Binary files differdeleted file mode 100644 index d0eebb6..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png Binary files differindex cd89105..ad9940d 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png Binary files differindex e85d643..7f03f61 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png Binary files differindex 726f7ad..5ac5540 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png Binary files differindex 726f7ad..6edae80 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png Binary files differindex a77c8a8..0ff602e 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png Binary files differindex 1527803..33078c5 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1x.png Binary files differdeleted file mode 100644 index e487f5e..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png Binary files differindex 64ddafd..7f4bd1b 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png Binary files differindex 6cf7a28..a35d1a5 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png Binary files differindex 0bc3d0b..e99e3c5 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png Binary files differindex 34ec231..7844661 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3g.png Binary files differdeleted file mode 100644 index 15d0f2f..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png Binary files differindex c7c1e3e..6b4fc41 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png Binary files differindex 6e4dc8c..0e7946f 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4g.png Binary files differdeleted file mode 100644 index 90ca4e3..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_edge.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_edge.png Binary files differdeleted file mode 100644 index befa1eb..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_edge.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png Binary files differindex 419afa0..91aaa20 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_gprs.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_gprs.png Binary files differdeleted file mode 100644 index 93af4fa..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_gprs.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_hsdpa.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_hsdpa.png Binary files differdeleted file mode 100644 index c3f9e5d..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_hsdpa.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png Binary files differindex b20c61b..46ad7ce 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png Binary files differindex b51178d..8245641 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index 726f7ad..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png Binary files differindex 485d407..cb182b1 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_roam.png Binary files differdeleted file mode 100644 index 19cf3b0..0000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png Binary files differindex 6ed28c6..eb6679d 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png Binary files differindex 4f462ad..8893512 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png Binary files differindex 66d8f80..2efb2f8 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png Binary files differindex b2b2ace..a9174c8 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png Binary files differindex 5212337..8045d21 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png Binary files differindex 43e590b..0dc74eb 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png Binary files differindex e900d6b..3b3e36e 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png Binary files differindex 990734c..ff606a9 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png Binary files differindex d982c1f..e4730e8 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png Binary files differindex daf2750..6db40fe 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png Binary files differindex b93e9ac..515c1b0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png Binary files differindex 576f120..9fae4d5 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png Binary files differnew file mode 100644 index 0000000..9e21348 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_hr.9.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_hr.9.png Binary files differnew file mode 100644 index 0000000..f5e6031 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_hr.9.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index a08c5f6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 6aa38bc..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index 36c26b6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index 55940d2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index f65ef5b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index 8a0f4e7..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index 2d81b22..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index 4c08cff..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim0.png Binary files differdeleted file mode 100644 index 27d3b50..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim100.png Binary files differdeleted file mode 100644 index f017dd1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim15.png Binary files differdeleted file mode 100644 index 6cd2c71..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim28.png Binary files differdeleted file mode 100644 index 76195ca..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim43.png Binary files differdeleted file mode 100644 index fb097b0..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim57.png Binary files differdeleted file mode 100644 index 04740b8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim71.png Binary files differdeleted file mode 100644 index 147d256..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim85.png Binary files differdeleted file mode 100644 index de808a2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_charge_anim85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_unknown.png Binary files differdeleted file mode 100644 index d19d6ee..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth.png Binary files differdeleted file mode 100644 index 4bce24d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth_connected.png Binary files differdeleted file mode 100644 index 0467e12..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_bluetooth_connected.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index 0809456..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index 0e8ec07..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index f9d2737..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index f5b2c9a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index eb1b18a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index 1abe28a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index e896cbb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index b44123c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index d0cc579..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index 903b03e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 9578a21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index c5e5cda..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index 0730e3e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index eafed59..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index ea66c75..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 4db62e3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 69a6ce6d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 6f59975..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 2b593d1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index ef4cac8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index db42b0d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0.png Binary files differdeleted file mode 100644 index 8a9deea..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0_fully.png Binary files differdeleted file mode 100644 index 8a9deea..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1.png Binary files differdeleted file mode 100644 index 11ee533..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1_fully.png Binary files differdeleted file mode 100644 index 43edb8c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2.png Binary files differdeleted file mode 100644 index 7919030..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2_fully.png Binary files differdeleted file mode 100644 index 0699681..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3.png Binary files differdeleted file mode 100644 index 9504838..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3_fully.png Binary files differdeleted file mode 100644 index db8bedb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4.png Binary files differdeleted file mode 100644 index 89e1b2c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4_fully.png Binary files differdeleted file mode 100644 index 88f720d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_flightmode.png Binary files differdeleted file mode 100644 index 89fcbd4..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_flightmode.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_in.png Binary files differdeleted file mode 100644 index 0ec439c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_inout.png Binary files differdeleted file mode 100644 index 4b22619..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index 8a9deea..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_out.png Binary files differdeleted file mode 100644 index 9b8c889..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_signal_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_in.png Binary files differdeleted file mode 100644 index e601a90..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_inout.png Binary files differdeleted file mode 100644 index b65c93f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_out.png Binary files differdeleted file mode 100644 index 80fdafe..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_0.png Binary files differdeleted file mode 100644 index c54f630..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1.png Binary files differdeleted file mode 100644 index 8cfc59b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1_fully.png Binary files differdeleted file mode 100644 index 3381016..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2.png Binary files differdeleted file mode 100644 index 0a77e7b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2_fully.png Binary files differdeleted file mode 100644 index 660b3a0..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3.png Binary files differdeleted file mode 100644 index 0c278ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3_fully.png Binary files differdeleted file mode 100644 index 921d88b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4.png Binary files differdeleted file mode 100644 index 4c6c08e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4_fully.png Binary files differdeleted file mode 100644 index de32ddd..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_wifi_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index 5087adb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 4c212e7..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index bf23074..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index 45dcf77..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index a2848de..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index 89c998b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index 9269d6e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index 344ae30..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim0.png Binary files differdeleted file mode 100644 index 13b5cae..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim100.png Binary files differdeleted file mode 100644 index 6647559..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim15.png Binary files differdeleted file mode 100644 index a0e67c8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim28.png Binary files differdeleted file mode 100644 index 9a75c24..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim43.png Binary files differdeleted file mode 100644 index a1f73c2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim57.png Binary files differdeleted file mode 100644 index 6b17f1c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim71.png Binary files differdeleted file mode 100644 index 9553580..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim85.png Binary files differdeleted file mode 100644 index 8507f39..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_charge_anim85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_unknown.png Binary files differdeleted file mode 100644 index 6966cec..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth.png Binary files differdeleted file mode 100644 index 84ce77f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth_connected.png Binary files differdeleted file mode 100644 index b8670f2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_bluetooth_connected.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index a885aab..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index 32f08c8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index 0111893..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index a9c547e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index 6801953..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index 3ae2537..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 8a9f2e2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index 8c5c482..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index 36c2cf8..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index aee1eed..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 30884a9..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index ce91aa9..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index 82a4f61..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index 55b6b38..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index 519154d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 795c6e1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index b7f5346..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index b28bf04..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 2722c21..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 596cae5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 50476ad..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0.png Binary files differdeleted file mode 100644 index 2de4515..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0_fully.png Binary files differdeleted file mode 100644 index 2de4515..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1.png Binary files differdeleted file mode 100644 index cdbab37..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1_fully.png Binary files differdeleted file mode 100644 index ec398cb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2.png Binary files differdeleted file mode 100644 index b1f16d6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2_fully.png Binary files differdeleted file mode 100644 index e15a12b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3.png Binary files differdeleted file mode 100644 index 90a1a3d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3_fully.png Binary files differdeleted file mode 100644 index 21d944a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4.png Binary files differdeleted file mode 100644 index 9b2263f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4_fully.png Binary files differdeleted file mode 100644 index ca36237..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_flightmode.png Binary files differdeleted file mode 100644 index 2cea010..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_flightmode.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_in.png Binary files differdeleted file mode 100644 index 3d22838..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_inout.png Binary files differdeleted file mode 100644 index 3bee795..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index 2de4515..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_out.png Binary files differdeleted file mode 100644 index ad6bdce..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_signal_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_in.png Binary files differdeleted file mode 100644 index 6d68d4e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_inout.png Binary files differdeleted file mode 100644 index 04ddb65..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_out.png Binary files differdeleted file mode 100644 index 830b006..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_0.png Binary files differdeleted file mode 100644 index f3be79b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1.png Binary files differdeleted file mode 100644 index 7f33567..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1_fully.png Binary files differdeleted file mode 100644 index 471a900..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2.png Binary files differdeleted file mode 100644 index b153c83..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2_fully.png Binary files differdeleted file mode 100644 index 3a5ddb7..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3.png Binary files differdeleted file mode 100644 index 609117c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3_fully.png Binary files differdeleted file mode 100644 index d8cd1fb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4.png Binary files differdeleted file mode 100644 index 806b43b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4_fully.png Binary files differdeleted file mode 100644 index f699434..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_wifi_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index 64d8b5e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 4e718b0..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index 7306b48..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index f414632..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index 9e7a84a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index e17ce98..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index 861b0b7..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index fe1330b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim0.png Binary files differdeleted file mode 100644 index d459a00..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim100.png Binary files differdeleted file mode 100644 index debd23e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim15.png Binary files differdeleted file mode 100644 index 69ba222..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim28.png Binary files differdeleted file mode 100644 index 7d862bb..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim43.png Binary files differdeleted file mode 100644 index 6687c82..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim57.png Binary files differdeleted file mode 100644 index 8438e76..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim71.png Binary files differdeleted file mode 100644 index 1842da2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim85.png Binary files differdeleted file mode 100644 index f9d2754..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_charge_anim85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_unknown.png Binary files differdeleted file mode 100644 index 892ba42..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth.png Binary files differdeleted file mode 100644 index 73e0886..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth_connected.png Binary files differdeleted file mode 100644 index dc3aae3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_bluetooth_connected.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index 9d0fe7e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index d3f6f55..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_4g.png Binary files differdeleted file mode 100644 index 7170a84..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index febf958..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index 4da4f54..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index e775572..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_4g.png Binary files differdeleted file mode 100644 index 5e0617f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_4g.png Binary files differdeleted file mode 100644 index da2926f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_roam.png Binary files differdeleted file mode 100644 index fef89cf..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_connected_roam.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_1x.png Binary files differdeleted file mode 100644 index c543b9a..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_3g.png Binary files differdeleted file mode 100644 index 3395fff..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_4g.png Binary files differdeleted file mode 100644 index 612843d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_e.png Binary files differdeleted file mode 100644 index 9de3703..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_g.png Binary files differdeleted file mode 100644 index dabfec5..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_h.png Binary files differdeleted file mode 100644 index 0ca6fbf..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_1x.png Binary files differdeleted file mode 100644 index 04f8270..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_3g.png Binary files differdeleted file mode 100644 index 517705c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_4g.png Binary files differdeleted file mode 100644 index 947a42c..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_4g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_e.png Binary files differdeleted file mode 100644 index 5c0ee29..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_g.png Binary files differdeleted file mode 100644 index 31d6c01..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_h.png Binary files differdeleted file mode 100644 index 04ae052..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_data_fully_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0.png Binary files differdeleted file mode 100644 index b9410f6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0_fully.png Binary files differdeleted file mode 100644 index b9410f6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_0_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1.png Binary files differdeleted file mode 100644 index aa73096..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1_fully.png Binary files differdeleted file mode 100644 index b534296..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2.png Binary files differdeleted file mode 100644 index a33c488..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2_fully.png Binary files differdeleted file mode 100644 index fdd9c92..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3.png Binary files differdeleted file mode 100644 index 5454b49..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3_fully.png Binary files differdeleted file mode 100644 index e338fd9..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4.png Binary files differdeleted file mode 100644 index 549b7d2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4_fully.png Binary files differdeleted file mode 100644 index 9779320..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_flightmode.png Binary files differdeleted file mode 100644 index 5ca5827..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_flightmode.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_in.png Binary files differdeleted file mode 100644 index 174ef2d..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_inout.png Binary files differdeleted file mode 100644 index 3e9dece..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_null.png Binary files differdeleted file mode 100644 index b9410f6..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_null.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_out.png Binary files differdeleted file mode 100644 index 8952833..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_signal_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_in.png Binary files differdeleted file mode 100644 index 180a13b..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_in.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_inout.png Binary files differdeleted file mode 100644 index b9efa16..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_inout.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_out.png Binary files differdeleted file mode 100644 index d8493ac..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_out.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_0.png Binary files differdeleted file mode 100644 index 885831e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1.png Binary files differdeleted file mode 100644 index 03fcf54..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1_fully.png Binary files differdeleted file mode 100644 index 9bf7bec..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_1_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2.png Binary files differdeleted file mode 100644 index 15a82ac..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2_fully.png Binary files differdeleted file mode 100644 index eb9ce59..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_2_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3.png Binary files differdeleted file mode 100644 index 1c62fe3..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3_fully.png Binary files differdeleted file mode 100644 index 09cdfc4..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_3_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4.png Binary files differdeleted file mode 100644 index 5447a85..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4_fully.png Binary files differdeleted file mode 100644 index 04187de..0000000 --- a/packages/SystemUI/res/drawable-xlarge-xhdpi/stat_sys_wifi_signal_4_fully.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable/notify_panel_bg_protect_tiled.xml b/packages/SystemUI/res/drawable/notify_panel_bg_protect_tiled.xml deleted file mode 100644 index 0371322..0000000 --- a/packages/SystemUI/res/drawable/notify_panel_bg_protect_tiled.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<bitmap - xmlns:android="http://schemas.android.com/apk/res/android" - android:src="@drawable/notify_panel_bg_protect" - android:tileMode="repeat" - /> - diff --git a/packages/SystemUI/res/drawable/status_bar_bg.xml b/packages/SystemUI/res/drawable/status_bar_bg.xml new file mode 100644 index 0000000..403493b --- /dev/null +++ b/packages/SystemUI/res/drawable/status_bar_bg.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<bitmap + xmlns:android="http://schemas.android.com/apk/res/android" + android:tileMode="repeat" + android:src="@drawable/status_bar_bg_tile" + /> diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml index 17fa653..955d8ae 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml @@ -24,6 +24,8 @@ android:layout_height="match_parent" android:layout_alignParentRight="true" android:orientation="horizontal" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:clickable="true" > <LinearLayout @@ -65,14 +67,7 @@ android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" - /> - <View - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_alignLeft="@id/icons" - android:layout_alignRight="@id/icons" - android:background="@drawable/notification_icon_area_smoke" - android:clickable="false" + android:alpha="0.4" /> </com.android.systemui.statusbar.tablet.NotificationIconArea> </LinearLayout> @@ -88,7 +83,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="3dip" - android:layout_marginLeft="4dip" + android:layout_marginLeft="8dip" android:layout_marginRight="4dip" > <TextView android:id="@+id/time_solid" @@ -126,9 +121,10 @@ android:layout_width="wrap_content" android:visibility="gone" /> - <include layout="@layout/stacked_signal_icons" - android:layout_width="32dp" - android:layout_height="24dp" + <include layout="@layout/signal_cluster_view" + android:id="@+id/signal_cluster" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> <ImageView android:id="@+id/battery" diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml new file mode 100644 index 0000000..41a30c7 --- /dev/null +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* apps/common/assets/default/default/skins/StatusBar.xml +** +** Copyright 2011, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<com.android.systemui.statusbar.SignalClusterView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:orientation="horizontal" + > + <FrameLayout + android:id="@+id/wifi_combo" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_marginRight="-6dp" + > + <ImageView + android:id="@+id/wifi_signal" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:scaleType="center" + /> + <ImageView + android:id="@+id/wifi_inout" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_gravity="center|bottom" + /> + </FrameLayout> + <FrameLayout + android:layout_height="wrap_content" + android:layout_width="wrap_content" + > + <View + android:layout_height="6dp" + android:layout_width="6dp" + android:visibility="invisible" + /> + <FrameLayout + android:id="@+id/mobile_combo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + > + <ImageView + android:id="@+id/mobile_signal" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + /> + <ImageView + android:id="@+id/mobile_type" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + /> + <ImageView + android:id="@+id/mobile_inout" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_gravity="right|bottom" + /> + </FrameLayout> + </FrameLayout> +</com.android.systemui.statusbar.SignalClusterView> diff --git a/packages/SystemUI/res/layout/stacked_signal_icons.xml b/packages/SystemUI/res/layout/stacked_signal_icons.xml deleted file mode 100644 index fdeb74b..0000000 --- a/packages/SystemUI/res/layout/stacked_signal_icons.xml +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* apps/common/assets/default/default/skins/StatusBar.xml -** -** Copyright 2011, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ ---> - -<RelativeLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - > - <ImageView - android:id="@+id/mobile_signal" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_centerVertical="true" - android:layout_alignLeft="@+id/wifi_signal" - android:layout_alignWithParentIfMissing="true" - /> - <ImageView - android:id="@+id/network_type" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_alignRight="@id/mobile_signal" - android:layout_centerVertical="true" - /> - <ImageView - android:id="@+id/wifi_signal" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_alignParentRight="true" - android:layout_centerVertical="true" - android:scaleType="center" - android:paddingLeft="7dp" - /> - <ImageView - android:id="@+id/network_direction" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_alignParentRight="true" - android:layout_centerVertical="true" - /> -</RelativeLayout> diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml index 0f5aa93..ed13ace 100644 --- a/packages/SystemUI/res/layout/status_bar.xml +++ b/packages/SystemUI/res/layout/status_bar.xml @@ -57,9 +57,10 @@ android:orientation="horizontal" android:gravity="center" > - <include layout="@layout/stacked_signal_icons" - android:layout_width="24dp" - android:layout_height="match_parent" + <include layout="@layout/signal_cluster_view" + android:id="@+id/signal_cluster" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> <ImageView android:id="@+id/battery" @@ -121,15 +122,4 @@ /> </com.android.systemui.statusbar.phone.TickerView> </LinearLayout> - - <com.android.systemui.statusbar.policy.DateView android:id="@+id/date" - android:textAppearance="@*android:style/TextAppearance.StatusBar.Icon" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:singleLine="true" - android:gravity="center_vertical|left" - android:paddingLeft="6px" - android:paddingRight="6px" - android:background="@drawable/status_bar_background" - /> </com.android.systemui.statusbar.phone.PhoneStatusBarView> diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 0cfcae1..b63afbe 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -26,15 +26,24 @@ android:descendantFocusability="afterDescendants" > - <LinearLayout + <RelativeLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" + android:layout_height="55dp" android:paddingTop="3dp" android:paddingBottom="5dp" android:paddingRight="3dp" - android:background="@drawable/shade_header_background" > + <com.android.systemui.statusbar.policy.DateView android:id="@+id/date" + android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title" + android:textColor="@android:color/holo_blue_bright" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_alignParentLeft="true" + android:singleLine="true" + android:gravity="center_vertical|left" + android:paddingLeft="16dp" + /> + <!-- <com.android.systemui.statusbar.phone.CarrierLabel android:layout_width="0dp" android:layout_height="wrap_content" @@ -47,21 +56,46 @@ android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="?android:attr/textColorSecondary" /> + --> + <ImageView android:id="@+id/settings_button" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_toRightOf="@id/date" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:src="@drawable/ic_sysbar_quicksettings" + /> <ImageView android:id="@+id/clear_all_button" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_gravity="center_vertical" - android:paddingLeft="15dp" - android:paddingRight="15dp" + android:layout_alignParentRight="true" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:src="@drawable/ic_notify_clear" /> - </LinearLayout> + </RelativeLayout> + + <View + android:layout_width="match_parent" + android:layout_height="3dp" + android:background="@drawable/status_bar_hr" + /> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" > + <TextView android:id="@+id/noNotificationsTitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@android:style/TextAppearance.Large" + android:padding="8dp" + android:layout_gravity="top" + android:gravity="center" + android:text="@string/status_bar_no_notifications_title" + /> + <ScrollView android:id="@+id/scroll" android:layout_width="match_parent" @@ -69,29 +103,12 @@ android:fadingEdge="none" android:overScrollMode="ifContentScrolls" > - <LinearLayout - android:id="@+id/notificationLinearLayout" + <com.android.systemui.statusbar.policy.NotificationRowLayout + android:id="@+id/latestItems" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" - > - - <TextView android:id="@+id/noNotificationsTitle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@drawable/title_bar_portrait" - android:paddingLeft="5dp" - android:textAppearance="@style/TextAppearance.StatusBar.Title" - android:text="@string/status_bar_no_notifications_title" - /> - - <com.android.systemui.statusbar.policy.NotificationRowLayout - android:id="@+id/latestItems" - android:layout_width="match_parent" - android:layout_height="wrap_content" - systemui:rowHeight="@dimen/notification_height" - /> - </LinearLayout> + systemui:rowHeight="@dimen/notification_height" + /> </ScrollView> <ImageView diff --git a/packages/SystemUI/res/layout/status_bar_tracking.xml b/packages/SystemUI/res/layout/status_bar_tracking.xml index baa45c5..894248e 100644 --- a/packages/SystemUI/res/layout/status_bar_tracking.xml +++ b/packages/SystemUI/res/layout/status_bar_tracking.xml @@ -30,7 +30,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" - android:background="#ff000000" + android:background="@drawable/status_bar_bg" /> <com.android.systemui.statusbar.phone.CloseDragHandle android:id="@+id/close" diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml index 0219a77..3919685 100644 --- a/packages/SystemUI/res/values-land/dimens.xml +++ b/packages/SystemUI/res/values-land/dimens.xml @@ -17,7 +17,7 @@ --> <resources> <!-- thickness (width) of the navigation bar on phones that require it --> - <dimen name="navigation_bar_size">42dp</dimen> + <dimen name="navigation_bar_size">@*android:dimen/navigation_bar_width</dimen> <!-- Recent Applications parameters --> <!-- Width of a recent app view, including all content --> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ba1aea3..ef9b8dd 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -40,7 +40,7 @@ <dimen name="peek_window_y_offset">-12dp</dimen> <!-- thickness (height) of the navigation bar on phones that require it --> - <dimen name="navigation_bar_size">48dp</dimen> + <dimen name="navigation_bar_size">@*android:dimen/navigation_bar_height</dimen> <!-- thickness (height) of the dead zone at the top of the navigation bar, reducing false presses on navbar buttons; approx 2mm --> diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index 6ecfd94..2818f87 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -43,6 +43,7 @@ public class SwipeHelper { private float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec private int MAX_ESCAPE_ANIMATION_DURATION = 500; // ms + private int MAX_DISMISS_VELOCITY = 1000; // dp/sec private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 250; // ms public static float ALPHA_FADE_START = 0.8f; // fraction of thumbnail width @@ -281,7 +282,7 @@ public class SwipeHelper { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mCurrView != null) { - float maxVelocity = 1000; // px/sec + float maxVelocity = MAX_DISMISS_VELOCITY * mDensityScale; mVelocityTracker.computeCurrentVelocity(1000 /* px/sec */, maxVelocity); float escapeVelocity = SWIPE_ESCAPE_VELOCITY * mDensityScale; float velocity = getVelocity(mVelocityTracker); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java index 14efdd0..36f1659 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java @@ -165,6 +165,13 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); + + // Skip this work if a transition is running; it sets the scroll values independently + // and should not have those animated values clobbered by this logic + LayoutTransition transition = mLinearLayout.getLayoutTransition(); + if (transition != null && transition.isRunning()) { + return; + } // Keep track of the last visible item in the list so we can restore it // to the bottom when the orientation changes. mLastScrollPosition = scrollPositionOfMostRecent(); @@ -172,7 +179,12 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView // This has to happen post-layout, so run it "in the future" post(new Runnable() { public void run() { - scrollTo(mLastScrollPosition, 0); + // Make sure we're still not clobbering the transition-set values, since this + // runnable launches asynchronously + LayoutTransition transition = mLinearLayout.getLayoutTransition(); + if (transition == null || !transition.isRunning()) { + scrollTo(mLastScrollPosition, 0); + } } }); } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index d74b548..28a5cc8 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -359,7 +359,9 @@ public class RecentsPanelView extends RelativeLayout } private void createCustomAnimations(LayoutTransition transitioner) { - transitioner.setDuration(LayoutTransition.DISAPPEARING, 250); + transitioner.setDuration(200); + transitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0); + transitioner.setAnimator(LayoutTransition.DISAPPEARING, null); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java index 1bcc413..89900a1 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java @@ -166,6 +166,13 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); + + // Skip this work if a transition is running; it sets the scroll values independently + // and should not have those animated values clobbered by this logic + LayoutTransition transition = mLinearLayout.getLayoutTransition(); + if (transition != null && transition.isRunning()) { + return; + } // Keep track of the last visible item in the list so we can restore it // to the bottom when the orientation changes. mLastScrollPosition = scrollPositionOfMostRecent(); @@ -173,7 +180,12 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper // This has to happen post-layout, so run it "in the future" post(new Runnable() { public void run() { - scrollTo(0, mLastScrollPosition); + // Make sure we're still not clobbering the transition-set values, since this + // runnable launches asynchronously + LayoutTransition transition = mLinearLayout.getLayoutTransition(); + if (transition == null || !transition.isRunning()) { + scrollTo(0, mLastScrollPosition); + } } }); } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index fc21929..86dc9a6 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -91,7 +91,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi try { long currentTime = System.currentTimeMillis(); - String date = new SimpleDateFormat("yyyy-MM-dd-kk-mm-ss").format(new Date(currentTime)); + String date = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date(currentTime)); String imageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath(); String imageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, date); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java new file mode 100644 index 0000000..325a605 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.systemui.statusbar.policy.NetworkController; + +import com.android.systemui.R; + +public class SignalClusterView + extends LinearLayout + implements NetworkController.SignalCluster { + + NetworkController mNC; + + ViewGroup mWifiGroup, mMobileGroup; + ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType; + + public SignalClusterView(Context context) { + this(context, null); + } + + public SignalClusterView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SignalClusterView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setNetworkController(NetworkController nc) { + mNC = nc; + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + mWifiGroup = (ViewGroup) findViewById(R.id.wifi_combo); + mWifi = (ImageView) findViewById(R.id.wifi_signal); + mWifiActivity = (ImageView) findViewById(R.id.wifi_inout); + mMobileGroup = (ViewGroup) findViewById(R.id.mobile_combo); + mMobile = (ImageView) findViewById(R.id.mobile_signal); + mMobileActivity = (ImageView) findViewById(R.id.mobile_inout); + mMobileType = (ImageView) findViewById(R.id.mobile_type); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + } + + public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon) { + if (mWifiGroup == null) return; + + if (visible) { + mWifiGroup.setVisibility(View.VISIBLE); + mWifi.setImageResource(strengthIcon); + mWifiActivity.setImageResource(activityIcon); + } else { + mWifiGroup.setVisibility(View.GONE); + } + } + + public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon, + int typeIcon) { + if (mMobileGroup == null) return; + + if (visible) { + mMobileGroup.setVisibility(View.VISIBLE); + mMobile.setImageResource(strengthIcon); + mMobileActivity.setImageResource(activityIcon); + mMobileType.setImageResource(typeIcon); + } else { + mMobileGroup.setVisibility(View.GONE); + } + } +} + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandedView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandedView.java index 3276e1f..2d3ecae 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandedView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandedView.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.util.AttributeSet; +import android.util.Slog; import android.widget.LinearLayout; public class ExpandedView extends LinearLayout { @@ -44,8 +45,10 @@ public class ExpandedView extends LinearLayout { super.onLayout(changed, left, top, right, bottom); int height = bottom - top; if (height != mPrevHeight) { - //Slog.d(StatusBar.TAG, "height changed old=" + mPrevHeight - // + " new=" + height); + if (PhoneStatusBar.DEBUG) { + Slog.d(PhoneStatusBar.TAG, "ExpandedView height changed old=" + mPrevHeight + + " new=" + height); + } mPrevHeight = height; mService.updateExpandedViewPos(PhoneStatusBar.EXPANDED_LEAVE_ALONE); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 2740898..abf505c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -112,7 +112,7 @@ public class NavigationBarView extends LinearLayout { public void onAnimationEnd(Animator _a) { mLastAnimator = null; if (hide) { - setVisibility(View.INVISIBLE); + setVisibility(View.GONE); } } }); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 7d1aedc..81c25e0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone; +import android.animation.ObjectAnimator; import android.app.ActivityManagerNative; import android.app.Dialog; import android.app.Notification; @@ -40,7 +41,9 @@ import android.os.Handler; import android.os.Message; import android.os.ServiceManager; import android.os.SystemClock; +import android.provider.Settings; import android.text.TextUtils; +import android.util.DisplayMetrics; import android.util.Slog; import android.util.Log; import android.view.Display; @@ -77,6 +80,7 @@ import com.android.systemui.recent.RecentsPanelView; import com.android.systemui.statusbar.NotificationData; import com.android.systemui.statusbar.StatusBar; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.SignalClusterView; import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.LocationController; @@ -84,8 +88,8 @@ import com.android.systemui.statusbar.policy.NetworkController; public class PhoneStatusBar extends StatusBar { static final String TAG = "PhoneStatusBar"; - static final boolean SPEW = false; public static final boolean DEBUG = false; + public static final boolean SPEW = false; // additional instrumentation for testing purposes; intended to be left on during development public static final boolean CHATTY = DEBUG || true; @@ -135,11 +139,12 @@ public class PhoneStatusBar extends StatusBar { ExpandedView mExpandedView; WindowManager.LayoutParams mExpandedParams; ScrollView mScrollView; - View mNotificationLinearLayout; View mExpandedContents; // top bar TextView mNoNotificationsTitle; View mClearButton; + View mSettingsButton; + // drag bar CloseDragHandle mCloseView; @@ -198,11 +203,11 @@ public class PhoneStatusBar extends StatusBar { // tracking calls to View.setSystemUiVisibility() int mSystemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE; - final Point mDisplaySize = new Point(); + DisplayMetrics mDisplayMetrics = new DisplayMetrics(); private class ExpandedDialog extends Dialog { ExpandedDialog(Context context) { - super(context, com.android.internal.R.style.Theme_Light_NoTitleBar); + super(context, com.android.internal.R.style.Theme_Translucent_NoTitleBar); } @Override @@ -245,13 +250,21 @@ public class PhoneStatusBar extends StatusBar { Resources res = context.getResources(); - mDisplay.getSize(mDisplaySize); + mDisplay.getMetrics(mDisplayMetrics); + if (DEBUG) { + Slog.d(TAG, "makeStatusBarView: mDisplayMetrics=" + mDisplayMetrics); + mDisplayMetrics = res.getDisplayMetrics(); + Slog.d(TAG, "makeStatusBarView: mDisplayMetrics2=" + mDisplayMetrics); + } loadDimens(); mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size); ExpandedView expanded = (ExpandedView)View.inflate(context, R.layout.status_bar_expanded, null); + if (DEBUG) { + expanded.setBackgroundColor(0x6000FF80); + } expanded.mService = this; mIntruderAlertView = View.inflate(context, R.layout.intruder_alert, null); @@ -296,17 +309,21 @@ public class PhoneStatusBar extends StatusBar { mNotificationIcons = (IconMerger)sb.findViewById(R.id.notificationIcons); mIcons = (LinearLayout)sb.findViewById(R.id.icons); mTickerView = sb.findViewById(R.id.ticker); - mDateView = (DateView)sb.findViewById(R.id.date); mExpandedDialog = new ExpandedDialog(context); mExpandedView = expanded; - mExpandedContents = expanded.findViewById(R.id.notificationLinearLayout); mPile = (ViewGroup)expanded.findViewById(R.id.latestItems); + mExpandedContents = mPile; // was: expanded.findViewById(R.id.notificationLinearLayout); mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle); + mNoNotificationsTitle.setAlpha(0f); + mNoNotificationsTitle.setVisibility(View.VISIBLE); mClearButton = expanded.findViewById(R.id.clear_all_button); mClearButton.setOnClickListener(mClearButtonListener); + mClearButton.setAlpha(0f); + mDateView = (DateView)expanded.findViewById(R.id.date); + mSettingsButton = expanded.findViewById(R.id.settings_button); + mSettingsButton.setOnClickListener(mSettingsButtonListener); mScrollView = (ScrollView)expanded.findViewById(R.id.scroll); - mNotificationLinearLayout = expanded.findViewById(R.id.notificationLinearLayout); mTicker = new MyTicker(context, sb); @@ -322,33 +339,15 @@ public class PhoneStatusBar extends StatusBar { // set the inital view visibility setAreThereNotifications(); - mDateView.setVisibility(View.INVISIBLE); // Other icons mLocationController = new LocationController(mContext); // will post a notification mBatteryController = new BatteryController(mContext); mBatteryController.addIconView((ImageView)sb.findViewById(R.id.battery)); mNetworkController = new NetworkController(mContext); - final ImageView comboRSSI = - (ImageView)sb.findViewById(R.id.network_signal); - if (comboRSSI != null) { - mNetworkController.addCombinedSignalIconView(comboRSSI); - } - final ImageView mobileRSSI = - (ImageView)sb.findViewById(R.id.mobile_signal); - if (mobileRSSI != null) { - mNetworkController.addPhoneSignalIconView(mobileRSSI); - } - final ImageView wifiRSSI = - (ImageView)sb.findViewById(R.id.wifi_signal); - if (wifiRSSI != null) { - mNetworkController.addWifiIconView(wifiRSSI); - } - mNetworkController.addDataTypeIconView( - (ImageView)sb.findViewById(R.id.network_type)); - mNetworkController.addDataDirectionOverlayIconView( - (ImageView)sb.findViewById(R.id.network_direction)); - mNetworkController.setStackedMode(true); + final SignalClusterView signalCluster = + (SignalClusterView)sb.findViewById(R.id.signal_cluster); + mNetworkController.addSignalCluster(signalCluster); // Recents Panel updateRecentsPanel(); @@ -542,7 +541,9 @@ public class PhoneStatusBar extends StatusBar { boolean immersive = false; try { immersive = ActivityManagerNative.getDefault().isTopActivityImmersive(); - Slog.d(TAG, "Top activity is " + (immersive?"immersive":"not immersive")); + if (DEBUG) { + Slog.d(TAG, "Top activity is " + (immersive?"immersive":"not immersive")); + } } catch (RemoteException ex) { } if (immersive) { @@ -572,8 +573,7 @@ public class PhoneStatusBar extends StatusBar { } } else if (notification.notification.fullScreenIntent != null) { // not immersive & a full-screen alert should be shown - Slog.d(TAG, "Notification has fullScreenIntent and activity is not immersive;" - + " sending fullScreenIntent"); + Slog.d(TAG, "Notification has fullScreenIntent; sending fullScreenIntent"); try { notification.notification.fullScreenIntent.send(); } catch (PendingIntent.CanceledException e) { @@ -694,9 +694,10 @@ public class PhoneStatusBar extends StatusBar { mTicker.removeEntry(old); // Recalculate the position of the sliding windows and the titles. - setAreThereNotifications(); updateExpandedViewPos(EXPANDED_LEAVE_ALONE); } + + setAreThereNotifications(); } @Override @@ -1001,13 +1002,37 @@ public class PhoneStatusBar extends StatusBar { } private void setAreThereNotifications() { - mClearButton.setVisibility(mNotificationData.hasClearableItems() - ? View.VISIBLE - : View.INVISIBLE); + final boolean any = mNotificationData.size() > 0; + + final boolean clearable = any && mNotificationData.hasClearableItems(); + + if (DEBUG) { + Slog.d(TAG, "setAreThereNotifications: N=" + mNotificationData.size() + + " any=" + any + " clearable=" + clearable); + } - mNoNotificationsTitle.setVisibility(mNotificationData.size() > 0 - ? View.GONE - : View.VISIBLE); + if (mClearButton.isShown()) { + if (clearable != (mClearButton.getAlpha() == 1.0f)) { + ObjectAnimator.ofFloat(mClearButton, "alpha", + clearable ? 1.0f : 0.0f) + .setDuration(250) + .start(); + } + } else { + mClearButton.setAlpha(clearable ? 1.0f : 0.0f); + } + + if (mNoNotificationsTitle.isShown()) { + if (any != (mNoNotificationsTitle.getAlpha() == 0.0f)) { + ObjectAnimator a = ObjectAnimator.ofFloat(mNoNotificationsTitle, "alpha", + (any ? 0.0f : 0.75f)); + a.setDuration(any ? 0 : 500); + a.setStartDelay(any ? 250 : 1000); + a.start(); + } + } else { + mNoNotificationsTitle.setAlpha(any ? 0.0f : 0.75f); + } } @@ -1103,13 +1128,12 @@ public class PhoneStatusBar extends StatusBar { updateExpandedViewPos(EXPANDED_LEAVE_ALONE); mExpandedParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mExpandedParams.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; + if (DEBUG) { + Slog.d(TAG, "makeExpandedVisible: expanded params = " + mExpandedParams); + } mExpandedDialog.getWindow().setAttributes(mExpandedParams); mExpandedView.requestFocus(View.FOCUS_FORWARD); mTrackingView.setVisibility(View.VISIBLE); - - if (!mTicking) { - setDateViewVisibility(true, com.android.internal.R.anim.fade_in); - } } public void animateExpand() { @@ -1152,7 +1176,7 @@ public class PhoneStatusBar extends StatusBar { if (mAnimating) { y = (int)mAnimY; } else { - y = mDisplaySize.y-1; + y = mDisplayMetrics.heightPixels-1; } // Let the fling think that we're open so it goes in the right direction // and doesn't try to re-open the windowshade. @@ -1194,7 +1218,6 @@ public class PhoneStatusBar extends StatusBar { if ((mDisabled & StatusBarManager.DISABLE_NOTIFICATION_ICONS) == 0) { setNotificationIconVisibility(true, com.android.internal.R.anim.fade_in); } - setDateViewVisibility(false, com.android.internal.R.anim.fade_out); if (!mExpanded) { return; @@ -1208,7 +1231,7 @@ public class PhoneStatusBar extends StatusBar { if (SPEW) Slog.d(TAG, "doAnimation before mAnimY=" + mAnimY); incrementAnim(); if (SPEW) Slog.d(TAG, "doAnimation after mAnimY=" + mAnimY); - if (mAnimY >= mDisplaySize.y-1) { + if (mAnimY >= mDisplayMetrics.heightPixels-1) { if (SPEW) Slog.d(TAG, "Animation completed to expanded state."); mAnimating = false; updateExpandedViewPos(EXPANDED_FULL_OPEN); @@ -1268,6 +1291,10 @@ public class PhoneStatusBar extends StatusBar { Slog.d(TAG, "panel: beginning to track the user's touch, y=" + y + " opening=" + opening); } + // there are some race conditions that cause this to be inaccurate; let's recalculate it any + // time we're about to drag the panel + updateExpandedSize(); + mTracking = true; mVelocityTracker = VelocityTracker.obtain(); if (opening) { @@ -1311,7 +1338,7 @@ public class PhoneStatusBar extends StatusBar { if (mExpanded) { if (!always && ( vel > 200.0f - || (y > (mDisplaySize.y-25) && vel > -200.0f))) { + || (y > (mDisplayMetrics.heightPixels-25) && vel > -200.0f))) { // We are expanded, but they didn't move sufficiently to cause // us to retract. Animate back to the expanded position. mAnimAccel = 2000.0f; @@ -1329,7 +1356,7 @@ public class PhoneStatusBar extends StatusBar { } else { if (always || ( vel > 200.0f - || (y > (mDisplaySize.y/2) && vel > -200.0f))) { + || (y > (mDisplayMetrics.heightPixels/2) && vel > -200.0f))) { // We are collapsed, and they moved enough to allow us to // expand. Animate in the notifications. mAnimAccel = 2000.0f; @@ -1387,14 +1414,14 @@ public class PhoneStatusBar extends StatusBar { mViewDelta = mAbsPos[1] + mTrackingView.getHeight() - y; } if ((!mExpanded && y < hitSize) || - (mExpanded && y > (mDisplaySize.y-hitSize))) { + (mExpanded && y > (mDisplayMetrics.heightPixels-hitSize))) { // We drop events at the edge of the screen to make the windowshade come // down by accident less, especially when pushing open a device with a keyboard // that rotates (like g1 and droid) int x = (int)event.getRawX(); final int edgeBorder = mEdgeBorder; - if (x >= edgeBorder && x < mDisplaySize.x - edgeBorder) { + if (x >= edgeBorder && x < mDisplayMetrics.widthPixels - edgeBorder) { prepareTracking(y, !mExpanded);// opening if we're not already fully visible mVelocityTracker.addMovement(event); } @@ -1578,9 +1605,6 @@ public class PhoneStatusBar extends StatusBar { mTickerView.setVisibility(View.VISIBLE); mTickerView.startAnimation(loadAnim(com.android.internal.R.anim.push_up_in, null)); mIcons.startAnimation(loadAnim(com.android.internal.R.anim.push_up_out, null)); - if (mExpandedVisible) { - setDateViewVisibility(false, com.android.internal.R.anim.push_up_out); - } } @Override @@ -1590,9 +1614,6 @@ public class PhoneStatusBar extends StatusBar { mIcons.startAnimation(loadAnim(com.android.internal.R.anim.push_down_in, null)); mTickerView.startAnimation(loadAnim(com.android.internal.R.anim.push_down_out, mTickingDoneListener)); - if (mExpandedVisible) { - setDateViewVisibility(true, com.android.internal.R.anim.push_down_in); - } } public void tickerHalting() { @@ -1601,9 +1622,6 @@ public class PhoneStatusBar extends StatusBar { mIcons.startAnimation(loadAnim(com.android.internal.R.anim.fade_in, null)); mTickerView.startAnimation(loadAnim(com.android.internal.R.anim.fade_out, mTickingDoneListener)); - if (mExpandedVisible) { - setDateViewVisibility(true, com.android.internal.R.anim.fade_in); - } } } @@ -1644,7 +1662,7 @@ public class PhoneStatusBar extends StatusBar { + " mAnimLastTime=" + mAnimLastTime); pw.println(" mAnimatingReveal=" + mAnimatingReveal + " mViewDelta=" + mViewDelta); - pw.println(" mDisplaySize=" + mDisplaySize); + pw.println(" mDisplayMetrics=" + mDisplayMetrics); pw.println(" mExpandedParams: " + mExpandedParams); pw.println(" mExpandedView: " + viewInfo(mExpandedView)); pw.println(" mExpandedDialog: " + mExpandedDialog); @@ -1656,7 +1674,6 @@ public class PhoneStatusBar extends StatusBar { pw.println(" mTickerView: " + viewInfo(mTickerView)); pw.println(" mScrollView: " + viewInfo(mScrollView) + " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY()); - pw.println("mNotificationLinearLayout: " + viewInfo(mNotificationLinearLayout)); } /* synchronized (mNotificationData) { @@ -1720,7 +1737,8 @@ public class PhoneStatusBar extends StatusBar { ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL, - WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + 0 + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, pixelFormat); @@ -1742,9 +1760,10 @@ public class PhoneStatusBar extends StatusBar { lp = mExpandedDialog.getWindow().getAttributes(); lp.x = 0; - mTrackingPosition = lp.y = mDisplaySize.y; // sufficiently large negative + mTrackingPosition = lp.y = mDisplayMetrics.heightPixels; // sufficiently large negative lp.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; - lp.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + lp.flags = 0 + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_DITHER @@ -1764,11 +1783,6 @@ public class PhoneStatusBar extends StatusBar { mExpandedDialog.show(); } - void setDateViewVisibility(boolean visible, int anim) { - mDateView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); - mDateView.startAnimation(loadAnim(anim, null)); - } - void setNotificationIconVisibility(boolean visible, int anim) { int old = mNotificationIcons.getVisibility(); int v = visible ? View.VISIBLE : View.INVISIBLE; @@ -1780,14 +1794,14 @@ public class PhoneStatusBar extends StatusBar { void updateExpandedInvisiblePosition() { if (mTrackingView != null) { - mTrackingPosition = -mDisplaySize.y; + mTrackingPosition = -mDisplayMetrics.heightPixels; if (mTrackingParams != null) { mTrackingParams.y = mTrackingPosition; WindowManagerImpl.getDefault().updateViewLayout(mTrackingView, mTrackingParams); } } if (mExpandedParams != null) { - mExpandedParams.y = -mDisplaySize.y; + mExpandedParams.y = -mDisplayMetrics.heightPixels; mExpandedDialog.getWindow().setAttributes(mExpandedParams); } } @@ -1795,12 +1809,12 @@ public class PhoneStatusBar extends StatusBar { void updateExpandedViewPos(int expandedPosition) { if (SPEW) { Slog.d(TAG, "updateExpandedViewPos before expandedPosition=" + expandedPosition - + " mTrackingParams.y=" + mTrackingParams.y + + " mTrackingParams.y=" + ((mTrackingParams == null) ? "?" : mTrackingParams.y) + " mTrackingPosition=" + mTrackingPosition); } int h = mStatusBarView.getHeight(); - int disph = mDisplaySize.y; + int disph = mDisplayMetrics.heightPixels; // If the expanded view is not visible, make sure they're still off screen. // Maybe the view was resized. @@ -1839,11 +1853,21 @@ public class PhoneStatusBar extends StatusBar { mExpandedParams.y = pos + mTrackingView.getHeight() - (mTrackingParams.height-closePos) - contentsBottom; + + if (SPEW) { + Slog.d(PhoneStatusBar.TAG, + "pos=" + pos + + " trackingHeight=" + mTrackingView.getHeight() + + " (trackingParams.height - closePos)=" + + (mTrackingParams.height - closePos) + + " contentsBottom=" + contentsBottom); + } + } else { // If the tracking view is not yet visible, then we can't have // a good value of the close view location. We need to wait for // it to be visible to do a layout. - mExpandedParams.y = -mDisplaySize.y; + mExpandedParams.y = -mDisplayMetrics.heightPixels; } int max = h; if (mExpandedParams.y > max) { @@ -1881,23 +1905,37 @@ public class PhoneStatusBar extends StatusBar { } int getExpandedHeight(int disph) { + if (DEBUG) { + Slog.d(TAG, "getExpandedHeight(" + disph + "): sbView=" + + mStatusBarView.getHeight() + " closeView=" + mCloseView.getHeight()); + } return disph - mStatusBarView.getHeight() - mCloseView.getHeight(); } void updateDisplaySize() { - mDisplay.getSize(mDisplaySize); + mDisplay.getMetrics(mDisplayMetrics); + if (DEBUG) { + Slog.d(TAG, "updateDisplaySize: " + mDisplayMetrics); + } updateExpandedSize(); } void updateExpandedSize() { - if (mExpandedDialog != null && mExpandedParams != null && mDisplaySize != null) { - mExpandedParams.width = mDisplaySize.x; - mExpandedParams.height = getExpandedHeight(mDisplaySize.y); + if (DEBUG) { + Slog.d(TAG, "updateExpandedSize()"); + } + if (mExpandedDialog != null && mExpandedParams != null && mDisplayMetrics != null) { + mExpandedParams.width = mDisplayMetrics.widthPixels; + mExpandedParams.height = getExpandedHeight(mDisplayMetrics.heightPixels); if (!mExpandedVisible) { updateExpandedInvisiblePosition(); } else { mExpandedDialog.getWindow().setAttributes(mExpandedParams); } + if (DEBUG) { + Slog.d(TAG, "updateExpandedSize: height=" + mExpandedParams.height + " " + + (mExpandedVisible ? "VISIBLE":"INVISIBLE")); + } } } @@ -1979,6 +2017,14 @@ public class PhoneStatusBar extends StatusBar { } }; + private View.OnClickListener mSettingsButtonListener = new View.OnClickListener() { + public void onClick(View v) { + v.getContext().startActivity(new Intent(Settings.ACTION_SETTINGS) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + animateCollapse(); + } + }; + private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index db6907c..809b742 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -42,8 +42,6 @@ public class PhoneStatusBarView extends FrameLayout { int mStartX, mStartY; ViewGroup mNotificationIcons; ViewGroup mStatusIcons; - View mDate; - FixedSizeDrawable mBackground; boolean mNightMode = false; int mStartAlpha = 0, mEndAlpha = 0; @@ -61,11 +59,6 @@ public class PhoneStatusBarView extends FrameLayout { super.onFinishInflate(); mNotificationIcons = (ViewGroup)findViewById(R.id.notificationIcons); mStatusIcons = (ViewGroup)findViewById(R.id.statusIcons); - mDate = findViewById(R.id.date); - - mBackground = new FixedSizeDrawable(mDate.getBackground()); - mBackground.setFixedBounds(0, 0, 0, 0); - mDate.setBackgroundDrawable(mBackground); } @Override @@ -107,31 +100,6 @@ public class PhoneStatusBarView extends FrameLayout { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); - - // put the date date view quantized to the icons - int oldDateRight = mDate.getRight(); - int newDateRight; - - newDateRight = getDateSize(mNotificationIcons, oldDateRight, - getViewOffset(mNotificationIcons)); - if (newDateRight < 0) { - int offset = getViewOffset(mStatusIcons); - if (oldDateRight < offset) { - newDateRight = oldDateRight; - } else { - newDateRight = getDateSize(mStatusIcons, oldDateRight, offset); - if (newDateRight < 0) { - newDateRight = r; - } - } - } - int max = r - getPaddingRight(); - if (newDateRight > max) { - newDateRight = max; - } - - mDate.layout(mDate.getLeft(), mDate.getTop(), newDateRight, mDate.getBottom()); - mBackground.setFixedBounds(-mDate.getLeft(), -mDate.getTop(), (r-l), (b-t)); } @Override @@ -164,19 +132,6 @@ public class PhoneStatusBarView extends FrameLayout { return offset; } - private int getDateSize(ViewGroup g, int w, int offset) { - final int N = g.getChildCount(); - for (int i=0; i<N; i++) { - View v = g.getChildAt(i); - int l = v.getLeft() + offset; - int r = v.getRight() + offset; - if (w >= l && w <= r) { - return r; - } - } - return -1; - } - /** * Ensure that, if there is no target under us to receive the touch, * that we process it ourself. This makes sure that onInterceptTouchEvent() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrackingView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrackingView.java index fc0f332..cc23afc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrackingView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrackingView.java @@ -26,7 +26,6 @@ import android.widget.LinearLayout; public class TrackingView extends LinearLayout { - final Display mDisplay; PhoneStatusBar mService; boolean mTracking; int mStartX, mStartY; @@ -34,8 +33,6 @@ public class TrackingView extends LinearLayout { public TrackingView(Context context, AttributeSet attrs) { super(context, attrs); - mDisplay = ((WindowManager)context.getSystemService( - Context.WINDOW_SERVICE)).getDefaultDisplay(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index e675657..1a24d05 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -120,6 +120,7 @@ public class NetworkController extends BroadcastReceiver { ArrayList<ImageView> mCombinedSignalIconViews = new ArrayList<ImageView>(); ArrayList<ImageView> mDataTypeIconViews = new ArrayList<ImageView>(); ArrayList<TextView> mLabelViews = new ArrayList<TextView>(); + ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>(); int mLastPhoneSignalIconId = -1; int mLastDataDirectionIconId = -1; int mLastDataDirectionOverlayIconId = -1; @@ -133,6 +134,12 @@ public class NetworkController extends BroadcastReceiver { // yuck -- stop doing this here and put it in the framework IBatteryStats mBatteryStats; + public interface SignalCluster { + void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon); + void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon, + int typeIcon); + } + /** * Construct this controller object and register for updates. */ @@ -214,6 +221,10 @@ public class NetworkController extends BroadcastReceiver { mLabelViews.add(v); } + public void addSignalCluster(SignalCluster v) { + mSignalClusters.add(v); + } + public void setStackedMode(boolean stacked) { mDataAndWifiStacked = true; } @@ -369,12 +380,12 @@ public class NetworkController extends BroadcastReceiver { private final void updateTelephonySignalStrength() { if (!hasService()) { //Slog.d(TAG, "updateTelephonySignalStrength: no service"); - mPhoneSignalIconId = R.drawable.stat_sys_signal_null; - mDataSignalIconId = R.drawable.stat_sys_signal_0; // note we use 0 instead of null + mPhoneSignalIconId = R.drawable.stat_sys_signal_0; + mDataSignalIconId = R.drawable.stat_sys_signal_0; } else { if (mSignalStrength == null) { - mPhoneSignalIconId = R.drawable.stat_sys_signal_null; - mDataSignalIconId = R.drawable.stat_sys_signal_0; // note we use 0 instead of null + mPhoneSignalIconId = R.drawable.stat_sys_signal_0; + mDataSignalIconId = R.drawable.stat_sys_signal_0; mContentDescriptionPhoneSignal = mContext.getString( AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]); } else { @@ -414,13 +425,13 @@ public class NetworkController extends BroadcastReceiver { break; case TelephonyManager.NETWORK_TYPE_EDGE: mDataIconList = TelephonyIcons.DATA_E[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_edge; + mDataTypeIconId = R.drawable.stat_sys_data_connected_e; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_edge); break; case TelephonyManager.NETWORK_TYPE_UMTS: mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_3g; + mDataTypeIconId = R.drawable.stat_sys_data_connected_3g; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_3g); break; @@ -429,12 +440,12 @@ public class NetworkController extends BroadcastReceiver { case TelephonyManager.NETWORK_TYPE_HSPA: if (mHspaDataDistinguishable) { mDataIconList = TelephonyIcons.DATA_H[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_hsdpa; + mDataTypeIconId = R.drawable.stat_sys_data_connected_h; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_3_5g); } else { mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_3g; + mDataTypeIconId = R.drawable.stat_sys_data_connected_3g; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_3g); } @@ -442,13 +453,13 @@ public class NetworkController extends BroadcastReceiver { case TelephonyManager.NETWORK_TYPE_CDMA: // display 1xRTT for IS95A/B mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_1x; + mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_cdma); break; case TelephonyManager.NETWORK_TYPE_1xRTT: mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_1x; + mDataTypeIconId = R.drawable.stat_sys_data_connected_1x; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_cdma); break; @@ -457,25 +468,25 @@ public class NetworkController extends BroadcastReceiver { case TelephonyManager.NETWORK_TYPE_EVDO_B: case TelephonyManager.NETWORK_TYPE_EHRPD: mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_3g; + mDataTypeIconId = R.drawable.stat_sys_data_connected_3g; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_3g); break; case TelephonyManager.NETWORK_TYPE_LTE: mDataIconList = TelephonyIcons.DATA_4G[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_4g; + mDataTypeIconId = R.drawable.stat_sys_data_connected_4g; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_4g); break; default: mDataIconList = TelephonyIcons.DATA_G[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_signal_gprs; + mDataTypeIconId = R.drawable.stat_sys_data_connected_g; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_gprs); break; } if ((isCdma() && isCdmaEri()) || mPhone.isNetworkRoaming()) { - mDataTypeIconId = R.drawable.stat_sys_signal_roam; + mDataTypeIconId = R.drawable.stat_sys_data_connected_roam; } } @@ -730,7 +741,9 @@ public class NetworkController extends BroadcastReceiver { Context context = mContext; int combinedSignalIconId; - int dataDirectionOverlayIconId = 0; + int dataDirectionOverlayIconId = 0, + wifiActivityIconId = 0, + mobileActivityIconId = 0; int dataTypeIconId; String label; int N; @@ -753,6 +766,7 @@ public class NetworkController extends BroadcastReceiver { case WifiManager.DATA_ACTIVITY_NONE: break; } + wifiActivityIconId = dataDirectionOverlayIconId; } combinedSignalIconId = mWifiIconId; mContentDescriptionCombinedSignal = mContentDescriptionWifi; @@ -774,6 +788,7 @@ public class NetworkController extends BroadcastReceiver { dataDirectionOverlayIconId = 0; break; } + mobileActivityIconId = dataDirectionOverlayIconId; combinedSignalIconId = mDataSignalIconId; mContentDescriptionCombinedSignal = mContentDescriptionDataType; dataTypeIconId = mDataTypeIconId; @@ -790,7 +805,7 @@ public class NetworkController extends BroadcastReceiver { combinedSignalIconId = R.drawable.stat_sys_signal_flightmode; mContentDescriptionCombinedSignal = mContext.getString( R.string.accessibility_airplane_mode); - dataTypeIconId = 0; + dataTypeIconId = R.drawable.stat_sys_signal_flightmode; // was 0; } else { label = context.getString(R.string.status_bar_settings_signal_meter_disconnected); // On devices without mobile radios, we want to show the wifi icon @@ -821,6 +836,25 @@ public class NetworkController extends BroadcastReceiver { + " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId)); } + if (mLastPhoneSignalIconId != mPhoneSignalIconId + || mLastDataDirectionOverlayIconId != dataDirectionOverlayIconId + || mLastWifiIconId != mWifiIconId + || mLastDataTypeIconId != dataTypeIconId) + { + // NB: the mLast*s will be updated later + for (SignalCluster cluster : mSignalClusters) { + cluster.setWifiIndicators( + mWifiEnabled, + mWifiIconId, + wifiActivityIconId); + cluster.setMobileDataIndicators( + hasMobileDataFeature(), + mPhoneSignalIconId, + mobileActivityIconId, + dataTypeIconId); + } + } + // the phone icon on phones if (mLastPhoneSignalIconId != mPhoneSignalIconId) { mLastPhoneSignalIconId = mPhoneSignalIconId; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java index 2a0dfb5..469b462 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java @@ -166,20 +166,16 @@ public class NotificationRowLayout extends ViewGroup implements SwipeHelper.Call mAppearingViews.add(child); child.setPivotY(0); - AnimatorSet a = new AnimatorSet(); - a.playTogether( - ObjectAnimator.ofFloat(child, "alpha", 0f, 1f) -// ,ObjectAnimator.ofFloat(child, "scaleY", 0f, 1f) - ); - a.setDuration(APPEAR_ANIM_LEN); - a.addListener(new AnimatorListenerAdapter() { + final ObjectAnimator alphaFade = ObjectAnimator.ofFloat(child, "alpha", 0f, 1f); + alphaFade.setDuration(APPEAR_ANIM_LEN); + alphaFade.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mAppearingViews.remove(childF); requestLayout(); // pick up any final changes in position } }); - a.start(); + alphaFade.start(); requestLayout(); // start the container animation } } @@ -195,23 +191,10 @@ public class NotificationRowLayout extends ViewGroup implements SwipeHelper.Call child.setPivotY(0); - //final float velocity = (mSlidingChild == child) - // ? Math.min(mLiftoffVelocity, SWIPE_ANIM_VELOCITY_MIN) - // : SWIPE_ESCAPE_VELOCITY; - final float velocity = 0f; - final TimeAnimator zoom = new TimeAnimator(); - zoom.setTimeListener(new TimeAnimator.TimeListener() { - @Override - public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { - childF.setTranslationX(childF.getTranslationX() + deltaTime / 1000f * velocity); - } - }); - final ObjectAnimator alphaFade = ObjectAnimator.ofFloat(child, "alpha", 0f); alphaFade.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - zoom.cancel(); // it won't end on its own if (DEBUG) Slog.d(TAG, "actually removing child: " + childF); NotificationRowLayout.super.removeView(childF); childF.setAlpha(1f); @@ -220,14 +203,8 @@ public class NotificationRowLayout extends ViewGroup implements SwipeHelper.Call } }); - AnimatorSet a = new AnimatorSet(); - a.playTogether(alphaFade, zoom); - -// ,ObjectAnimator.ofFloat(child, "scaleY", 0f) -// ,ObjectAnimator.ofFloat(child, "translationX", child.getTranslationX() + 300f) - - a.setDuration(DISAPPEAR_ANIM_LEN); - a.start(); + alphaFade.setDuration(DISAPPEAR_ANIM_LEN); + alphaFade.start(); requestLayout(); // start the container animation } else { super.removeView(child); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java index 449ea99..959e06d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -36,16 +36,16 @@ class TelephonyIcons { }; static final int[][] TELEPHONY_SIGNAL_STRENGTH_ROAMING = { - { R.drawable.stat_sys_r_signal_0, - R.drawable.stat_sys_r_signal_1, - R.drawable.stat_sys_r_signal_2, - R.drawable.stat_sys_r_signal_3, - R.drawable.stat_sys_r_signal_4 }, - { R.drawable.stat_sys_r_signal_0_fully, - R.drawable.stat_sys_r_signal_1_fully, - R.drawable.stat_sys_r_signal_2_fully, - R.drawable.stat_sys_r_signal_3_fully, - R.drawable.stat_sys_r_signal_4_fully } + { R.drawable.stat_sys_signal_0, + R.drawable.stat_sys_signal_1, + R.drawable.stat_sys_signal_2, + R.drawable.stat_sys_signal_3, + R.drawable.stat_sys_signal_4 }, + { R.drawable.stat_sys_signal_0_fully, + R.drawable.stat_sys_signal_1_fully, + R.drawable.stat_sys_signal_2_fully, + R.drawable.stat_sys_signal_3_fully, + R.drawable.stat_sys_signal_4_fully } }; static final int[][] DATA_SIGNAL_STRENGTH = TELEPHONY_SIGNAL_STRENGTH; @@ -55,72 +55,72 @@ class TelephonyIcons { //GSM/UMTS static final int[][] DATA_G = { { R.drawable.stat_sys_data_connected_g, - R.drawable.stat_sys_data_in_g, - R.drawable.stat_sys_data_out_g, - R.drawable.stat_sys_data_inandout_g }, + R.drawable.stat_sys_data_connected_g, + R.drawable.stat_sys_data_connected_g, + R.drawable.stat_sys_data_connected_g }, { R.drawable.stat_sys_data_fully_connected_g, - R.drawable.stat_sys_data_fully_in_g, - R.drawable.stat_sys_data_fully_out_g, - R.drawable.stat_sys_data_fully_inandout_g } + R.drawable.stat_sys_data_fully_connected_g, + R.drawable.stat_sys_data_fully_connected_g, + R.drawable.stat_sys_data_fully_connected_g } }; static final int[][] DATA_3G = { { R.drawable.stat_sys_data_connected_3g, - R.drawable.stat_sys_data_in_3g, - R.drawable.stat_sys_data_out_3g, - R.drawable.stat_sys_data_inandout_3g }, + R.drawable.stat_sys_data_connected_3g, + R.drawable.stat_sys_data_connected_3g, + R.drawable.stat_sys_data_connected_3g }, { R.drawable.stat_sys_data_fully_connected_3g, - R.drawable.stat_sys_data_fully_in_3g, - R.drawable.stat_sys_data_fully_out_3g, - R.drawable.stat_sys_data_fully_inandout_3g } + R.drawable.stat_sys_data_fully_connected_3g, + R.drawable.stat_sys_data_fully_connected_3g, + R.drawable.stat_sys_data_fully_connected_3g } }; static final int[][] DATA_E = { { R.drawable.stat_sys_data_connected_e, - R.drawable.stat_sys_data_in_e, - R.drawable.stat_sys_data_out_e, - R.drawable.stat_sys_data_inandout_e }, + R.drawable.stat_sys_data_connected_e, + R.drawable.stat_sys_data_connected_e, + R.drawable.stat_sys_data_connected_e }, { R.drawable.stat_sys_data_fully_connected_e, - R.drawable.stat_sys_data_fully_in_e, - R.drawable.stat_sys_data_fully_out_e, - R.drawable.stat_sys_data_fully_inandout_e } + R.drawable.stat_sys_data_fully_connected_e, + R.drawable.stat_sys_data_fully_connected_e, + R.drawable.stat_sys_data_fully_connected_e } }; //3.5G static final int[][] DATA_H = { { R.drawable.stat_sys_data_connected_h, - R.drawable.stat_sys_data_in_h, - R.drawable.stat_sys_data_out_h, - R.drawable.stat_sys_data_inandout_h }, + R.drawable.stat_sys_data_connected_h, + R.drawable.stat_sys_data_connected_h, + R.drawable.stat_sys_data_connected_h }, { R.drawable.stat_sys_data_fully_connected_h, - R.drawable.stat_sys_data_fully_in_h, - R.drawable.stat_sys_data_fully_out_h, - R.drawable.stat_sys_data_fully_inandout_h } + R.drawable.stat_sys_data_fully_connected_h, + R.drawable.stat_sys_data_fully_connected_h, + R.drawable.stat_sys_data_fully_connected_h } }; //CDMA // Use 3G icons for EVDO data and 1x icons for 1XRTT data static final int[][] DATA_1X = { { R.drawable.stat_sys_data_connected_1x, - R.drawable.stat_sys_data_in_1x, - R.drawable.stat_sys_data_out_1x, - R.drawable.stat_sys_data_inandout_1x }, + R.drawable.stat_sys_data_connected_1x, + R.drawable.stat_sys_data_connected_1x, + R.drawable.stat_sys_data_connected_1x }, { R.drawable.stat_sys_data_fully_connected_1x, - R.drawable.stat_sys_data_fully_in_1x, - R.drawable.stat_sys_data_fully_out_1x, - R.drawable.stat_sys_data_fully_inandout_1x } + R.drawable.stat_sys_data_fully_connected_1x, + R.drawable.stat_sys_data_fully_connected_1x, + R.drawable.stat_sys_data_fully_connected_1x } }; // LTE and eHRPD static final int[][] DATA_4G = { { R.drawable.stat_sys_data_connected_4g, - R.drawable.stat_sys_data_in_4g, - R.drawable.stat_sys_data_out_4g, - R.drawable.stat_sys_data_inandout_4g }, + R.drawable.stat_sys_data_connected_4g, + R.drawable.stat_sys_data_connected_4g, + R.drawable.stat_sys_data_connected_4g }, { R.drawable.stat_sys_data_fully_connected_4g, - R.drawable.stat_sys_data_fully_in_4g, - R.drawable.stat_sys_data_fully_out_4g, - R.drawable.stat_sys_data_fully_inandout_4g } + R.drawable.stat_sys_data_fully_connected_4g, + R.drawable.stat_sys_data_fully_connected_4g, + R.drawable.stat_sys_data_fully_connected_4g } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index 7f56d45..e787113 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -103,6 +103,11 @@ public class TabletStatusBar extends StatusBar implements // Fitts' Law assistance for LatinIME; see policy.EventHole private static final boolean FAKE_SPACE_BAR = true; + // Notification "peeking" (flyover preview of individual notifications) + final static boolean NOTIFICATION_PEEK_ENABLED = false; + final static int NOTIFICATION_PEEK_HOLD_THRESH = 200; // ms + final static int NOTIFICATION_PEEK_FADE_DELAY = 3000; // ms + // The height of the bar, as definied by the build. It may be taller if we're plugged // into hdmi. int mNaturalBarHeight = -1; @@ -250,43 +255,45 @@ public class TabletStatusBar extends StatusBar implements WindowManagerImpl.getDefault().addView(mNotificationPanel, lp); // Notification preview window - mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context, - R.layout.status_bar_notification_peek, null); - mNotificationPeekWindow.setBar(this); - - mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content); - mNotificationPeekWindow.setVisibility(View.GONE); - mNotificationPeekWindow.setOnTouchListener( - new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PEEK, mNotificationPeekWindow)); - mNotificationPeekScrubRight = new LayoutTransition(); - mNotificationPeekScrubRight.setAnimator(LayoutTransition.APPEARING, - ObjectAnimator.ofInt(null, "left", -512, 0)); - mNotificationPeekScrubRight.setAnimator(LayoutTransition.DISAPPEARING, - ObjectAnimator.ofInt(null, "left", -512, 0)); - mNotificationPeekScrubRight.setDuration(500); - - mNotificationPeekScrubLeft = new LayoutTransition(); - mNotificationPeekScrubLeft.setAnimator(LayoutTransition.APPEARING, - ObjectAnimator.ofInt(null, "left", 512, 0)); - mNotificationPeekScrubLeft.setAnimator(LayoutTransition.DISAPPEARING, - ObjectAnimator.ofInt(null, "left", 512, 0)); - mNotificationPeekScrubLeft.setDuration(500); - - // XXX: setIgnoreChildren? - lp = new WindowManager.LayoutParams( - 512, // ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, - WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS - | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM - | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, - PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; - lp.y = res.getDimensionPixelOffset(R.dimen.peek_window_y_offset); - lp.setTitle("NotificationPeekWindow"); - lp.windowAnimations = com.android.internal.R.style.Animation_Toast; - - WindowManagerImpl.getDefault().addView(mNotificationPeekWindow, lp); + if (NOTIFICATION_PEEK_ENABLED) { + mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context, + R.layout.status_bar_notification_peek, null); + mNotificationPeekWindow.setBar(this); + + mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content); + mNotificationPeekWindow.setVisibility(View.GONE); + mNotificationPeekWindow.setOnTouchListener( + new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PEEK, mNotificationPeekWindow)); + mNotificationPeekScrubRight = new LayoutTransition(); + mNotificationPeekScrubRight.setAnimator(LayoutTransition.APPEARING, + ObjectAnimator.ofInt(null, "left", -512, 0)); + mNotificationPeekScrubRight.setAnimator(LayoutTransition.DISAPPEARING, + ObjectAnimator.ofInt(null, "left", -512, 0)); + mNotificationPeekScrubRight.setDuration(500); + + mNotificationPeekScrubLeft = new LayoutTransition(); + mNotificationPeekScrubLeft.setAnimator(LayoutTransition.APPEARING, + ObjectAnimator.ofInt(null, "left", 512, 0)); + mNotificationPeekScrubLeft.setAnimator(LayoutTransition.DISAPPEARING, + ObjectAnimator.ofInt(null, "left", 512, 0)); + mNotificationPeekScrubLeft.setDuration(500); + + // XXX: setIgnoreChildren? + lp = new WindowManager.LayoutParams( + 512, // ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS + | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM + | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, + PixelFormat.TRANSLUCENT); + lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; + lp.y = res.getDimensionPixelOffset(R.dimen.peek_window_y_offset); + lp.setTitle("NotificationPeekWindow"); + lp.windowAnimations = com.android.internal.R.style.Animation_Toast; + + WindowManagerImpl.getDefault().addView(mNotificationPeekWindow, lp); + } // Recents Panel mRecentsPanel = (RecentsPanelView) View.inflate(context, @@ -297,8 +304,8 @@ public class TabletStatusBar extends StatusBar implements mStatusBarView.setIgnoreChildren(2, mRecentButton, mRecentsPanel); lp = new WindowManager.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM @@ -444,17 +451,24 @@ public class TabletStatusBar extends StatusBar implements // the whole right-hand side of the bar mNotificationArea = sb.findViewById(R.id.notificationArea); + if (!NOTIFICATION_PEEK_ENABLED) { + mNotificationArea.setOnTouchListener(new NotificationTriggerTouchListener()); + } // the button to open the notification area mNotificationTrigger = sb.findViewById(R.id.notificationTrigger); - mNotificationTrigger.setOnTouchListener(new NotificationTriggerTouchListener()); + if (NOTIFICATION_PEEK_ENABLED) { + mNotificationTrigger.setOnTouchListener(new NotificationTriggerTouchListener()); + } // the more notifications icon mNotificationIconArea = (NotificationIconArea)sb.findViewById(R.id.notificationIcons); // where the icons go mIconLayout = (NotificationIconArea.IconLayout) sb.findViewById(R.id.icons); - mIconLayout.setOnTouchListener(new NotificationIconTouchListener()); + if (NOTIFICATION_PEEK_ENABLED) { + mIconLayout.setOnTouchListener(new NotificationIconTouchListener()); + } ViewConfiguration vc = ViewConfiguration.get(context); mNotificationPeekTapDuration = vc.getTapTimeout(); @@ -471,25 +485,9 @@ public class TabletStatusBar extends StatusBar implements mBluetoothController.addIconView((ImageView)sb.findViewById(R.id.bluetooth)); mNetworkController = new NetworkController(mContext); - final ImageView comboRSSI = - (ImageView)sb.findViewById(R.id.network_signal); - if (comboRSSI != null) { - mNetworkController.addCombinedSignalIconView(comboRSSI); - } - final ImageView mobileRSSI = - (ImageView)sb.findViewById(R.id.mobile_signal); - if (mobileRSSI != null) { - mNetworkController.addPhoneSignalIconView(mobileRSSI); - } - final ImageView wifiRSSI = - (ImageView)sb.findViewById(R.id.wifi_signal); - if (wifiRSSI != null) { - mNetworkController.addWifiIconView(wifiRSSI); - } - mNetworkController.addDataTypeIconView( - (ImageView)sb.findViewById(R.id.network_type)); - mNetworkController.addDataDirectionOverlayIconView( - (ImageView)sb.findViewById(R.id.network_direction)); + final SignalClusterView signalCluster = + (SignalClusterView)sb.findViewById(R.id.signal_cluster); + mNetworkController.addSignalCluster(signalCluster); // The navigation buttons mBackButton = (ImageView)sb.findViewById(R.id.back); @@ -684,7 +682,9 @@ public class TabletStatusBar extends StatusBar implements case MSG_OPEN_NOTIFICATION_PANEL: if (DEBUG) Slog.d(TAG, "opening notifications panel"); if (!mNotificationPanel.isShowing()) { - mNotificationPeekWindow.setVisibility(View.GONE); + if (NOTIFICATION_PEEK_ENABLED) { + mNotificationPeekWindow.setVisibility(View.GONE); + } mNotificationPanel.show(true, true); mNotificationArea.setVisibility(View.INVISIBLE); mTicker.halt(); @@ -863,7 +863,7 @@ public class TabletStatusBar extends StatusBar implements oldEntry.largeIcon.setVisibility(View.INVISIBLE); } - if (key == mNotificationPeekKey) { + if (NOTIFICATION_PEEK_ENABLED && key == mNotificationPeekKey) { // must update the peek window Message peekMsg = mHandler.obtainMessage(MSG_OPEN_NOTIFICATION_PEEK); peekMsg.arg1 = mNotificationPeekIndex; @@ -1010,9 +1010,11 @@ public class TabletStatusBar extends StatusBar implements } public void animateExpand() { - mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK); - mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK); - mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK); + if (NOTIFICATION_PEEK_ENABLED) { + mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK); + mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK); + mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK); + } mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PANEL); mHandler.sendEmptyMessage(MSG_OPEN_NOTIFICATION_PANEL); } @@ -1026,8 +1028,10 @@ public class TabletStatusBar extends StatusBar implements mHandler.sendEmptyMessage(MSG_CLOSE_INPUT_METHODS_PANEL); mHandler.removeMessages(MSG_CLOSE_COMPAT_MODE_PANEL); mHandler.sendEmptyMessage(MSG_CLOSE_COMPAT_MODE_PANEL); - mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK); - mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK); + if (NOTIFICATION_PEEK_ENABLED) { + mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK); + mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK); + } } private void notifyUiVisibilityChanged() { @@ -1328,7 +1332,7 @@ public class TabletStatusBar extends StatusBar implements ViewGroup rowParent = (ViewGroup)entry.row.getParent(); if (rowParent != null) rowParent.removeView(entry.row); - if (key == mNotificationPeekKey) { + if (NOTIFICATION_PEEK_ENABLED && key == mNotificationPeekKey) { // must close the peek as well, since it's gone mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK); } @@ -1349,6 +1353,19 @@ public class TabletStatusBar extends StatusBar implements mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); } + private Runnable mHiliteOnR = new Runnable() { public void run() { + mNotificationArea.setBackgroundResource( + com.android.internal.R.drawable.list_selector_pressed_holo_dark); + }}; + public void hilite(final boolean on) { + if (on) { + mNotificationArea.postDelayed(mHiliteOnR, 100); + } else { + mNotificationArea.removeCallbacks(mHiliteOnR); + mNotificationArea.setBackgroundDrawable(null); + } + } + public boolean onTouch(View v, MotionEvent event) { // Slog.d(TAG, String.format("touch: (%.1f, %.1f) initial: (%.1f, %.1f)", // event.getX(), @@ -1361,6 +1378,7 @@ public class TabletStatusBar extends StatusBar implements mVT = VelocityTracker.obtain(); mInitialTouchX = event.getX(); mInitialTouchY = event.getY(); + hilite(true); // fall through case MotionEvent.ACTION_OUTSIDE: case MotionEvent.ACTION_MOVE: @@ -1371,6 +1389,7 @@ public class TabletStatusBar extends StatusBar implements // require a little more oomph once we're already in peekaboo mode if (mVT.getYVelocity() < -mNotificationFlingVelocity) { animateExpand(); + hilite(false); mVT.recycle(); mVT = null; } @@ -1378,6 +1397,7 @@ public class TabletStatusBar extends StatusBar implements return true; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: + hilite(false); if (mVT != null) { if (action == MotionEvent.ACTION_UP // was this a sloppy tap? @@ -1399,9 +1419,6 @@ public class TabletStatusBar extends StatusBar implements } } - final static int NOTIFICATION_PEEK_HOLD_THRESH = 200; // ms - final static int NOTIFICATION_PEEK_FADE_DELAY = 3000; // ms - public void resetNotificationPeekFadeTimer() { if (DEBUG) { Slog.d(TAG, "setting peek fade timer for " + NOTIFICATION_PEEK_FADE_DELAY diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java index 6ee5861..f52bb26 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java @@ -18,6 +18,7 @@ package com.android.internal.policy.impl; import com.android.internal.R; +import android.app.ActivityManager; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Resources; @@ -107,13 +108,16 @@ public class KeyguardViewManager implements KeyguardWindowController { int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER | WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING - | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED - | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED_SYSTEM /*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ; if (!mNeedsInput) { flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; } + if (ActivityManager.isHighEndGfx(((WindowManager)mContext.getSystemService( + Context.WINDOW_SERVICE)).getDefaultDisplay())) { + flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED + | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED_SYSTEM; + } WindowManager.LayoutParams lp = new WindowManager.LayoutParams( stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD, flags, PixelFormat.TRANSLUCENT); diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java index ee6d2ee..06b7fb9 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java @@ -143,6 +143,12 @@ public class KeyguardViewMediator implements KeyguardViewCallback, */ private static final int KEYGUARD_DONE_DRAWING_TIMEOUT_MS = 2000; + /** + * Allow the user to operate the status bar when the keyguard is engaged (without a pattern or + * password). + */ + private static final boolean ENABLE_STATUS_BAR_IN_KEYGUARD = true; + private Context mContext; private AlarmManager mAlarmManager; private StatusBarManager mStatusBarManager; @@ -1132,9 +1138,10 @@ public class KeyguardViewMediator implements KeyguardViewCallback, } } - // if the keyguard is shown, allow the status bar to open - // only if the keyguard is insecure and is covered by another window - boolean enable = !mShowing || (mHidden && !isSecure()); + // if the keyguard is shown, allow the status bar to open only if the keyguard is + // insecure and (is covered by another window OR this feature is enabled in general) + boolean enable = !mShowing + || ((ENABLE_STATUS_BAR_IN_KEYGUARD || mHidden) && !isSecure()); mStatusBarManager.disable(enable ? StatusBarManager.DISABLE_NONE : ( StatusBarManager.DISABLE_EXPAND diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 6dd4948..3dcc297 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -392,6 +392,14 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // Preparing the panel menu can involve a lot of manipulation; // don't dispatch change events to presenters until we're done. st.menu.stopDispatchingItemsChanged(); + + // Restore action view state before we prepare. This gives apps + // an opportunity to override frozen/restored state in onPrepare. + if (st.frozenActionViewState != null) { + st.menu.restoreActionViewStates(st.frozenActionViewState); + st.frozenActionViewState = null; + } + if (!cb.onPreparePanel(st.featureId, st.createdPanelView, st.menu)) { st.menu.startDispatchingItemsChanged(); return false; @@ -410,11 +418,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { st.isHandled = false; mPreparedPanel = st; - if (st.frozenActionViewState != null) { - st.menu.restoreActionViewStates(st.frozenActionViewState); - st.frozenActionViewState = null; - } - return true; } diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index a2dbb78..ff8dc92 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -243,6 +243,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { int mStatusBarHeight; final ArrayList<WindowState> mStatusBarPanels = new ArrayList<WindowState>(); WindowState mNavigationBar = null; + boolean mHasNavigationBar = false; + int mNavigationBarWidth = 0, mNavigationBarHeight = 0; WindowState mKeyguard = null; KeyguardViewMediator mKeyguardMediator; @@ -796,6 +798,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { mStatusBarCanHide ? com.android.internal.R.dimen.status_bar_height : com.android.internal.R.dimen.system_bar_height); + + mHasNavigationBar = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_showNavigationBar); + mNavigationBarHeight = mHasNavigationBar + ? mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_height) + : 0; + mNavigationBarWidth = mHasNavigationBar + ? mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_width) + : 0; } public void updateSettings() { @@ -1110,19 +1123,26 @@ public class PhoneWindowManager implements WindowManagerPolicy { } public int getNonDecorDisplayWidth(int rotation, int fullWidth) { - return fullWidth; + // Assumes that the navigation bar appears on the side of the display in landscape. + final boolean horizontal + = (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90); + return fullWidth - (horizontal ? mNavigationBarWidth : 0); } public int getNonDecorDisplayHeight(int rotation, int fullHeight) { - return mStatusBarCanHide ? fullHeight : (fullHeight - mStatusBarHeight); + final boolean horizontal + = (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90); + return fullHeight + - (mStatusBarCanHide ? 0 : mStatusBarHeight) + - (horizontal ? 0 : mNavigationBarHeight); } public int getConfigDisplayWidth(int rotation, int fullWidth) { - return fullWidth; + return getNonDecorDisplayWidth(rotation, fullWidth); } public int getConfigDisplayHeight(int rotation, int fullHeight) { - return fullHeight - mStatusBarHeight; + return getNonDecorDisplayHeight(rotation, fullHeight); } public boolean doesForceHide(WindowState win, WindowManager.LayoutParams attrs) { @@ -1851,7 +1871,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { final Rect cf = mTmpContentFrame; final Rect vf = mTmpVisibleFrame; - final boolean hasNavBar = (mNavigationBar != null && mNavigationBar.isVisibleLw()); + final boolean hasNavBar = (mHasNavigationBar + && mNavigationBar != null && mNavigationBar.isVisibleLw()); if (attrs.type == TYPE_INPUT_METHOD) { pf.left = df.left = cf.left = vf.left = mDockLeft; @@ -1943,6 +1964,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { ? mRestrictedScreenTop+mRestrictedScreenHeight : mUnrestrictedScreenTop+mUnrestrictedScreenHeight; + if (DEBUG_LAYOUT) { + Log.v(TAG, String.format( + "Laying out IN_SCREEN status bar window: (%d,%d - %d,%d)", + pf.left, pf.top, pf.right, pf.bottom)); + } } else if (attrs.type == TYPE_NAVIGATION_BAR) { // The navigation bar has Real Ultimate Power. pf.left = df.left = mUnrestrictedScreenLeft; diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index e201b17..941c9c8 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -264,6 +264,14 @@ status_t AudioFlinger::dumpClients(int fd, const Vector<String16>& args) } } } + + result.append("Global session refs:\n"); + result.append(" session pid cnt\n"); + for (size_t i = 0; i < mAudioSessionRefs.size(); i++) { + AudioSessionRef *r = mAudioSessionRefs[i]; + snprintf(buffer, SIZE, " %7d %3d %3d\n", r->sessionid, r->pid, r->cnt); + result.append(buffer); + } write(fd, result.string(), result.size()); return NO_ERROR; } @@ -892,6 +900,25 @@ void AudioFlinger::removeNotificationClient(pid_t pid) LOGV("removeNotificationClient() %p, pid %d", client.get(), pid); mNotificationClients.removeItem(pid); } + + LOGV("%d died, releasing its sessions", pid); + int num = mAudioSessionRefs.size(); + bool removed = false; + for (int i = 0; i< num; i++) { + AudioSessionRef *ref = mAudioSessionRefs.itemAt(i); + LOGV(" pid %d @ %d", ref->pid, i); + if (ref->pid == pid) { + LOGV(" removing entry for pid %d session %d", pid, ref->sessionid); + mAudioSessionRefs.removeAt(i); + delete ref; + removed = true; + i--; + num--; + } + } + if (removed) { + purgeStaleEffects_l(); + } } // audioConfigChanged_l() must be called with AudioFlinger::mLock held @@ -1205,18 +1232,6 @@ void AudioFlinger::ThreadBase::checkSuspendOnAddEffectChain_l(const sp<EffectCha } } -void AudioFlinger::ThreadBase::updateSuspendedSessionsOnRemoveEffectChain_l( - const sp<EffectChain>& chain) -{ - int index = mSuspendedSessions.indexOfKey(chain->sessionId()); - if (index < 0) { - return; - } - LOGV("updateSuspendedSessionsOnRemoveEffectChain_l() removed suspended session %d", - chain->sessionId()); - mSuspendedSessions.removeItemsAt(index); -} - void AudioFlinger::ThreadBase::updateSuspendedSessions_l(const effect_uuid_t *type, bool suspend, int sessionId) @@ -1284,7 +1299,14 @@ void AudioFlinger::ThreadBase::checkSuspendOnEffectEnabled(const sp<EffectModule { Mutex::Autolock _l(mLock); - // TODO: implement PlaybackThread or RecordThread specific behavior here + if (mType != RECORD) { + // suspend all effects in AUDIO_SESSION_OUTPUT_MIX when enabling any effect on + // another session. This gives the priority to well behaved effect control panels + // and applications not using global effects. + if (sessionId != AUDIO_SESSION_OUTPUT_MIX) { + setEffectSuspended_l(NULL, enabled, AUDIO_SESSION_OUTPUT_MIX); + } + } sp<EffectChain> chain = getEffectChain_l(sessionId); if (chain != 0) { @@ -5042,6 +5064,111 @@ int AudioFlinger::newAudioSessionId() return nextUniqueId(); } +void AudioFlinger::acquireAudioSessionId(int audioSession) +{ + Mutex::Autolock _l(mLock); + int caller = IPCThreadState::self()->getCallingPid(); + LOGV("acquiring %d from %d", audioSession, caller); + int num = mAudioSessionRefs.size(); + for (int i = 0; i< num; i++) { + AudioSessionRef *ref = mAudioSessionRefs.editItemAt(i); + if (ref->sessionid == audioSession && ref->pid == caller) { + ref->cnt++; + LOGV(" incremented refcount to %d", ref->cnt); + return; + } + } + AudioSessionRef *ref = new AudioSessionRef(); + ref->sessionid = audioSession; + ref->pid = caller; + ref->cnt = 1; + mAudioSessionRefs.push(ref); + LOGV(" added new entry for %d", ref->sessionid); +} + +void AudioFlinger::releaseAudioSessionId(int audioSession) +{ + Mutex::Autolock _l(mLock); + int caller = IPCThreadState::self()->getCallingPid(); + LOGV("releasing %d from %d", audioSession, caller); + int num = mAudioSessionRefs.size(); + for (int i = 0; i< num; i++) { + AudioSessionRef *ref = mAudioSessionRefs.itemAt(i); + if (ref->sessionid == audioSession && ref->pid == caller) { + ref->cnt--; + LOGV(" decremented refcount to %d", ref->cnt); + if (ref->cnt == 0) { + mAudioSessionRefs.removeAt(i); + delete ref; + purgeStaleEffects_l(); + } + return; + } + } + LOGW("session id %d not found for pid %d", audioSession, caller); +} + +void AudioFlinger::purgeStaleEffects_l() { + + LOGV("purging stale effects"); + + Vector< sp<EffectChain> > chains; + + for (size_t i = 0; i < mPlaybackThreads.size(); i++) { + sp<PlaybackThread> t = mPlaybackThreads.valueAt(i); + for (size_t j = 0; j < t->mEffectChains.size(); j++) { + sp<EffectChain> ec = t->mEffectChains[j]; + if (ec->sessionId() > AUDIO_SESSION_OUTPUT_MIX) { + chains.push(ec); + } + } + } + for (size_t i = 0; i < mRecordThreads.size(); i++) { + sp<RecordThread> t = mRecordThreads.valueAt(i); + for (size_t j = 0; j < t->mEffectChains.size(); j++) { + sp<EffectChain> ec = t->mEffectChains[j]; + chains.push(ec); + } + } + + for (size_t i = 0; i < chains.size(); i++) { + sp<EffectChain> ec = chains[i]; + int sessionid = ec->sessionId(); + sp<ThreadBase> t = ec->mThread.promote(); + if (t == 0) { + continue; + } + size_t numsessionrefs = mAudioSessionRefs.size(); + bool found = false; + for (size_t k = 0; k < numsessionrefs; k++) { + AudioSessionRef *ref = mAudioSessionRefs.itemAt(k); + if (ref->sessionid == sessionid) { + LOGV(" session %d still exists for %d with %d refs", + sessionid, ref->pid, ref->cnt); + found = true; + break; + } + } + if (!found) { + // remove all effects from the chain + while (ec->mEffects.size()) { + sp<EffectModule> effect = ec->mEffects[0]; + effect->unPin(); + Mutex::Autolock _l (t->mLock); + t->removeEffect_l(effect); + for (size_t j = 0; j < effect->mHandles.size(); j++) { + sp<EffectHandle> handle = effect->mHandles[j].promote(); + if (handle != 0) { + handle->mEffect.clear(); + } + } + AudioSystem::unregisterEffect(effect->id()); + } + } + } + return; +} + // checkPlaybackThread_l() must be called with AudioFlinger::mLock held AudioFlinger::PlaybackThread *AudioFlinger::checkPlaybackThread_l(int output) const { @@ -5199,6 +5326,7 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, } uint32_t numEffects = 0; effect_descriptor_t d; + d.flags = 0; // prevent compiler warning bool found = false; lStatus = EffectQueryNumberEffects(&numEffects); @@ -5302,7 +5430,7 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, mClients.add(pid, client); } - // create effect on selected output trhead + // create effect on selected output thread handle = thread->createEffect_l(client, effectClient, priority, sessionId, &desc, enabled, &lStatus); if (handle != 0 && id != NULL) { @@ -5344,7 +5472,7 @@ status_t AudioFlinger::moveEffects(int sessionId, int srcOutput, int dstOutput) return NO_ERROR; } -// moveEffectChain_l mustbe called with both srcThread and dstThread mLocks held +// moveEffectChain_l must be called with both srcThread and dstThread mLocks held status_t AudioFlinger::moveEffectChain_l(int sessionId, AudioFlinger::PlaybackThread *srcThread, AudioFlinger::PlaybackThread *dstThread, @@ -5370,7 +5498,7 @@ status_t AudioFlinger::moveEffectChain_l(int sessionId, // correct buffer sizes and audio parameters and effect engines reconfigured accordingly int dstOutput = dstThread->id(); sp<EffectChain> dstChain; - uint32_t strategy; + uint32_t strategy = 0; // prevent compiler warning sp<EffectModule> effect = chain->getEffectFromId_l(0); while (effect != 0) { srcThread->removeEffect_l(effect); @@ -5632,14 +5760,17 @@ void AudioFlinger::ThreadBase::setMode(uint32_t mode) } void AudioFlinger::ThreadBase::disconnectEffect(const sp<EffectModule>& effect, - const wp<EffectHandle>& handle) { + const wp<EffectHandle>& handle, + bool unpiniflast) { Mutex::Autolock _l(mLock); LOGV("disconnectEffect() %p effect %p", this, effect.get()); // delete the effect module if removing last handle on it if (effect->removeHandle(handle) == 0) { - removeEffect_l(effect); - AudioSystem::unregisterEffect(effect->id()); + if (!effect->isPinned() || unpiniflast) { + removeEffect_l(effect); + AudioSystem::unregisterEffect(effect->id()); + } } } @@ -5713,7 +5844,6 @@ size_t AudioFlinger::PlaybackThread::removeEffectChain_l(const sp<EffectChain>& for (size_t i = 0; i < mEffectChains.size(); i++) { if (chain == mEffectChains[i]) { - updateSuspendedSessionsOnRemoveEffectChain_l(chain); mEffectChains.removeAt(i); // detach all active tracks from the chain for (size_t i = 0 ; i < mActiveTracks.size() ; ++i) { @@ -5805,7 +5935,6 @@ size_t AudioFlinger::RecordThread::removeEffectChain_l(const sp<EffectChain>& ch "removeEffectChain_l() %p invalid chain size %d on thread %p", chain.get(), mEffectChains.size(), this); if (mEffectChains.size() == 1) { - updateSuspendedSessionsOnRemoveEffectChain_l(chain); mEffectChains.removeAt(0); } return 0; @@ -5847,6 +5976,9 @@ AudioFlinger::EffectModule::EffectModule(const wp<ThreadBase>& wThread, goto Error; } + if (mSessionId > AUDIO_SESSION_OUTPUT_MIX) { + mPinned = true; + } LOGV("Constructor success name %s, Interface %p", mDescriptor.name, mEffectInterface); return; Error: @@ -5938,7 +6070,7 @@ size_t AudioFlinger::EffectModule::removeHandle(const wp<EffectHandle>& handle) // Prevent calls to process() and other functions on effect interface from now on. // The effect engine will be released by the destructor when the last strong reference on // this object is released which can happen after next process is called. - if (size == 0) { + if (size == 0 && !mPinned) { mState = DESTROYED; } @@ -5955,9 +6087,7 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::EffectModule::controlHandle() return handle; } - - -void AudioFlinger::EffectModule::disconnect(const wp<EffectHandle>& handle) +void AudioFlinger::EffectModule::disconnect(const wp<EffectHandle>& handle, bool unpiniflast) { LOGV("disconnect() %p handle %p ", this, handle.unsafe_get()); // keep a strong reference on this EffectModule to avoid calling the @@ -5966,7 +6096,7 @@ void AudioFlinger::EffectModule::disconnect(const wp<EffectHandle>& handle) { sp<ThreadBase> thread = mThread.promote(); if (thread != 0) { - thread->disconnectEffect(keep, handle); + thread->disconnectEffect(keep, handle, unpiniflast); } } } @@ -6258,10 +6388,16 @@ status_t AudioFlinger::EffectModule::command(uint32_t cmdCode, status_t AudioFlinger::EffectModule::setEnabled(bool enabled) { + Mutex::Autolock _l(mLock); LOGV("setEnabled %p enabled %d", this, enabled); if (enabled != isEnabled()) { + status_t status = AudioSystem::setEffectEnabled(mId, enabled); + if (enabled && status != NO_ERROR) { + return status; + } + switch (mState) { // going from disabled to enabled case IDLE: @@ -6533,11 +6669,14 @@ AudioFlinger::EffectHandle::EffectHandle(const sp<EffectModule>& effect, const sp<IEffectClient>& effectClient, int32_t priority) : BnEffect(), - mEffect(effect), mEffectClient(effectClient), mClient(client), + mEffect(effect), mEffectClient(effectClient), mClient(client), mCblk(NULL), mPriority(priority), mHasControl(false), mEnabled(false) { LOGV("constructor %p", this); + if (client == 0) { + return; + } int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int); mCblkMemory = client->heap()->allocate(EFFECT_PARAM_BUFFER_SIZE + bufOffset); if (mCblkMemory != 0) { @@ -6556,7 +6695,7 @@ AudioFlinger::EffectHandle::EffectHandle(const sp<EffectModule>& effect, AudioFlinger::EffectHandle::~EffectHandle() { LOGV("Destructor %p", this); - disconnect(); + disconnect(false); LOGV("Destructor DONE %p", this); } @@ -6566,6 +6705,10 @@ status_t AudioFlinger::EffectHandle::enable() if (!mHasControl) return INVALID_OPERATION; if (mEffect == 0) return DEAD_OBJECT; + if (mEnabled) { + return NO_ERROR; + } + mEnabled = true; sp<ThreadBase> thread = mEffect->thread().promote(); @@ -6578,7 +6721,14 @@ status_t AudioFlinger::EffectHandle::enable() return NO_ERROR; } - return mEffect->setEnabled(true); + status_t status = mEffect->setEnabled(true); + if (status != NO_ERROR) { + if (thread != 0) { + thread->checkSuspendOnEffectEnabled(mEffect, false, mEffect->sessionId()); + } + mEnabled = false; + } + return status; } status_t AudioFlinger::EffectHandle::disable() @@ -6587,6 +6737,9 @@ status_t AudioFlinger::EffectHandle::disable() if (!mHasControl) return INVALID_OPERATION; if (mEffect == 0) return DEAD_OBJECT; + if (!mEnabled) { + return NO_ERROR; + } mEnabled = false; if (mEffect->suspended()) { @@ -6605,25 +6758,31 @@ status_t AudioFlinger::EffectHandle::disable() void AudioFlinger::EffectHandle::disconnect() { - LOGV("disconnect %p", this); + disconnect(true); +} + +void AudioFlinger::EffectHandle::disconnect(bool unpiniflast) +{ + LOGV("disconnect(%s)", unpiniflast ? "true" : "false"); if (mEffect == 0) { return; } + mEffect->disconnect(this, unpiniflast); - mEffect->disconnect(this); - - sp<ThreadBase> thread = mEffect->thread().promote(); - if (thread != 0) { - thread->checkSuspendOnEffectEnabled(mEffect, false, mEffect->sessionId()); + if (mEnabled) { + sp<ThreadBase> thread = mEffect->thread().promote(); + if (thread != 0) { + thread->checkSuspendOnEffectEnabled(mEffect, false, mEffect->sessionId()); + } } // release sp on module => module destructor can be called now mEffect.clear(); - if (mCblk) { - mCblk->~effect_param_cblk_t(); // destroy our shared-structure. - } - mCblkMemory.clear(); // and free the shared memory if (mClient != 0) { + if (mCblk) { + mCblk->~effect_param_cblk_t(); // destroy our shared-structure. + } + mCblkMemory.clear(); // and free the shared memory Mutex::Autolock _l(mClient->audioFlinger()->mLock); mClient.clear(); } @@ -6643,6 +6802,7 @@ status_t AudioFlinger::EffectHandle::command(uint32_t cmdCode, return INVALID_OPERATION; } if (mEffect == 0) return DEAD_OBJECT; + if (mClient == 0) return INVALID_OPERATION; // handle commands that are not forwarded transparently to effect engine if (cmdCode == EFFECT_CMD_SET_PARAM_COMMIT) { @@ -6749,15 +6909,15 @@ status_t AudioFlinger::EffectHandle::onTransact( void AudioFlinger::EffectHandle::dump(char* buffer, size_t size) { - bool locked = tryLock(mCblk->lock); + bool locked = mCblk ? tryLock(mCblk->lock) : false; snprintf(buffer, size, "\t\t\t%05d %05d %01u %01u %05u %05u\n", (mClient == NULL) ? getpid() : mClient->pid(), mPriority, mHasControl, !locked, - mCblk->clientIndex, - mCblk->serverIndex + mCblk ? mCblk->clientIndex : 0, + mCblk ? mCblk->serverIndex : 0 ); if (locked) { @@ -7224,15 +7384,22 @@ void AudioFlinger::EffectChain::setEffectSuspendedAll_l(bool suspend) } } +bool AudioFlinger::EffectChain::isEffectEligibleForSuspend(const effect_descriptor_t& desc) +{ + // auxiliary effects and visualizer are never suspended on output mix + if ((mSessionId == AUDIO_SESSION_OUTPUT_MIX) && + (((desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) || + (memcmp(&desc.type, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0))) { + return false; + } + return true; +} + Vector< sp<AudioFlinger::EffectModule> > AudioFlinger::EffectChain::getSuspendEligibleEffects() { Vector< sp<EffectModule> > effects; for (size_t i = 0; i < mEffects.size(); i++) { - effect_descriptor_t desc = mEffects[i]->desc(); - // auxiliary effects and vizualizer are never suspended on output mix - if ((mSessionId == AUDIO_SESSION_OUTPUT_MIX) && ( - ((desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) || - (memcmp(&desc.type, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0))) { + if (!isEffectEligibleForSuspend(mEffects[i]->desc())) { continue; } effects.add(mEffects[i]); @@ -7262,8 +7429,15 @@ void AudioFlinger::EffectChain::checkSuspendOnEffectEnabled(const sp<EffectModul if (index < 0) { return; } + if (!isEffectEligibleForSuspend(effect->desc())) { + return; + } setEffectSuspended_l(&effect->desc().type, enabled); index = mSuspendedEffects.indexOfKey(effect->desc().type.timeLow); + if (index < 0) { + LOGW("checkSuspendOnEffectEnabled() Fx should be suspended here!"); + return; + } } LOGV("checkSuspendOnEffectEnabled() enable suspending fx %08x", effect->desc().type.timeLow); diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 4fa70a2..1141f6c 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -149,6 +149,10 @@ public: virtual int newAudioSessionId(); + virtual void acquireAudioSessionId(int audioSession); + + virtual void releaseAudioSessionId(int audioSession); + virtual status_t queryNumberEffects(uint32_t *numEffects); virtual status_t queryEffect(uint32_t index, effect_descriptor_t *descriptor); @@ -215,6 +219,7 @@ private: status_t initCheck() const; virtual void onFirstRef(); audio_hw_device_t* findSuitableHwDev_l(uint32_t devices); + void purgeStaleEffects_l(); // Internal dump utilites. status_t dumpPermissionDenial(int fd, const Vector<String16>& args); @@ -436,7 +441,8 @@ private: int *enabled, status_t *status); void disconnectEffect(const sp< EffectModule>& effect, - const wp<EffectHandle>& handle); + const wp<EffectHandle>& handle, + bool unpiniflast); // return values for hasAudioSession (bit field) enum effect_state { @@ -516,9 +522,8 @@ private: int sessionId); // check if some effects must be suspended when an effect chain is added void checkSuspendOnAddEffectChain_l(const sp<EffectChain>& chain); - // updated mSuspendedSessions when an effect chain is removed - void updateSuspendedSessionsOnRemoveEffectChain_l(const sp<EffectChain>& chain); + friend class AudioFlinger; friend class Track; friend class TrackBase; friend class PlaybackThread; @@ -607,7 +612,6 @@ private: protected: friend class ThreadBase; - friend class AudioFlinger; friend class TrackHandle; friend class PlaybackThread; friend class MixerThread; @@ -1100,7 +1104,7 @@ private: wp<ThreadBase>& thread() { return mThread; } status_t addHandle(sp<EffectHandle>& handle); - void disconnect(const wp<EffectHandle>& handle); + void disconnect(const wp<EffectHandle>& handle, bool unpiniflast); size_t removeHandle (const wp<EffectHandle>& handle); effect_descriptor_t& desc() { return mDescriptor; } @@ -1115,9 +1119,15 @@ private: sp<EffectHandle> controlHandle(); + bool isPinned() { return mPinned; } + void unPin() { mPinned = false; } + status_t dump(int fd, const Vector<String16>& args); protected: + friend class EffectHandle; + friend class AudioFlinger; + bool mPinned; // Maximum time allocated to effect engines to complete the turn off sequence static const uint32_t MAX_DISABLE_TIME_MS = 10000; @@ -1169,6 +1179,7 @@ private: uint32_t *replySize, void *pReplyData); virtual void disconnect(); + virtual void disconnect(bool unpiniflast); virtual sp<IMemory> getCblk() const; virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); @@ -1196,7 +1207,8 @@ private: void dump(char* buffer, size_t size); protected: - + friend class AudioFlinger; + friend class EffectModule; EffectHandle(const EffectHandle&); EffectHandle& operator =(const EffectHandle&); @@ -1288,7 +1300,7 @@ private: status_t dump(int fd, const Vector<String16>& args); protected: - + friend class AudioFlinger; EffectChain(const EffectChain&); EffectChain& operator =(const EffectChain&); @@ -1306,6 +1318,10 @@ private: Vector< sp<EffectModule> > getSuspendEligibleEffects(); // get an effect module if it is currently enable sp<EffectModule> getEffectIfEnabled(const effect_uuid_t *type); + // true if the effect whose descriptor is passed can be suspended + // OEMs can modify the rules implemented in this method to exclude specific effect + // types or implementations from the suspend/restore mechanism. + bool isEffectEligibleForSuspend(const effect_descriptor_t& desc); wp<ThreadBase> mThread; // parent mixer thread Mutex mLock; // mutex protecting effect list @@ -1344,6 +1360,12 @@ private: hwDev(dev), stream(in) {} }; + struct AudioSessionRef { + int sessionid; + pid_t pid; + int cnt; + }; + friend class RecordThread; friend class PlaybackThread; @@ -1369,6 +1391,7 @@ private: uint32_t mMode; bool mBtNrec; + Vector<AudioSessionRef*> mAudioSessionRefs; }; diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp index 6d06d83..d747b5ad 100644 --- a/services/audioflinger/AudioPolicyService.cpp +++ b/services/audioflinger/AudioPolicyService.cpp @@ -488,6 +488,14 @@ status_t AudioPolicyService::unregisterEffect(int id) return mpAudioPolicy->unregister_effect(mpAudioPolicy, id); } +status_t AudioPolicyService::setEffectEnabled(int id, bool enabled) +{ + if (mpAudioPolicy == NULL) { + return NO_INIT; + } + return mpAudioPolicy->set_effect_enabled(mpAudioPolicy, id, enabled); +} + bool AudioPolicyService::isStreamActive(int stream, uint32_t inPastMs) const { if (mpAudioPolicy == NULL) { diff --git a/services/audioflinger/AudioPolicyService.h b/services/audioflinger/AudioPolicyService.h index 834b794..d898a53 100644 --- a/services/audioflinger/AudioPolicyService.h +++ b/services/audioflinger/AudioPolicyService.h @@ -102,6 +102,7 @@ public: int session, int id); virtual status_t unregisterEffect(int id); + virtual status_t setEffectEnabled(int id, bool enabled); virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const; virtual status_t queryDefaultPreProcessing(int audioSession, diff --git a/services/input/EventHub.cpp b/services/input/EventHub.cpp index 7ea3de2..1d7cc19 100644 --- a/services/input/EventHub.cpp +++ b/services/input/EventHub.cpp @@ -205,27 +205,30 @@ status_t EventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis, RawAbsoluteAxisInfo* outAxisInfo) const { outAxisInfo->clear(); - AutoMutex _l(mLock); - Device* device = getDeviceLocked(deviceId); - if (device == NULL) return -1; - - struct input_absinfo info; + if (axis >= 0 && axis <= ABS_MAX) { + AutoMutex _l(mLock); - if(ioctl(device->fd, EVIOCGABS(axis), &info)) { - LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d", - axis, device->identifier.name.string(), device->fd, errno); - return -errno; - } + Device* device = getDeviceLocked(deviceId); + if (device && test_bit(axis, device->absBitmask)) { + struct input_absinfo info; + if(ioctl(device->fd, EVIOCGABS(axis), &info)) { + LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d", + axis, device->identifier.name.string(), device->fd, errno); + return -errno; + } - if (info.minimum != info.maximum) { - outAxisInfo->valid = true; - outAxisInfo->minValue = info.minimum; - outAxisInfo->maxValue = info.maximum; - outAxisInfo->flat = info.flat; - outAxisInfo->fuzz = info.fuzz; - outAxisInfo->resolution = info.resolution; + if (info.minimum != info.maximum) { + outAxisInfo->valid = true; + outAxisInfo->minValue = info.minimum; + outAxisInfo->maxValue = info.maximum; + outAxisInfo->flat = info.flat; + outAxisInfo->fuzz = info.fuzz; + outAxisInfo->resolution = info.resolution; + } + return OK; + } } - return OK; + return -1; } bool EventHub::hasRelativeAxis(int32_t deviceId, int axis) const { @@ -233,7 +236,7 @@ bool EventHub::hasRelativeAxis(int32_t deviceId, int axis) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device && device->relBitmask) { + if (device) { return test_bit(axis, device->relBitmask); } } @@ -245,7 +248,7 @@ bool EventHub::hasInputProperty(int32_t deviceId, int property) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device && device->propBitmask) { + if (device) { return test_bit(property, device->propBitmask); } } @@ -257,58 +260,37 @@ int32_t EventHub::getScanCodeState(int32_t deviceId, int32_t scanCode) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device != NULL) { - return getScanCodeStateLocked(device, scanCode); + if (device && test_bit(scanCode, device->keyBitmask)) { + uint8_t keyState[sizeof_bit_array(KEY_MAX + 1)]; + memset(keyState, 0, sizeof(keyState)); + if (ioctl(device->fd, EVIOCGKEY(sizeof(keyState)), keyState) >= 0) { + return test_bit(scanCode, keyState) ? AKEY_STATE_DOWN : AKEY_STATE_UP; + } } } return AKEY_STATE_UNKNOWN; } -int32_t EventHub::getScanCodeStateLocked(Device* device, int32_t scanCode) const { - uint8_t key_bitmask[sizeof_bit_array(KEY_MAX + 1)]; - memset(key_bitmask, 0, sizeof(key_bitmask)); - if (ioctl(device->fd, - EVIOCGKEY(sizeof(key_bitmask)), key_bitmask) >= 0) { - return test_bit(scanCode, key_bitmask) ? AKEY_STATE_DOWN : AKEY_STATE_UP; - } - return AKEY_STATE_UNKNOWN; -} - int32_t EventHub::getKeyCodeState(int32_t deviceId, int32_t keyCode) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device != NULL) { - return getKeyCodeStateLocked(device, keyCode); - } - return AKEY_STATE_UNKNOWN; -} - -int32_t EventHub::getKeyCodeStateLocked(Device* device, int32_t keyCode) const { - if (!device->keyMap.haveKeyLayout()) { - return AKEY_STATE_UNKNOWN; - } - - Vector<int32_t> scanCodes; - device->keyMap.keyLayoutMap->findScanCodesForKey(keyCode, &scanCodes); - - uint8_t key_bitmask[sizeof_bit_array(KEY_MAX + 1)]; - memset(key_bitmask, 0, sizeof(key_bitmask)); - if (ioctl(device->fd, EVIOCGKEY(sizeof(key_bitmask)), key_bitmask) >= 0) { - #if 0 - for (size_t i=0; i<=KEY_MAX; i++) { - LOGI("(Scan code %d: down=%d)", i, test_bit(i, key_bitmask)); - } - #endif - const size_t N = scanCodes.size(); - for (size_t i=0; i<N && i<=KEY_MAX; i++) { - int32_t sc = scanCodes.itemAt(i); - //LOGI("Code %d: down=%d", sc, test_bit(sc, key_bitmask)); - if (sc >= 0 && sc <= KEY_MAX && test_bit(sc, key_bitmask)) { - return AKEY_STATE_DOWN; + if (device && device->keyMap.haveKeyLayout()) { + Vector<int32_t> scanCodes; + device->keyMap.keyLayoutMap->findScanCodesForKey(keyCode, &scanCodes); + if (scanCodes.size() != 0) { + uint8_t keyState[sizeof_bit_array(KEY_MAX + 1)]; + memset(keyState, 0, sizeof(keyState)); + if (ioctl(device->fd, EVIOCGKEY(sizeof(keyState)), keyState) >= 0) { + for (size_t i = 0; i < scanCodes.size(); i++) { + int32_t sc = scanCodes.itemAt(i); + if (sc >= 0 && sc <= KEY_MAX && test_bit(sc, keyState)) { + return AKEY_STATE_DOWN; + } + } + return AKEY_STATE_UP; } } - return AKEY_STATE_UP; } return AKEY_STATE_UNKNOWN; } @@ -318,85 +300,65 @@ int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device != NULL) { - return getSwitchStateLocked(device, sw); + if (device && test_bit(sw, device->swBitmask)) { + uint8_t swState[sizeof_bit_array(SW_MAX + 1)]; + memset(swState, 0, sizeof(swState)); + if (ioctl(device->fd, EVIOCGSW(sizeof(swState)), swState) >= 0) { + return test_bit(sw, swState) ? AKEY_STATE_DOWN : AKEY_STATE_UP; + } } } return AKEY_STATE_UNKNOWN; } -int32_t EventHub::getSwitchStateLocked(Device* device, int32_t sw) const { - uint8_t sw_bitmask[sizeof_bit_array(SW_MAX + 1)]; - memset(sw_bitmask, 0, sizeof(sw_bitmask)); - if (ioctl(device->fd, - EVIOCGSW(sizeof(sw_bitmask)), sw_bitmask) >= 0) { - return test_bit(sw, sw_bitmask) ? AKEY_STATE_DOWN : AKEY_STATE_UP; - } - return AKEY_STATE_UNKNOWN; -} - status_t EventHub::getAbsoluteAxisValue(int32_t deviceId, int32_t axis, int32_t* outValue) const { + *outValue = 0; + if (axis >= 0 && axis <= ABS_MAX) { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device != NULL) { - return getAbsoluteAxisValueLocked(device, axis, outValue); + if (device && test_bit(axis, device->absBitmask)) { + struct input_absinfo info; + if(ioctl(device->fd, EVIOCGABS(axis), &info)) { + LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d", + axis, device->identifier.name.string(), device->fd, errno); + return -errno; + } + + *outValue = info.value; + return OK; } } - *outValue = 0; return -1; } -status_t EventHub::getAbsoluteAxisValueLocked(Device* device, int32_t axis, - int32_t* outValue) const { - struct input_absinfo info; - - if(ioctl(device->fd, EVIOCGABS(axis), &info)) { - LOGW("Error reading absolute controller %d for device %s fd %d, errno=%d", - axis, device->identifier.name.string(), device->fd, errno); - return -errno; - } - - *outValue = info.value; - return OK; -} - bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const { AutoMutex _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device != NULL) { - return markSupportedKeyCodesLocked(device, numCodes, keyCodes, outFlags); - } - return false; -} - -bool EventHub::markSupportedKeyCodesLocked(Device* device, size_t numCodes, - const int32_t* keyCodes, uint8_t* outFlags) const { - if (!device->keyMap.haveKeyLayout()) { - return false; - } - - Vector<int32_t> scanCodes; - for (size_t codeIndex = 0; codeIndex < numCodes; codeIndex++) { - scanCodes.clear(); - - status_t err = device->keyMap.keyLayoutMap->findScanCodesForKey( - keyCodes[codeIndex], &scanCodes); - if (! err) { - // check the possible scan codes identified by the layout map against the - // map of codes actually emitted by the driver - for (size_t sc = 0; sc < scanCodes.size(); sc++) { - if (test_bit(scanCodes[sc], device->keyBitmask)) { - outFlags[codeIndex] = 1; - break; + if (device && device->keyMap.haveKeyLayout()) { + Vector<int32_t> scanCodes; + for (size_t codeIndex = 0; codeIndex < numCodes; codeIndex++) { + scanCodes.clear(); + + status_t err = device->keyMap.keyLayoutMap->findScanCodesForKey( + keyCodes[codeIndex], &scanCodes); + if (! err) { + // check the possible scan codes identified by the layout map against the + // map of codes actually emitted by the driver + for (size_t sc = 0; sc < scanCodes.size(); sc++) { + if (test_bit(scanCodes[sc], device->keyBitmask)) { + outFlags[codeIndex] = 1; + break; + } } } } + return true; } - return true; + return false; } status_t EventHub::mapKey(int32_t deviceId, int scancode, @@ -1333,4 +1295,11 @@ void EventHub::dump(String8& dump) { } // release lock } +void EventHub::monitor() { + // Acquire and release the lock to ensure that the event hub has not deadlocked. + mLock.lock(); + mLock.unlock(); +} + + }; // namespace android diff --git a/services/input/EventHub.h b/services/input/EventHub.h index 293a1a0..fae5d4f 100644 --- a/services/input/EventHub.h +++ b/services/input/EventHub.h @@ -208,7 +208,11 @@ public: /* Wakes up getEvents() if it is blocked on a read. */ virtual void wake() = 0; + /* Dump EventHub state to a string. */ virtual void dump(String8& dump) = 0; + + /* Called by the heatbeat to ensures that the reader has not deadlocked. */ + virtual void monitor() = 0; }; class EventHub : public EventHubInterface @@ -259,6 +263,7 @@ public: virtual void wake(); virtual void dump(String8& dump); + virtual void monitor(); protected: virtual ~EventHub(); @@ -307,13 +312,6 @@ private: bool hasKeycodeLocked(Device* device, int keycode) const; - int32_t getScanCodeStateLocked(Device* device, int32_t scanCode) const; - int32_t getKeyCodeStateLocked(Device* device, int32_t keyCode) const; - int32_t getSwitchStateLocked(Device* device, int32_t sw) const; - int32_t getAbsoluteAxisValueLocked(Device* device, int32_t axis, int32_t* outValue) const; - bool markSupportedKeyCodesLocked(Device* device, size_t numCodes, - const int32_t* keyCodes, uint8_t* outFlags) const; - void loadConfigurationLocked(Device* device); status_t loadVirtualKeyMapLocked(Device* device); status_t loadKeyMapLocked(Device* device); diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp index ce9e14f..22372cf 100644 --- a/services/input/InputDispatcher.cpp +++ b/services/input/InputDispatcher.cpp @@ -3919,6 +3919,8 @@ void InputDispatcher::updateDispatchStatisticsLocked(nsecs_t currentTime, const } void InputDispatcher::dump(String8& dump) { + AutoMutex _l(mLock); + dump.append("Input Dispatcher State:\n"); dumpDispatchStateLocked(dump); @@ -3928,6 +3930,12 @@ void InputDispatcher::dump(String8& dump) { dump.appendFormat(INDENT2 "KeyRepeatTimeout: %0.1fms\n", mConfig.keyRepeatTimeout * 0.000001f); } +void InputDispatcher::monitor() { + // Acquire and release the lock to ensure that the dispatcher has not deadlocked. + mLock.lock(); + mLock.unlock(); +} + // --- InputDispatcher::Queue --- diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h index 01c7b35..cae1610 100644 --- a/services/input/InputDispatcher.h +++ b/services/input/InputDispatcher.h @@ -282,6 +282,9 @@ public: * This method may be called on any thread (usually by the input manager). */ virtual void dump(String8& dump) = 0; + /* Called by the heatbeat to ensures that the dispatcher has not deadlocked. */ + virtual void monitor() = 0; + /* Runs a single iteration of the dispatch loop. * Nominally processes one queued event, a timeout, or a response from an input consumer. * @@ -370,6 +373,7 @@ public: explicit InputDispatcher(const sp<InputDispatcherPolicyInterface>& policy); virtual void dump(String8& dump); + virtual void monitor(); virtual void dispatchOnce(); diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp index 8786c24..2035a4b 100644 --- a/services/input/InputReader.cpp +++ b/services/input/InputReader.cpp @@ -731,6 +731,15 @@ void InputReader::dump(String8& dump) { mConfig.pointerGestureZoomSpeedRatio); } +void InputReader::monitor() { + // Acquire and release the lock to ensure that the reader has not deadlocked. + mLock.lock(); + mLock.unlock(); + + // Check the EventHub + mEventHub->monitor(); +} + // --- InputReader::ContextImpl --- @@ -1170,9 +1179,8 @@ int32_t TouchButtonAccumulator::getToolType() const { return AMOTION_EVENT_TOOL_TYPE_UNKNOWN; } -bool TouchButtonAccumulator::isActive() const { - return mBtnTouch || mBtnToolFinger || mBtnToolPen - || mBtnToolRubber || mBtnStylus || mBtnStylus2; +bool TouchButtonAccumulator::isToolActive() const { + return mBtnTouch || mBtnToolFinger || mBtnToolPen || mBtnToolRubber; } bool TouchButtonAccumulator::isHovering() const { @@ -1327,7 +1335,7 @@ void MultiTouchMotionAccumulator::configure(size_t slotCount, bool usingSlotsPro void MultiTouchMotionAccumulator::clearSlots(int32_t initialSlot) { for (size_t i = 0; i < mSlotCount; i++) { - mSlots[i].clearIfInUse(); + mSlots[i].clear(); } mCurrentSlot = initialSlot; } @@ -1388,7 +1396,9 @@ void MultiTouchMotionAccumulator::process(const RawEvent* rawEvent) { break; case ABS_MT_TRACKING_ID: if (mUsingSlotsProtocol && rawEvent->value < 0) { - slot->clearIfInUse(); + // The slot is no longer in use but it retains its previous contents, + // which may be reused for subsequent touches. + slot->mInUse = false; } else { slot->mInUse = true; slot->mAbsMTTrackingId = rawEvent->value; @@ -1422,12 +1432,6 @@ MultiTouchMotionAccumulator::Slot::Slot() { clear(); } -void MultiTouchMotionAccumulator::Slot::clearIfInUse() { - if (mInUse) { - clear(); - } -} - void MultiTouchMotionAccumulator::Slot::clear() { mInUse = false; mHaveAbsMTTouchMinor = false; @@ -2209,10 +2213,6 @@ void TouchInputMapper::dump(String8& dump) { dump.appendFormat(INDENT4 "XPrecision: %0.3f\n", mXPrecision); dump.appendFormat(INDENT4 "YPrecision: %0.3f\n", mYPrecision); dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mGeometricScale); - dump.appendFormat(INDENT4 "ToolSizeLinearScale: %0.3f\n", mToolSizeLinearScale); - dump.appendFormat(INDENT4 "ToolSizeLinearBias: %0.3f\n", mToolSizeLinearBias); - dump.appendFormat(INDENT4 "ToolSizeAreaScale: %0.3f\n", mToolSizeAreaScale); - dump.appendFormat(INDENT4 "ToolSizeAreaBias: %0.3f\n", mToolSizeAreaBias); dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mPressureScale); dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mSizeScale); dump.appendFormat(INDENT4 "OrientationScale: %0.3f\n", mOrientationScale); @@ -2533,9 +2533,21 @@ bool TouchInputMapper::configureSurface() { // Size of diagonal axis. float diagonalSize = hypotf(width, height); - // TouchMajor and TouchMinor factors. - if (mCalibration.touchSizeCalibration != Calibration::TOUCH_SIZE_CALIBRATION_NONE) { + // Size factors. + if (mCalibration.sizeCalibration != Calibration::SIZE_CALIBRATION_NONE) { + if (mRawPointerAxes.touchMajor.valid + && mRawPointerAxes.touchMajor.maxValue != 0) { + mSizeScale = 1.0f / mRawPointerAxes.touchMajor.maxValue; + } else if (mRawPointerAxes.toolMajor.valid + && mRawPointerAxes.toolMajor.maxValue != 0) { + mSizeScale = 1.0f / mRawPointerAxes.toolMajor.maxValue; + } else { + mSizeScale = 0.0f; + } + mOrientedRanges.haveTouchSize = true; + mOrientedRanges.haveToolSize = true; + mOrientedRanges.haveSize = true; mOrientedRanges.touchMajor.axis = AMOTION_EVENT_AXIS_TOUCH_MAJOR; mOrientedRanges.touchMajor.source = mTouchSource; @@ -2546,51 +2558,6 @@ bool TouchInputMapper::configureSurface() { mOrientedRanges.touchMinor = mOrientedRanges.touchMajor; mOrientedRanges.touchMinor.axis = AMOTION_EVENT_AXIS_TOUCH_MINOR; - } - - // ToolMajor and ToolMinor factors. - mToolSizeLinearScale = 0; - mToolSizeLinearBias = 0; - mToolSizeAreaScale = 0; - mToolSizeAreaBias = 0; - if (mCalibration.toolSizeCalibration != Calibration::TOOL_SIZE_CALIBRATION_NONE) { - if (mCalibration.toolSizeCalibration == Calibration::TOOL_SIZE_CALIBRATION_LINEAR) { - if (mCalibration.haveToolSizeLinearScale) { - mToolSizeLinearScale = mCalibration.toolSizeLinearScale; - } else if (mRawPointerAxes.toolMajor.valid - && mRawPointerAxes.toolMajor.maxValue != 0) { - mToolSizeLinearScale = float(min(width, height)) - / mRawPointerAxes.toolMajor.maxValue; - } - - if (mCalibration.haveToolSizeLinearBias) { - mToolSizeLinearBias = mCalibration.toolSizeLinearBias; - } - } else if (mCalibration.toolSizeCalibration == - Calibration::TOOL_SIZE_CALIBRATION_AREA) { - if (mCalibration.haveToolSizeLinearScale) { - mToolSizeLinearScale = mCalibration.toolSizeLinearScale; - } else { - mToolSizeLinearScale = min(width, height); - } - - if (mCalibration.haveToolSizeLinearBias) { - mToolSizeLinearBias = mCalibration.toolSizeLinearBias; - } - - if (mCalibration.haveToolSizeAreaScale) { - mToolSizeAreaScale = mCalibration.toolSizeAreaScale; - } else if (mRawPointerAxes.toolMajor.valid - && mRawPointerAxes.toolMajor.maxValue != 0) { - mToolSizeAreaScale = 1.0f / mRawPointerAxes.toolMajor.maxValue; - } - - if (mCalibration.haveToolSizeAreaBias) { - mToolSizeAreaBias = mCalibration.toolSizeAreaBias; - } - } - - mOrientedRanges.haveToolSize = true; mOrientedRanges.toolMajor.axis = AMOTION_EVENT_AXIS_TOOL_MAJOR; mOrientedRanges.toolMajor.source = mTouchSource; @@ -2601,30 +2568,28 @@ bool TouchInputMapper::configureSurface() { mOrientedRanges.toolMinor = mOrientedRanges.toolMajor; mOrientedRanges.toolMinor.axis = AMOTION_EVENT_AXIS_TOOL_MINOR; + + mOrientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE; + mOrientedRanges.size.source = mTouchSource; + mOrientedRanges.size.min = 0; + mOrientedRanges.size.max = 1.0; + mOrientedRanges.size.flat = 0; + mOrientedRanges.size.fuzz = 0; + } else { + mSizeScale = 0.0f; } // Pressure factors. mPressureScale = 0; if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE) { - RawAbsoluteAxisInfo rawPressureAxis; - switch (mCalibration.pressureSource) { - case Calibration::PRESSURE_SOURCE_PRESSURE: - rawPressureAxis = mRawPointerAxes.pressure; - break; - case Calibration::PRESSURE_SOURCE_TOUCH: - rawPressureAxis = mRawPointerAxes.touchMajor; - break; - default: - rawPressureAxis.clear(); - } - if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_PHYSICAL || mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_AMPLITUDE) { if (mCalibration.havePressureScale) { mPressureScale = mCalibration.pressureScale; - } else if (rawPressureAxis.valid && rawPressureAxis.maxValue != 0) { - mPressureScale = 1.0f / rawPressureAxis.maxValue; + } else if (mRawPointerAxes.pressure.valid + && mRawPointerAxes.pressure.maxValue != 0) { + mPressureScale = 1.0f / mRawPointerAxes.pressure.maxValue; } } @@ -2638,31 +2603,13 @@ bool TouchInputMapper::configureSurface() { mOrientedRanges.pressure.fuzz = 0; } - // Size factors. - mSizeScale = 0; - if (mCalibration.sizeCalibration != Calibration::SIZE_CALIBRATION_NONE) { - if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_NORMALIZED) { - if (mRawPointerAxes.toolMajor.valid && mRawPointerAxes.toolMajor.maxValue != 0) { - mSizeScale = 1.0f / mRawPointerAxes.toolMajor.maxValue; - } - } - - mOrientedRanges.haveSize = true; - - mOrientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE; - mOrientedRanges.size.source = mTouchSource; - mOrientedRanges.size.min = 0; - mOrientedRanges.size.max = 1.0; - mOrientedRanges.size.flat = 0; - mOrientedRanges.size.fuzz = 0; - } - // Orientation mOrientationScale = 0; if (mCalibration.orientationCalibration != Calibration::ORIENTATION_CALIBRATION_NONE) { if (mCalibration.orientationCalibration == Calibration::ORIENTATION_CALIBRATION_INTERPOLATED) { - if (mRawPointerAxes.orientation.valid && mRawPointerAxes.orientation.maxValue != 0) { + if (mRawPointerAxes.orientation.valid + && mRawPointerAxes.orientation.maxValue != 0) { mOrientationScale = float(M_PI_2) / mRawPointerAxes.orientation.maxValue; } } @@ -2871,50 +2818,30 @@ void TouchInputMapper::parseCalibration() { const PropertyMap& in = getDevice()->getConfiguration(); Calibration& out = mCalibration; - // Touch Size - out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT; - String8 touchSizeCalibrationString; - if (in.tryGetProperty(String8("touch.touchSize.calibration"), touchSizeCalibrationString)) { - if (touchSizeCalibrationString == "none") { - out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_NONE; - } else if (touchSizeCalibrationString == "geometric") { - out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC; - } else if (touchSizeCalibrationString == "pressure") { - out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE; - } else if (touchSizeCalibrationString != "default") { - LOGW("Invalid value for touch.touchSize.calibration: '%s'", - touchSizeCalibrationString.string()); - } - } - - // Tool Size - out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_DEFAULT; - String8 toolSizeCalibrationString; - if (in.tryGetProperty(String8("touch.toolSize.calibration"), toolSizeCalibrationString)) { - if (toolSizeCalibrationString == "none") { - out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_NONE; - } else if (toolSizeCalibrationString == "geometric") { - out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC; - } else if (toolSizeCalibrationString == "linear") { - out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_LINEAR; - } else if (toolSizeCalibrationString == "area") { - out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_AREA; - } else if (toolSizeCalibrationString != "default") { - LOGW("Invalid value for touch.toolSize.calibration: '%s'", - toolSizeCalibrationString.string()); - } - } - - out.haveToolSizeLinearScale = in.tryGetProperty(String8("touch.toolSize.linearScale"), - out.toolSizeLinearScale); - out.haveToolSizeLinearBias = in.tryGetProperty(String8("touch.toolSize.linearBias"), - out.toolSizeLinearBias); - out.haveToolSizeAreaScale = in.tryGetProperty(String8("touch.toolSize.areaScale"), - out.toolSizeAreaScale); - out.haveToolSizeAreaBias = in.tryGetProperty(String8("touch.toolSize.areaBias"), - out.toolSizeAreaBias); - out.haveToolSizeIsSummed = in.tryGetProperty(String8("touch.toolSize.isSummed"), - out.toolSizeIsSummed); + // Size + out.sizeCalibration = Calibration::SIZE_CALIBRATION_DEFAULT; + String8 sizeCalibrationString; + if (in.tryGetProperty(String8("touch.size.calibration"), sizeCalibrationString)) { + if (sizeCalibrationString == "none") { + out.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE; + } else if (sizeCalibrationString == "geometric") { + out.sizeCalibration = Calibration::SIZE_CALIBRATION_GEOMETRIC; + } else if (sizeCalibrationString == "diameter") { + out.sizeCalibration = Calibration::SIZE_CALIBRATION_DIAMETER; + } else if (sizeCalibrationString == "area") { + out.sizeCalibration = Calibration::SIZE_CALIBRATION_AREA; + } else if (sizeCalibrationString != "default") { + LOGW("Invalid value for touch.size.calibration: '%s'", + sizeCalibrationString.string()); + } + } + + out.haveSizeScale = in.tryGetProperty(String8("touch.size.scale"), + out.sizeScale); + out.haveSizeBias = in.tryGetProperty(String8("touch.size.bias"), + out.sizeBias); + out.haveSizeIsSummed = in.tryGetProperty(String8("touch.size.isSummed"), + out.sizeIsSummed); // Pressure out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_DEFAULT; @@ -2932,36 +2859,9 @@ void TouchInputMapper::parseCalibration() { } } - out.pressureSource = Calibration::PRESSURE_SOURCE_DEFAULT; - String8 pressureSourceString; - if (in.tryGetProperty(String8("touch.pressure.source"), pressureSourceString)) { - if (pressureSourceString == "pressure") { - out.pressureSource = Calibration::PRESSURE_SOURCE_PRESSURE; - } else if (pressureSourceString == "touch") { - out.pressureSource = Calibration::PRESSURE_SOURCE_TOUCH; - } else if (pressureSourceString != "default") { - LOGW("Invalid value for touch.pressure.source: '%s'", - pressureSourceString.string()); - } - } - out.havePressureScale = in.tryGetProperty(String8("touch.pressure.scale"), out.pressureScale); - // Size - out.sizeCalibration = Calibration::SIZE_CALIBRATION_DEFAULT; - String8 sizeCalibrationString; - if (in.tryGetProperty(String8("touch.size.calibration"), sizeCalibrationString)) { - if (sizeCalibrationString == "none") { - out.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE; - } else if (sizeCalibrationString == "normalized") { - out.sizeCalibration = Calibration::SIZE_CALIBRATION_NORMALIZED; - } else if (sizeCalibrationString != "default") { - LOGW("Invalid value for touch.size.calibration: '%s'", - sizeCalibrationString.string()); - } - } - // Orientation out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_DEFAULT; String8 orientationCalibrationString; @@ -2997,178 +2897,77 @@ void TouchInputMapper::parseCalibration() { } void TouchInputMapper::resolveCalibration() { - // Pressure - switch (mCalibration.pressureSource) { - case Calibration::PRESSURE_SOURCE_DEFAULT: - if (mRawPointerAxes.pressure.valid) { - mCalibration.pressureSource = Calibration::PRESSURE_SOURCE_PRESSURE; - } else if (mRawPointerAxes.touchMajor.valid) { - mCalibration.pressureSource = Calibration::PRESSURE_SOURCE_TOUCH; - } - break; - - case Calibration::PRESSURE_SOURCE_PRESSURE: - if (! mRawPointerAxes.pressure.valid) { - LOGW("Calibration property touch.pressure.source is 'pressure' but " - "the pressure axis is not available."); - } - break; - - case Calibration::PRESSURE_SOURCE_TOUCH: - if (! mRawPointerAxes.touchMajor.valid) { - LOGW("Calibration property touch.pressure.source is 'touch' but " - "the touchMajor axis is not available."); - } - break; - - default: - break; - } - - switch (mCalibration.pressureCalibration) { - case Calibration::PRESSURE_CALIBRATION_DEFAULT: - if (mCalibration.pressureSource != Calibration::PRESSURE_SOURCE_DEFAULT) { - mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_AMPLITUDE; - } else { - mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_NONE; - } - break; - - default: - break; - } - - // Tool Size - switch (mCalibration.toolSizeCalibration) { - case Calibration::TOOL_SIZE_CALIBRATION_DEFAULT: - if (mRawPointerAxes.toolMajor.valid) { - mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_LINEAR; - } else { - mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_NONE; - } - break; - - default: - break; - } - - // Touch Size - switch (mCalibration.touchSizeCalibration) { - case Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT: - if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE - && mCalibration.toolSizeCalibration != Calibration::TOOL_SIZE_CALIBRATION_NONE) { - mCalibration.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE; - } else { - mCalibration.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_NONE; + // Size + if (mRawPointerAxes.touchMajor.valid || mRawPointerAxes.toolMajor.valid) { + if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_DEFAULT) { + mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_GEOMETRIC; } - break; - - default: - break; + } else { + mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE; } - // Size - switch (mCalibration.sizeCalibration) { - case Calibration::SIZE_CALIBRATION_DEFAULT: - if (mRawPointerAxes.toolMajor.valid) { - mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NORMALIZED; - } else { - mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE; + // Pressure + if (mRawPointerAxes.pressure.valid) { + if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_DEFAULT) { + mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_PHYSICAL; } - break; - - default: - break; + } else { + mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_NONE; } // Orientation - switch (mCalibration.orientationCalibration) { - case Calibration::ORIENTATION_CALIBRATION_DEFAULT: - if (mRawPointerAxes.orientation.valid) { + if (mRawPointerAxes.orientation.valid) { + if (mCalibration.orientationCalibration == Calibration::ORIENTATION_CALIBRATION_DEFAULT) { mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_INTERPOLATED; - } else { - mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE; } - break; - - default: - break; + } else { + mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE; } // Distance - switch (mCalibration.distanceCalibration) { - case Calibration::DISTANCE_CALIBRATION_DEFAULT: - if (mRawPointerAxes.distance.valid) { + if (mRawPointerAxes.distance.valid) { + if (mCalibration.distanceCalibration == Calibration::DISTANCE_CALIBRATION_DEFAULT) { mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_SCALED; - } else { - mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE; } - break; - - default: - break; + } else { + mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE; } } void TouchInputMapper::dumpCalibration(String8& dump) { dump.append(INDENT3 "Calibration:\n"); - // Touch Size - switch (mCalibration.touchSizeCalibration) { - case Calibration::TOUCH_SIZE_CALIBRATION_NONE: - dump.append(INDENT4 "touch.touchSize.calibration: none\n"); - break; - case Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC: - dump.append(INDENT4 "touch.touchSize.calibration: geometric\n"); - break; - case Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE: - dump.append(INDENT4 "touch.touchSize.calibration: pressure\n"); - break; - default: - LOG_ASSERT(false); - } - - // Tool Size - switch (mCalibration.toolSizeCalibration) { - case Calibration::TOOL_SIZE_CALIBRATION_NONE: - dump.append(INDENT4 "touch.toolSize.calibration: none\n"); + // Size + switch (mCalibration.sizeCalibration) { + case Calibration::SIZE_CALIBRATION_NONE: + dump.append(INDENT4 "touch.size.calibration: none\n"); break; - case Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC: - dump.append(INDENT4 "touch.toolSize.calibration: geometric\n"); + case Calibration::SIZE_CALIBRATION_GEOMETRIC: + dump.append(INDENT4 "touch.size.calibration: geometric\n"); break; - case Calibration::TOOL_SIZE_CALIBRATION_LINEAR: - dump.append(INDENT4 "touch.toolSize.calibration: linear\n"); + case Calibration::SIZE_CALIBRATION_DIAMETER: + dump.append(INDENT4 "touch.size.calibration: diameter\n"); break; - case Calibration::TOOL_SIZE_CALIBRATION_AREA: - dump.append(INDENT4 "touch.toolSize.calibration: area\n"); + case Calibration::SIZE_CALIBRATION_AREA: + dump.append(INDENT4 "touch.size.calibration: area\n"); break; default: LOG_ASSERT(false); } - if (mCalibration.haveToolSizeLinearScale) { - dump.appendFormat(INDENT4 "touch.toolSize.linearScale: %0.3f\n", - mCalibration.toolSizeLinearScale); - } - - if (mCalibration.haveToolSizeLinearBias) { - dump.appendFormat(INDENT4 "touch.toolSize.linearBias: %0.3f\n", - mCalibration.toolSizeLinearBias); - } - - if (mCalibration.haveToolSizeAreaScale) { - dump.appendFormat(INDENT4 "touch.toolSize.areaScale: %0.3f\n", - mCalibration.toolSizeAreaScale); + if (mCalibration.haveSizeScale) { + dump.appendFormat(INDENT4 "touch.size.scale: %0.3f\n", + mCalibration.sizeScale); } - if (mCalibration.haveToolSizeAreaBias) { - dump.appendFormat(INDENT4 "touch.toolSize.areaBias: %0.3f\n", - mCalibration.toolSizeAreaBias); + if (mCalibration.haveSizeBias) { + dump.appendFormat(INDENT4 "touch.size.bias: %0.3f\n", + mCalibration.sizeBias); } - if (mCalibration.haveToolSizeIsSummed) { - dump.appendFormat(INDENT4 "touch.toolSize.isSummed: %s\n", - toString(mCalibration.toolSizeIsSummed)); + if (mCalibration.haveSizeIsSummed) { + dump.appendFormat(INDENT4 "touch.size.isSummed: %s\n", + toString(mCalibration.sizeIsSummed)); } // Pressure @@ -3186,36 +2985,11 @@ void TouchInputMapper::dumpCalibration(String8& dump) { LOG_ASSERT(false); } - switch (mCalibration.pressureSource) { - case Calibration::PRESSURE_SOURCE_PRESSURE: - dump.append(INDENT4 "touch.pressure.source: pressure\n"); - break; - case Calibration::PRESSURE_SOURCE_TOUCH: - dump.append(INDENT4 "touch.pressure.source: touch\n"); - break; - case Calibration::PRESSURE_SOURCE_DEFAULT: - break; - default: - LOG_ASSERT(false); - } - if (mCalibration.havePressureScale) { dump.appendFormat(INDENT4 "touch.pressure.scale: %0.3f\n", mCalibration.pressureScale); } - // Size - switch (mCalibration.sizeCalibration) { - case Calibration::SIZE_CALIBRATION_NONE: - dump.append(INDENT4 "touch.size.calibration: none\n"); - break; - case Calibration::SIZE_CALIBRATION_NORMALIZED: - dump.append(INDENT4 "touch.size.calibration: normalized\n"); - break; - default: - LOG_ASSERT(false); - } - // Orientation switch (mCalibration.orientationCalibration) { case Calibration::ORIENTATION_CALIBRATION_NONE: @@ -3605,119 +3379,94 @@ void TouchInputMapper::cookPointerData() { for (uint32_t i = 0; i < currentPointerCount; i++) { const RawPointerData::Pointer& in = mCurrentRawPointerData.pointers[i]; - // ToolMajor and ToolMinor - float toolMajor, toolMinor; - switch (mCalibration.toolSizeCalibration) { - case Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC: - toolMajor = in.toolMajor * mGeometricScale; - if (mRawPointerAxes.toolMinor.valid) { - toolMinor = in.toolMinor * mGeometricScale; + // Size + float touchMajor, touchMinor, toolMajor, toolMinor, size; + switch (mCalibration.sizeCalibration) { + case Calibration::SIZE_CALIBRATION_GEOMETRIC: + case Calibration::SIZE_CALIBRATION_DIAMETER: + case Calibration::SIZE_CALIBRATION_AREA: + if (mRawPointerAxes.touchMajor.valid && mRawPointerAxes.toolMajor.valid) { + touchMajor = in.touchMajor; + touchMinor = mRawPointerAxes.touchMinor.valid ? in.touchMinor : in.touchMajor; + toolMajor = in.toolMajor; + toolMinor = mRawPointerAxes.toolMinor.valid ? in.toolMinor : in.toolMajor; + size = mRawPointerAxes.touchMinor.valid + ? avg(in.touchMajor, in.touchMinor) : in.touchMajor; + } else if (mRawPointerAxes.touchMajor.valid) { + toolMajor = touchMajor = in.touchMajor; + toolMinor = touchMinor = mRawPointerAxes.touchMinor.valid + ? in.touchMinor : in.touchMajor; + size = mRawPointerAxes.touchMinor.valid + ? avg(in.touchMajor, in.touchMinor) : in.touchMajor; + } else if (mRawPointerAxes.toolMajor.valid) { + touchMajor = toolMajor = in.toolMajor; + touchMinor = toolMinor = mRawPointerAxes.toolMinor.valid + ? in.toolMinor : in.toolMajor; + size = mRawPointerAxes.toolMinor.valid + ? avg(in.toolMajor, in.toolMinor) : in.toolMajor; } else { - toolMinor = toolMajor; + LOG_ASSERT(false, "No touch or tool axes. " + "Size calibration should have been resolved to NONE."); + touchMajor = 0; + touchMinor = 0; + toolMajor = 0; + toolMinor = 0; + size = 0; } - break; - case Calibration::TOOL_SIZE_CALIBRATION_LINEAR: - toolMajor = in.toolMajor != 0 - ? in.toolMajor * mToolSizeLinearScale + mToolSizeLinearBias - : 0; - if (mRawPointerAxes.toolMinor.valid) { - toolMinor = in.toolMinor != 0 - ? in.toolMinor * mToolSizeLinearScale - + mToolSizeLinearBias - : 0; - } else { - toolMinor = toolMajor; + + if (mCalibration.haveSizeIsSummed && mCalibration.sizeIsSummed) { + uint32_t touchingCount = mCurrentRawPointerData.touchingIdBits.count(); + if (touchingCount > 1) { + touchMajor /= touchingCount; + touchMinor /= touchingCount; + toolMajor /= touchingCount; + toolMinor /= touchingCount; + size /= touchingCount; + } } - break; - case Calibration::TOOL_SIZE_CALIBRATION_AREA: - if (in.toolMajor != 0) { - float diameter = sqrtf(in.toolMajor - * mToolSizeAreaScale + mToolSizeAreaBias); - toolMajor = diameter * mToolSizeLinearScale + mToolSizeLinearBias; - } else { - toolMajor = 0; + + if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_GEOMETRIC) { + touchMajor *= mGeometricScale; + touchMinor *= mGeometricScale; + toolMajor *= mGeometricScale; + toolMinor *= mGeometricScale; + } else if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_AREA) { + touchMajor = touchMajor > 0 ? sqrtf(touchMajor) : 0; + touchMinor = touchMajor; + toolMajor = toolMajor > 0 ? sqrtf(toolMajor) : 0; + toolMinor = toolMajor; + } else if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_DIAMETER) { + touchMinor = touchMajor; + toolMinor = toolMajor; } - toolMinor = toolMajor; + + mCalibration.applySizeScaleAndBias(&touchMajor); + mCalibration.applySizeScaleAndBias(&touchMinor); + mCalibration.applySizeScaleAndBias(&toolMajor); + mCalibration.applySizeScaleAndBias(&toolMinor); + size *= mSizeScale; break; default: + touchMajor = 0; + touchMinor = 0; toolMajor = 0; toolMinor = 0; + size = 0; break; } - if (mCalibration.haveToolSizeIsSummed && mCalibration.toolSizeIsSummed) { - uint32_t touchingCount = mCurrentRawPointerData.touchingIdBits.count(); - toolMajor /= touchingCount; - toolMinor /= touchingCount; - } - // Pressure - float rawPressure; - switch (mCalibration.pressureSource) { - case Calibration::PRESSURE_SOURCE_PRESSURE: - rawPressure = in.pressure; - break; - case Calibration::PRESSURE_SOURCE_TOUCH: - rawPressure = in.touchMajor; - break; - default: - rawPressure = 0; - } - float pressure; switch (mCalibration.pressureCalibration) { case Calibration::PRESSURE_CALIBRATION_PHYSICAL: case Calibration::PRESSURE_CALIBRATION_AMPLITUDE: - pressure = rawPressure * mPressureScale; + pressure = in.pressure * mPressureScale; break; default: pressure = in.isHovering ? 0 : 1; break; } - // TouchMajor and TouchMinor - float touchMajor, touchMinor; - switch (mCalibration.touchSizeCalibration) { - case Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC: - touchMajor = in.touchMajor * mGeometricScale; - if (mRawPointerAxes.touchMinor.valid) { - touchMinor = in.touchMinor * mGeometricScale; - } else { - touchMinor = touchMajor; - } - break; - case Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE: - touchMajor = toolMajor * pressure; - touchMinor = toolMinor * pressure; - break; - default: - touchMajor = 0; - touchMinor = 0; - break; - } - - if (touchMajor > toolMajor) { - touchMajor = toolMajor; - } - if (touchMinor > toolMinor) { - touchMinor = toolMinor; - } - - // Size - float size; - switch (mCalibration.sizeCalibration) { - case Calibration::SIZE_CALIBRATION_NORMALIZED: { - float rawSize = mRawPointerAxes.toolMinor.valid - ? avg(in.toolMajor, in.toolMinor) - : in.toolMajor; - size = rawSize * mSizeScale; - break; - } - default: - size = 0; - break; - } - // Orientation float orientation; switch (mCalibration.orientationCalibration) { @@ -3729,7 +3478,8 @@ void TouchInputMapper::cookPointerData() { int32_t c2 = signExtendNybble(in.orientation & 0x0f); if (c1 != 0 || c2 != 0) { orientation = atan2f(c1, c2) * 0.5f; - float scale = 1.0f + hypotf(c1, c2) / 16.0f; + float confidence = hypotf(c1, c2); + float scale = 1.0f + confidence / 16.0f; touchMajor *= scale; touchMinor /= scale; toolMajor *= scale; @@ -5144,7 +4894,7 @@ void SingleTouchInputMapper::sync(nsecs_t when) { mCurrentRawPointerData.clear(); mCurrentButtonState = 0; - if (mTouchButtonAccumulator.isActive()) { + if (mTouchButtonAccumulator.isToolActive()) { mCurrentRawPointerData.pointerCount = 1; mCurrentRawPointerData.idToIndex[0] = 0; @@ -5168,11 +4918,11 @@ void SingleTouchInputMapper::sync(nsecs_t when) { outPointer.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER; } outPointer.isHovering = isHovering; - - mCurrentButtonState = mTouchButtonAccumulator.getButtonState() - | mCursorButtonAccumulator.getButtonState(); } + mCurrentButtonState = mTouchButtonAccumulator.getButtonState() + | mCursorButtonAccumulator.getButtonState(); + syncTouch(when, true); } diff --git a/services/input/InputReader.h b/services/input/InputReader.h index f5d095d..72802fc 100644 --- a/services/input/InputReader.h +++ b/services/input/InputReader.h @@ -210,6 +210,9 @@ public: * This method may be called on any thread (usually by the input manager). */ virtual void dump(String8& dump) = 0; + /* Called by the heatbeat to ensures that the reader has not deadlocked. */ + virtual void monitor() = 0; + /* Runs a single iteration of the processing loop. * Nominally reads and processes one incoming message from the EventHub. * @@ -297,6 +300,7 @@ public: virtual ~InputReader(); virtual void dump(String8& dump); + virtual void monitor(); virtual void loopOnce(); @@ -526,7 +530,7 @@ public: uint32_t getButtonState() const; int32_t getToolType() const; - bool isActive() const; + bool isToolActive() const; bool isHovering() const; private: @@ -692,7 +696,6 @@ public: int32_t mAbsMTToolType; Slot(); - void clearIfInUse(); void clear(); }; @@ -974,36 +977,23 @@ protected: // Immutable calibration parameters in parsed form. struct Calibration { - // Touch Size - enum TouchSizeCalibration { - TOUCH_SIZE_CALIBRATION_DEFAULT, - TOUCH_SIZE_CALIBRATION_NONE, - TOUCH_SIZE_CALIBRATION_GEOMETRIC, - TOUCH_SIZE_CALIBRATION_PRESSURE, + // Size + enum SizeCalibration { + SIZE_CALIBRATION_DEFAULT, + SIZE_CALIBRATION_NONE, + SIZE_CALIBRATION_GEOMETRIC, + SIZE_CALIBRATION_DIAMETER, + SIZE_CALIBRATION_AREA, }; - TouchSizeCalibration touchSizeCalibration; - - // Tool Size - enum ToolSizeCalibration { - TOOL_SIZE_CALIBRATION_DEFAULT, - TOOL_SIZE_CALIBRATION_NONE, - TOOL_SIZE_CALIBRATION_GEOMETRIC, - TOOL_SIZE_CALIBRATION_LINEAR, - TOOL_SIZE_CALIBRATION_AREA, - }; + SizeCalibration sizeCalibration; - ToolSizeCalibration toolSizeCalibration; - bool haveToolSizeLinearScale; - float toolSizeLinearScale; - bool haveToolSizeLinearBias; - float toolSizeLinearBias; - bool haveToolSizeAreaScale; - float toolSizeAreaScale; - bool haveToolSizeAreaBias; - float toolSizeAreaBias; - bool haveToolSizeIsSummed; - bool toolSizeIsSummed; + bool haveSizeScale; + float sizeScale; + bool haveSizeBias; + float sizeBias; + bool haveSizeIsSummed; + bool sizeIsSummed; // Pressure enum PressureCalibration { @@ -1012,26 +1002,11 @@ protected: PRESSURE_CALIBRATION_PHYSICAL, PRESSURE_CALIBRATION_AMPLITUDE, }; - enum PressureSource { - PRESSURE_SOURCE_DEFAULT, - PRESSURE_SOURCE_PRESSURE, - PRESSURE_SOURCE_TOUCH, - }; PressureCalibration pressureCalibration; - PressureSource pressureSource; bool havePressureScale; float pressureScale; - // Size - enum SizeCalibration { - SIZE_CALIBRATION_DEFAULT, - SIZE_CALIBRATION_NONE, - SIZE_CALIBRATION_NORMALIZED, - }; - - SizeCalibration sizeCalibration; - // Orientation enum OrientationCalibration { ORIENTATION_CALIBRATION_DEFAULT, @@ -1052,6 +1027,15 @@ protected: DistanceCalibration distanceCalibration; bool haveDistanceScale; float distanceScale; + + inline void applySizeScaleAndBias(float* outSize) const { + if (haveSizeScale) { + *outSize *= sizeScale; + } + if (haveSizeBias) { + *outSize += sizeBias; + } + } } mCalibration; // Raw pointer axis information from the driver. @@ -1114,11 +1098,6 @@ private: float mGeometricScale; - float mToolSizeLinearScale; - float mToolSizeLinearBias; - float mToolSizeAreaScale; - float mToolSizeAreaBias; - float mPressureScale; float mSizeScale; diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp index 4a866a8..ebf66aa 100644 --- a/services/input/tests/InputReader_test.cpp +++ b/services/input/tests/InputReader_test.cpp @@ -631,6 +631,9 @@ private: virtual void dump(String8& dump) { } + virtual void monitor() { + } + virtual void requestReopenDevices() { } @@ -2484,6 +2487,8 @@ protected: static const float X_PRECISION; static const float Y_PRECISION; + static const float GEOMETRIC_SCALE; + static const VirtualKeyDefinition VIRTUAL_KEYS[2]; enum Axes { @@ -2528,6 +2533,10 @@ const int32_t TouchInputMapperTest::RAW_SLOT_MAX = 9; const float TouchInputMapperTest::X_PRECISION = float(RAW_X_MAX - RAW_X_MIN + 1) / DISPLAY_WIDTH; const float TouchInputMapperTest::Y_PRECISION = float(RAW_Y_MAX - RAW_Y_MIN + 1) / DISPLAY_HEIGHT; +const float TouchInputMapperTest::GEOMETRIC_SCALE = + avg(float(DISPLAY_WIDTH) / (RAW_X_MAX - RAW_X_MIN + 1), + float(DISPLAY_HEIGHT) / (RAW_Y_MAX - RAW_Y_MIN + 1)); + const VirtualKeyDefinition TouchInputMapperTest::VIRTUAL_KEYS[2] = { { KEY_HOME, 60, DISPLAY_HEIGHT + 15, 20, 20 }, { KEY_MENU, DISPLAY_HEIGHT - 60, DISPLAY_WIDTH + 15, 20, 20 }, @@ -3265,8 +3274,7 @@ TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) { float y = toDisplayY(rawY); float pressure = float(rawPressure) / RAW_PRESSURE_MAX; float size = float(rawToolMajor) / RAW_TOOL_MAX; - float tool = min(DISPLAY_WIDTH, DISPLAY_HEIGHT) * size; - float touch = min(tool * pressure, tool); + float tool = float(rawToolMajor) * GEOMETRIC_SCALE; float distance = float(rawDistance); processDown(mapper, rawX, rawY); @@ -3278,7 +3286,7 @@ TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) { NotifyMotionArgs args; ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], - x, y, pressure, size, touch, touch, tool, tool, 0, distance)); + x, y, pressure, size, tool, tool, tool, tool, 0, distance)); } TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllButtons) { @@ -4440,11 +4448,11 @@ TEST_F(MultiTouchInputMapperTest, Process_AllAxes_WithDefaultCalibration) { float x = toDisplayX(rawX); float y = toDisplayY(rawY); float pressure = float(rawPressure) / RAW_PRESSURE_MAX; - float size = avg(rawToolMajor, rawToolMinor) / RAW_TOOL_MAX; - float toolMajor = float(min(DISPLAY_WIDTH, DISPLAY_HEIGHT)) * rawToolMajor / RAW_TOOL_MAX; - float toolMinor = float(min(DISPLAY_WIDTH, DISPLAY_HEIGHT)) * rawToolMinor / RAW_TOOL_MAX; - float touchMajor = min(toolMajor * pressure, toolMajor); - float touchMinor = min(toolMinor * pressure, toolMinor); + float size = avg(rawTouchMajor, rawTouchMinor) / RAW_TOUCH_MAX; + float toolMajor = float(rawToolMajor) * GEOMETRIC_SCALE; + float toolMinor = float(rawToolMinor) * GEOMETRIC_SCALE; + float touchMajor = float(rawTouchMajor) * GEOMETRIC_SCALE; + float touchMinor = float(rawTouchMinor) * GEOMETRIC_SCALE; float orientation = float(rawOrientation) / RAW_ORIENTATION_MAX * M_PI_2; float distance = float(rawDistance); @@ -4464,7 +4472,8 @@ TEST_F(MultiTouchInputMapperTest, Process_AllAxes_WithDefaultCalibration) { ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); ASSERT_EQ(0, args.pointerProperties[0].id); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], - x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, orientation, distance)); + x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, + orientation, distance)); } TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) { @@ -4472,8 +4481,7 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) addConfigurationProperty("touch.deviceType", "touchScreen"); prepareDisplay(DISPLAY_ORIENTATION_0); prepareAxes(POSITION | TOUCH | TOOL | MINOR); - addConfigurationProperty("touch.touchSize.calibration", "geometric"); - addConfigurationProperty("touch.toolSize.calibration", "geometric"); + addConfigurationProperty("touch.size.calibration", "geometric"); addMapperAndConfigure(mapper); // These calculations are based on the input device calibration documentation. @@ -4486,14 +4494,11 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) float x = toDisplayX(rawX); float y = toDisplayY(rawY); - float pressure = float(rawTouchMajor) / RAW_TOUCH_MAX; - float size = avg(rawToolMajor, rawToolMinor) / RAW_TOOL_MAX; - float scale = avg(float(DISPLAY_WIDTH) / (RAW_X_MAX - RAW_X_MIN + 1), - float(DISPLAY_HEIGHT) / (RAW_Y_MAX - RAW_Y_MIN + 1)); - float toolMajor = float(rawToolMajor) * scale; - float toolMinor = float(rawToolMinor) * scale; - float touchMajor = min(float(rawTouchMajor) * scale, toolMajor); - float touchMinor = min(float(rawTouchMinor) * scale, toolMinor); + float size = avg(rawTouchMajor, rawTouchMinor) / RAW_TOUCH_MAX; + float toolMajor = float(rawToolMajor) * GEOMETRIC_SCALE; + float toolMinor = float(rawToolMinor) * GEOMETRIC_SCALE; + float touchMajor = float(rawTouchMajor) * GEOMETRIC_SCALE; + float touchMinor = float(rawTouchMinor) * GEOMETRIC_SCALE; processPosition(mapper, rawX, rawY); processTouchMajor(mapper, rawTouchMajor); @@ -4506,22 +4511,18 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) NotifyMotionArgs args; ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], - x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, 0, 0)); + x, y, 1.0f, size, touchMajor, touchMinor, toolMajor, toolMinor, 0, 0)); } -TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_SummedLinearCalibration) { +TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_SummedLinearCalibration) { MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice); addConfigurationProperty("touch.deviceType", "touchScreen"); prepareDisplay(DISPLAY_ORIENTATION_0); prepareAxes(POSITION | TOUCH | TOOL); - addConfigurationProperty("touch.touchSize.calibration", "pressure"); - addConfigurationProperty("touch.toolSize.calibration", "linear"); - addConfigurationProperty("touch.toolSize.linearScale", "10"); - addConfigurationProperty("touch.toolSize.linearBias", "160"); - addConfigurationProperty("touch.toolSize.isSummed", "1"); - addConfigurationProperty("touch.pressure.calibration", "amplitude"); - addConfigurationProperty("touch.pressure.source", "touch"); - addConfigurationProperty("touch.pressure.scale", "0.01"); + addConfigurationProperty("touch.size.calibration", "diameter"); + addConfigurationProperty("touch.size.scale", "10"); + addConfigurationProperty("touch.size.bias", "160"); + addConfigurationProperty("touch.size.isSummed", "1"); addMapperAndConfigure(mapper); // These calculations are based on the input device calibration documentation. @@ -4531,17 +4532,16 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_SummedLinear int32_t rawY = 200; int32_t rawX2 = 150; int32_t rawY2 = 250; - int32_t rawTouchMajor = 60; - int32_t rawToolMajor = 5; + int32_t rawTouchMajor = 5; + int32_t rawToolMajor = 8; float x = toDisplayX(rawX); float y = toDisplayY(rawY); float x2 = toDisplayX(rawX2); float y2 = toDisplayY(rawY2); - float pressure = float(rawTouchMajor) * 0.01f; - float size = float(rawToolMajor) / RAW_TOOL_MAX; - float tool = (float(rawToolMajor) * 10.0f + 160.0f) / 2; - float touch = min(tool * pressure, tool); + float size = float(rawTouchMajor) / 2 / RAW_TOUCH_MAX; + float touch = float(rawTouchMajor) / 2 * 10.0f + 160.0f; + float tool = float(rawToolMajor) / 2 * 10.0f + 160.0f; processPosition(mapper, rawX, rawY); processTouchMajor(mapper, rawTouchMajor); @@ -4562,39 +4562,32 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_SummedLinear args.action); ASSERT_EQ(size_t(2), args.pointerCount); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], - x, y, pressure, size, touch, touch, tool, tool, 0, 0)); + x, y, 1.0f, size, touch, touch, tool, tool, 0, 0)); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[1], - x2, y2, pressure, size, touch, touch, tool, tool, 0, 0)); + x2, y2, 1.0f, size, touch, touch, tool, tool, 0, 0)); } -TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_AreaCalibration) { +TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_AreaCalibration) { MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice); addConfigurationProperty("touch.deviceType", "touchScreen"); prepareDisplay(DISPLAY_ORIENTATION_0); prepareAxes(POSITION | TOUCH | TOOL); - addConfigurationProperty("touch.touchSize.calibration", "pressure"); - addConfigurationProperty("touch.toolSize.calibration", "area"); - addConfigurationProperty("touch.toolSize.areaScale", "22"); - addConfigurationProperty("touch.toolSize.areaBias", "1"); - addConfigurationProperty("touch.toolSize.linearScale", "9.2"); - addConfigurationProperty("touch.toolSize.linearBias", "3"); - addConfigurationProperty("touch.pressure.calibration", "amplitude"); - addConfigurationProperty("touch.pressure.source", "touch"); - addConfigurationProperty("touch.pressure.scale", "0.01"); + addConfigurationProperty("touch.size.calibration", "area"); + addConfigurationProperty("touch.size.scale", "43"); + addConfigurationProperty("touch.size.bias", "3"); addMapperAndConfigure(mapper); // These calculations are based on the input device calibration documentation. int32_t rawX = 100; int32_t rawY = 200; - int32_t rawTouchMajor = 60; - int32_t rawToolMajor = 5; + int32_t rawTouchMajor = 5; + int32_t rawToolMajor = 8; float x = toDisplayX(rawX); float y = toDisplayY(rawY); - float pressure = float(rawTouchMajor) * 0.01f; - float size = float(rawToolMajor) / RAW_TOOL_MAX; - float tool = sqrtf(float(rawToolMajor) * 22.0f + 1.0f) * 9.2f + 3.0f; - float touch = min(tool * pressure, tool); + float size = float(rawTouchMajor) / RAW_TOUCH_MAX; + float touch = sqrtf(rawTouchMajor) * 43.0f + 3.0f; + float tool = sqrtf(rawToolMajor) * 43.0f + 3.0f; processPosition(mapper, rawX, rawY); processTouchMajor(mapper, rawTouchMajor); @@ -4605,7 +4598,36 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_AreaCalibrat NotifyMotionArgs args; ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], - x, y, pressure, size, touch, touch, tool, tool, 0, 0)); + x, y, 1.0f, size, touch, touch, tool, tool, 0, 0)); +} + +TEST_F(MultiTouchInputMapperTest, Process_PressureAxis_AmplitudeCalibration) { + MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice); + addConfigurationProperty("touch.deviceType", "touchScreen"); + prepareDisplay(DISPLAY_ORIENTATION_0); + prepareAxes(POSITION | PRESSURE); + addConfigurationProperty("touch.pressure.calibration", "amplitude"); + addConfigurationProperty("touch.pressure.scale", "0.01"); + addMapperAndConfigure(mapper); + + // These calculations are based on the input device calibration documentation. + int32_t rawX = 100; + int32_t rawY = 200; + int32_t rawPressure = 60; + + float x = toDisplayX(rawX); + float y = toDisplayY(rawY); + float pressure = float(rawPressure) * 0.01f; + + processPosition(mapper, rawX, rawY); + processPressure(mapper, rawPressure); + processMTSync(mapper); + processSync(mapper); + + NotifyMotionArgs args; + ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); + ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0], + x, y, pressure, 0, 0, 0, 0, 0, 0, 0)); } TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllButtons) { diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index 8b7d3a8..1c06636 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -2105,10 +2105,13 @@ class BackupManagerService extends IBackupManager.Stub { backupOnePackage(pkg, out); } - // Finally, shared storage if requested + // Shared storage if requested if (mIncludeShared) { backupSharedStorage(); } + + // Done! + finalizeBackup(out); } catch (RemoteException e) { Slog.e(TAG, "App died during full backup"); } finally { @@ -2326,6 +2329,16 @@ class BackupManagerService extends IBackupManager.Stub { } } + private void finalizeBackup(OutputStream out) { + try { + // A standard 'tar' EOF sequence: two 512-byte blocks of all zeroes. + byte[] eof = new byte[512 * 2]; // newly allocated == zero filled + out.write(eof); + } catch (IOException e) { + Slog.w(TAG, "Error attempting to finalize backup stream"); + } + } + private void writeAppManifest(PackageInfo pkg, File manifestFile, boolean withApk) throws IOException { // Manifest format. All data are strings ending in LF: @@ -3186,9 +3199,11 @@ class BackupManagerService extends IBackupManager.Stub { void skipTarPadding(long size, InputStream instream) throws IOException { long partial = (size + 512) % 512; if (partial > 0) { - byte[] buffer = new byte[512]; - int nRead = instream.read(buffer, 0, 512 - (int)partial); - if (nRead >= 0) mBytes += nRead; + final int needed = 512 - (int)partial; + byte[] buffer = new byte[needed]; + if (readExactly(instream, buffer, 0, needed) == needed) { + mBytes += needed; + } else throw new IOException("Unexpected EOF in padding"); } } @@ -3199,12 +3214,11 @@ class BackupManagerService extends IBackupManager.Stub { if (info.size > 64 * 1024) { throw new IOException("Restore manifest too big; corrupt? size=" + info.size); } + byte[] buffer = new byte[(int) info.size]; - int nRead = 0; - while (nRead < info.size) { - nRead += instream.read(buffer, nRead, (int)info.size - nRead); - } - if (nRead >= 0) mBytes += nRead; + if (readExactly(instream, buffer, 0, (int)info.size) == info.size) { + mBytes += info.size; + } else throw new IOException("Unexpected EOF in manifest"); RestorePolicy policy = RestorePolicy.IGNORE; String[] str = new String[1]; @@ -3453,7 +3467,7 @@ class BackupManagerService extends IBackupManager.Stub { } } catch (IOException e) { if (DEBUG) { - Slog.e(TAG, "Parse error in header. Hexdump:"); + Slog.e(TAG, "Parse error in header: " + e.getMessage()); HEXLOG(block); } throw e; @@ -3479,22 +3493,31 @@ class BackupManagerService extends IBackupManager.Stub { } } - boolean readTarHeader(InputStream instream, byte[] block) throws IOException { - int totalRead = 0; - while (totalRead < 512) { - int nRead = instream.read(block, totalRead, 512 - totalRead); - if (nRead >= 0) { - mBytes += nRead; - totalRead += nRead; - } else { - if (totalRead == 0) { - // EOF instead of a new header; we're done - break; - } - throw new IOException("Unable to read full block header, t=" + totalRead); + // Read exactly the given number of bytes into a buffer at the stated offset. + // Returns false if EOF is encountered before the requested number of bytes + // could be read. + int readExactly(InputStream in, byte[] buffer, int offset, int size) + throws IOException { + if (size <= 0) throw new IllegalArgumentException("size must be > 0"); + + int soFar = 0; + while (soFar < size) { + int nRead = in.read(buffer, offset + soFar, size - soFar); + if (nRead <= 0) { + if (MORE_DEBUG) Slog.w(TAG, "- wanted exactly " + size + " but got only " + soFar); + break; } + soFar += nRead; } - return (totalRead == 512); + return soFar; + } + + boolean readTarHeader(InputStream instream, byte[] block) throws IOException { + final int got = readExactly(instream, block, 0, 512); + if (got == 0) return false; // Clean EOF + if (got < 512) throw new IOException("Unable to read full block header"); + mBytes += 512; + return true; } // overwrites 'info' fields based on the pax extended header @@ -3510,11 +3533,10 @@ class BackupManagerService extends IBackupManager.Stub { // read whole blocks, not just the content size int numBlocks = (int)((info.size + 511) >> 9); byte[] data = new byte[numBlocks * 512]; - int nRead = instream.read(data); - if (nRead >= 0) mBytes += nRead; - if (nRead != data.length) { - return false; + if (readExactly(instream, data, 0, data.length) < data.length) { + throw new IOException("Unable to read full pax header"); } + mBytes += data.length; final int contentSize = (int) info.size; int offset = 0; diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 3ae7a3f..acfc7a4 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1831,6 +1831,19 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (RouteInfo r : routeDiff.added) { if (isLinkDefault || ! r.isDefaultRoute()) { addRoute(newLp, r); + } else { + // many radios add a default route even when we don't want one. + // remove the default route unless somebody else has asked for it + String ifaceName = newLp.getInterfaceName(); + if (TextUtils.isEmpty(ifaceName) == false && mAddedRoutes.contains(r) == false) { + if (DBG) log("Removing " + r + " for interface " + ifaceName); + try { + mNetd.removeRoute(ifaceName, r); + } catch (Exception e) { + // never crash - catch them all + loge("Exception trying to remove a route: " + e); + } + } } } diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 30de385..782e7d7 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -188,10 +188,9 @@ class NetworkManagementService extends INetworkManagementService.Stub { // only enable bandwidth control when support exists, and requested by // system setting. - // TODO: eventually migrate to be always enabled final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists(); final boolean shouldEnable = - Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 0) != 0; + Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 1) != 0; mBandwidthControlEnabled = false; if (hasKernelSupport && shouldEnable) { @@ -447,6 +446,28 @@ class NetworkManagementService extends INetworkManagementService.Stub { } } + public void setInterfaceDown(String iface) throws IllegalStateException { + try { + InterfaceConfiguration ifcg = getInterfaceConfig(iface); + ifcg.interfaceFlags = ifcg.interfaceFlags.replace("up", "down"); + setInterfaceConfig(iface, ifcg); + } catch (NativeDaemonConnectorException e) { + throw new IllegalStateException( + "Unable to communicate with native daemon for interface down - " + e); + } + } + + public void setInterfaceUp(String iface) throws IllegalStateException { + try { + InterfaceConfiguration ifcg = getInterfaceConfig(iface); + ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up"); + setInterfaceConfig(iface, ifcg); + } catch (NativeDaemonConnectorException e) { + throw new IllegalStateException( + "Unable to communicate with native daemon for interface up - " + e); + } + } + /* TODO: This is right now a IPv4 only function. Works for wifi which loses its IPv6 addresses on interface down, but we need to do full clean up here */ public void clearInterfaceAddresses(String iface) throws IllegalStateException { @@ -855,7 +876,7 @@ class NetworkManagementService extends INetworkManagementService.Stub { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService"); try { - mConnector.doCommand(String.format("softap fwreload " + wlanIface + " AP")); + wifiFirmwareReload(wlanIface, "AP"); mConnector.doCommand(String.format("softap start " + wlanIface)); if (wifiConfig == null) { mConnector.doCommand(String.format("softap set " + wlanIface + " " + softapIface)); @@ -902,6 +923,20 @@ class NetworkManagementService extends INetworkManagementService.Stub { } } + /* @param mode can be "AP", "STA" or "P2P" */ + public void wifiFirmwareReload(String wlanIface, String mode) throws IllegalStateException { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService"); + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService"); + + try { + mConnector.doCommand(String.format("softap fwreload " + wlanIface + " " + mode)); + } catch (NativeDaemonConnectorException e) { + throw new IllegalStateException("Error communicating to native daemon ", e); + } + } + public void stopAccessPoint(String wlanIface) throws IllegalStateException { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService"); @@ -910,7 +945,7 @@ class NetworkManagementService extends INetworkManagementService.Stub { try { mConnector.doCommand("softap stopap"); mConnector.doCommand("softap stop " + wlanIface); - mConnector.doCommand(String.format("softap fwreload " + wlanIface + " STA")); + wifiFirmwareReload(wlanIface, "STA"); } catch (NativeDaemonConnectorException e) { throw new IllegalStateException("Error communicating to native daemon to stop soft AP", e); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 4a0dcdf..77d0457 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -315,6 +315,7 @@ class ServerThread extends Thread { ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity); networkStats.bindConnectivityManager(connectivity); networkPolicy.bindConnectivityManager(connectivity); + wifiP2p.connectivityServiceReady(); } catch (Throwable e) { Slog.e(TAG, "Failure starting Connectivity Service", e); } diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 33b21ab..ee0937d 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -276,10 +276,12 @@ final class ActivityStack { public void handleMessage(Message msg) { switch (msg.what) { case SLEEP_TIMEOUT_MSG: { - if (mService.isSleeping()) { - Slog.w(TAG, "Sleep timeout! Sleeping now."); - mSleepTimeout = true; - checkReadyForSleepLocked(); + synchronized (mService) { + if (mService.isSleeping()) { + Slog.w(TAG, "Sleep timeout! Sleeping now."); + mSleepTimeout = true; + checkReadyForSleepLocked(); + } } } break; case PAUSE_TIMEOUT_MSG: { @@ -775,7 +777,6 @@ final class ActivityStack { if (mService.mShuttingDown) { mService.notifyAll(); } - } public final Bitmap screenshotActivities(ActivityRecord who) { diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 463f801..177cf41 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -2814,7 +2814,23 @@ public class PackageManagerService extends IPackageManager.Stub { return true; } + /** + * Enforces that only the system UID or root's UID can call a method exposed + * via Binder. + * + * @param message used as message if SecurityException is thrown + * @throws SecurityException if the caller is not system or root + */ + private static final void enforceSystemOrRoot(String message) { + final int uid = Binder.getCallingUid(); + if (uid != Process.SYSTEM_UID && uid != 0) { + throw new SecurityException(message); + } + } + public boolean performDexOpt(String packageName) { + enforceSystemOrRoot("Only the system can request dexopt be performed"); + if (!mNoDexOpt) { return false; } @@ -4687,8 +4703,13 @@ public class PackageManagerService extends IPackageManager.Stub { } public void finishPackageInstall(int token) { - if (DEBUG_INSTALL) Log.v(TAG, "BM finishing package install for " + token); - Message msg = mHandler.obtainMessage(POST_INSTALL, token, 0); + enforceSystemOrRoot("Only the system is allowed to finish installs"); + + if (DEBUG_INSTALL) { + Slog.v(TAG, "BM finishing package install for " + token); + } + + final Message msg = mHandler.obtainMessage(POST_INSTALL, token, 0); mHandler.sendMessage(msg); } @@ -5327,7 +5348,7 @@ public class PackageManagerService extends IPackageManager.Stub { try { out = ParcelFileDescriptor.open(codeFile, ParcelFileDescriptor.MODE_READ_WRITE); } catch (FileNotFoundException e) { - Slog.e(TAG, "Failed to create file descritpor for : " + codeFileName); + Slog.e(TAG, "Failed to create file descriptor for : " + codeFileName); return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE; } // Copy the resource now @@ -5335,9 +5356,7 @@ public class PackageManagerService extends IPackageManager.Stub { try { mContext.grantUriPermission(DEFAULT_CONTAINER_PACKAGE, packageURI, Intent.FLAG_GRANT_READ_URI_PERMISSION); - if (imcs.copyResource(packageURI, out)) { - ret = PackageManager.INSTALL_SUCCEEDED; - } + ret = imcs.copyResource(packageURI, out); } finally { try { if (out != null) out.close(); } catch (IOException e) {} mContext.revokeUriPermission(packageURI, Intent.FLAG_GRANT_READ_URI_PERMISSION); @@ -5532,6 +5551,12 @@ public class PackageManagerService extends IPackageManager.Stub { int copyApk(IMediaContainerService imcs, boolean temp) throws RemoteException { if (temp) { createCopyFile(); + } else { + /* + * Pre-emptively destroy the container since it's destroyed if + * copying fails due to it existing anyway. + */ + PackageHelper.destroySdDir(cid); } final String newCachePath; @@ -6436,6 +6461,10 @@ public class PackageManagerService extends IPackageManager.Stub { if (removedPackage != null) { sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage, extras, null, null); + if (fullRemove && !replacing) { + sendPackageBroadcast(Intent.ACTION_PACKAGE_FULLY_REMOVED, removedPackage, + extras, null, null); + } } if (removedUid >= 0) { sendPackageBroadcast(Intent.ACTION_UID_REMOVED, null, extras, null, null); @@ -7184,6 +7213,8 @@ public class PackageManagerService extends IPackageManager.Stub { } public void enterSafeMode() { + enforceSystemOrRoot("Only the system can request entering safe mode"); + if (!mSystemReady) { mSafeMode = true; } @@ -8086,12 +8117,18 @@ public class PackageManagerService extends IPackageManager.Stub { } public UserInfo createUser(String name, int flags) { + // TODO(kroot): Add a real permission for creating users + enforceSystemOrRoot("Only the system can create users"); + // TODO(kroot): fix this API UserInfo userInfo = mUserManager.createUser(name, flags, new ArrayList<ApplicationInfo>()); return userInfo; } public boolean removeUser(int userId) { + // TODO(kroot): Add a real permission for removing users + enforceSystemOrRoot("Only the system can remove users"); + if (userId == 0) { return false; } diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java index 1d0857b..c8b18c8 100644 --- a/services/java/com/android/server/wm/InputManager.java +++ b/services/java/com/android/server/wm/InputManager.java @@ -17,6 +17,7 @@ package com.android.server.wm; import com.android.internal.util.XmlUtils; +import com.android.server.Watchdog; import org.xmlpull.v1.XmlPullParser; @@ -52,7 +53,7 @@ import java.util.ArrayList; /* * Wraps the C++ InputManager and provides its callbacks. */ -public class InputManager { +public class InputManager implements Watchdog.Monitor { static final String TAG = "InputManager"; private static final boolean DEBUG = false; @@ -94,6 +95,7 @@ public class InputManager { InputChannel toChannel); private static native void nativeSetPointerSpeed(int speed); private static native String nativeDump(); + private static native void nativeMonitor(); // Input event injection constants defined in InputDispatcher.h. static final int INPUT_EVENT_INJECTION_SUCCEEDED = 0; @@ -135,6 +137,9 @@ public class InputManager { Slog.i(TAG, "Initializing input manager"); nativeInit(mContext, mCallbacks, looper.getQueue()); + + // Add ourself to the Watchdog monitors. + Watchdog.getInstance().addMonitor(this); } public void start() { @@ -456,6 +461,12 @@ public class InputManager { } } + // Called by the heartbeat to ensure locks are not held indefnitely (for deadlock detection). + public void monitor() { + synchronized (mInputFilterLock) { } + nativeMonitor(); + } + private final class InputFilterHost implements InputFilter.Host { private boolean mDisconnected; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index f80be1b..558ba3e 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -53,6 +53,7 @@ import android.app.IActivityManager; import android.app.StatusBarManager; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -597,7 +598,7 @@ public class WindowManagerService extends IWindowManager.Stub * Whether the UI is currently running in touch mode (not showing * navigational focus because the user is directly pressing the screen). */ - boolean mInTouchMode = false; + boolean mInTouchMode = true; private ViewServer mViewServer; private ArrayList<WindowChangeListener> mWindowChangeListeners = @@ -2467,10 +2468,13 @@ public class WindowManagerService extends IWindowManager.Stub // if they don't have this permission, mask out the status bar bits if (attrs != null) { - if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR) - != PackageManager.PERMISSION_GRANTED) { - attrs.systemUiVisibility &= ~StatusBarManager.DISABLE_MASK; - attrs.subtreeSystemUiVisibility &= ~StatusBarManager.DISABLE_MASK; + if (((attrs.systemUiVisibility|attrs.subtreeSystemUiVisibility) + & StatusBarManager.DISABLE_MASK) != 0) { + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR) + != PackageManager.PERMISSION_GRANTED) { + attrs.systemUiVisibility &= ~StatusBarManager.DISABLE_MASK; + attrs.subtreeSystemUiVisibility &= ~StatusBarManager.DISABLE_MASK; + } } } long origId = Binder.clearCallingIdentity(); @@ -6900,7 +6904,7 @@ public class WindowManagerService extends IWindowManager.Stub if (ws.mRebuilding) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); - ws.dump(pw, ""); + ws.dump(pw, "", true); pw.flush(); Slog.w(TAG, "This window was lost: " + ws); Slog.w(TAG, sw.toString()); @@ -8732,6 +8736,12 @@ public class WindowManagerService extends IWindowManager.Stub return; } + if (mDisplay == null || !mPolicy.isScreenOn()) { + // No need to freeze the screen before the system is ready or if + // the screen is off. + return; + } + mScreenFrozenLock.acquire(); mDisplayFrozen = true; @@ -8900,159 +8910,260 @@ public class WindowManagerService extends IWindowManager.Stub } } - @Override - public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - if (mContext.checkCallingOrSelfPermission("android.permission.DUMP") - != PackageManager.PERMISSION_GRANTED) { - pw.println("Permission Denial: can't dump WindowManager from from pid=" - + Binder.getCallingPid() - + ", uid=" + Binder.getCallingUid()); - return; - } - + void dumpInput(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { + pw.println("WINDOW MANAGER INPUT (dumpsys window input)"); mInputManager.dump(pw); - pw.println(" "); - - synchronized(mWindowMap) { - pw.println("Current Window Manager state:"); - for (int i=mWindows.size()-1; i>=0; i--) { - WindowState w = mWindows.get(i); - pw.print(" Window #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); - } - if (mInputMethodDialogs.size() > 0) { - pw.println(" "); - pw.println(" Input method dialogs:"); - for (int i=mInputMethodDialogs.size()-1; i>=0; i--) { - WindowState w = mInputMethodDialogs.get(i); - pw.print(" IM Dialog #"); pw.print(i); pw.print(": "); pw.println(w); + } + + void dumpPolicyLocked(FileDescriptor fd, PrintWriter pw, String[] args, boolean dumpAll) { + pw.println("WINDOW MANAGER POLICY STATE (dumpsys window policy)"); + mPolicy.dump(" ", fd, pw, args); + } + + void dumpTokensLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { + pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)"); + if (mTokenMap.size() > 0) { + pw.println(" All tokens:"); + Iterator<WindowToken> it = mTokenMap.values().iterator(); + while (it.hasNext()) { + WindowToken token = it.next(); + pw.print(" Token "); pw.print(token.token); + if (dumpAll) { + pw.println(':'); + token.dump(pw, " "); + } else { + pw.println(); } } - if (mPendingRemove.size() > 0) { - pw.println(" "); - pw.println(" Remove pending for:"); - for (int i=mPendingRemove.size()-1; i>=0; i--) { - WindowState w = mPendingRemove.get(i); - pw.print(" Remove #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); + } + if (mWallpaperTokens.size() > 0) { + pw.println(); + pw.println(" Wallpaper tokens:"); + for (int i=mWallpaperTokens.size()-1; i>=0; i--) { + WindowToken token = mWallpaperTokens.get(i); + pw.print(" Wallpaper #"); pw.print(i); + pw.print(' '); pw.print(token); + if (dumpAll) { + pw.println(':'); + token.dump(pw, " "); + } else { + pw.println(); } } - if (mForceRemoves != null && mForceRemoves.size() > 0) { - pw.println(" "); - pw.println(" Windows force removing:"); - for (int i=mForceRemoves.size()-1; i>=0; i--) { - WindowState w = mForceRemoves.get(i); - pw.print(" Removing #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); - } + } + if (mAppTokens.size() > 0) { + pw.println(); + pw.println(" Application tokens in Z order:"); + for (int i=mAppTokens.size()-1; i>=0; i--) { + pw.print(" App #"); pw.print(i); pw.print(": "); + pw.println(mAppTokens.get(i)); } - if (mDestroySurface.size() > 0) { - pw.println(" "); - pw.println(" Windows waiting to destroy their surface:"); - for (int i=mDestroySurface.size()-1; i>=0; i--) { - WindowState w = mDestroySurface.get(i); - pw.print(" Destroy #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); + } + if (mFinishedStarting.size() > 0) { + pw.println(); + pw.println(" Finishing start of application tokens:"); + for (int i=mFinishedStarting.size()-1; i>=0; i--) { + WindowToken token = mFinishedStarting.get(i); + pw.print(" Finished Starting #"); pw.print(i); + pw.print(' '); pw.print(token); + if (dumpAll) { + pw.println(':'); + token.dump(pw, " "); + } else { + pw.println(); } } - if (mLosingFocus.size() > 0) { - pw.println(" "); - pw.println(" Windows losing focus:"); - for (int i=mLosingFocus.size()-1; i>=0; i--) { - WindowState w = mLosingFocus.get(i); - pw.print(" Losing #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); + } + if (mExitingTokens.size() > 0) { + pw.println(); + pw.println(" Exiting tokens:"); + for (int i=mExitingTokens.size()-1; i>=0; i--) { + WindowToken token = mExitingTokens.get(i); + pw.print(" Exiting #"); pw.print(i); + pw.print(' '); pw.print(token); + if (dumpAll) { + pw.println(':'); + token.dump(pw, " "); + } else { + pw.println(); } } - if (mResizingWindows.size() > 0) { - pw.println(" "); - pw.println(" Windows waiting to resize:"); - for (int i=mResizingWindows.size()-1; i>=0; i--) { - WindowState w = mResizingWindows.get(i); - pw.print(" Resizing #"); pw.print(i); pw.print(' '); - pw.print(w); pw.println(":"); - w.dump(pw, " "); - } - } - if (mSessions.size() > 0) { - pw.println(" "); - pw.println(" All active sessions:"); - Iterator<Session> it = mSessions.iterator(); - while (it.hasNext()) { - Session s = it.next(); - pw.print(" Session "); pw.print(s); pw.println(':'); - s.dump(pw, " "); - } - } - if (mTokenMap.size() > 0) { - pw.println(" "); - pw.println(" All tokens:"); - Iterator<WindowToken> it = mTokenMap.values().iterator(); - while (it.hasNext()) { - WindowToken token = it.next(); - pw.print(" Token "); pw.print(token.token); pw.println(':'); + } + if (mExitingAppTokens.size() > 0) { + pw.println(); + pw.println(" Exiting application tokens:"); + for (int i=mExitingAppTokens.size()-1; i>=0; i--) { + WindowToken token = mExitingAppTokens.get(i); + pw.print(" Exiting App #"); pw.print(i); + pw.print(' '); pw.print(token); + if (dumpAll) { + pw.println(':'); token.dump(pw, " "); + } else { + pw.println(); } } - if (mWallpaperTokens.size() > 0) { - pw.println(" "); - pw.println(" Wallpaper tokens:"); - for (int i=mWallpaperTokens.size()-1; i>=0; i--) { - WindowToken token = mWallpaperTokens.get(i); - pw.print(" Wallpaper #"); pw.print(i); - pw.print(' '); pw.print(token); pw.println(':'); - token.dump(pw, " "); + } + pw.println(); + if (mOpeningApps.size() > 0) { + pw.print(" mOpeningApps="); pw.println(mOpeningApps); + } + if (mClosingApps.size() > 0) { + pw.print(" mClosingApps="); pw.println(mClosingApps); + } + if (mToTopApps.size() > 0) { + pw.print(" mToTopApps="); pw.println(mToTopApps); + } + if (mToBottomApps.size() > 0) { + pw.print(" mToBottomApps="); pw.println(mToBottomApps); + } + } + + void dumpSessionsLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { + pw.println("WINDOW MANAGER SESSIONS (dumpsys window sessions)"); + if (mSessions.size() > 0) { + Iterator<Session> it = mSessions.iterator(); + while (it.hasNext()) { + Session s = it.next(); + pw.print(" Session "); pw.print(s); pw.println(':'); + s.dump(pw, " "); + } + } + } + + void dumpWindowsLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll, + ArrayList<WindowState> windows) { + pw.println("WINDOW MANAGER WINDOWS (dumpsys window windows)"); + for (int i=mWindows.size()-1; i>=0; i--) { + WindowState w = mWindows.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" Window #"); pw.print(i); pw.print(' '); + pw.print(w); pw.println(":"); + w.dump(pw, " ", dumpAll); + } + } + if (mInputMethodDialogs.size() > 0) { + pw.println(); + pw.println(" Input method dialogs:"); + for (int i=mInputMethodDialogs.size()-1; i>=0; i--) { + WindowState w = mInputMethodDialogs.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" IM Dialog #"); pw.print(i); pw.print(": "); pw.println(w); } } - if (mAppTokens.size() > 0) { - pw.println(" "); - pw.println(" Application tokens in Z order:"); - for (int i=mAppTokens.size()-1; i>=0; i--) { - pw.print(" App #"); pw.print(i); pw.print(": "); - pw.println(mAppTokens.get(i)); + } + if (mPendingRemove.size() > 0) { + pw.println(); + pw.println(" Remove pending for:"); + for (int i=mPendingRemove.size()-1; i>=0; i--) { + WindowState w = mPendingRemove.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" Remove #"); pw.print(i); pw.print(' '); + pw.print(w); + if (dumpAll) { + pw.println(":"); + w.dump(pw, " ", true); + } else { + pw.println(); + } } } - if (mFinishedStarting.size() > 0) { - pw.println(" "); - pw.println(" Finishing start of application tokens:"); - for (int i=mFinishedStarting.size()-1; i>=0; i--) { - WindowToken token = mFinishedStarting.get(i); - pw.print(" Finished Starting #"); pw.print(i); - pw.print(' '); pw.print(token); pw.println(':'); - token.dump(pw, " "); + } + if (mForceRemoves != null && mForceRemoves.size() > 0) { + pw.println(); + pw.println(" Windows force removing:"); + for (int i=mForceRemoves.size()-1; i>=0; i--) { + WindowState w = mForceRemoves.get(i); + pw.print(" Removing #"); pw.print(i); pw.print(' '); + pw.print(w); + if (dumpAll) { + pw.println(":"); + w.dump(pw, " ", true); + } else { + pw.println(); } } - if (mExitingTokens.size() > 0) { - pw.println(" "); - pw.println(" Exiting tokens:"); - for (int i=mExitingTokens.size()-1; i>=0; i--) { - WindowToken token = mExitingTokens.get(i); - pw.print(" Exiting #"); pw.print(i); - pw.print(' '); pw.print(token); pw.println(':'); - token.dump(pw, " "); + } + if (mDestroySurface.size() > 0) { + pw.println(); + pw.println(" Windows waiting to destroy their surface:"); + for (int i=mDestroySurface.size()-1; i>=0; i--) { + WindowState w = mDestroySurface.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" Destroy #"); pw.print(i); pw.print(' '); + pw.print(w); + if (dumpAll) { + pw.println(":"); + w.dump(pw, " ", true); + } else { + pw.println(); + } } } - if (mExitingAppTokens.size() > 0) { - pw.println(" "); - pw.println(" Exiting application tokens:"); - for (int i=mExitingAppTokens.size()-1; i>=0; i--) { - WindowToken token = mExitingAppTokens.get(i); - pw.print(" Exiting App #"); pw.print(i); - pw.print(' '); pw.print(token); pw.println(':'); - token.dump(pw, " "); + } + if (mLosingFocus.size() > 0) { + pw.println(); + pw.println(" Windows losing focus:"); + for (int i=mLosingFocus.size()-1; i>=0; i--) { + WindowState w = mLosingFocus.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" Losing #"); pw.print(i); pw.print(' '); + pw.print(w); + if (dumpAll) { + pw.println(":"); + w.dump(pw, " ", true); + } else { + pw.println(); + } } } - pw.println(" "); - pw.print(" mCurrentFocus="); pw.println(mCurrentFocus); + } + if (mResizingWindows.size() > 0) { + pw.println(); + pw.println(" Windows waiting to resize:"); + for (int i=mResizingWindows.size()-1; i>=0; i--) { + WindowState w = mResizingWindows.get(i); + if (windows == null || windows.contains(w)) { + pw.print(" Resizing #"); pw.print(i); pw.print(' '); + pw.print(w); + if (dumpAll) { + pw.println(":"); + w.dump(pw, " ", true); + } else { + pw.println(); + } + } + } + } + pw.println(); + if (mDisplay != null) { + pw.print(" Display: init="); pw.print(mInitialDisplayWidth); pw.print("x"); + pw.print(mInitialDisplayHeight); pw.print(" base="); + pw.print(mBaseDisplayWidth); pw.print("x"); pw.print(mBaseDisplayHeight); + pw.print(" cur="); + pw.print(mCurDisplayWidth); pw.print("x"); pw.print(mCurDisplayHeight); + pw.print(" app="); + pw.print(mAppDisplayWidth); pw.print("x"); pw.print(mAppDisplayHeight); + pw.print(" raw="); pw.print(mDisplay.getRawWidth()); + pw.print("x"); pw.println(mDisplay.getRawHeight()); + } else { + pw.println(" NO DISPLAY"); + } + pw.print(" mCurConfiguration="); pw.println(this.mCurConfiguration); + pw.print(" mCurrentFocus="); pw.println(mCurrentFocus); + if (mLastFocus != mCurrentFocus) { pw.print(" mLastFocus="); pw.println(mLastFocus); - pw.print(" mFocusedApp="); pw.println(mFocusedApp); + } + pw.print(" mFocusedApp="); pw.println(mFocusedApp); + if (mInputMethodTarget != null) { pw.print(" mInputMethodTarget="); pw.println(mInputMethodTarget); - pw.print(" mInputMethodWindow="); pw.println(mInputMethodWindow); + } + pw.print(" mInTouchMode="); pw.print(mInTouchMode); + pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); + if (dumpAll) { + if (mInputMethodWindow != null) { + pw.print(" mInputMethodWindow="); pw.println(mInputMethodWindow); + } pw.print(" mWallpaperTarget="); pw.println(mWallpaperTarget); if (mLowerWallpaperTarget != null && mUpperWallpaperTarget != null) { pw.print(" mLowerWallpaperTarget="); pw.println(mLowerWallpaperTarget); @@ -9061,13 +9172,19 @@ public class WindowManagerService extends IWindowManager.Stub if (mWindowDetachedWallpaper != null) { pw.print(" mWindowDetachedWallpaper="); pw.println(mWindowDetachedWallpaper); } + pw.print(" mLastWallpaperX="); pw.print(mLastWallpaperX); + pw.print(" mLastWallpaperY="); pw.println(mLastWallpaperY); + if (mInputMethodAnimLayerAdjustment != 0 || + mWallpaperAnimLayerAdjustment != 0) { + pw.print(" mInputMethodAnimLayerAdjustment="); + pw.print(mInputMethodAnimLayerAdjustment); + pw.print(" mWallpaperAnimLayerAdjustment="); + pw.println(mWallpaperAnimLayerAdjustment); + } if (mWindowAnimationBackgroundSurface != null) { pw.println(" mWindowAnimationBackgroundSurface:"); mWindowAnimationBackgroundSurface.printTo(" ", pw); } - pw.print(" mCurConfiguration="); pw.println(this.mCurConfiguration); - pw.print(" mInTouchMode="); pw.print(mInTouchMode); - pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); pw.print(" mSystemBooted="); pw.print(mSystemBooted); pw.print(" mDisplayEnabled="); pw.println(mDisplayEnabled); pw.print(" mLayoutNeeded="); pw.print(mLayoutNeeded); @@ -9078,12 +9195,6 @@ public class WindowManagerService extends IWindowManager.Stub } else { pw.println( " no DimAnimator "); } - pw.print(" mInputMethodAnimLayerAdjustment="); - pw.print(mInputMethodAnimLayerAdjustment); - pw.print(" mWallpaperAnimLayerAdjustment="); - pw.println(mWallpaperAnimLayerAdjustment); - pw.print(" mLastWallpaperX="); pw.print(mLastWallpaperX); - pw.print(" mLastWallpaperY="); pw.println(mLastWallpaperY); pw.print(" mDisplayFrozen="); pw.print(mDisplayFrozen); pw.print(" mWindowsFreezingScreen="); pw.print(mWindowsFreezingScreen); pw.print(" mAppsFreezingScreen="); pw.print(mAppsFreezingScreen); @@ -9113,33 +9224,159 @@ public class WindowManagerService extends IWindowManager.Stub } pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition); pw.print(", mSkipAppTransitionAnimation="); pw.println(mSkipAppTransitionAnimation); - if (mOpeningApps.size() > 0) { - pw.print(" mOpeningApps="); pw.println(mOpeningApps); + } + } + + boolean dumpWindows(FileDescriptor fd, PrintWriter pw, String name, String[] args, + int opti, boolean dumpAll) { + ArrayList<WindowState> windows = new ArrayList<WindowState>(); + if ("visible".equals(name)) { + synchronized(mWindowMap) { + for (int i=mWindows.size()-1; i>=0; i--) { + WindowState w = mWindows.get(i); + if (w.mSurfaceShown) { + windows.add(w); + } + } + } + } else { + int objectId = 0; + // See if this is an object ID. + try { + objectId = Integer.parseInt(name, 16); + name = null; + } catch (RuntimeException e) { } - if (mClosingApps.size() > 0) { - pw.print(" mClosingApps="); pw.println(mClosingApps); + synchronized(mWindowMap) { + for (int i=mWindows.size()-1; i>=0; i--) { + WindowState w = mWindows.get(i); + if (name != null) { + if (w.mAttrs.getTitle().toString().contains(name)) { + windows.add(w); + } + } else if (System.identityHashCode(w) == objectId) { + windows.add(w); + } + } } - if (mToTopApps.size() > 0) { - pw.print(" mToTopApps="); pw.println(mToTopApps); + } + + if (windows.size() <= 0) { + return false; + } + + synchronized(mWindowMap) { + dumpWindowsLocked(fd, pw, dumpAll, windows); + } + return true; + } + + @Override + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + if (mContext.checkCallingOrSelfPermission("android.permission.DUMP") + != PackageManager.PERMISSION_GRANTED) { + pw.println("Permission Denial: can't dump WindowManager from from pid=" + + Binder.getCallingPid() + + ", uid=" + Binder.getCallingUid()); + return; + } + + boolean dumpAll = false; + + int opti = 0; + while (opti < args.length) { + String opt = args[opti]; + if (opt == null || opt.length() <= 0 || opt.charAt(0) != '-') { + break; } - if (mToBottomApps.size() > 0) { - pw.print(" mToBottomApps="); pw.println(mToBottomApps); + opti++; + if ("-a".equals(opt)) { + dumpAll = true; + } else if ("-h".equals(opt)) { + pw.println("Window manager dump options:"); + pw.println(" [-a] [-h] [cmd] ..."); + pw.println(" cmd may be one of:"); + pw.println(" i[input]: input subsystem state"); + pw.println(" p[policy]: policy state"); + pw.println(" s[essions]: active sessions"); + pw.println(" t[okens]: token list"); + pw.println(" w[indows]: window list"); + pw.println(" cmd may also be a NAME to dump windows. NAME may"); + pw.println(" be a partial substring in a window name, a"); + pw.println(" Window hex object identifier, or"); + pw.println(" \"all\" for all windows, or"); + pw.println(" \"visible\" for the visible windows."); + pw.println(" -a: include all available server state."); + return; + } else { + pw.println("Unknown argument: " + opt + "; use -h for help"); } - if (mDisplay != null) { - pw.print(" Display: init="); pw.print(mInitialDisplayWidth); pw.print("x"); - pw.print(mInitialDisplayHeight); pw.print(" base="); - pw.print(mBaseDisplayWidth); pw.print("x"); pw.print(mBaseDisplayHeight); - pw.print(" cur="); - pw.print(mCurDisplayWidth); pw.print("x"); pw.print(mCurDisplayHeight); - pw.print(" app="); - pw.print(mAppDisplayWidth); pw.print("x"); pw.print(mAppDisplayHeight); - pw.print(" raw="); pw.print(mDisplay.getRawWidth()); - pw.print("x"); pw.println(mDisplay.getRawHeight()); + } + + // Is the caller requesting to dump a particular piece of data? + if (opti < args.length) { + String cmd = args[opti]; + opti++; + if ("input".equals(cmd) || "i".equals(cmd)) { + dumpInput(fd, pw, true); + return; + } else if ("policy".equals(cmd) || "p".equals(cmd)) { + synchronized(mWindowMap) { + dumpPolicyLocked(fd, pw, args, true); + } + return; + } else if ("sessions".equals(cmd) || "s".equals(cmd)) { + synchronized(mWindowMap) { + dumpSessionsLocked(fd, pw, true); + } + return; + } else if ("tokens".equals(cmd) || "t".equals(cmd)) { + synchronized(mWindowMap) { + dumpTokensLocked(fd, pw, true); + } + return; + } else if ("windows".equals(cmd) || "w".equals(cmd)) { + synchronized(mWindowMap) { + dumpWindowsLocked(fd, pw, true, null); + } + return; + } else if ("all".equals(cmd) || "a".equals(cmd)) { + synchronized(mWindowMap) { + dumpWindowsLocked(fd, pw, true, null); + } + return; } else { - pw.println(" NO DISPLAY"); + // Dumping a single name? + if (!dumpWindows(fd, pw, cmd, args, opti, dumpAll)) { + pw.println("Bad window command, or no windows match: " + cmd); + pw.println("Use -h for help."); + } + return; + } + } + + dumpInput(fd, pw, dumpAll); + + synchronized(mWindowMap) { + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } + dumpPolicyLocked(fd, pw, args, dumpAll); + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } + dumpSessionsLocked(fd, pw, dumpAll); + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } + dumpTokensLocked(fd, pw, dumpAll); + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); } - pw.println(" Policy:"); - mPolicy.dump(" ", fd, pw, args); + dumpWindowsLocked(fd, pw, dumpAll, null); } } diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index cacb3e7..cdd0047 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -1511,10 +1511,13 @@ final class WindowState implements WindowManagerPolicy.WindowState { } } - void dump(PrintWriter pw, String prefix) { + void dump(PrintWriter pw, String prefix, boolean dumpAll) { pw.print(prefix); pw.print("mSession="); pw.print(mSession); pw.print(" mClient="); pw.println(mClient.asBinder()); pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs); + pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth); + pw.print(" h="); pw.print(mRequestedHeight); + pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); if (mAttachedWindow != null || mLayoutAttached) { pw.print(prefix); pw.print("mAttachedWindow="); pw.print(mAttachedWindow); pw.print(" mLayoutAttached="); pw.println(mLayoutAttached); @@ -1525,15 +1528,19 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.print(" mIsFloatingLayer="); pw.print(mIsFloatingLayer); pw.print(" mWallpaperVisible="); pw.println(mWallpaperVisible); } - pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); - pw.print(" mSubLayer="); pw.print(mSubLayer); - pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+"); - pw.print((mTargetAppToken != null ? mTargetAppToken.animLayerAdjustment - : (mAppToken != null ? mAppToken.animLayerAdjustment : 0))); - pw.print("="); pw.print(mAnimLayer); - pw.print(" mLastLayer="); pw.println(mLastLayer); + if (dumpAll) { + pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); + pw.print(" mSubLayer="); pw.print(mSubLayer); + pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+"); + pw.print((mTargetAppToken != null ? mTargetAppToken.animLayerAdjustment + : (mAppToken != null ? mAppToken.animLayerAdjustment : 0))); + pw.print("="); pw.print(mAnimLayer); + pw.print(" mLastLayer="); pw.println(mLastLayer); + } if (mSurface != null) { - pw.print(prefix); pw.print("mSurface="); pw.println(mSurface); + if (dumpAll) { + pw.print(prefix); pw.print("mSurface="); pw.println(mSurface); + } pw.print(prefix); pw.print("Surface: shown="); pw.print(mSurfaceShown); pw.print(" layer="); pw.print(mSurfaceLayer); pw.print(" alpha="); pw.print(mSurfaceAlpha); @@ -1542,19 +1549,21 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.print(") "); pw.print(mSurfaceW); pw.print(" x "); pw.println(mSurfaceH); } - pw.print(prefix); pw.print("mToken="); pw.println(mToken); - pw.print(prefix); pw.print("mRootToken="); pw.println(mRootToken); - if (mAppToken != null) { - pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); - } - if (mTargetAppToken != null) { - pw.print(prefix); pw.print("mTargetAppToken="); pw.println(mTargetAppToken); + if (dumpAll) { + pw.print(prefix); pw.print("mToken="); pw.println(mToken); + pw.print(prefix); pw.print("mRootToken="); pw.println(mRootToken); + if (mAppToken != null) { + pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); + } + if (mTargetAppToken != null) { + pw.print(prefix); pw.print("mTargetAppToken="); pw.println(mTargetAppToken); + } + pw.print(prefix); pw.print("mViewVisibility=0x"); + pw.print(Integer.toHexString(mViewVisibility)); + pw.print(" mLastHidden="); pw.print(mLastHidden); + pw.print(" mHaveFrame="); pw.print(mHaveFrame); + pw.print(" mObscured="); pw.println(mObscured); } - pw.print(prefix); pw.print("mViewVisibility=0x"); - pw.print(Integer.toHexString(mViewVisibility)); - pw.print(" mLastHidden="); pw.print(mLastHidden); - pw.print(" mHaveFrame="); pw.print(mHaveFrame); - pw.print(" mObscured="); pw.println(mObscured); if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || mAttachedHidden) { pw.print(prefix); pw.print("mPolicyVisibility="); pw.print(mPolicyVisibility); @@ -1565,47 +1574,50 @@ final class WindowState implements WindowManagerPolicy.WindowState { if (!mRelayoutCalled) { pw.print(prefix); pw.print("mRelayoutCalled="); pw.println(mRelayoutCalled); } - pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth); - pw.print(" h="); pw.print(mRequestedHeight); - pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); if (mXOffset != 0 || mYOffset != 0) { pw.print(prefix); pw.print("Offsets x="); pw.print(mXOffset); pw.print(" y="); pw.println(mYOffset); } - pw.print(prefix); pw.print("mGivenContentInsets="); - mGivenContentInsets.printShortString(pw); - pw.print(" mGivenVisibleInsets="); - mGivenVisibleInsets.printShortString(pw); - pw.println(); - if (mTouchableInsets != 0 || mGivenInsetsPending) { - pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets); - pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending); + if (dumpAll) { + pw.print(prefix); pw.print("mGivenContentInsets="); + mGivenContentInsets.printShortString(pw); + pw.print(" mGivenVisibleInsets="); + mGivenVisibleInsets.printShortString(pw); + pw.println(); + if (mTouchableInsets != 0 || mGivenInsetsPending) { + pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets); + pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending); + } + pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration); } - pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration); pw.print(prefix); pw.print("mShownFrame="); mShownFrame.printShortString(pw); pw.println(); - pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw); - pw.print(" last="); mLastFrame.printShortString(pw); - pw.println(); + if (dumpAll) { + pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw); + pw.print(" last="); mLastFrame.printShortString(pw); + pw.println(); + } if (mEnforceSizeCompat) { pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw); pw.println(); } - pw.print(prefix); pw.print("mContainingFrame="); - mContainingFrame.printShortString(pw); - pw.print(" mParentFrame="); - mParentFrame.printShortString(pw); - pw.print(" mDisplayFrame="); - mDisplayFrame.printShortString(pw); - pw.println(); - pw.print(prefix); pw.print("mContentFrame="); mContentFrame.printShortString(pw); - pw.print(" mVisibleFrame="); mVisibleFrame.printShortString(pw); - pw.println(); - pw.print(prefix); pw.print("mContentInsets="); mContentInsets.printShortString(pw); - pw.print(" last="); mLastContentInsets.printShortString(pw); - pw.print(" mVisibleInsets="); mVisibleInsets.printShortString(pw); - pw.print(" last="); mLastVisibleInsets.printShortString(pw); - pw.println(); + if (dumpAll) { + pw.print(prefix); pw.print("mContainingFrame="); + mContainingFrame.printShortString(pw); + pw.print(" mParentFrame="); + mParentFrame.printShortString(pw); + pw.print(" mDisplayFrame="); + mDisplayFrame.printShortString(pw); + pw.println(); + pw.print(prefix); pw.print("mContentFrame="); mContentFrame.printShortString(pw); + pw.print(" mVisibleFrame="); mVisibleFrame.printShortString(pw); + pw.println(); + pw.print(prefix); pw.print("mContentInsets="); mContentInsets.printShortString(pw); + pw.print(" last="); mLastContentInsets.printShortString(pw); + pw.print(" mVisibleInsets="); mVisibleInsets.printShortString(pw); + pw.print(" last="); mLastVisibleInsets.printShortString(pw); + pw.println(); + } if (mAnimating || mLocalAnimating || mAnimationIsEntrance || mAnimation != null) { pw.print(prefix); pw.print("mAnimating="); pw.print(mAnimating); @@ -1632,10 +1644,12 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.print(" mDsDy="); pw.print(mDsDy); pw.print(" mDtDy="); pw.println(mDtDy); } - pw.print(prefix); pw.print("mDrawPending="); pw.print(mDrawPending); - pw.print(" mCommitDrawPending="); pw.print(mCommitDrawPending); - pw.print(" mReadyToShow="); pw.print(mReadyToShow); - pw.print(" mHasDrawn="); pw.println(mHasDrawn); + if (dumpAll) { + pw.print(prefix); pw.print("mDrawPending="); pw.print(mDrawPending); + pw.print(" mCommitDrawPending="); pw.print(mCommitDrawPending); + pw.print(" mReadyToShow="); pw.print(mReadyToShow); + pw.print(" mHasDrawn="); pw.println(mHasDrawn); + } if (mExiting || mRemoveOnExit || mDestroying || mRemoved) { pw.print(prefix); pw.print("mExiting="); pw.print(mExiting); pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit); diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp index 3414eea..7c84e43 100644 --- a/services/jni/com_android_server_InputManager.cpp +++ b/services/jni/com_android_server_InputManager.cpp @@ -1288,6 +1288,15 @@ static jstring android_server_InputManager_nativeDump(JNIEnv* env, jclass clazz) return env->NewStringUTF(dump.string()); } +static void android_server_InputManager_nativeMonitor(JNIEnv* env, jclass clazz) { + if (checkInputManagerUnitialized(env)) { + return; + } + + gNativeInputManager->getInputManager()->getReader()->monitor(); + gNativeInputManager->getInputManager()->getDispatcher()->monitor(); +} + // ---------------------------------------------------------------------------- static JNINativeMethod gInputManagerMethods[] = { @@ -1338,6 +1347,8 @@ static JNINativeMethod gInputManagerMethods[] = { (void*) android_server_InputManager_nativeSetPointerSpeed }, { "nativeDump", "()Ljava/lang/String;", (void*) android_server_InputManager_nativeDump }, + { "nativeMonitor", "()V", + (void*) android_server_InputManager_nativeMonitor }, }; #define FIND_CLASS(var, className) \ diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 505c843..55b354d 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -65,14 +65,9 @@ Layer::Layer(SurfaceFlinger* flinger, glGenTextures(1, &mTextureName); } -void Layer::destroy(RefBase const* base) { - mFlinger->destroyLayer(static_cast<LayerBase const*>(base)); -} - void Layer::onFirstRef() { LayerBaseClient::onFirstRef(); - setDestroyer(this); struct FrameQueuedListener : public SurfaceTexture::FrameAvailableListener { FrameQueuedListener(Layer* layer) : mLayer(layer) { } @@ -93,7 +88,16 @@ void Layer::onFirstRef() Layer::~Layer() { - glDeleteTextures(1, &mTextureName); + class MessageDestroyGLState : public MessageBase { + GLuint texture; + public: + MessageDestroyGLState(GLuint texture) : texture(texture) { } + virtual bool handler() { + glDeleteTextures(1, &texture); + return true; + } + }; + mFlinger->postMessageAsync( new MessageDestroyGLState(mTextureName) ); } void Layer::onFrameQueued() { diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index ddfc666..d3ddab4 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -45,7 +45,7 @@ class GLExtensions; // --------------------------------------------------------------------------- -class Layer : public LayerBaseClient, private RefBase::Destroyer +class Layer : public LayerBaseClient { public: Layer(SurfaceFlinger* flinger, DisplayID display, @@ -78,7 +78,6 @@ public: inline const sp<FreezeLock>& getFreezeLock() const { return mFreezeLock; } protected: - virtual void destroy(RefBase const* base); virtual void onFirstRef(); virtual void dump(String8& result, char* scratch, size_t size) const; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 4a27701..082effe 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -402,9 +402,6 @@ bool SurfaceFlinger::threadLoop() { waitForEvent(); - // call Layer's destructor - handleDestroyLayers(); - // check for transactions if (UNLIKELY(mConsoleSignals)) { handleConsoleEvents(); @@ -597,31 +594,6 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) commitTransaction(); } -void SurfaceFlinger::destroyLayer(LayerBase const* layer) -{ - Mutex::Autolock _l(mDestroyedLayerLock); - mDestroyedLayers.add(layer); - signalEvent(); -} - -void SurfaceFlinger::handleDestroyLayers() -{ - Vector<LayerBase const *> destroyedLayers; - - { // scope for the lock - Mutex::Autolock _l(mDestroyedLayerLock); - destroyedLayers = mDestroyedLayers; - mDestroyedLayers.clear(); - } - - // call destructors without a lock held - const size_t count = destroyedLayers.size(); - for (size_t i=0 ; i<count ; i++) { - //LOGD("destroying %s", destroyedLayers[i]->getName().string()); - delete destroyedLayers[i]; - } -} - sp<FreezeLock> SurfaceFlinger::getFreezeLock() const { return new FreezeLock(const_cast<SurfaceFlinger *>(this)); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 15661f0..6f93f5b 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -189,7 +189,6 @@ public: status_t addLayer(const sp<LayerBase>& layer); status_t invalidateLayerVisibility(const sp<LayerBase>& layer); void invalidateHwcGeometry(); - void destroyLayer(LayerBase const* layer); sp<Layer> getLayer(const sp<ISurface>& sur) const; @@ -266,7 +265,6 @@ private: void handleConsoleEvents(); void handleTransaction(uint32_t transactionFlags); void handleTransactionLocked(uint32_t transactionFlags); - void handleDestroyLayers(); void computeVisibleRegions( const LayerVector& currentLayers, diff --git a/services/surfaceflinger/SurfaceTextureLayer.cpp b/services/surfaceflinger/SurfaceTextureLayer.cpp index 5973e76..79cd0c3 100644 --- a/services/surfaceflinger/SurfaceTextureLayer.cpp +++ b/services/surfaceflinger/SurfaceTextureLayer.cpp @@ -86,9 +86,19 @@ status_t SurfaceTextureLayer::dequeueBuffer(int *buf, return res; } -status_t SurfaceTextureLayer::connect(int api) { - status_t err = SurfaceTexture::connect(api); +status_t SurfaceTextureLayer::connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { + status_t err = SurfaceTexture::connect(api, + outWidth, outHeight, outTransform); if (err == NO_ERROR) { + sp<Layer> layer(mLayer.promote()); + if (layer != NULL) { + uint32_t orientation = layer->getOrientation(); + if (orientation & Transform::ROT_INVALID) { + orientation = 0; + } + *outTransform = orientation; + } switch(api) { case NATIVE_WINDOW_API_MEDIA: case NATIVE_WINDOW_API_CAMERA: diff --git a/services/surfaceflinger/SurfaceTextureLayer.h b/services/surfaceflinger/SurfaceTextureLayer.h index 5d328b7..9508524 100644 --- a/services/surfaceflinger/SurfaceTextureLayer.h +++ b/services/surfaceflinger/SurfaceTextureLayer.h @@ -51,7 +51,8 @@ protected: virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h, uint32_t format, uint32_t usage); - virtual status_t connect(int api); + virtual status_t connect(int api, + uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform); }; // --------------------------------------------------------------------------- diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index be129d5..3236901 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -576,7 +576,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { boolean allowed = (gprsState == ServiceState.STATE_IN_SERVICE || mAutoAttachOnCreation) && mPhone.mIccRecords.getRecordsLoaded() && - mPhone.mIccRecords.isProvisioned() && mPhone.getState() == Phone.State.IDLE && mInternalDataEnabled && (!mPhone.getServiceState().getRoaming() || getDataOnRoamingEnabled()) && @@ -588,7 +587,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { reason += " - gprs= " + gprsState; } if (!mPhone.mIccRecords.getRecordsLoaded()) reason += " - SIM not loaded"; - if (!mPhone.mIccRecords.isProvisioned()) reason += " - SIM not provisioned"; if (mPhone.getState() != Phone.State.IDLE) { reason += " - PhoneState= " + mPhone.getState(); } diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/CanvasTextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/CanvasTextureViewActivity.java index 81c22b8..bd2f68f 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/CanvasTextureViewActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/CanvasTextureViewActivity.java @@ -58,8 +58,9 @@ public class CanvasTextureViewActivity extends Activity } @Override - public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { if (mThread != null) mThread.stopRendering(); + return true; } @Override diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java index 949589f..e77178d 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java @@ -110,13 +110,14 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa } @Override - public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { mRenderThread.finish(); try { mRenderThread.join(); } catch (InterruptedException e) { Log.e(RenderThread.LOG_TAG, "Could not wait for render thread"); } + return true; } @Override diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GetBitmapActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GetBitmapActivity.java index f420fa0..038434a 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/GetBitmapActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GetBitmapActivity.java @@ -96,9 +96,10 @@ public class GetBitmapActivity extends Activity implements TextureView.SurfaceTe } @Override - public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { mCamera.stopPreview(); mCamera.release(); + return true; } @Override diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java index 634e7e3..97e2108 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java @@ -92,9 +92,10 @@ public class TextureViewActivity extends Activity implements TextureView.Surface } @Override - public void onSurfaceTextureDestroyed(SurfaceTexture surface) { + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { mCamera.stopPreview(); mCamera.release(); + return true; } @Override diff --git a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java index da5f488..ad3073a 100644 --- a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java +++ b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java @@ -167,10 +167,13 @@ public class StatusBarTest extends TestActivity }, new Test("Priority notification") { public void run() { - Notification not = new Notification( - R.drawable.stat_sys_phone, - "Incoming call from: Imperious Leader", - System.currentTimeMillis()-(1000*60*60*24) + Notification not = new Notification(); + not.icon = R.drawable.stat_sys_phone; + not.when = System.currentTimeMillis()-(1000*60*60*24); + not.setLatestEventInfo(StatusBarTest.this, + "Incoming call", + "from: Imperious Leader", + null ); not.flags |= Notification.FLAG_HIGH_PRIORITY; Intent fullScreenIntent = new Intent(StatusBarTest.this, TestAlertActivity.class); diff --git a/tools/layoutlib/bridge/src/android/animation/AnimationThread.java b/tools/layoutlib/bridge/src/android/animation/AnimationThread.java new file mode 100644 index 0000000..2b5e4fa --- /dev/null +++ b/tools/layoutlib/bridge/src/android/animation/AnimationThread.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.animation; + +import com.android.ide.common.rendering.api.IAnimationListener; +import com.android.ide.common.rendering.api.RenderSession; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.Result.Status; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.RenderSessionImpl; + +import android.animation.ValueAnimator; +import android.os.Handler; +import android.os.Handler_Delegate; +import android.os.Message; +import android.os.Handler_Delegate.IHandlerCallback; + +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * Abstract animation thread. + * <p/> + * This does not actually start an animation, instead it fakes a looper that will play whatever + * animation is sending messages to its own {@link Handler}. + * <p/> + * Classes should implement {@link #preAnimation()} and {@link #postAnimation()}. + * <p/> + * If {@link #preAnimation()} does not start an animation somehow then the thread doesn't do + * anything. + * + */ +public abstract class AnimationThread extends Thread { + + private static class MessageBundle implements Comparable<MessageBundle> { + final Handler mTarget; + final Message mMessage; + final long mUptimeMillis; + + MessageBundle(Handler target, Message message, long uptimeMillis) { + mTarget = target; + mMessage = message; + mUptimeMillis = uptimeMillis; + } + + public int compareTo(MessageBundle bundle) { + if (mUptimeMillis < bundle.mUptimeMillis) { + return -1; + } + return 1; + } + } + + private final RenderSessionImpl mSession; + + private Queue<MessageBundle> mQueue = new PriorityQueue<MessageBundle>(); + private final IAnimationListener mListener; + + public AnimationThread(RenderSessionImpl scene, String threadName, + IAnimationListener listener) { + super(threadName); + mSession = scene; + mListener = listener; + } + + public abstract Result preAnimation(); + public abstract void postAnimation(); + + @Override + public void run() { + Bridge.prepareThread(); + try { + Handler_Delegate.setCallback(new IHandlerCallback() { + public void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) { + if (msg.what == ValueAnimator.ANIMATION_START || + msg.what == ValueAnimator.ANIMATION_FRAME) { + mQueue.add(new MessageBundle(handler, msg, uptimeMillis)); + } else { + // just ignore. + } + } + }); + + // call out to the pre-animation work, which should start an animation or more. + Result result = preAnimation(); + if (result.isSuccess() == false) { + mListener.done(result); + } + + // loop the animation + RenderSession session = mSession.getSession(); + do { + // check early. + if (mListener.isCanceled()) { + break; + } + + // get the next message. + MessageBundle bundle = mQueue.poll(); + if (bundle == null) { + break; + } + + // sleep enough for this bundle to be on time + long currentTime = System.currentTimeMillis(); + if (currentTime < bundle.mUptimeMillis) { + try { + sleep(bundle.mUptimeMillis - currentTime); + } catch (InterruptedException e) { + // FIXME log/do something/sleep again? + e.printStackTrace(); + } + } + + // check after sleeping. + if (mListener.isCanceled()) { + break; + } + + // ready to do the work, acquire the scene. + result = mSession.acquire(250); + if (result.isSuccess() == false) { + mListener.done(result); + return; + } + + // process the bundle. If the animation is not finished, this will enqueue + // the next message, so mQueue will have another one. + try { + // check after acquiring in case it took a while. + if (mListener.isCanceled()) { + break; + } + + bundle.mTarget.handleMessage(bundle.mMessage); + if (mSession.render(false /*freshRender*/).isSuccess()) { + mListener.onNewFrame(session); + } + } finally { + mSession.release(); + } + } while (mListener.isCanceled() == false && mQueue.size() > 0); + + mListener.done(Status.SUCCESS.createResult()); + + } catch (Throwable throwable) { + // can't use Bridge.getLog() as the exception might be thrown outside + // of an acquire/release block. + mListener.done(Status.ERROR_UNKNOWN.createResult("Error playing animation", throwable)); + + } finally { + postAnimation(); + Handler_Delegate.setCallback(null); + Bridge.cleanupThread(); + } + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java b/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java new file mode 100644 index 0000000..a953918 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.layoutlib.bridge.Bridge; + +import android.content.res.AssetManager; + +public class BridgeAssetManager extends AssetManager { + + /** + * This initializes the static field {@link AssetManager#mSystem} which is used + * by methods who get a global asset manager using {@link AssetManager#getSystem()}. + * <p/> + * They will end up using our bridge asset manager. + * <p/> + * {@link Bridge} calls this method after setting up a new bridge. + */ + public static AssetManager initSystem() { + if (!(AssetManager.sSystem instanceof BridgeAssetManager)) { + // Note that AssetManager() creates a system AssetManager and we override it + // with our BridgeAssetManager. + AssetManager.sSystem = new BridgeAssetManager(); + AssetManager.sSystem.makeStringBlocks(false); + } + return AssetManager.sSystem; + } + + /** + * Clears the static {@link AssetManager#sSystem} to make sure we don't leave objects + * around that would prevent us from unloading the library. + */ + public static void clearSystem() { + AssetManager.sSystem = null; + } + + private BridgeAssetManager() { + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java index 0928ec5..7b672da 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java @@ -214,7 +214,15 @@ public final class BridgeResources extends Resources { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); if (value != null) { - return value.getSecond().getValue(); + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + return v; + } + } } // id was not found or not resolved. Throw a NotFoundException. @@ -318,20 +326,24 @@ public final class BridgeResources extends Resources { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); if (value != null) { - String v = value.getSecond().getValue(); - - if (v != null) { - if (v.equals(BridgeConstants.MATCH_PARENT) || - v.equals(BridgeConstants.FILL_PARENT)) { - return LayoutParams.MATCH_PARENT; - } else if (v.equals(BridgeConstants.WRAP_CONTENT)) { - return LayoutParams.WRAP_CONTENT; - } + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (v.equals(BridgeConstants.MATCH_PARENT) || + v.equals(BridgeConstants.FILL_PARENT)) { + return LayoutParams.MATCH_PARENT; + } else if (v.equals(BridgeConstants.WRAP_CONTENT)) { + return LayoutParams.WRAP_CONTENT; + } - if (ResourceHelper.parseFloatAttribute( - value.getFirst(), v, mTmpValue, true /*requireUnit*/) && - mTmpValue.type == TypedValue.TYPE_DIMENSION) { - return mTmpValue.getDimension(getDisplayMetrics()); + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return mTmpValue.getDimension(getDisplayMetrics()); + } } } } @@ -348,14 +360,18 @@ public final class BridgeResources extends Resources { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); if (value != null) { - String v = value.getSecond().getValue(); - - if (v != null) { - if (ResourceHelper.parseFloatAttribute( - value.getFirst(), v, mTmpValue, true /*requireUnit*/) && - mTmpValue.type == TypedValue.TYPE_DIMENSION) { - return TypedValue.complexToDimensionPixelOffset(mTmpValue.data, - getDisplayMetrics()); + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return TypedValue.complexToDimensionPixelOffset(mTmpValue.data, + getDisplayMetrics()); + } } } } @@ -372,14 +388,18 @@ public final class BridgeResources extends Resources { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); if (value != null) { - String v = value.getSecond().getValue(); - - if (v != null) { - if (ResourceHelper.parseFloatAttribute( - value.getFirst(), v, mTmpValue, true /*requireUnit*/) && - mTmpValue.type == TypedValue.TYPE_DIMENSION) { - return TypedValue.complexToDimensionPixelSize(mTmpValue.data, - getDisplayMetrics()); + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return TypedValue.complexToDimensionPixelSize(mTmpValue.data, + getDisplayMetrics()); + } } } } @@ -395,17 +415,24 @@ public final class BridgeResources extends Resources { public int getInteger(int id) throws NotFoundException { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); - if (value != null && value.getSecond().getValue() != null) { - String v = value.getSecond().getValue(); - int radix = 10; - if (v.startsWith("0x")) { - v = v.substring(2); - radix = 16; - } - try { - return Integer.parseInt(v, radix); - } catch (NumberFormatException e) { - // return exception below + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + int radix = 10; + if (v.startsWith("0x")) { + v = v.substring(2); + radix = 16; + } + try { + return Integer.parseInt(v, radix); + } catch (NumberFormatException e) { + // return exception below + } + } } } @@ -420,9 +447,16 @@ public final class BridgeResources extends Resources { public boolean getBoolean(int id) throws NotFoundException { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); - if (value != null && value.getSecond().getValue() != null) { - String v = value.getSecond().getValue(); - return Boolean.parseBoolean(v); + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + return Boolean.parseBoolean(v); + } + } } // id was not found or not resolved. Throw a NotFoundException. diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java index 9deed32..8fdac02 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java @@ -33,9 +33,6 @@ import com.android.resources.ResourceType; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import android.content.res.ColorStateList; -import android.content.res.Resources; -import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; import android.util.TypedValue; @@ -897,12 +894,6 @@ public final class BridgeTypedArray extends TypedArray { } @Override - public boolean getValueAt(int index, TypedValue outValue) { - // pass - return false; - } - - @Override public String toString() { return Arrays.toString(mResourceData); } diff --git a/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java new file mode 100644 index 0000000..0a7899a --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.util.TypedValue; + +public class TypedArray_Delegate { + + @LayoutlibDelegate + public static boolean getValueAt(TypedArray theTypedArray, int index, TypedValue outValue) { + // pass + return false; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java index 66e59d8..eadec02 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java @@ -22,7 +22,6 @@ import com.android.layoutlib.bridge.impl.DelegateManager; import com.android.resources.Density; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; -import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Parcel; @@ -149,7 +148,7 @@ public final class Bitmap_Delegate { } public static int getBufferedImageType(int nativeBitmapConfig) { - switch (Config.sConfigs[nativeBitmapConfig]) { + switch (Config.nativeToConfig(nativeBitmapConfig)) { case ALPHA_8: return BufferedImage.TYPE_INT_ARGB; case RGB_565: @@ -210,7 +209,7 @@ public final class Bitmap_Delegate { } // create a delegate with the content of the stream. - Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.sConfigs[nativeConfig]); + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.nativeToConfig(nativeConfig)); return createBitmap(delegate, mutable, Bitmap.getDefaultDensity()); } @@ -238,7 +237,7 @@ public final class Bitmap_Delegate { image.setRGB(0, 0, width, height, argb, 0, width); // create a delegate with the content of the stream. - Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.sConfigs[nativeConfig]); + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.nativeToConfig(nativeConfig)); return createBitmap(delegate, isMutable, Bitmap.getDefaultDensity()); } diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java new file mode 100644 index 0000000..2745770 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +public class Typeface_Accessor { + + public static void resetDefaults() { + Typeface.sDefaults = null; + } +} diff --git a/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java new file mode 100644 index 0000000..ad95fcc --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.os; + +public class Looper_Accessor { + + public static void cleanupThread() { + // clean up the looper + Looper.sThreadLocal.remove(); + } +} diff --git a/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java b/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java index 63711a7..bd332a6 100644 --- a/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java +++ b/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java @@ -68,4 +68,28 @@ public class SystemClock_Delegate { /*package*/ static long currentThreadTimeMillis() { return System.currentTimeMillis(); } + + /** + * Returns microseconds running in the current thread. + * + * @return elapsed microseconds in the thread + * + * @hide + */ + @LayoutlibDelegate + /*package*/ static long currentThreadTimeMicro() { + return System.currentTimeMillis() * 1000; + } + + /** + * Returns current wall time in microseconds. + * + * @return elapsed microseconds in wall time + * + * @hide + */ + @LayoutlibDelegate + /*package*/ static long currentTimeMicro() { + return elapsedRealtime() * 1000; + } } diff --git a/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java b/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java new file mode 100644 index 0000000..0a3cdc6 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.BridgeConstants; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.resources.ResourceType; + +import org.xmlpull.v1.XmlPullParser; + +import android.util.AttributeSet; +import android.util.XmlPullAttributes; + +/** + * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser + */ +public class BridgeXmlPullAttributes extends XmlPullAttributes { + + private final BridgeContext mContext; + private final boolean mPlatformFile; + + public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context, + boolean platformFile) { + super(parser); + mContext = context; + mPlatformFile = platformFile; + } + + /* + * (non-Javadoc) + * @see android.util.XmlPullAttributes#getAttributeNameResource(int) + * + * This methods must return com.android.internal.R.attr.<name> matching + * the name of the attribute. + * It returns 0 if it doesn't find anything. + */ + @Override + public int getAttributeNameResource(int index) { + // get the attribute name. + String name = getAttributeName(index); + + // get the attribute namespace + String ns = mParser.getAttributeNamespace(index); + + if (BridgeConstants.NS_RESOURCES.equals(ns)) { + Integer v = Bridge.getResourceId(ResourceType.ATTR, name); + if (v != null) { + return v.intValue(); + } + + return 0; + } + + // this is not an attribute in the android namespace, we query the customviewloader, if + // the namespaces match. + if (mContext.getProjectCallback().getNamespace().equals(ns)) { + Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name); + if (v != null) { + return v.intValue(); + } + } + + return 0; + } + + /* + * (non-Javadoc) + * @see android.util.XmlPullAttributes#getAttributeResourceValue(int, int) + */ + @Override + public int getAttributeResourceValue(int index, int defaultValue) { + String value = getAttributeValue(index); + + return resolveResourceValue(value, defaultValue); + } + + /* + * (non-Javadoc) + * @see android.util.XmlPullAttributes#getAttributeResourceValue(java.lang.String, java.lang.String, int) + */ + @Override + public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { + String value = getAttributeValue(namespace, attribute); + + return resolveResourceValue(value, defaultValue); + } + + private int resolveResourceValue(String value, int defaultValue) { + // now look for this particular value + RenderResources resources = mContext.getRenderResources(); + ResourceValue resource = resources.resolveResValue( + resources.findResValue(value, mPlatformFile)); + + if (resource != null) { + Integer id = null; + if (mPlatformFile || resource.isFramework()) { + id = Bridge.getResourceId(resource.getResourceType(), resource.getName()); + } else { + id = mContext.getProjectCallback().getResourceId( + resource.getResourceType(), resource.getName()); + } + + if (id != null) { + return id; + } + } + + return defaultValue; + } + +} diff --git a/tools/layoutlib/bridge/src/android/util/Log_Delegate.java b/tools/layoutlib/bridge/src/android/util/Log_Delegate.java new file mode 100755 index 0000000..7f432ab --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/Log_Delegate.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +class Log_Delegate { + // to replicate prefix visible when using 'adb logcat' + private static char priorityChar(int priority) { + switch (priority) { + case Log.VERBOSE: + return 'V'; + case Log.DEBUG: + return 'D'; + case Log.INFO: + return 'I'; + case Log.WARN: + return 'W'; + case Log.ERROR: + return 'E'; + case Log.ASSERT: + return 'A'; + default: + return '?'; + } + } + + @LayoutlibDelegate + static int println_native(int bufID, int priority, String tag, String msgs) { + String prefix = priorityChar(priority) + "/" + tag + ": "; + for (String msg: msgs.split("\n")) { + System.out.println(prefix + msg); + } + return 0; + } + +} diff --git a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java new file mode 100644 index 0000000..e3778b1 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.layoutlib.bridge.android.BridgeWindow; +import com.android.layoutlib.bridge.android.BridgeWindowSession; + +import android.os.Handler; +import android.view.View.AttachInfo; + +public class AttachInfo_Accessor { + + public static void setAttachInfo(View view) { + AttachInfo info = new AttachInfo(new BridgeWindowSession(), new BridgeWindow(), + new Handler(), null); + info.mHasWindowFocus = true; + info.mWindowVisibility = View.VISIBLE; + info.mInTouchMode = false; // this is so that we can display selections. + info.mHardwareAccelerated = false; + view.dispatchAttachedToWindow(info, 0); + } + + public static void dispatchOnPreDraw(View view) { + view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java new file mode 100644 index 0000000..941f1ce6 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.MergeCookie; +import com.android.ide.common.rendering.api.ResourceReference; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.resources.ResourceType; +import com.android.util.Pair; + +import org.xmlpull.v1.XmlPullParser; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.InflateException; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.io.File; + +/** + * Custom implementation of {@link LayoutInflater} to handle custom views. + */ +public final class BridgeInflater extends LayoutInflater { + + private final IProjectCallback mProjectCallback; + private boolean mIsInMerge = false; + private ResourceReference mResourceReference; + + /** + * List of class prefixes which are tried first by default. + * <p/> + * This should match the list in com.android.internal.policy.impl.PhoneLayoutInflater. + */ + private static final String[] sClassPrefixList = { + "android.widget.", + "android.webkit." + }; + + protected BridgeInflater(LayoutInflater original, Context newContext) { + super(original, newContext); + mProjectCallback = null; + } + + /** + * Instantiate a new BridgeInflater with an {@link IProjectCallback} object. + * + * @param context The Android application context. + * @param projectCallback the {@link IProjectCallback} object. + */ + public BridgeInflater(Context context, IProjectCallback projectCallback) { + super(context); + mProjectCallback = projectCallback; + mConstructorArgs[0] = context; + } + + @Override + public View onCreateView(String name, AttributeSet attrs) throws ClassNotFoundException { + View view = null; + + try { + // First try to find a class using the default Android prefixes + for (String prefix : sClassPrefixList) { + try { + view = createView(name, prefix, attrs); + if (view != null) { + break; + } + } catch (ClassNotFoundException e) { + // Ignore. We'll try again using the base class below. + } + } + + // Next try using the parent loader. This will most likely only work for + // fully-qualified class names. + try { + if (view == null) { + view = super.onCreateView(name, attrs); + } + } catch (ClassNotFoundException e) { + // Ignore. We'll try again using the custom view loader below. + } + + // Finally try again using the custom view loader + try { + if (view == null) { + view = loadCustomView(name, attrs); + } + } catch (ClassNotFoundException e) { + // If the class was not found, we throw the exception directly, because this + // method is already expected to throw it. + throw e; + } + } catch (Exception e) { + // Wrap the real exception in a ClassNotFoundException, so that the calling method + // can deal with it. + ClassNotFoundException exception = new ClassNotFoundException("onCreateView", e); + throw exception; + } + + setupViewInContext(view, attrs); + + return view; + } + + @Override + public View createViewFromTag(View parent, String name, AttributeSet attrs) { + View view = null; + try { + view = super.createViewFromTag(parent, name, attrs); + } catch (InflateException e) { + // try to load the class from using the custom view loader + try { + view = loadCustomView(name, attrs); + } catch (Exception e2) { + // Wrap the real exception in an InflateException so that the calling + // method can deal with it. + InflateException exception = new InflateException(); + if (e2.getClass().equals(ClassNotFoundException.class) == false) { + exception.initCause(e2); + } else { + exception.initCause(e); + } + throw exception; + } + } + + setupViewInContext(view, attrs); + + return view; + } + + @Override + public View inflate(int resource, ViewGroup root) { + Context context = getContext(); + if (context instanceof BridgeContext) { + BridgeContext bridgeContext = (BridgeContext)context; + + ResourceValue value = null; + + Pair<ResourceType, String> layoutInfo = Bridge.resolveResourceId(resource); + if (layoutInfo != null) { + value = bridgeContext.getRenderResources().getFrameworkResource( + ResourceType.LAYOUT, layoutInfo.getSecond()); + } else { + layoutInfo = mProjectCallback.resolveResourceId(resource); + + if (layoutInfo != null) { + value = bridgeContext.getRenderResources().getProjectResource( + ResourceType.LAYOUT, layoutInfo.getSecond()); + } + } + + if (value != null) { + File f = new File(value.getValue()); + if (f.isFile()) { + try { + XmlPullParser parser = ParserFactory.create(f); + + BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( + parser, bridgeContext, false); + + return inflate(bridgeParser, root); + } catch (Exception e) { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed to parse file " + f.getAbsolutePath(), e, null /*data*/); + + return null; + } + } + } + } + return null; + } + + private View loadCustomView(String name, AttributeSet attrs) throws ClassNotFoundException, + Exception{ + if (mProjectCallback != null) { + // first get the classname in case it's not the node name + if (name.equals("view")) { + name = attrs.getAttributeValue(null, "class"); + } + + mConstructorArgs[1] = attrs; + + Object customView = mProjectCallback.loadView(name, mConstructorSignature, + mConstructorArgs); + + if (customView instanceof View) { + return (View)customView; + } + } + + return null; + } + + private void setupViewInContext(View view, AttributeSet attrs) { + if (getContext() instanceof BridgeContext) { + BridgeContext bc = (BridgeContext) getContext(); + if (attrs instanceof BridgeXmlBlockParser) { + BridgeXmlBlockParser parser = (BridgeXmlBlockParser) attrs; + + // get the view key + Object viewKey = parser.getViewCookie(); + + if (viewKey == null) { + int currentDepth = parser.getDepth(); + + // test whether we are in an included file or in a adapter binding view. + BridgeXmlBlockParser previousParser = bc.getPreviousParser(); + if (previousParser != null) { + // looks like we inside an embedded layout. + // only apply the cookie of the calling node (<include>) if we are at the + // top level of the embedded layout. If there is a merge tag, then + // skip it and look for the 2nd level + int testDepth = mIsInMerge ? 2 : 1; + if (currentDepth == testDepth) { + viewKey = previousParser.getViewCookie(); + // if we are in a merge, wrap the cookie in a MergeCookie. + if (viewKey != null && mIsInMerge) { + viewKey = new MergeCookie(viewKey); + } + } + } else if (mResourceReference != null && currentDepth == 1) { + // else if there's a resource reference, this means we are in an adapter + // binding case. Set the resource ref as the view cookie only for the top + // level view. + viewKey = mResourceReference; + } + } + + if (viewKey != null) { + bc.addViewKey(view, viewKey); + } + } + } + } + + public void setIsInMerge(boolean isInMerge) { + mIsInMerge = isInMerge; + } + + public void setResourceReference(ResourceReference reference) { + mResourceReference = reference; + } + + @Override + public LayoutInflater cloneInContext(Context newContext) { + return new BridgeInflater(this, newContext); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/Display_Delegate.java b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java index 83f9cc2..9732530 100644 --- a/tools/layoutlib/bridge/src/android/view/Display_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java @@ -46,31 +46,17 @@ public class Display_Delegate { } @LayoutlibDelegate - /** @hide Returns the actual screen size, not including any decor. */ - /*package*/ static int getRealWidth(Display theDisplay) { - // always dynamically query for the current window manager - return RenderAction.getCurrentContext().getIWindowManager().getMetrics().widthPixels; - } - - @LayoutlibDelegate - /** @hide Returns the actual screen size, not including any decor. */ - /*package*/ static int getRealHeight(Display theDisplay) { - // always dynamically query for the current window manager - return RenderAction.getCurrentContext().getIWindowManager().getMetrics().heightPixels; - } - - @LayoutlibDelegate /** @hide special for when we are faking the screen size. */ /*package*/ static int getRawWidth(Display theDisplay) { // same as real since we're not faking compatibility mode. - return getRealWidth(theDisplay); + return RenderAction.getCurrentContext().getIWindowManager().getMetrics().widthPixels; } @LayoutlibDelegate /** @hide special for when we are faking the screen size. */ /*package*/ static int getRawHeight(Display theDisplay) { // same as real since we're not faking compatibility mode. - return getRealHeight(theDisplay); + return RenderAction.getCurrentContext().getIWindowManager().getMetrics().heightPixels; } @LayoutlibDelegate diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java index 64efa7e..3db3a1b 100644 --- a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java @@ -16,7 +16,6 @@ package android.view; -import com.android.layoutlib.bridge.android.BridgeInflater; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; import org.xmlpull.v1.XmlPullParser; diff --git a/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java new file mode 100644 index 0000000..01db34e --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +public class ViewConfiguration_Accessor { + + public static void clearConfigurations() { + // clear the stored ViewConfiguration since the map is per density and not per context. + ViewConfiguration.sConfigurations.clear(); + } + +} diff --git a/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java new file mode 100644 index 0000000..875336a --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.inputmethod; + +public class InputMethodManager_Accessor { + + public static void resetInstance() { + InputMethodManager.mInstance = null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java index 3ba3257..33bf7bc 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -26,7 +26,6 @@ import com.android.ide.common.rendering.api.RenderSession; import com.android.ide.common.rendering.api.Result; import com.android.ide.common.rendering.api.SessionParams; import com.android.ide.common.rendering.api.Result.Status; -import com.android.layoutlib.bridge.android.BridgeAssetManager; import com.android.layoutlib.bridge.impl.FontLoader; import com.android.layoutlib.bridge.impl.RenderDrawable; import com.android.layoutlib.bridge.impl.RenderSessionImpl; @@ -36,10 +35,12 @@ import com.android.tools.layoutlib.create.MethodAdapter; import com.android.tools.layoutlib.create.OverrideMethod; import com.android.util.Pair; +import android.content.res.BridgeAssetManager; import android.graphics.Bitmap; -import android.graphics.Typeface; +import android.graphics.Typeface_Accessor; import android.graphics.Typeface_Delegate; import android.os.Looper; +import android.os.Looper_Accessor; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -295,7 +296,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { BridgeAssetManager.clearSystem(); // dispose of the default typeface. - Typeface.sDefaults = null; + Typeface_Accessor.resetDefaults(); return true; } @@ -429,7 +430,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { */ public static void cleanupThread() { // clean up the looper - Looper.sThreadLocal.remove(); + Looper_Accessor.cleanupThread(); } public static LayoutLog getLog() { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeAssetManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeAssetManager.java deleted file mode 100644 index a825060..0000000 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeAssetManager.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.layoutlib.bridge.android; - -import com.android.layoutlib.bridge.Bridge; - -import android.content.res.AssetManager; - -public class BridgeAssetManager extends AssetManager { - - /** - * This initializes the static field {@link AssetManager#mSystem} which is used - * by methods who get a global asset manager using {@link AssetManager#getSystem()}. - * <p/> - * They will end up using our bridge asset manager. - * <p/> - * {@link Bridge} calls this method after setting up a new bridge. - */ - /*package*/ public static AssetManager initSystem() { - if (!(AssetManager.sSystem instanceof BridgeAssetManager)) { - // Note that AssetManager() creates a system AssetManager and we override it - // with our BridgeAssetManager. - AssetManager.sSystem = new BridgeAssetManager(); - AssetManager.sSystem.makeStringBlocks(false); - } - return AssetManager.sSystem; - } - - /** - * Clears the static {@link AssetManager#sSystem} to make sure we don't leave objects - * around that would prevent us from unloading the library. - */ - public static void clearSystem() { - AssetManager.sSystem = null; - } - - private BridgeAssetManager() { - } -} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java index b38b3b8..0453a5e 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -33,8 +33,6 @@ import com.android.util.Pair; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import android.app.Activity; -import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; @@ -65,7 +63,7 @@ import android.os.Looper; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; -import android.view.LayoutInflater; +import android.view.BridgeInflater; import android.view.Surface; import android.view.View; import android.view.ViewGroup; @@ -87,7 +85,7 @@ import java.util.concurrent.atomic.AtomicReference; /** * Custom implementation of Context/Activity to handle non compiled resources. */ -public final class BridgeContext extends Activity { +public final class BridgeContext extends Context { private Resources mSystemResources; private final HashMap<View, Object> mViewKeyMap = new HashMap<View, Object>(); @@ -97,9 +95,10 @@ public final class BridgeContext extends Activity { private final Configuration mConfig; private final ApplicationInfo mApplicationInfo; private final IProjectCallback mProjectCallback; - private final BridgeWindowManager mIWindowManager; + private Resources.Theme mTheme; + private final Map<Object, Map<String, String>> mDefaultPropMaps = new IdentityHashMap<Object, Map<String,String>>(); @@ -139,9 +138,6 @@ public final class BridgeContext extends Activity { mIWindowManager = new BridgeWindowManager(mConfig, metrics, Surface.ROTATION_0); - mFragments.mCurState = Fragment.CREATED; - mFragments.mActivity = this; - mApplicationInfo = new ApplicationInfo(); mApplicationInfo.targetSdkVersion = targetSdkVersion; } @@ -395,13 +391,6 @@ public final class BridgeContext extends Activity { return Pair.of(null, false); } - // ------------- Activity Methods - - @Override - public LayoutInflater getLayoutInflater() { - return mBridgeInflater; - } - // ------------ Context methods @Override @@ -1275,7 +1264,7 @@ public final class BridgeContext extends Activity { @Override public Context getApplicationContext() { - throw new UnsupportedOperationException(); + return this; } @Override @@ -1288,4 +1277,10 @@ public final class BridgeContext extends Activity { public boolean isRestricted() { return false; } + + @Override + public File getObbDir() { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, "OBB not supported", null); + return null; + } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java deleted file mode 100644 index 4a6393d..0000000 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.layoutlib.bridge.android; - -import com.android.ide.common.rendering.api.IProjectCallback; -import com.android.ide.common.rendering.api.LayoutLog; -import com.android.ide.common.rendering.api.MergeCookie; -import com.android.ide.common.rendering.api.ResourceReference; -import com.android.ide.common.rendering.api.ResourceValue; -import com.android.layoutlib.bridge.Bridge; -import com.android.layoutlib.bridge.impl.ParserFactory; -import com.android.resources.ResourceType; -import com.android.util.Pair; - -import org.xmlpull.v1.XmlPullParser; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.InflateException; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import java.io.File; - -/** - * Custom implementation of {@link LayoutInflater} to handle custom views. - */ -public final class BridgeInflater extends LayoutInflater { - - private final IProjectCallback mProjectCallback; - private boolean mIsInMerge = false; - private ResourceReference mResourceReference; - - /** - * List of class prefixes which are tried first by default. - * <p/> - * This should match the list in com.android.internal.policy.impl.PhoneLayoutInflater. - */ - private static final String[] sClassPrefixList = { - "android.widget.", - "android.webkit." - }; - - protected BridgeInflater(LayoutInflater original, Context newContext) { - super(original, newContext); - mProjectCallback = null; - } - - /** - * Instantiate a new BridgeInflater with an {@link IProjectCallback} object. - * - * @param context The Android application context. - * @param projectCallback the {@link IProjectCallback} object. - */ - public BridgeInflater(Context context, IProjectCallback projectCallback) { - super(context); - mProjectCallback = projectCallback; - mConstructorArgs[0] = context; - } - - @Override - public View onCreateView(String name, AttributeSet attrs) throws ClassNotFoundException { - View view = null; - - try { - // First try to find a class using the default Android prefixes - for (String prefix : sClassPrefixList) { - try { - view = createView(name, prefix, attrs); - if (view != null) { - break; - } - } catch (ClassNotFoundException e) { - // Ignore. We'll try again using the base class below. - } - } - - // Next try using the parent loader. This will most likely only work for - // fully-qualified class names. - try { - if (view == null) { - view = super.onCreateView(name, attrs); - } - } catch (ClassNotFoundException e) { - // Ignore. We'll try again using the custom view loader below. - } - - // Finally try again using the custom view loader - try { - if (view == null) { - view = loadCustomView(name, attrs); - } - } catch (ClassNotFoundException e) { - // If the class was not found, we throw the exception directly, because this - // method is already expected to throw it. - throw e; - } - } catch (Exception e) { - // Wrap the real exception in a ClassNotFoundException, so that the calling method - // can deal with it. - ClassNotFoundException exception = new ClassNotFoundException("onCreateView", e); - throw exception; - } - - setupViewInContext(view, attrs); - - return view; - } - - @Override - public View createViewFromTag(View parent, String name, AttributeSet attrs) { - View view = null; - try { - view = super.createViewFromTag(parent, name, attrs); - } catch (InflateException e) { - // try to load the class from using the custom view loader - try { - view = loadCustomView(name, attrs); - } catch (Exception e2) { - // Wrap the real exception in an InflateException so that the calling - // method can deal with it. - InflateException exception = new InflateException(); - if (e2.getClass().equals(ClassNotFoundException.class) == false) { - exception.initCause(e2); - } else { - exception.initCause(e); - } - throw exception; - } - } - - setupViewInContext(view, attrs); - - return view; - } - - @Override - public View inflate(int resource, ViewGroup root) { - Context context = getContext(); - if (context instanceof BridgeContext) { - BridgeContext bridgeContext = (BridgeContext)context; - - ResourceValue value = null; - - Pair<ResourceType, String> layoutInfo = Bridge.resolveResourceId(resource); - if (layoutInfo != null) { - value = bridgeContext.getRenderResources().getFrameworkResource( - ResourceType.LAYOUT, layoutInfo.getSecond()); - } else { - layoutInfo = mProjectCallback.resolveResourceId(resource); - - if (layoutInfo != null) { - value = bridgeContext.getRenderResources().getProjectResource( - ResourceType.LAYOUT, layoutInfo.getSecond()); - } - } - - if (value != null) { - File f = new File(value.getValue()); - if (f.isFile()) { - try { - XmlPullParser parser = ParserFactory.create(f); - - BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( - parser, bridgeContext, false); - - return inflate(bridgeParser, root); - } catch (Exception e) { - Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, - "Failed to parse file " + f.getAbsolutePath(), e, null /*data*/); - - return null; - } - } - } - } - return null; - } - - private View loadCustomView(String name, AttributeSet attrs) throws ClassNotFoundException, - Exception{ - if (mProjectCallback != null) { - // first get the classname in case it's not the node name - if (name.equals("view")) { - name = attrs.getAttributeValue(null, "class"); - } - - mConstructorArgs[1] = attrs; - - Object customView = mProjectCallback.loadView(name, mConstructorSignature, - mConstructorArgs); - - if (customView instanceof View) { - return (View)customView; - } - } - - return null; - } - - private void setupViewInContext(View view, AttributeSet attrs) { - if (getContext() instanceof BridgeContext) { - BridgeContext bc = (BridgeContext) getContext(); - if (attrs instanceof BridgeXmlBlockParser) { - BridgeXmlBlockParser parser = (BridgeXmlBlockParser) attrs; - - // get the view key - Object viewKey = parser.getViewCookie(); - - if (viewKey == null) { - int currentDepth = parser.getDepth(); - - // test whether we are in an included file or in a adapter binding view. - BridgeXmlBlockParser previousParser = bc.getPreviousParser(); - if (previousParser != null) { - // looks like we inside an embedded layout. - // only apply the cookie of the calling node (<include>) if we are at the - // top level of the embedded layout. If there is a merge tag, then - // skip it and look for the 2nd level - int testDepth = mIsInMerge ? 2 : 1; - if (currentDepth == testDepth) { - viewKey = previousParser.getViewCookie(); - // if we are in a merge, wrap the cookie in a MergeCookie. - if (viewKey != null && mIsInMerge) { - viewKey = new MergeCookie(viewKey); - } - } - } else if (mResourceReference != null && currentDepth == 1) { - // else if there's a resource reference, this means we are in an adapter - // binding case. Set the resource ref as the view cookie only for the top - // level view. - viewKey = mResourceReference; - } - } - - if (viewKey != null) { - bc.addViewKey(view, viewKey); - } - } - } - } - - public void setIsInMerge(boolean isInMerge) { - mIsInMerge = isInMerge; - } - - public void setResourceReference(ResourceReference reference) { - mResourceReference = reference; - } - - @Override - public LayoutInflater cloneInContext(Context newContext) { - return new BridgeInflater(this, newContext); - } -} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java index a8da377..8e673ad 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java @@ -26,10 +26,9 @@ import android.view.DragEvent; import android.view.IWindow; import android.view.KeyEvent; import android.view.MotionEvent; -import android.view.View.AttachInfo; /** - * Implementation of {@link IWindow} to pass to the {@link AttachInfo}. + * Implementation of {@link IWindow} to pass to the AttachInfo. */ public final class BridgeWindow implements IWindow { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java index 5952c37..7d83a9f 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java @@ -456,9 +456,7 @@ public class BridgeWindowManager implements IWindowManager { return null; } - @Override public int getPreferredOptionsPanelGravity() throws RemoteException { return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; } - } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java index 1016b32..f8ed4f7 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java @@ -25,7 +25,7 @@ import org.xmlpull.v1.XmlPullParserException; import android.content.res.XmlResourceParser; import android.util.AttributeSet; -import android.util.XmlPullAttributes; +import android.util.BridgeXmlPullAttributes; import java.io.IOException; import java.io.InputStream; @@ -34,12 +34,12 @@ import java.io.Reader; /** * {@link BridgeXmlBlockParser} reimplements most of android.xml.XmlBlock.Parser. * It delegates to both an instance of {@link XmlPullParser} and an instance of - * {@link XmlPullAttributes} (for the {@link AttributeSet} part). + * XmlPullAttributes (for the {@link AttributeSet} part). */ public class BridgeXmlBlockParser implements XmlResourceParser { private final XmlPullParser mParser; - private final XmlPullAttributes mAttrib; + private final BridgeXmlPullAttributes mAttrib; private final BridgeContext mContext; private final boolean mPlatformFile; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java deleted file mode 100644 index ba856e0..0000000 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlPullAttributes.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.layoutlib.bridge.android; - -import com.android.ide.common.rendering.api.RenderResources; -import com.android.ide.common.rendering.api.ResourceValue; -import com.android.layoutlib.bridge.Bridge; -import com.android.layoutlib.bridge.BridgeConstants; -import com.android.resources.ResourceType; - -import org.xmlpull.v1.XmlPullParser; - -import android.util.AttributeSet; -import android.util.XmlPullAttributes; - -/** - * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser - */ -public class BridgeXmlPullAttributes extends XmlPullAttributes { - - private final BridgeContext mContext; - private final boolean mPlatformFile; - - public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context, - boolean platformFile) { - super(parser); - mContext = context; - mPlatformFile = platformFile; - } - - /* - * (non-Javadoc) - * @see android.util.XmlPullAttributes#getAttributeNameResource(int) - * - * This methods must return com.android.internal.R.attr.<name> matching - * the name of the attribute. - * It returns 0 if it doesn't find anything. - */ - @Override - public int getAttributeNameResource(int index) { - // get the attribute name. - String name = getAttributeName(index); - - // get the attribute namespace - String ns = mParser.getAttributeNamespace(index); - - if (BridgeConstants.NS_RESOURCES.equals(ns)) { - Integer v = Bridge.getResourceId(ResourceType.ATTR, name); - if (v != null) { - return v.intValue(); - } - - return 0; - } - - // this is not an attribute in the android namespace, we query the customviewloader, if - // the namespaces match. - if (mContext.getProjectCallback().getNamespace().equals(ns)) { - Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name); - if (v != null) { - return v.intValue(); - } - } - - return 0; - } - - /* - * (non-Javadoc) - * @see android.util.XmlPullAttributes#getAttributeResourceValue(int, int) - */ - @Override - public int getAttributeResourceValue(int index, int defaultValue) { - String value = getAttributeValue(index); - - return resolveResourceValue(value, defaultValue); - } - - /* - * (non-Javadoc) - * @see android.util.XmlPullAttributes#getAttributeResourceValue(java.lang.String, java.lang.String, int) - */ - @Override - public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { - String value = getAttributeValue(namespace, attribute); - - return resolveResourceValue(value, defaultValue); - } - - private int resolveResourceValue(String value, int defaultValue) { - // now look for this particular value - RenderResources resources = mContext.getRenderResources(); - ResourceValue resource = resources.resolveResValue( - resources.findResValue(value, mPlatformFile)); - - if (resource != null) { - Integer id = null; - if (mPlatformFile || resource.isFramework()) { - id = Bridge.getResourceId(resource.getResourceType(), resource.getName()); - } else { - id = mContext.getProjectCallback().getResourceId( - resource.getResourceType(), resource.getName()); - } - - if (id != null) { - return id; - } - } - - return defaultValue; - } - -} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java index 5569e06..7521011 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java @@ -32,7 +32,8 @@ public class PhoneSystemBar extends CustomBar { public PhoneSystemBar(Context context, Density density) throws XmlPullParserException { super(context, density, "/bars/phone_system_bar.xml", "phone_system_bar.xml"); - setGravity(mGravity | Gravity.RIGHT); + // FIXME: use FILL_H? + setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT); setBackgroundColor(0xFF000000); // Cannot access the inside items through id because no R.id values have been diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/AnimationThread.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/AnimationThread.java deleted file mode 100644 index 4c18656..0000000 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/AnimationThread.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.layoutlib.bridge.impl; - -import com.android.ide.common.rendering.api.IAnimationListener; -import com.android.ide.common.rendering.api.RenderSession; -import com.android.ide.common.rendering.api.Result; -import com.android.ide.common.rendering.api.Result.Status; -import com.android.layoutlib.bridge.Bridge; - -import android.animation.ValueAnimator; -import android.os.Handler; -import android.os.Handler_Delegate; -import android.os.Message; -import android.os.Handler_Delegate.IHandlerCallback; - -import java.util.PriorityQueue; -import java.util.Queue; - -/** - * Abstract animation thread. - * <p/> - * This does not actually start an animation, instead it fakes a looper that will play whatever - * animation is sending messages to its own {@link Handler}. - * <p/> - * Classes should implement {@link #preAnimation()} and {@link #postAnimation()}. - * <p/> - * If {@link #preAnimation()} does not start an animation somehow then the thread doesn't do - * anything. - * - */ -public abstract class AnimationThread extends Thread { - - private static class MessageBundle implements Comparable<MessageBundle> { - final Handler mTarget; - final Message mMessage; - final long mUptimeMillis; - - MessageBundle(Handler target, Message message, long uptimeMillis) { - mTarget = target; - mMessage = message; - mUptimeMillis = uptimeMillis; - } - - public int compareTo(MessageBundle bundle) { - if (mUptimeMillis < bundle.mUptimeMillis) { - return -1; - } - return 1; - } - } - - private final RenderSessionImpl mSession; - - private Queue<MessageBundle> mQueue = new PriorityQueue<MessageBundle>(); - private final IAnimationListener mListener; - - public AnimationThread(RenderSessionImpl scene, String threadName, - IAnimationListener listener) { - super(threadName); - mSession = scene; - mListener = listener; - } - - public abstract Result preAnimation(); - public abstract void postAnimation(); - - @Override - public void run() { - Bridge.prepareThread(); - try { - Handler_Delegate.setCallback(new IHandlerCallback() { - public void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) { - if (msg.what == ValueAnimator.ANIMATION_START || - msg.what == ValueAnimator.ANIMATION_FRAME) { - mQueue.add(new MessageBundle(handler, msg, uptimeMillis)); - } else { - // just ignore. - } - } - }); - - // call out to the pre-animation work, which should start an animation or more. - Result result = preAnimation(); - if (result.isSuccess() == false) { - mListener.done(result); - } - - // loop the animation - RenderSession session = mSession.getSession(); - do { - // check early. - if (mListener.isCanceled()) { - break; - } - - // get the next message. - MessageBundle bundle = mQueue.poll(); - if (bundle == null) { - break; - } - - // sleep enough for this bundle to be on time - long currentTime = System.currentTimeMillis(); - if (currentTime < bundle.mUptimeMillis) { - try { - sleep(bundle.mUptimeMillis - currentTime); - } catch (InterruptedException e) { - // FIXME log/do something/sleep again? - e.printStackTrace(); - } - } - - // check after sleeping. - if (mListener.isCanceled()) { - break; - } - - // ready to do the work, acquire the scene. - result = mSession.acquire(250); - if (result.isSuccess() == false) { - mListener.done(result); - return; - } - - // process the bundle. If the animation is not finished, this will enqueue - // the next message, so mQueue will have another one. - try { - // check after acquiring in case it took a while. - if (mListener.isCanceled()) { - break; - } - - bundle.mTarget.handleMessage(bundle.mMessage); - if (mSession.render(false /*freshRender*/).isSuccess()) { - mListener.onNewFrame(session); - } - } finally { - mSession.release(); - } - } while (mListener.isCanceled() == false && mQueue.size() > 0); - - mListener.done(Status.SUCCESS.createResult()); - - } catch (Throwable throwable) { - // can't use Bridge.getLog() as the exception might be thrown outside - // of an acquire/release block. - mListener.done(Status.ERROR_UNKNOWN.createResult("Error playing animation", throwable)); - - } finally { - postAnimation(); - Handler_Delegate.setCallback(null); - Bridge.cleanupThread(); - } - } -} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java index 35e5987..7b70180 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java @@ -20,6 +20,7 @@ import com.android.ide.common.rendering.api.IAnimationListener; import com.android.ide.common.rendering.api.Result; import com.android.ide.common.rendering.api.Result.Status; +import android.animation.AnimationThread; import android.animation.Animator; public class PlayAnimationThread extends AnimationThread { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java index d40222f..7323c6a 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java @@ -35,8 +35,9 @@ import android.content.res.Configuration; import android.os.HandlerThread_Delegate; import android.os.Looper; import android.util.DisplayMetrics; -import android.view.ViewConfiguration; +import android.view.ViewConfiguration_Accessor; import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodManager_Accessor; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -248,10 +249,10 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso HandlerThread_Delegate.cleanUp(sCurrentContext); // clear the stored ViewConfiguration since the map is per density and not per context. - ViewConfiguration.sConfigurations.clear(); + ViewConfiguration_Accessor.clearConfigurations(); // remove the InputMethodManager - InputMethodManager.mInstance = null; + InputMethodManager_Accessor.resetInstance(); sCurrentContext = null; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java index 953d8cf..8133210 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java @@ -23,17 +23,13 @@ import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.Result; import com.android.ide.common.rendering.api.Result.Status; import com.android.layoutlib.bridge.android.BridgeContext; -import com.android.layoutlib.bridge.android.BridgeWindow; -import com.android.layoutlib.bridge.android.BridgeWindowSession; import com.android.resources.ResourceType; import android.graphics.Bitmap; import android.graphics.Bitmap_Delegate; import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.os.Handler; -import android.view.View; -import android.view.View.AttachInfo; +import android.view.AttachInfo_Accessor; import android.view.View.MeasureSpec; import android.widget.FrameLayout; @@ -82,13 +78,7 @@ public class RenderDrawable extends RenderAction<DrawableParams> { content.setBackgroundDrawable(d); // set the AttachInfo on the root view. - AttachInfo info = new AttachInfo(new BridgeWindowSession(), new BridgeWindow(), - new Handler(), null); - info.mHasWindowFocus = true; - info.mWindowVisibility = View.VISIBLE; - info.mInTouchMode = false; // this is so that we can display selections. - info.mHardwareAccelerated = false; - content.dispatchAttachedToWindow(info, 0); + AttachInfo_Accessor.setAttachInfo(content); // measure @@ -102,7 +92,7 @@ public class RenderDrawable extends RenderAction<DrawableParams> { content.layout(0, 0, w, h); // preDraw setup - content.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); + AttachInfo_Accessor.dispatchOnPreDraw(content); // draw into a new image BufferedImage image = getImage(w, h); diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index aa30e29..d5400d7 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -40,10 +40,7 @@ import com.android.ide.common.rendering.api.SessionParams.RenderingMode; import com.android.internal.util.XmlUtils; import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.android.BridgeContext; -import com.android.layoutlib.bridge.android.BridgeInflater; import com.android.layoutlib.bridge.android.BridgeLayoutParamsMapAttributes; -import com.android.layoutlib.bridge.android.BridgeWindow; -import com.android.layoutlib.bridge.android.BridgeWindowSession; import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; import com.android.layoutlib.bridge.bars.FakeActionBar; import com.android.layoutlib.bridge.bars.PhoneSystemBar; @@ -57,6 +54,7 @@ import com.android.util.Pair; import org.xmlpull.v1.XmlPullParserException; +import android.animation.AnimationThread; import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.LayoutTransition; @@ -66,12 +64,12 @@ import android.graphics.Bitmap; import android.graphics.Bitmap_Delegate; import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.os.Handler; import android.util.DisplayMetrics; import android.util.TypedValue; +import android.view.AttachInfo_Accessor; +import android.view.BridgeInflater; import android.view.View; import android.view.ViewGroup; -import android.view.View.AttachInfo; import android.view.View.MeasureSpec; import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.MarginLayoutParams; @@ -190,7 +188,6 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { // build the inflater and parser. mInflater = new BridgeInflater(context, params.getProjectCallback()); context.setBridgeInflater(mInflater); - mInflater.setFactory2(context); mBlockParser = new BridgeXmlBlockParser( params.getLayoutDescription(), context, false /* platformResourceFlag */); @@ -329,13 +326,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { Fragment_Delegate.setProjectCallback(null); // set the AttachInfo on the root view. - AttachInfo info = new AttachInfo(new BridgeWindowSession(), new BridgeWindow(), - new Handler(), null); - info.mHasWindowFocus = true; - info.mWindowVisibility = View.VISIBLE; - info.mInTouchMode = false; // this is so that we can display selections. - info.mHardwareAccelerated = false; - mViewRoot.dispatchAttachedToWindow(info, 0); + AttachInfo_Accessor.setAttachInfo(mViewRoot); // post-inflate process. For now this supports TabHost/TabWidget postInflateProcess(view, params.getProjectCallback()); @@ -462,7 +453,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { mImage = null; mCanvas = null; } else { - mViewRoot.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); + AttachInfo_Accessor.dispatchOnPreDraw(mViewRoot); // draw the views // create the BufferedImage into which the layout will be rendered. diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 93a35cc..0a15627 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -95,10 +95,11 @@ public final class CreateInfo implements ICreateInfo { /** * The list of methods to rewrite as delegates. */ - private final static String[] DELEGATE_METHODS = new String[] { + public final static String[] DELEGATE_METHODS = new String[] { "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;", "android.content.res.Resources$Theme#obtainStyledAttributes", "android.content.res.Resources$Theme#resolveAttribute", + "android.content.res.TypedArray#getValueAt", "android.graphics.BitmapFactory#finishDecode", "android.os.Handler#sendMessageAtTime", "android.os.HandlerThread#run", @@ -108,6 +109,7 @@ public final class CreateInfo implements ICreateInfo { "android.view.LayoutInflater#parseInclude", "android.view.View#isInEditMode", "android.view.inputmethod.InputMethodManager#getInstance", + "android.util.Log#println_native", "com.android.internal.util.XmlUtils#convertValueToInt", // TODO: comment out once DelegateClass is working }; @@ -115,7 +117,7 @@ public final class CreateInfo implements ICreateInfo { /** * The list of classes on which to delegate all native methods. */ - private final static String[] DELEGATE_CLASS_NATIVES = new String[] { + public final static String[] DELEGATE_CLASS_NATIVES = new String[] { "android.animation.PropertyValuesHolder", "android.graphics.AvoidXfermode", "android.graphics.Bitmap", diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java index b027b6a..4b7a348 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java @@ -165,6 +165,8 @@ public class Main { return false; } + sOptions.generatePublicAccess = false; + return true; } } diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index 9a51d5e..5b4bce2 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -954,7 +954,7 @@ class WifiConfigStore { netId, WifiConfiguration.pskVarName, config.preSharedKey)) { - Log.d(TAG, "failed to set psk: "+config.preSharedKey); + Log.d(TAG, "failed to set psk"); break setVariables; } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 82ff0de..c6f7da2 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -114,7 +114,7 @@ public class WifiStateMachine extends StateMachine { private static final String SOFTAP_IFACE = "wl0.1"; private WifiMonitor mWifiMonitor; - private INetworkManagementService nwService; + private INetworkManagementService mNwService; private ConnectivityManager mCm; /* Scan results handling */ @@ -500,7 +500,7 @@ public class WifiStateMachine extends StateMachine { mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo")); IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); - nwService = INetworkManagementService.Stub.asInterface(b); + mNwService = INetworkManagementService.Stub.asInterface(b); mWifiMonitor = new WifiMonitor(this); mDhcpInfoInternal = new DhcpInfoInternal(); @@ -1090,24 +1090,22 @@ public class WifiStateMachine extends StateMachine { InterfaceConfiguration ifcg = null; try { - ifcg = nwService.getInterfaceConfig(intf); + ifcg = mNwService.getInterfaceConfig(intf); if (ifcg != null) { /* IP/netmask: 192.168.43.1/255.255.255.0 */ ifcg.addr = new LinkAddress(NetworkUtils.numericToInetAddress( "192.168.43.1"), 24); ifcg.interfaceFlags = "[up]"; - nwService.setInterfaceConfig(intf, ifcg); + mNwService.setInterfaceConfig(intf, ifcg); } } catch (Exception e) { Log.e(TAG, "Error configuring interface " + intf + ", :" + e); - setWifiApEnabled(null, false); return false; } if(mCm.tether(intf) != ConnectivityManager.TETHER_ERROR_NO_ERROR) { Log.e(TAG, "Error tethering on " + intf); - setWifiApEnabled(null, false); return false; } return true; @@ -1126,11 +1124,11 @@ public class WifiStateMachine extends StateMachine { ip settings */ InterfaceConfiguration ifcg = null; try { - ifcg = nwService.getInterfaceConfig(mInterfaceName); + ifcg = mNwService.getInterfaceConfig(mInterfaceName); if (ifcg != null) { ifcg.addr = new LinkAddress(NetworkUtils.numericToInetAddress( "0.0.0.0"), 0); - nwService.setInterfaceConfig(mInterfaceName, ifcg); + mNwService.setInterfaceConfig(mInterfaceName, ifcg); } } catch (Exception e) { Log.e(TAG, "Error resetting interface " + mInterfaceName + ", :" + e); @@ -1536,7 +1534,7 @@ public class WifiStateMachine extends StateMachine { } try { - nwService.clearInterfaceAddresses(mInterfaceName); + mNwService.clearInterfaceAddresses(mInterfaceName); } catch (Exception e) { Log.e(TAG, "Failed to clear IP addresses on disconnect" + e); } @@ -1671,12 +1669,12 @@ public class WifiStateMachine extends StateMachine { WifiApConfigStore.setApConfiguration(config); } try { - nwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE); + mNwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE); } catch (Exception e) { Log.e(TAG, "Exception in softap start " + e); try { - nwService.stopAccessPoint(mInterfaceName); - nwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE); + mNwService.stopAccessPoint(mInterfaceName); + mNwService.startAccessPoint(config, mInterfaceName, SOFTAP_IFACE); } catch (Exception e1) { Log.e(TAG, "Exception in softap re-start " + e1); return false; @@ -1913,6 +1911,17 @@ public class WifiStateMachine extends StateMachine { transitionTo(mDriverUnloadingState); break; case CMD_START_SUPPLICANT: + //A runtime crash can leave the interface up and + //this affects connectivity when supplicant starts up. + //Ensure interface is down before a supplicant start. + try { + mNwService.setInterfaceDown(mInterfaceName); + } catch (RemoteException re) { + if (DBG) Log.w(TAG, "Unable to bring down wlan interface: " + re); + } catch (IllegalStateException ie) { + if (DBG) Log.w(TAG, "Unable to bring down wlan interface: " + ie); + } + if(WifiNative.startSupplicant()) { Log.d(TAG, "Supplicant start successful"); mWifiMonitor.startMonitoring(); @@ -2700,7 +2709,7 @@ public class WifiStateMachine extends StateMachine { ifcg.addr = dhcpInfoInternal.makeLinkAddress(); ifcg.interfaceFlags = "[up]"; try { - nwService.setInterfaceConfig(mInterfaceName, ifcg); + mNwService.setInterfaceConfig(mInterfaceName, ifcg); Log.v(TAG, "Static IP configuration succeeded"); sendMessage(CMD_STATIC_IP_SUCCESS, dhcpInfoInternal); } catch (RemoteException re) { @@ -3160,7 +3169,7 @@ public class WifiStateMachine extends StateMachine { setWifiApState(WIFI_AP_STATE_DISABLING); stopTethering(); try { - nwService.stopAccessPoint(mInterfaceName); + mNwService.stopAccessPoint(mInterfaceName); } catch(Exception e) { Log.e(TAG, "Exception in stopAccessPoint()"); } diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java index 5c8926c..4dd856f 100644 --- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java +++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java @@ -83,7 +83,7 @@ public class WifiWatchdogStateMachine extends StateMachine { private static final long DEFAULT_WALLED_GARDEN_INTERVAL_MS = 30 * 60 * 1000; private static final int DEFAULT_MAX_SSID_BLACKLISTS = 7; - private static final int DEFAULT_NUM_DNS_PINGS = 5; + private static final int DEFAULT_NUM_DNS_PINGS = 15; // Multiple pings to detect setup issues private static final int DEFAULT_MIN_DNS_RESPONSES = 3; private static final int DEFAULT_DNS_PING_TIMEOUT_MS = 2000; @@ -94,7 +94,7 @@ public class WifiWatchdogStateMachine extends StateMachine { private static final String DEFAULT_WALLED_GARDEN_URL = "http://clients3.google.com/generate_204"; private static final int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000; - private static final int DNS_INTRATEST_PING_INTERVAL = 20; + private static final int DNS_INTRATEST_PING_INTERVAL = 200; // Long delay to detect setup issues private static final int BASE = Protocol.BASE_WIFI_WATCHDOG; diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index 28afd44..3678cfc 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -34,10 +34,13 @@ import android.net.wifi.WpsConfiguration.Setup; import android.net.wifi.p2p.WifiP2pDevice.Status; import android.os.Binder; import android.os.IBinder; +import android.os.INetworkManagementService; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.os.Messenger; +import android.os.ServiceManager; +import android.os.SystemProperties; import android.util.Slog; import android.view.LayoutInflater; import android.view.View; @@ -69,6 +72,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub { private static final boolean DBG = true; private Context mContext; + private String mInterface; + + INetworkManagementService mNwService; // Tracked to notify the user about wifi client/hotspot being shut down // during p2p bring up @@ -94,6 +100,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { public WifiP2pService(Context context) { mContext = context; + mInterface = SystemProperties.get("wifi.interface", "wlan0"); mP2pSupported = mContext.getResources().getBoolean( com.android.internal.R.bool.config_wifi_p2p_support); @@ -108,6 +115,11 @@ public class WifiP2pService extends IWifiP2pManager.Stub { } + public void connectivityServiceReady() { + IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); + mNwService = INetworkManagementService.Stub.asInterface(b); + } + private class WifiStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { @@ -324,8 +336,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub { @Override public void enter() { if (DBG) Slog.d(TAG, getName()); - // TODO: fix later - WifiNative.unloadDriver(); transitionTo(mP2pDisabledState); } @@ -334,7 +344,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub { if (DBG) Slog.d(TAG, getName() + message.toString()); switch (message.what) { case WifiMonitor.SUP_DISCONNECTION_EVENT: - WifiNative.unloadDriver(); transitionTo(mP2pDisabledState); break; default: @@ -411,9 +420,13 @@ public class WifiP2pService extends IWifiP2pManager.Stub { if (DBG) Slog.d(TAG, getName() + message.toString()); switch (message.what) { case WifiStateMachine.P2P_ENABLE_PROCEED: - // TODO: fix this for p2p - if (WifiNative.loadDriver() && - WifiNative.startSupplicant()) { + try { + mNwService.wifiFirmwareReload(mInterface, "P2P"); + } catch (Exception e) { + Slog.e(TAG, "Failed to reload p2p firmware " + e); + // continue + } + if (WifiNative.startSupplicant()) { Slog.d(TAG, "Wi-fi Direct start successful"); mWifiMonitor.startMonitoring(); transitionTo(mP2pEnablingState); |