From 9fec40d596463896c9da9acdc065d3e59849c511 Mon Sep 17 00:00:00 2001 From: Yamit Mehta Date: Fri, 17 Jul 2015 18:54:56 +0530 Subject: [PATCH 001/185] audio: Add Audio Proxy device Add audio proxy device for WFD source Change-Id: I51167a27cb017ca37e732f80b4b95d60934d80d6 --- media/java/android/media/AudioSystem.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index f597440ccbb3..e08c29041dac 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -373,6 +373,7 @@ public class AudioSystem public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; public static final int DEVICE_OUT_IP = 0x800000; public static final int DEVICE_OUT_BUS = 0x1000000; + public static final int DEVICE_OUT_PROXY = 0x2000000; public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; @@ -401,6 +402,7 @@ public class AudioSystem DEVICE_OUT_SPEAKER_SAFE | DEVICE_OUT_IP | DEVICE_OUT_BUS | + DEVICE_OUT_PROXY | DEVICE_OUT_DEFAULT); public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | @@ -441,6 +443,7 @@ public class AudioSystem public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000; public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000; + public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x2000000; public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | @@ -464,6 +467,7 @@ public class AudioSystem DEVICE_IN_LOOPBACK | DEVICE_IN_IP | DEVICE_IN_BUS | + DEVICE_IN_PROXY | DEVICE_IN_DEFAULT); public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | @@ -500,6 +504,7 @@ public class AudioSystem public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; public static final String DEVICE_OUT_IP_NAME = "ip"; public static final String DEVICE_OUT_BUS_NAME = "bus"; + public static final String DEVICE_OUT_PROXY_NAME = "proxy"; public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; @@ -576,6 +581,8 @@ public class AudioSystem return DEVICE_OUT_IP_NAME; case DEVICE_OUT_BUS: return DEVICE_OUT_BUS_NAME; + case DEVICE_OUT_PROXY: + return DEVICE_OUT_PROXY_NAME; case DEVICE_OUT_DEFAULT: default: return Integer.toString(device); -- GitLab From 8dea83be1a3eebc809cadf44297a420c234da934 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Thu, 9 Jul 2015 14:47:34 -0700 Subject: [PATCH 002/185] Camera: Add feature extensions This change includes below gerrits: # This is a combination of 7 commits. # The first commit's message is: Camera: Add support for QC camera features. Added APIs and keys for all QC features. This will enable application to get/set paramters. (cherrypicked from commit d0c5a0ee7e9af41320fed00ff324c6d0f22eb697) Change-Id: I68c23aaf7267645efeb4d4743b390a048292b7fd # This is the 2nd commit message: Camera: Adds support for meta data callbacks - This change adds a new type of callback that will be called when there are pending meta data notifications. Change-Id: I84f5cbafe4f023c7b0efa9ec8620756b0eaa428d # This is the 3rd commit message: Camera: Adds support for longshot configuration - The Camera API is extended with one additional call for longshot mode configuration. (cherrypicked from commit 867c4865b2a61a8e844e2784c41b7aafc392aec0 ) Change-Id: Idb91a21dc0d9fa9d22b4a6bbcc0b2eebfc2cb6db # This is the 4th commit message: Camera: Add support for manual 3A Add API for manual 3A (awb/af/aec). Change-Id: Ia5240207ce7a6628e8fdfef79f56db01add14aef # This is the 5th commit message: Camera: use single KEY for set/get manual 3A parameters. Instead of using different KEYs, we can share one same key, for set/get 3A parameters from APK. Change-Id: Ie3216ee4e1b8f62fcdd57a0be119d4b8dcdd81b3 # This is the 6th commit message: Framework: Adding support for Auto HDR Adding support for Auto HDR for camera CRs-fixed: 629556 Change-Id: Ie5e4718524d2ed799f1f9af1f76e89c01d743ac8 # This is the 7th commit message: Camera: Add support for video rotation Adding apis to support video rotation. CRs-Fixed: 672804 Change-Id: Ic67e82058824a6dc7cc803ef0efe61475350bafc Change-Id: Ideb191d666e7de8db132811f66a7796d87e75971 --- core/java/android/hardware/Camera.java | 1480 ++++++++++++++++++++++++ core/jni/android_hardware_Camera.cpp | 82 +- 2 files changed, 1561 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index acf0677559fd..c26cf6bc3088 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -156,6 +156,10 @@ public class Camera { private static final int CAMERA_MSG_RAW_IMAGE_NOTIFY = 0x200; private static final int CAMERA_MSG_PREVIEW_METADATA = 0x400; private static final int CAMERA_MSG_FOCUS_MOVE = 0x800; + /* ### QC ADD-ONS: START */ + private static final int CAMERA_MSG_STATS_DATA = 0x1000; + private static final int CAMERA_MSG_META_DATA = 0x2000; + /* ### QC ADD-ONS: END */ private long mNativeContext; // accessed by native methods private EventHandler mEventHandler; @@ -176,6 +180,17 @@ public class Camera { private final Object mAutoFocusCallbackLock = new Object(); private static final int NO_ERROR = 0; + private static final int EACCESS = -13; + private static final int ENODEV = -19; + private static final int EBUSY = -16; + private static final int EINVAL = -22; + private static final int ENOSYS = -38; + private static final int EUSERS = -87; + private static final int EOPNOTSUPP = -95; + /* ### QC ADD-ONS: START */ + private CameraDataCallback mCameraDataCallback; + private CameraMetaDataCallback mCameraMetaDataCallback; + /* ### QC ADD-ONS: END */ /** * @deprecated This broadcast is no longer delivered by the system; use @@ -270,6 +285,17 @@ public class Camera { */ public static final int CAMERA_FACING_FRONT = 1; + /* ### QC ADD-ONS: START TBD*/ + /** @hide + * camera is in ZSL mode. + */ + public static final int CAMERA_SUPPORT_MODE_ZSL = 2; + + /** @hide + * camera is in non-ZSL mode. + */ + public static final int CAMERA_SUPPORT_MODE_NONZSL = 3; + /* ### QC ADD-ONS: END */ /** * The direction that the camera faces. It should be * CAMERA_FACING_BACK or CAMERA_FACING_FRONT. @@ -452,6 +478,10 @@ public class Camera { mPostviewCallback = null; mUsingPreviewAllocation = false; mZoomListener = null; + /* ### QC ADD-ONS: START */ + mCameraDataCallback = null; + mCameraMetaDataCallback = null; + /* ### QC ADD-ONS: END */ Looper looper; if ((looper = Looper.myLooper()) != null) { @@ -1152,7 +1182,23 @@ public class Camera { mAutoFocusMoveCallback.onAutoFocusMoving(msg.arg1 == 0 ? false : true, mCamera); } return; + /* ### QC ADD-ONS: START */ + case CAMERA_MSG_STATS_DATA: + int statsdata[] = new int[257]; + for(int i =0; i<257; i++ ) { + statsdata[i] = byteToInt( (byte[])msg.obj, i*4); + } + if (mCameraDataCallback != null) { + mCameraDataCallback.onCameraData(statsdata, mCamera); + } + return; + case CAMERA_MSG_META_DATA: + if (mCameraMetaDataCallback != null) { + mCameraMetaDataCallback.onCameraMetaData((byte[])msg.obj, mCamera); + } + return; + /* ### QC ADD-ONS: END */ default: Log.e(TAG, "Unknown message type " + msg.what); return; @@ -1898,6 +1944,27 @@ public class Camera { return p; } + /** @hide + * Returns the current cct value of white balance. + * + * If it's in AWB mode, cct is determined by stats/awb module. + * + * If it's in Manual WB mode, it actually returns cct value + * set by user via {@link #setParameters(Camera.Parameters)}. + */ + public int getWBCurrentCCT() { + Parameters p = new Parameters(); + String s = native_getParameters(); + p.unflatten(s); + + int cct = 0; + if (p.getWBCurrentCCT() != null) { + cct = Integer.parseInt(p.getWBCurrentCCT()); + } + + return cct; + } + /** * Returns an empty {@link Parameters} for testing purpose. * @@ -1910,6 +1977,157 @@ public class Camera { return camera.new Parameters(); } + /* ### QC ADD-ONS: START */ + private static int byteToInt(byte[] b, int offset) { + int value = 0; + for (int i = 0; i < 4; i++) { + int shift = (4 - 1 - i) * 8; + value += (b[(3-i) + offset] & 0x000000FF) << shift; + } + return value; + } + /** @hide + * Handles the callback for when Camera Data is available. + * data is read from the camera. + */ + public interface CameraDataCallback { + /** + * Callback for when camera data is available. + * + * @param data a int array of the camera data + * @param camera the Camera service object + */ + void onCameraData(int[] data, Camera camera); + }; + + /** @hide + * Set camera histogram mode and registers a callback function to run. + * Only valid after startPreview() has been called. + * + * @param cb the callback to run + */ + public final void setHistogramMode(CameraDataCallback cb) + { + mCameraDataCallback = cb; + native_setHistogramMode(cb!=null); + } + private native final void native_setHistogramMode(boolean mode); + + /** @hide + * Set camera histogram command to send data. + * + */ + public final void sendHistogramData() + { + native_sendHistogramData(); + } + private native final void native_sendHistogramData(); + + /** @hide + * Handles the callback for when Camera Meta Data is available. + * Meta data is read from the camera. + */ + public interface CameraMetaDataCallback { + /** + * Callback for when camera meta data is available. + * + * @param data a byte array of the camera meta data + * @param camera the Camera service object + */ + void onCameraMetaData(byte[] data, Camera camera); + }; + + /** @hide + * Set camera meta data and registers a callback function to run. + * Only valid after startPreview() has been called. + * + * @param cb the callback to run + */ + public final void setMetadataCb(CameraMetaDataCallback cb) + { + mCameraMetaDataCallback = cb; + native_setMetadataCb(cb!=null); + } + private native final void native_setMetadataCb(boolean mode); + + /** @hide + * Set camera face detection command to send meta data. + */ + public final void sendMetaData() + { + native_sendMetaData(); + } + private native final void native_sendMetaData(); + + /** @hide + * Configure longshot mode. Available only in ZSL. + * + * @param enable enable/disable this mode + */ + public final void setLongshot(boolean enable) + { + native_setLongshot(enable); + } + private native final void native_setLongshot(boolean enable); + + /** @hide + * Handles the Touch Co-ordinate. + */ + public class Coordinate { + /** + * Sets the x,y co-ordinates for a touch event + * + * @param x the x co-ordinate (pixels) + * @param y the y co-ordinate (pixels) + */ + public Coordinate(int x, int y) { + xCoordinate = x; + yCoordinate = y; + } + /** + * Compares {@code obj} to this co-ordinate. + * + * @param obj the object to compare this co-ordinate with. + * @return {@code true} if the xCoordinate and yCoordinate of {@code obj} is the + * same as those of this coordinate. {@code false} otherwise. + */ + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Coordinate)) { + return false; + } + Coordinate c = (Coordinate) obj; + return xCoordinate == c.xCoordinate && yCoordinate == c.yCoordinate; + } + + /** x co-ordinate for the touch event*/ + public int xCoordinate; + + /** y co-ordinate for the touch event */ + public int yCoordinate; + }; + + /** @hide + * Returns the current focus position. + * + * If it's in AF mode, it's the lens position after af is done. + * + * If it's in Manual Focus mode, it actually returns the value + * set by user via {@link #setParameters(Camera.Parameters)}. + */ + public int getCurrentFocusPosition() { + Parameters p = new Parameters(); + String s = native_getParameters(); + p.unflatten(s); + + int focus_pos = -1; + if (p.getCurrentFocusPosition() != null) { + focus_pos = Integer.parseInt(p.getCurrentFocusPosition()); + } + return focus_pos; + } + + /* ### QC ADD-ONS: END */ /** * Returns a copied {@link Parameters}; for shim use only. * @@ -2157,6 +2375,10 @@ public class Camera { public static final String WHITE_BALANCE_CLOUDY_DAYLIGHT = "cloudy-daylight"; public static final String WHITE_BALANCE_TWILIGHT = "twilight"; public static final String WHITE_BALANCE_SHADE = "shade"; + /** @hide + * wb manual cct mode. + */ + public static final String WHITE_BALANCE_MANUAL_CCT = "manual-cct"; // Values for color effect settings. public static final String EFFECT_NONE = "none"; @@ -2204,6 +2426,11 @@ public class Camera { */ public static final String FLASH_MODE_TORCH = "torch"; + /** @hide + * Scene mode is off. + */ + public static final String SCENE_MODE_ASD = "asd"; + /** * Scene mode is off. */ @@ -2280,6 +2507,14 @@ public class Camera { * Capture the naturally warm color of scenes lit by candles. */ public static final String SCENE_MODE_CANDLELIGHT = "candlelight"; + /** @hide + * SCENE_MODE_BACKLIGHT + **/ + public static final String SCENE_MODE_BACKLIGHT = "backlight"; + /** @hide + * SCENE_MODE_FLOWERS + **/ + public static final String SCENE_MODE_FLOWERS = "flowers"; /** * Applications are looking for a barcode. Camera driver will be @@ -2322,6 +2557,13 @@ public class Camera { */ public static final String FOCUS_MODE_FIXED = "fixed"; + /** @hide + * Normal focus mode. Applications should call + * {@link #autoFocus(AutoFocusCallback)} to start the focus in this + * mode. + */ + public static final String FOCUS_MODE_NORMAL = "normal"; + /** * Extended depth of field (EDOF). Focusing is done digitally and * continuously. Applications should not call {@link @@ -2374,6 +2616,11 @@ public class Camera { */ public static final String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture"; + /** @hide + * manual focus mode + */ + public static final String FOCUS_MODE_MANUAL_POSITION = "manual"; + // Indices for focus distance array. /** * The array index of near focus distance for use with @@ -2410,11 +2657,15 @@ public class Camera { // Formats for setPreviewFormat and setPictureFormat. private static final String PIXEL_FORMAT_YUV422SP = "yuv422sp"; private static final String PIXEL_FORMAT_YUV420SP = "yuv420sp"; + private static final String PIXEL_FORMAT_YUV420SP_ADRENO = "yuv420sp-adreno"; private static final String PIXEL_FORMAT_YUV422I = "yuv422i-yuyv"; private static final String PIXEL_FORMAT_YUV420P = "yuv420p"; private static final String PIXEL_FORMAT_RGB565 = "rgb565"; private static final String PIXEL_FORMAT_JPEG = "jpeg"; private static final String PIXEL_FORMAT_BAYER_RGGB = "bayer-rggb"; + private static final String PIXEL_FORMAT_RAW = "raw"; + private static final String PIXEL_FORMAT_YV12 = "yv12"; + private static final String PIXEL_FORMAT_NV12 = "nv12"; /** * Order matters: Keys that are {@link #set(String, String) set} later @@ -3202,8 +3453,11 @@ public class Camera { * parameters. */ public void removeGpsData() { + remove(KEY_QC_GPS_LATITUDE_REF); remove(KEY_GPS_LATITUDE); + remove(KEY_QC_GPS_LONGITUDE_REF); remove(KEY_GPS_LONGITUDE); + remove(KEY_QC_GPS_ALTITUDE_REF); remove(KEY_GPS_ALTITUDE); remove(KEY_GPS_TIMESTAMP); remove(KEY_GPS_PROCESSING_METHOD); @@ -4226,5 +4480,1231 @@ public class Camera { if (s1 != null && s1.equals(s2)) return true; return false; } + /* ### QC ADD-ONS: START */ + + /* ### QC ADDED PARAMETER KEYS*/ + private static final String KEY_QC_HFR_SIZE = "hfr-size"; + private static final String KEY_QC_PREVIEW_FRAME_RATE_MODE = "preview-frame-rate-mode"; + private static final String KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE = "frame-rate-auto"; + private static final String KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE = "frame-rate-fixed"; + private static final String KEY_QC_GPS_LATITUDE_REF = "gps-latitude-ref"; + private static final String KEY_QC_GPS_LONGITUDE_REF = "gps-longitude-ref"; + private static final String KEY_QC_GPS_ALTITUDE_REF = "gps-altitude-ref"; + private static final String KEY_QC_GPS_STATUS = "gps-status"; + private static final String KEY_QC_EXIF_DATETIME = "exif-datetime"; + private static final String KEY_QC_TOUCH_AF_AEC = "touch-af-aec"; + private static final String KEY_QC_TOUCH_INDEX_AEC = "touch-index-aec"; + private static final String KEY_QC_TOUCH_INDEX_AF = "touch-index-af"; + private static final String KEY_QC_MANUAL_FOCUS_POSITION = "manual-focus-position"; + private static final String KEY_QC_MANUAL_FOCUS_POS_TYPE = "manual-focus-pos-type"; + private static final String KEY_QC_SCENE_DETECT = "scene-detect"; + private static final String KEY_QC_ISO_MODE = "iso"; + private static final String KEY_QC_EXPOSURE_TIME = "exposure-time"; + private static final String KEY_QC_MIN_EXPOSURE_TIME = "min-exposure-time"; + private static final String KEY_QC_MAX_EXPOSURE_TIME = "max-exposure-time"; + private static final String KEY_QC_LENSSHADE = "lensshade"; + private static final String KEY_QC_HISTOGRAM = "histogram"; + private static final String KEY_QC_SKIN_TONE_ENHANCEMENT = "skinToneEnhancement"; + private static final String KEY_QC_AUTO_EXPOSURE = "auto-exposure"; + private static final String KEY_QC_SHARPNESS = "sharpness"; + private static final String KEY_QC_MAX_SHARPNESS = "max-sharpness"; + private static final String KEY_QC_CONTRAST = "contrast"; + private static final String KEY_QC_MAX_CONTRAST = "max-contrast"; + private static final String KEY_QC_SATURATION = "saturation"; + private static final String KEY_QC_MAX_SATURATION = "max-saturation"; + private static final String KEY_QC_DENOISE = "denoise"; + private static final String KEY_QC_CONTINUOUS_AF = "continuous-af"; + private static final String KEY_QC_SELECTABLE_ZONE_AF = "selectable-zone-af"; + private static final String KEY_QC_FACE_DETECTION = "face-detection"; + private static final String KEY_QC_MEMORY_COLOR_ENHANCEMENT = "mce"; + private static final String KEY_QC_REDEYE_REDUCTION = "redeye-reduction"; + private static final String KEY_QC_ZSL = "zsl"; + private static final String KEY_QC_CAMERA_MODE = "camera-mode"; + private static final String KEY_QC_VIDEO_HIGH_FRAME_RATE = "video-hfr"; + private static final String KEY_QC_VIDEO_HDR = "video-hdr"; + private static final String KEY_QC_POWER_MODE = "power-mode"; + private static final String KEY_QC_POWER_MODE_SUPPORTED = "power-mode-supported"; + private static final String KEY_QC_WB_MANUAL_CCT = "wb-manual-cct"; + private static final String KEY_QC_MIN_WB_CCT = "min-wb-cct"; + private static final String KEY_QC_MAX_WB_CCT = "max-wb-cct"; + private static final String KEY_QC_AUTO_HDR_ENABLE = "auto-hdr-enable"; + private static final String KEY_QC_VIDEO_ROTATION = "video-rotation"; + + /** @hide + * KEY_QC_AE_BRACKET_HDR + **/ + public static final String KEY_QC_AE_BRACKET_HDR = "ae-bracket-hdr"; + + /* ### QC ADDED PARAMETER VALUES*/ + + // Values for touch af/aec settings. + /** @hide + * TOUCH_AF_AEC_OFF + **/ + public static final String TOUCH_AF_AEC_OFF = "touch-off"; + /** @hide + * TOUCH_AF_AEC_ON + **/ + public static final String TOUCH_AF_AEC_ON = "touch-on"; + + // Values for auto exposure settings. + /** @hide + * Auto exposure frame-avg + **/ + public static final String AUTO_EXPOSURE_FRAME_AVG = "frame-average"; + /** @hide + * Auto exposure center weighted + **/ + public static final String AUTO_EXPOSURE_CENTER_WEIGHTED = "center-weighted"; + /** @hide + * Auto exposure spot metering + **/ + public static final String AUTO_EXPOSURE_SPOT_METERING = "spot-metering"; + + //Values for ISO settings + /** @hide + * ISO_AUTO + **/ + public static final String ISO_AUTO = "auto"; + /** @hide + * ISO_HJR + **/ + public static final String ISO_HJR = "ISO_HJR"; + /** @hide + * ISO_100 + **/ + public static final String ISO_100 = "ISO100"; + /** @hide + * ISO_200 + **/ + public static final String ISO_200 = "ISO200"; + /** @hide + * ISO_400 + **/ + public static final String ISO_400 = "ISO400"; + /** @hide + * ISO_800 + **/ + public static final String ISO_800 = "ISO800"; + /** @hide + * ISO_1600 + **/ + public static final String ISO_1600 = "ISO1600"; + + /** @hide + * ISO_3200 + **/ + public static final String ISO_3200 = "ISO3200"; + + //Values for Lens Shading + /** @hide + * LENSSHADE_ENABLE + **/ + public static final String LENSSHADE_ENABLE = "enable"; + /** @hide + * LENSSHADE_DISABLE + **/ + public static final String LENSSHADE_DISABLE= "disable"; + + //Values for Histogram + /** @hide + * Histogram enable + **/ + public static final String HISTOGRAM_ENABLE = "enable"; + /** @hide + * Histogram disable + **/ + public static final String HISTOGRAM_DISABLE= "disable"; + + //Values for Skin Tone Enhancement + /** @hide + * SKIN_TONE_ENHANCEMENT_ENABLE + **/ + public static final String SKIN_TONE_ENHANCEMENT_ENABLE = "enable"; + /** @hide + * SKIN_TONE_ENHANCEMENT_DISABLE + **/ + public static final String SKIN_TONE_ENHANCEMENT_DISABLE= "disable"; + + // Values for MCE settings. + /** @hide + * MCE_ENaBLE + **/ + public static final String MCE_ENABLE = "enable"; + /** @hide + * MCE_DISABLE + **/ + public static final String MCE_DISABLE = "disable"; + + // Values for ZSL settings. + /** @hide + * ZSL_ON + **/ + public static final String ZSL_ON = "on"; + /** @hide + * ZSL_OFF + **/ + public static final String ZSL_OFF = "off"; + + // Values for HDR Bracketing settings. + + /** @hide + * AEC bracketing off + **/ + public static final String AE_BRACKET_HDR_OFF = "Off"; + /** @hide + * AEC bracketing hdr + **/ + public static final String AE_BRACKET_HDR = "HDR"; + /** @hide + * AEC bracketing aec-bracket + **/ + public static final String AE_BRACKET = "AE-Bracket"; + + // Values for Power mode. + /** @hide + * LOW_POWER + **/ + public static final String LOW_POWER = "Low_Power"; + /** @hide + * NORMAL_POWER + **/ + public static final String NORMAL_POWER = "Normal_Power"; + + // Values for HFR settings. + /** @hide + * VIDEO_HFR_OFF + **/ + public static final String VIDEO_HFR_OFF = "off"; + /** @hide + * VIDEO_HFR_2X + **/ + public static final String VIDEO_HFR_2X = "60"; + /** @hide + * VIDEO_HFR_3X + **/ + public static final String VIDEO_HFR_3X = "90"; + /** @hide + * VIDEO_HFR_4X + **/ + public static final String VIDEO_HFR_4X = "120"; + + // Values for auto scene detection settings. + /** @hide + * SCENE_DETECT_OFF + **/ + public static final String SCENE_DETECT_OFF = "off"; + /** @hide + * SCENE_DETECT_ON + **/ + public static final String SCENE_DETECT_ON = "on"; + + //Values for Continuous AF + + /** @hide + * CAF off + **/ + public static final String CONTINUOUS_AF_OFF = "caf-off"; + /** @hide + * CAF on + **/ + public static final String CONTINUOUS_AF_ON = "caf-on"; + /** @hide + * Denoise off + **/ + public static final String DENOISE_OFF = "denoise-off"; + /** @hide + * Denoise on + **/ + public static final String DENOISE_ON = "denoise-on"; + + // Values for Redeye Reduction settings. + /** @hide + * REDEYE_REDUCTION_ENABLE + **/ + public static final String REDEYE_REDUCTION_ENABLE = "enable"; + /** @hide + * REDEYE_REDUCTION_DISABLE + **/ + public static final String REDEYE_REDUCTION_DISABLE = "disable"; + + // Values for selectable zone af settings. + /** @hide + * SELECTABLE_ZONE_AF_AUTO + **/ + public static final String SELECTABLE_ZONE_AF_AUTO = "auto"; + /** @hide + * SELECTABLE_ZONE_AF_SPOTMETERING + **/ + public static final String SELECTABLE_ZONE_AF_SPOTMETERING = "spot-metering"; + /** @hide + * SELECTABLE_ZONE_AF_CENTER_WEIGHTED + **/ + public static final String SELECTABLE_ZONE_AF_CENTER_WEIGHTED = "center-weighted"; + /** @hide + * SELECTABLE_ZONE_AF_FRAME_AVERAGE + **/ + public static final String SELECTABLE_ZONE_AF_FRAME_AVERAGE = "frame-average"; + + // Values for Face Detection settings. + /** @hide + * Face Detection off + **/ + public static final String FACE_DETECTION_OFF = "off"; + /** @hide + * Face Detction on + **/ + public static final String FACE_DETECTION_ON = "on"; + + // Values for video rotation settings. + + /** @hide + * VIDEO_ROTATION_0 + **/ + public static final String VIDEO_ROTATION_0 = "0"; + /** @hide + * VIDEO_ROTATION_90 + **/ + public static final String VIDEO_ROTATION_90 = "90"; + /** @hide + * VIDEO_ROTATION_180 + **/ + public static final String VIDEO_ROTATION_180 = "180"; + /** @hide + * VIDEO_ROTATION_270 + **/ + public static final String VIDEO_ROTATION_270 = "270"; + + /* ### QC ADDED PARAMETER APIS*/ + /** @hide + * Gets the supported preview sizes in high frame rate recording mode. + * + * @return a list of Size object. This method will always return a list + * with at least one element. + */ + public List getSupportedHfrSizes() { + String str = get(KEY_QC_HFR_SIZE + SUPPORTED_VALUES_SUFFIX); + return splitSize(str); + } + + /** @hide + * Gets the supported Touch AF/AEC setting. + * + * @return a List of TOUCH_AF_AEC_XXX string constants. null if TOUCH AF/AEC + * setting is not supported. + * + */ + public List getSupportedTouchAfAec() { + String str = get(KEY_QC_TOUCH_AF_AEC + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** + * Gets the supported Touch AF/AEC setting. + * + * @return a List of TOUCH_AF_AEC_XXX string constants. null if TOUCH AF/AEC + * setting is not supported. + * + */ + + /** @hide + * Gets the supported frame rate modes. + * + * @return a List of FRAME_RATE_XXX_MODE string constant. null if this + * setting is not supported. + */ + public List getSupportedPreviewFrameRateModes() { + String str = get(KEY_QC_PREVIEW_FRAME_RATE_MODE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported auto scene detection modes. + * + * @return a List of SCENE_DETECT_XXX string constant. null if scene detection + * setting is not supported. + * + */ + public List getSupportedSceneDetectModes() { + String str = get(KEY_QC_SCENE_DETECT + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported ISO values. + * + * @return a List of FLASH_MODE_XXX string constants. null if flash mode + * setting is not supported. + */ + public List getSupportedIsoValues() { + String str = get(KEY_QC_ISO_MODE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported Lensshade modes. + * + * @return a List of LENS_MODE_XXX string constants. null if lens mode + * setting is not supported. + */ + public List getSupportedLensShadeModes() { + String str = get(KEY_QC_LENSSHADE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported Histogram modes. + * + * @return a List of HISTOGRAM_XXX string constants. null if histogram mode + * setting is not supported. + */ + public List getSupportedHistogramModes() { + String str = get(KEY_QC_HISTOGRAM + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported Skin Tone Enhancement modes. + * + * @return a List of SKIN_TONE_ENHANCEMENT_XXX string constants. null if skin tone enhancement + * setting is not supported. + */ + public List getSupportedSkinToneEnhancementModes() { + String str = get(KEY_QC_SKIN_TONE_ENHANCEMENT + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported auto exposure setting. + * + * @return a List of AUTO_EXPOSURE_XXX string constants. null if auto exposure + * setting is not supported. + */ + public List getSupportedAutoexposure() { + String str = get(KEY_QC_AUTO_EXPOSURE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported MCE modes. + * + * @return a List of MCE_ENABLE/DISABLE string constants. null if MCE mode + * setting is not supported. + */ + public List getSupportedMemColorEnhanceModes() { + String str = get(KEY_QC_MEMORY_COLOR_ENHANCEMENT + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported ZSL modes. + * + * @return a List of ZSL_OFF/OFF string constants. null if ZSL mode + * setting is not supported. + */ + public List getSupportedZSLModes() { + String str = get(KEY_QC_ZSL + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported Video HDR modes. + * + * @return a List of Video HDR_OFF/OFF string constants. null if + * Video HDR mode setting is not supported. + */ + public List getSupportedVideoHDRModes() { + String str = get(KEY_QC_VIDEO_HDR + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported HFR modes. + * + * @return a List of VIDEO_HFR_XXX string constants. null if hfr mode + * setting is not supported. + */ + public List getSupportedVideoHighFrameRateModes() { + String str = get(KEY_QC_VIDEO_HIGH_FRAME_RATE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported Continuous AF modes. + * + * @return a List of CONTINUOUS_AF_XXX string constant. null if continuous AF + * setting is not supported. + * + */ + public List getSupportedContinuousAfModes() { + String str = get(KEY_QC_CONTINUOUS_AF + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported DENOISE modes. + * + * @return a List of DENOISE_XXX string constant. null if DENOISE + * setting is not supported. + * + */ + public List getSupportedDenoiseModes() { + String str = get(KEY_QC_DENOISE + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported selectable zone af setting. + * + * @return a List of SELECTABLE_ZONE_AF_XXX string constants. null if selectable zone af + * setting is not supported. + */ + public List getSupportedSelectableZoneAf() { + String str = get(KEY_QC_SELECTABLE_ZONE_AF + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported face detection modes. + * + * @return a List of FACE_DETECTION_XXX string constant. null if face detection + * setting is not supported. + * + */ + public List getSupportedFaceDetectionModes() { + String str = get(KEY_QC_FACE_DETECTION + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Gets the supported redeye reduction modes. + * + * @return a List of REDEYE_REDUCTION_XXX string constant. null if redeye reduction + * setting is not supported. + * + */ + public List getSupportedRedeyeReductionModes() { + String str = get(KEY_QC_REDEYE_REDUCTION + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + /** @hide + * Sets GPS altitude reference. This will be stored in JPEG EXIF header. + * @param altRef reference GPS altitude in meters. + */ + public void setGpsAltitudeRef(double altRef) { + set(KEY_QC_GPS_ALTITUDE_REF, Double.toString(altRef)); + } + + /** @hide + * Sets GPS Status. This will be stored in JPEG EXIF header. + * + * @param status GPS status (UTC in seconds since January 1, + * 1970). + */ + public void setGpsStatus(double status) { + set(KEY_QC_GPS_STATUS, Double.toString(status)); + } + + /** @hide + * Sets the touch co-ordinate for Touch AEC. + * + * @param x the x co-ordinate of the touch event + * @param y the y co-ordinate of the touch event + * + */ + public void setTouchIndexAec(int x, int y) { + String v = Integer.toString(x) + "x" + Integer.toString(y); + set(KEY_QC_TOUCH_INDEX_AEC, v); + } + + /** @hide + * Returns the touch co-ordinates of the touch event. + * + * @return a Index object with the x and y co-ordinated + * for the touch event + * + */ + public Coordinate getTouchIndexAec() { + String pair = get(KEY_QC_TOUCH_INDEX_AEC); + return strToCoordinate(pair); + } + + /** @hide + * Sets the touch co-ordinate for Touch AF. + * + * @param x the x co-ordinate of the touch event + * @param y the y co-ordinate of the touch event + * + */ + public void setTouchIndexAf(int x, int y) { + String v = Integer.toString(x) + "x" + Integer.toString(y); + set(KEY_QC_TOUCH_INDEX_AF, v); + } + + /** @hide + * Returns the touch co-ordinates of the touch event. + * + * @return a Index object with the x and y co-ordinated + * for the touch event + * + */ + public Coordinate getTouchIndexAf() { + String pair = get(KEY_QC_TOUCH_INDEX_AF); + return strToCoordinate(pair); + } + /** @hide + * Set Sharpness Level + * + * @param sharpness level + */ + public void setSharpness(int sharpness){ + if((sharpness < 0) || (sharpness > getMaxSharpness()) ) + throw new IllegalArgumentException( + "Invalid Sharpness " + sharpness); + + set(KEY_QC_SHARPNESS, String.valueOf(sharpness)); + } + + /** @hide + * Set Contrast Level + * + * @param contrast level + */ + public void setContrast(int contrast){ + if((contrast < 0 ) || (contrast > getMaxContrast())) + throw new IllegalArgumentException( + "Invalid Contrast " + contrast); + + set(KEY_QC_CONTRAST, String.valueOf(contrast)); + } + + /** @hide + * Set Saturation Level + * + * @param saturation level + */ + public void setSaturation(int saturation){ + if((saturation < 0 ) || (saturation > getMaxSaturation())) + throw new IllegalArgumentException( + "Invalid Saturation " + saturation); + + set(KEY_QC_SATURATION, String.valueOf(saturation)); + } + + /** @hide + * @return true if full size video snapshot is supported. + */ + public boolean isPowerModeSupported() { + String str = get(KEY_QC_POWER_MODE_SUPPORTED); + return TRUE.equals(str); + } + + /** @hide + * Get Sharpness level + * + * @return sharpness level + */ + public int getSharpness(){ + return getInt(KEY_QC_SHARPNESS); + } + + /** @hide + * Get Max Sharpness Level + * + * @return max sharpness level + */ + public int getMaxSharpness(){ + return getInt(KEY_QC_MAX_SHARPNESS); + } + + /** @hide + * Get Contrast level + * + * @return contrast level + */ + public int getContrast(){ + return getInt(KEY_QC_CONTRAST); + } + + /** @hide + * Get Max Contrast Level + * + * @return max contrast level + */ + public int getMaxContrast(){ + return getInt(KEY_QC_MAX_CONTRAST); + } + + /** @hide + * Get Saturation level + * + * @return saturation level + */ + public int getSaturation(){ + return getInt(KEY_QC_SATURATION); + } + + /** @hide + * Get Max Saturation Level + * + * @return max contrast level + */ + public int getMaxSaturation(){ + return getInt(KEY_QC_MAX_SATURATION); + } + + /** @hide + * Sets GPS latitude reference coordinate. This will be stored in JPEG EXIF + * header. + * @param latRef GPS latitude reference coordinate. + */ + public void setGpsLatitudeRef(String latRef) { + set(KEY_QC_GPS_LATITUDE_REF, latRef); + } + + /** @hide + * Sets GPS longitude reference coordinate. This will be stored in JPEG EXIF + * header. + * @param lonRef GPS longitude reference coordinate. + */ + public void setGpsLongitudeRef(String lonRef) { + set(KEY_QC_GPS_LONGITUDE_REF, lonRef); + } + + /** @hide + * Sets system timestamp. This will be stored in JPEG EXIF header. + * + * @param dateTime current timestamp (UTC in seconds since January 1, + * 1970). + */ + public void setExifDateTime(String dateTime) { + set(KEY_QC_EXIF_DATETIME, dateTime); + } + + /** @hide + * Gets the current Touch AF/AEC setting. + * + * @return one of TOUCH_AF_AEC_XXX string constant. null if Touch AF/AEC + * setting is not supported. + * + */ + public String getTouchAfAec() { + return get(KEY_QC_TOUCH_AF_AEC); + } + + /** @hide + * Sets the current TOUCH AF/AEC setting. + * + * @param value TOUCH_AF_AEC_XXX string constants. + * + */ + public void setTouchAfAec(String value) { + set(KEY_QC_TOUCH_AF_AEC, value); + } + + /** @hide + * Gets the current redeye reduction setting. + * + * @return one of REDEYE_REDUCTION_XXX string constant. null if redeye reduction + * setting is not supported. + * + */ + public String getRedeyeReductionMode() { + return get(KEY_QC_REDEYE_REDUCTION); + } + + /** @hide + * Sets the redeye reduction. Other parameters may be changed after changing + * redeye reduction. After setting redeye reduction, + * applications should call getParameters to know if some parameters are + * changed. + * + * @param value REDEYE_REDUCTION_XXX string constants. + * + */ + public void setRedeyeReductionMode(String value) { + set(KEY_QC_REDEYE_REDUCTION, value); + } + + /** @hide + * Gets the frame rate mode setting. + * + * @return one of FRAME_RATE_XXX_MODE string constant. null if this + * setting is not supported. + */ + public String getPreviewFrameRateMode() { + return get(KEY_QC_PREVIEW_FRAME_RATE_MODE); + } + + /** @hide + * Sets the frame rate mode. + * + * @param value FRAME_RATE_XXX_MODE string constants. + */ + public void setPreviewFrameRateMode(String value) { + set(KEY_QC_PREVIEW_FRAME_RATE_MODE, value); + } + + /** @hide + * Gets the current auto scene detection setting. + * + * @return one of SCENE_DETECT_XXX string constant. null if auto scene detection + * setting is not supported. + * + */ + public String getSceneDetectMode() { + return get(KEY_QC_SCENE_DETECT); + } + + /** @hide + * Sets the auto scene detect. Other parameters may be changed after changing + * scene detect. After setting auto scene detection, + * applications should call getParameters to know if some parameters are + * changed. + * + * @param value SCENE_DETECT_XXX string constants. + * + */ + public void setSceneDetectMode(String value) { + set(KEY_QC_SCENE_DETECT, value); + } + + /** @hide + * Gets the current hdr bracketing mode setting. + * + * @return current hdr bracketing mode. + * @see #KEY_AE_BRACKET_OFF + * @see #KEY_AE_BRACKET_HDR + * @see #KEY_AE_BRACKET_BRACKATING + */ + public String getAEBracket() { + return get(KEY_QC_AE_BRACKET_HDR); + } + + /** @hide + * Sets the Power mode. + * + * @param value Power mode. + * @see #getPowerMode() + */ + public void setPowerMode(String value) { + set(KEY_QC_POWER_MODE, value); + } + + /** @hide + * Gets the current power mode setting. + * + * @return current power mode. null if power mode setting is not + * supported. + * @see #POWER_MODE_LOW + * @see #POWER_MODE_NORMAL + */ + public String getPowerMode() { + return get(KEY_QC_POWER_MODE); + } + + /** @hide + * Set HDR-Bracketing Level + * + * @param value HDR-Bracketing + */ + public void setAEBracket(String value){ + set(KEY_QC_AE_BRACKET_HDR, value); + } + + /** @hide + * Gets the current ISO setting. + * + * @return one of ISO_XXX string constant. null if ISO + * setting is not supported. + */ + public String getISOValue() { + return get(KEY_QC_ISO_MODE); + } + + /** @hide + * Sets the ISO. + * + * @param iso ISO_XXX string constant. + */ + public void setISOValue(String iso) { + set(KEY_QC_ISO_MODE, iso); + } + + /** @hide + * Sets the exposure time. + * + * @param value exposure time. + */ + public void setExposureTime(int value) { + set(KEY_QC_EXPOSURE_TIME, Integer.toString(value)); + } + + /** @hide + * Gets the current exposure time. + * + * @return exposure time. + */ + public String getExposureTime() { + return get(KEY_QC_EXPOSURE_TIME); + } + + /** @hide + * Gets the min supported exposure time. + * + * @return min supported exposure time. + */ + public String getMinExposureTime() { + return get(KEY_QC_MIN_EXPOSURE_TIME); + } + + /** @hide + * Gets the max supported exposure time. + * + * @return max supported exposure time. + */ + public String getMaxExposureTime() { + return get(KEY_QC_MAX_EXPOSURE_TIME); + } + + /** @hide + * Gets the current LensShade Mode. + * + * @return LensShade Mode + */ + public String getLensShade() { + return get(KEY_QC_LENSSHADE); + } + + /** @hide + * Sets the current LensShade Mode. + * + * @return LensShade Mode + */ + public void setLensShade(String lensshade) { + set(KEY_QC_LENSSHADE, lensshade); + } + + /** @hide + * Gets the current auto exposure setting. + * + * @return one of AUTO_EXPOSURE_XXX string constant. null if auto exposure + * setting is not supported. + */ + public String getAutoExposure() { + return get(KEY_QC_AUTO_EXPOSURE); + } + + /** @hide + * Sets the current auto exposure setting. + * + * @param value AUTO_EXPOSURE_XXX string constants. + */ + public void setAutoExposure(String value) { + set(KEY_QC_AUTO_EXPOSURE, value); + } + + /** @hide + * Gets the current MCE Mode. + * + * @return MCE value + */ + public String getMemColorEnhance() { + return get(KEY_QC_MEMORY_COLOR_ENHANCEMENT); + } + + /** @hide + * Sets the current MCE Mode. + * + * @return MCE Mode + */ + public void setMemColorEnhance(String mce) { + set(KEY_QC_MEMORY_COLOR_ENHANCEMENT, mce); + } + + /** @hide + * Set white balance manual cct value. + * + * @param cct user CCT setting. + */ + public void setWBManualCCT(int cct) { + set(KEY_QC_WB_MANUAL_CCT, Integer.toString(cct)); + } + + /** @hide + * Gets the WB min supported CCT. + * + * @return min cct value. + */ + public String getWBMinCCT() { + return get(KEY_QC_MIN_WB_CCT); + } + + /** @hide + * Gets the WB max supported CCT. + * + * @return max cct value. + */ + public String getMaxWBCCT() { + return get(KEY_QC_MAX_WB_CCT); + } + + /** @hide + * Gets the current WB CCT. + * + * @return CCT value + */ + public String getWBCurrentCCT() { + return get(KEY_QC_WB_MANUAL_CCT); + } + + /** @hide + * Gets the current ZSL Mode. + * + * @return ZSL mode value + */ + public String getZSLMode() { + return get(KEY_QC_ZSL); + } + + /** @hide + * Sets the current ZSL Mode. ZSL mode is set as a 0th bit in KEY_CAMERA_MODE. + * + * @return null + */ + public void setZSLMode(String zsl) { + set(KEY_QC_ZSL, zsl); + } + + /** @hide + * Sets the current Auto HDR Mode. + * @ auto_hdr auto hdr string for enable/disable + * @return null + */ + public void setAutoHDRMode(String auto_hdr){ + set(KEY_QC_AUTO_HDR_ENABLE,auto_hdr); + } + + /** @hide + * Gets the current Camera Mode Flag. Camera mode includes a + * flag(byte) which indicates different camera modes. + * For now support for ZSL added at bit0 + * + * @return Camera Mode. + */ + public String getCameraMode() { + return get(KEY_QC_CAMERA_MODE); + } + + /** @hide + * Sets the current Camera Mode. + * + * @return null + */ + public void setCameraMode(int cameraMode) { + set(KEY_QC_CAMERA_MODE, cameraMode); + } + + private static final int MANUAL_FOCUS_POS_TYPE_INDEX = 0; + private static final int MANUAL_FOCUS_POS_TYPE_DAC = 1; + /** @hide + * Set focus position. + * + * @param pos user setting of focus position. + */ + public void setFocusPosition(int type, int pos) { + set(KEY_QC_MANUAL_FOCUS_POS_TYPE, Integer.toString(type)); + set(KEY_QC_MANUAL_FOCUS_POSITION, Integer.toString(pos)); + } + + /** @hide + * Gets the current focus position. + * + * @return current focus position + */ + public String getCurrentFocusPosition() { + return get(KEY_QC_MANUAL_FOCUS_POSITION); + } + + + /** @hide + * Gets the current HFR Mode. + * + * @return VIDEO_HFR_XXX string constants + */ + public String getVideoHighFrameRate() { + return get(KEY_QC_VIDEO_HIGH_FRAME_RATE); + } + + /** @hide + * Sets the current HFR Mode. + * + * @param hfr VIDEO_HFR_XXX string constants + */ + public void setVideoHighFrameRate(String hfr) { + set(KEY_QC_VIDEO_HIGH_FRAME_RATE, hfr); + } + + /** @hide + * Gets the current Video HDR Mode. + * + * @return Video HDR mode value + */ + public String getVideoHDRMode() { + return get(KEY_QC_VIDEO_HDR); + } + + /** @hide + * Sets the current Video HDR Mode. + * + * @return null + */ + public void setVideoHDRMode(String videohdr) { + set(KEY_QC_VIDEO_HDR, videohdr); + } + + /** @hide + * Gets the current DENOISE setting. + * + * @return one of DENOISE_XXX string constant. null if Denoise + * setting is not supported. + * + */ + public String getDenoise() { + return get(KEY_QC_DENOISE); + } + + /** @hide + * Gets the current Continuous AF setting. + * + * @return one of CONTINUOUS_AF_XXX string constant. null if continuous AF + * setting is not supported. + * + */ + public String getContinuousAf() { + return get(KEY_QC_CONTINUOUS_AF); + } + + /** @hide + * Sets the current Denoise mode. + * @param value DENOISE_XXX string constants. + * + */ + + public void setDenoise(String value) { + set(KEY_QC_DENOISE, value); + } + + /** @hide + * Sets the current Continuous AF mode. + * @param value CONTINUOUS_AF_XXX string constants. + * + */ + public void setContinuousAf(String value) { + set(KEY_QC_CONTINUOUS_AF, value); + } + + /** @hide + * Gets the current selectable zone af setting. + * + * @return one of SELECTABLE_ZONE_AF_XXX string constant. null if selectable zone af + * setting is not supported. + */ + public String getSelectableZoneAf() { + return get(KEY_QC_SELECTABLE_ZONE_AF); + } + + /** @hide + * Sets the current selectable zone af setting. + * + * @param value SELECTABLE_ZONE_AF_XXX string constants. + */ + public void setSelectableZoneAf(String value) { + set(KEY_QC_SELECTABLE_ZONE_AF, value); + } + + /** @hide + * Gets the current face detection setting. + * + * @return one of FACE_DETECTION_XXX string constant. null if face detection + * setting is not supported. + * + */ + public String getFaceDetectionMode() { + return get(KEY_QC_FACE_DETECTION); + } + + /** @hide + * Sets the auto scene detect. Other settings like Touch AF/AEC might be + * changed after setting face detection. + * + * @param value FACE_DETECTION_XXX string constants. + * + */ + public void setFaceDetectionMode(String value) { + set(KEY_QC_FACE_DETECTION, value); + } + + /** @hide + * Gets the current video rotation setting. + * + * @return one of VIDEO_QC_ROTATION_XXX string constant. null if video rotation + * setting is not supported. + */ + public String getVideoRotation() { + return get(KEY_QC_VIDEO_ROTATION); + } + + /** @hide + * Sets the current video rotation setting. + * + * @param value VIDEO_QC_ROTATION_XXX string constants. + */ + public void setVideoRotation(String value) { + set(KEY_QC_VIDEO_ROTATION, value); + } + /** @hide + * Gets the supported video rotation modes. + * + * @return a List of VIDEO_QC_ROTATION_XXX string constant. null if this + * setting is not supported. + */ + public List getSupportedVideoRotationValues() { + String str = get(KEY_QC_VIDEO_ROTATION + SUPPORTED_VALUES_SUFFIX); + return split(str); + } + + // Splits a comma delimited string to an ArrayList of Coordinate. + // Return null if the passing string is null or the Coordinate is 0. + private ArrayList splitCoordinate(String str) { + if (str == null) return null; + TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter(','); + splitter.setString(str); + ArrayList coordinateList = new ArrayList(); + for (String s : splitter) { + Coordinate coordinate = strToCoordinate(s); + if (coordinate != null) coordinateList.add(coordinate); + } + if (coordinateList.size() == 0) return null; + return coordinateList; + } + + // Parses a string (ex: "500x500") to Coordinate object. + // Return null if the passing string is null. + private Coordinate strToCoordinate(String str) { + if (str == null) return null; + + int pos = str.indexOf('x'); + if (pos != -1) { + String x = str.substring(0, pos); + String y = str.substring(pos + 1); + return new Coordinate(Integer.parseInt(x), + Integer.parseInt(y)); + } + Log.e(TAG, "Invalid Coordinate parameter string=" + str); + return null; + } + /* ### QC ADD-ONS: END */ }; } diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 94592573e61a..29a746b202b0 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -440,6 +440,56 @@ void JNICameraContext::setCallbackMode(JNIEnv *env, bool installed, bool manualM } } +static void android_hardware_Camera_setLongshot(JNIEnv *env, jobject thiz, jboolean enable) +{ + ALOGV("setLongshot"); + JNICameraContext* context; + status_t rc; + sp camera = get_native_camera(env, thiz, &context); + if (camera == 0) return; + + if ( enable ) { + rc = camera->sendCommand(CAMERA_CMD_LONGSHOT_ON, 0, 0); + } else { + rc = camera->sendCommand(CAMERA_CMD_LONGSHOT_OFF, 0, 0); + } + + if (rc != NO_ERROR) { + jniThrowException(env, "java/lang/RuntimeException", "enabling longshot mode failed"); + } +} + +static void android_hardware_Camera_sendHistogramData(JNIEnv *env, jobject thiz) + { + ALOGV("sendHistogramData" ); + JNICameraContext* context; + status_t rc; + sp camera = get_native_camera(env, thiz, &context); + if (camera == 0) return; + + rc = camera->sendCommand(CAMERA_CMD_HISTOGRAM_SEND_DATA, 0, 0); + + if (rc != NO_ERROR) { + jniThrowException(env, "java/lang/RuntimeException", "send histogram data failed"); + } + } + static void android_hardware_Camera_setHistogramMode(JNIEnv *env, jobject thiz, jboolean mode) + { + ALOGV("setHistogramMode: mode:%d", (int)mode); + JNICameraContext* context; + status_t rc; + sp camera = get_native_camera(env, thiz, &context); + if (camera == 0) return; + + if(mode == true) + rc = camera->sendCommand(CAMERA_CMD_HISTOGRAM_ON, 0, 0); + else + rc = camera->sendCommand(CAMERA_CMD_HISTOGRAM_OFF, 0, 0); + + if (rc != NO_ERROR) { + jniThrowException(env, "java/lang/RuntimeException", "set histogram mode failed"); + } + } void JNICameraContext::addCallbackBuffer( JNIEnv *env, jbyteArray cbb, int msgType) { @@ -762,7 +812,25 @@ static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject t context->setCallbackMode(env, installed, manualBuffer); } -static void android_hardware_Camera_addCallbackBuffer(JNIEnv *env, jobject thiz, jbyteArray bytes, jint msgType) { +static void android_hardware_Camera_setMetadataCb(JNIEnv *env, jobject thiz, jboolean mode) +{ + ALOGV("setMetadataCb: mode:%d", (int)mode); + JNICameraContext* context; + status_t rc; + sp camera = get_native_camera(env, thiz, &context); + if (camera == 0) return; + + if(mode == true) + rc = camera->sendCommand(CAMERA_CMD_METADATA_ON, 0, 0); + else + rc = camera->sendCommand(CAMERA_CMD_METADATA_OFF, 0, 0); + + if (rc != NO_ERROR) { + jniThrowException(env, "java/lang/RuntimeException", "set metadata mode failed"); + } +} + +static void android_hardware_Camera_addCallbackBuffer(JNIEnv *env, jobject thiz, jbyteArray bytes, int msgType) { ALOGV("addCallbackBuffer: 0x%x", msgType); JNICameraContext* context = reinterpret_cast(env->GetLongField(thiz, fields.context)); @@ -1040,6 +1108,18 @@ static const JNINativeMethod camMethods[] = { { "native_takePicture", "(I)V", (void *)android_hardware_Camera_takePicture }, + { "native_setHistogramMode", + "(Z)V", + (void *)android_hardware_Camera_setHistogramMode }, + { "native_setMetadataCb", + "(Z)V", + (void *)android_hardware_Camera_setMetadataCb }, + { "native_sendHistogramData", + "()V", + (void *)android_hardware_Camera_sendHistogramData }, + { "native_setLongshot", + "(Z)V", + (void *)android_hardware_Camera_setLongshot }, { "native_setParameters", "(Ljava/lang/String;)V", (void *)android_hardware_Camera_setParameters }, -- GitLab From 871bd7877d4f1796c65ae7725ac95f4ac9288974 Mon Sep 17 00:00:00 2001 From: David Ng Date: Wed, 9 Mar 2016 11:44:36 -0800 Subject: [PATCH 003/185] CameraMetadata: Fix log format string serviceSpecificErrorCode() returns an int, not a string; fix the log format string to "%d" from "%s". Change-Id: Idc753d69892d1937ed417da496c8be0ccb9836ba --- core/jni/android_hardware_camera2_CameraMetadata.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index f37fd78f6bdd..69288903bf2a 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -923,9 +923,9 @@ static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jobject t VendorTagDescriptor::clearGlobalVendorTagDescriptor(); return OK; } else if (!res.isOk()) { - VendorTagDescriptor::clearGlobalVendorTagDescriptor(); - ALOGE("%s: Failed to setup vendor tag descriptors: %s", - __FUNCTION__, res.toString8().string()); + ALOGE("%s: Failed to setup vendor tag descriptors: %d: %s", + __FUNCTION__, res.serviceSpecificErrorCode(), + res.toString8().string()); return res.serviceSpecificErrorCode(); } -- GitLab From 2a2b12a1af1d7f287255e49594b3ccedfb52cd55 Mon Sep 17 00:00:00 2001 From: Divya Sharma Date: Wed, 13 Apr 2016 17:02:48 -0700 Subject: [PATCH 004/185] Revert "Revert "Revert "Add some View methods overrides and WebViewDelegate interfaces.""" This reverts commit e319dadaa9970ecfd1dd9dbfd455400153ba5c7b Change-Id: I3acc3ab86a07f813d1107fef6995f11477b2ff2d --- api/system-current.txt | 2 -- core/java/android/webkit/WebView.java | 11 ----------- core/java/android/webkit/WebViewProvider.java | 5 ----- 3 files changed, 18 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index d1c03942229f..481a9e640b08 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -48971,9 +48971,7 @@ package android.webkit { public static abstract interface WebViewProvider.ViewDelegate { method public abstract boolean dispatchKeyEvent(android.view.KeyEvent); - method public abstract android.view.View findFocus(android.view.View); method public abstract android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); - method public abstract android.os.Handler getHandler(android.os.Handler); method public abstract void onActivityResult(int, int, android.content.Intent); method public abstract void onAttachedToWindow(); method public abstract void onConfigurationChanged(android.content.res.Configuration); diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index f54edf14bbe1..ecace32b51da 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -32,7 +32,6 @@ import android.net.http.SslCertificate; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.StrictMode; @@ -2643,16 +2642,6 @@ public class WebView extends AbsoluteLayout mProvider.getViewDelegate().onFinishTemporaryDetach(); } - @Override - public Handler getHandler() { - return mProvider.getViewDelegate().getHandler(super.getHandler()); - } - - @Override - public View findFocus() { - return mProvider.getViewDelegate().findFocus(super.findFocus()); - } - /** * Receive the result from a previous call to {@link #startActivityForResult(Intent, int)}. * diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index e5b65e7b07d0..94d231c45b98 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -28,7 +28,6 @@ import android.graphics.drawable.Drawable; import android.net.http.SslCertificate; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; import android.os.Message; import android.print.PrintDocumentAdapter; import android.view.DragEvent; @@ -387,10 +386,6 @@ public interface WebViewProvider { public void onFinishTemporaryDetach(); public void onActivityResult(int requestCode, int resultCode, Intent data); - - public Handler getHandler(Handler originalHandler); - - public View findFocus(View originalFocusedView); } interface ScrollDelegate { -- GitLab From bb5517bcdbb93cfb408f79f3f6bac74abdc5c1ec Mon Sep 17 00:00:00 2001 From: Dante Russo Date: Tue, 21 Jul 2015 15:36:41 -0700 Subject: [PATCH 005/185] NLP Combo feature If Combo Provider is listening for network locations, it will want to screen these locations before they are sent out to clients. Get the package name for combo provider from resouce instead of hardcoding the name. Also, geofence services provider is renamed to differentiate from the hal geofence provider Only screen network locations if Combo provider is the connected network location provider. Resolved issue where MockProvider was being cast to LocationProviderProxy and would cause a fatal exception. CRs-fixed: 483398, 608477, 619882 Change-Id: I3156e85307b40aee9fb06b433c83153c84b8ed42 --- core/res/res/values/config.xml | 3 + core/res/res/values/symbols.xml | 1 + .../server/LocationManagerService.java | 78 +++++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index d0fd36ad269e..c9f8c306c683 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1249,6 +1249,9 @@ --> + + com.qualcomm.location + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d154b034e058..a34cb02ee603 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1790,6 +1790,7 @@ + diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 36ec2eb9a192..bcbad3d4de30 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -154,6 +154,9 @@ public class LocationManagerService extends ILocationManager.Stub { private LocationFudger mLocationFudger; private GeofenceManager mGeofenceManager; private PackageManager mPackageManager; + private String mComboNlpPackageName; + private String mComboNlpReadyMarker; + private String mComboNlpScreenMarker; private PowerManager mPowerManager; private UserManager mUserManager; private GeocoderProxy mGeocodeProvider; @@ -584,6 +587,13 @@ public class LocationManagerService extends ILocationManager.Stub { Slog.d(TAG, "Unable to bind ActivityRecognitionProxy."); } + mComboNlpPackageName = resources.getString( + com.android.internal.R.string.config_comboNetworkLocationProvider); + if (mComboNlpPackageName != null) { + mComboNlpReadyMarker = mComboNlpPackageName + ".nlp:ready"; + mComboNlpScreenMarker = mComboNlpPackageName + ".nlp:screen"; + } + String[] testProviderStrings = resources.getStringArray( com.android.internal.R.array.config_testLocationProviders); for (String testProviderString : testProviderStrings) { @@ -2374,6 +2384,70 @@ public class LocationManagerService extends ILocationManager.Stub { synchronized (mLock) { return mMockProviders.containsKey(provider); } + + } + + private Location screenLocationLocked(Location location, String provider) { + if (isMockProvider(LocationManager.NETWORK_PROVIDER)) { + return location; + } + LocationProviderProxy providerProxy = + (LocationProviderProxy)mProvidersByName.get(LocationManager.NETWORK_PROVIDER); + if (mComboNlpPackageName == null || providerProxy == null || + false == provider.equals(LocationManager.NETWORK_PROVIDER) || + isMockProvider(LocationManager.NETWORK_PROVIDER)) { + return location; + } + + String connectedNlpPackage = providerProxy.getConnectedPackageName(); + if (connectedNlpPackage == null || !connectedNlpPackage.equals(mComboNlpPackageName)) { + return location; + } + + Bundle extras = location.getExtras(); + boolean isBeingScreened = false; + if (extras == null) { + extras = new Bundle(); + } + + if (!extras.containsKey(mComboNlpReadyMarker)) { + // see if Combo Nlp is a passive listener + ArrayList records = + mRecordsByProvider.get(LocationManager.PASSIVE_PROVIDER); + if (records != null) { + for (UpdateRecord r : records) { + if (r.mReceiver.mPackageName.equals(mComboNlpPackageName)) { + if (!isBeingScreened) { + isBeingScreened = true; + extras.putBoolean(mComboNlpScreenMarker, true); + } + // send location to Combo Nlp for screening + if (!r.mReceiver.callLocationChangedLocked(location)) { + Slog.w(TAG, "RemoteException calling onLocationChanged on " + + r.mReceiver); + } else { + if (D) { + Log.d(TAG, "Sending location for screening"); + } + } + } + } + } + if (isBeingScreened) { + return null; + } + if (D) { + Log.d(TAG, "Not screening locations"); + } + } else { + if (D) { + Log.d(TAG, "This location is marked as ready for broadcast"); + } + // clear the ready marker + extras.remove(mComboNlpReadyMarker); + } + + return location; } private void handleLocationChanged(Location location, boolean passive) { @@ -2392,6 +2466,10 @@ public class LocationManagerService extends ILocationManager.Stub { synchronized (mLock) { if (isAllowedByCurrentUserSettingsLocked(provider)) { if (!passive) { + location = screenLocationLocked(location, provider); + if (location == null) { + return; + } // notify passive provider of the new location mPassiveProvider.updateLocation(myLocation); } -- GitLab From 5637c0efb079cf420b1f0bdbd850510f0aa60a48 Mon Sep 17 00:00:00 2001 From: Praveen Chavan Date: Tue, 14 Jul 2015 12:38:37 -0700 Subject: [PATCH 006/185] CamcorderProfiles: Add new profiles for recorder Below changes are squased: video: Add QHD & 2K profile for recorder Change-Id: I3269ccbedb70b12eb0f7bea8fb038533dbcdf894 add VGA and 4K-DCI profiles. Change-Id: I1067da3769635365048529fe315e6971c2d51696 --- .../java/android/media/CamcorderProfile.java | 75 ++++++++++++++++++- media/jni/android_media_MediaProfiles.cpp | 4 +- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java index d303a2e39882..6785670d1926 100644 --- a/media/java/android/media/CamcorderProfile.java +++ b/media/java/android/media/CamcorderProfile.java @@ -206,6 +206,77 @@ public class CamcorderProfile private static final int QUALITY_HIGH_SPEED_LIST_START = QUALITY_HIGH_SPEED_LOW; private static final int QUALITY_HIGH_SPEED_LIST_END = QUALITY_HIGH_SPEED_2160P; + // Vendor-specific quality profiles + /** + * Quality level corresponding to the VGA (640 x 480) resolution. + * @hide + */ + public static final int QUALITY_VGA = 10000; + + /** + * Quality level corresponding to the 4k-DCI (4096 x 2160) resolution. + * @hide + */ + public static final int QUALITY_4KDCI = 10001; + + /** + * Time lapse quality level corresponding to the VGA (640 x 480) resolution. + * @hide + */ + public static final int QUALITY_TIME_LAPSE_VGA = 10002; + + /** + * Time lapse quality level corresponding to the 4k-DCI (4096 x 2160) resolution. + * @hide + */ + public static final int QUALITY_TIME_LAPSE_4KDCI = 10003; + + /** + * High speed ( >= 100fps) quality level corresponding to the CIF (352 x 288) + * @hide + */ + public static final int QUALITY_HIGH_SPEED_CIF = 10004; + + /** + * High speed ( >= 100fps) quality level corresponding to the VGA (640 x 480) + * @hide + */ + public static final int QUALITY_HIGH_SPEED_VGA = 10005; + + /** + * High speed ( >= 100fps) quality level corresponding to the 4K-DCI (4096 x 2160) + * @hide + */ + public static final int QUALITY_HIGH_SPEED_4KDCI = 10006; + + /** + * Quality level corresponding to QHD resolution + * @hide + */ + public static final int QUALITY_QHD = 10007; + + /** + * Quality level corresponding to 2K resolution + * @hide + */ + public static final int QUALITY_2k = 10008; + + /** + * Time lapse quality level corresponding to the QHD resolution. + * @hide + */ + public static final int QUALITY_TIME_LAPSE_QHD = 10009; + + /** + * Time lapse quality level corresponding to the 2K resolution. + * @hide + */ + public static final int QUALITY_TIME_LAPSE_2k = 10010; + + // Start and end of vendor quality list + private static final int QUALITY_VENDOR_LIST_START = QUALITY_VGA; + private static final int QUALITY_VENDOR_LIST_END = QUALITY_TIME_LAPSE_2k; + /** * Default recording duration in seconds before the session is terminated. * This is useful for applications like MMS has limited file size requirement. @@ -391,7 +462,9 @@ public class CamcorderProfile (quality >= QUALITY_TIME_LAPSE_LIST_START && quality <= QUALITY_TIME_LAPSE_LIST_END) || (quality >= QUALITY_HIGH_SPEED_LIST_START && - quality <= QUALITY_HIGH_SPEED_LIST_END))) { + quality <= QUALITY_HIGH_SPEED_LIST_END) || + (quality >= QUALITY_VENDOR_LIST_START && + quality <= QUALITY_VENDOR_LIST_END))) { String errMessage = "Unsupported quality level: " + quality; throw new IllegalArgumentException(errMessage); } diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp index 580004304170..c5ec2bcb2b3e 100644 --- a/media/jni/android_media_MediaProfiles.cpp +++ b/media/jni/android_media_MediaProfiles.cpp @@ -170,7 +170,9 @@ static bool isCamcorderQualityKnown(int quality) (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LIST_START && quality <= CAMCORDER_QUALITY_TIME_LAPSE_LIST_END) || (quality >= CAMCORDER_QUALITY_HIGH_SPEED_LIST_START && - quality <= CAMCORDER_QUALITY_HIGH_SPEED_LIST_END)); + quality <= CAMCORDER_QUALITY_HIGH_SPEED_LIST_END) || + (quality >= CAMCORDER_QUALITY_VENDOR_START && + quality <= CAMCORDER_QUALITY_VENDOR_END)); } static jobject -- GitLab From febb29dd57153ee0a81a538a1e0fd0932b843b39 Mon Sep 17 00:00:00 2001 From: Elvice Wu Date: Tue, 21 Jul 2015 16:52:33 -0700 Subject: [PATCH 007/185] Camera: Extend face detection This change is the combination of following commits, plus moving face detection related classes out from org.codeaurora.performance.jar to org.codeaurora.camer.jar. # This is the 1st commit message: Add framework support for extended face detect CRs-Fixed: 587195 Change-Id: I2a1c477ee6d11f2b9764966abbb85ede9100fe91 # This is the 2nd commit message: Camera: Extended face features added - QCFace renamed to ExtendedFace CRs-Fixed: 587195 Change-Id: I7c7e2073f283522c2f0bd0fa5e7b96a74ae18011 # This is the 3rd commit message: Camera: QCFace AOST copyrights fixed AOST files copyright data must not be updated to 2014 CRs-Fixed: 587195 Change-Id: I0cd603da674152c9f47350e571ec3e230b61f8dd Change-Id: I259c80fb9c7f768097d67be493db40b24cd2eda9 --- core/java/org/codeaurora/camera/Android.mk | 30 +++ .../org/codeaurora/camera/ExtendedFace.java | 211 ++++++++++++++++++ .../camera/org.codeaurora.camera.xml | 35 +++ 3 files changed, 276 insertions(+) create mode 100644 core/java/org/codeaurora/camera/Android.mk create mode 100644 core/java/org/codeaurora/camera/ExtendedFace.java create mode 100644 core/java/org/codeaurora/camera/org.codeaurora.camera.xml diff --git a/core/java/org/codeaurora/camera/Android.mk b/core/java/org/codeaurora/camera/Android.mk new file mode 100644 index 000000000000..2e005f79eef2 --- /dev/null +++ b/core/java/org/codeaurora/camera/Android.mk @@ -0,0 +1,30 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_MODULE_TAGS := optional + +LOCAL_MODULE:= org.codeaurora.camera + +# This will install the file in /system/framework +LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES) + +include $(BUILD_JAVA_LIBRARY) + +# ==== permissions ======================== +include $(CLEAR_VARS) + +LOCAL_MODULE := org.codeaurora.camera.xml + +LOCAL_MODULE_TAGS := optional + +LOCAL_MODULE_CLASS := ETC + +# This will install the file in /system/etc/permissions +LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions + +LOCAL_SRC_FILES := $(LOCAL_MODULE) + +include $(BUILD_PREBUILT) diff --git a/core/java/org/codeaurora/camera/ExtendedFace.java b/core/java/org/codeaurora/camera/ExtendedFace.java new file mode 100644 index 000000000000..afda0b64b14c --- /dev/null +++ b/core/java/org/codeaurora/camera/ExtendedFace.java @@ -0,0 +1,211 @@ +/* Copyright (c) 2015, The Linux Foundataion. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +package org.codeaurora.camera; + +import android.hardware.Camera; + +import java.util.ArrayList; + +import android.os.Bundle; + +import android.os.SystemProperties; + +/** + * {@hide} Information about a face identified through Extended camera face + * + *

+ * When face detection is used with a camera, the {@link FaceDetectionListener} + * returns a list of face objects for use in focusing and metering. + *

+ * + * @see FaceDetectionListener + */ +public class ExtendedFace extends android.hardware.Camera.Face { + public ExtendedFace() { + super(); + } + + private int smileDegree = 0; + private int smileScore = 0; + private int blinkDetected = 0; + private int faceRecognized = 0; + private int gazeAngle = 0; + private int updownDir = 0; + private int leftrightDir = 0; + private int rollDir = 0; + private int leyeBlink = 0; + private int reyeBlink = 0; + private int leftrightGaze = 0; + private int topbottomGaze = 0; + + private static final String STR_TRUE = "true"; + private static final String STR_FALSE = "false"; + + /** + * The smilie degree for the detection of the face. + * + * @see #startFaceDetection() + */ + public int getSmileDegree() { + return smileDegree; + } + + /** + * The smilie score for the detection of the face. + * + * @see #startFaceDetection() + */ + public int getSmileScore() { + return smileScore; + } + + /** + * The smilie degree for the detection of the face. + * + * @see #startFaceDetection() + */ + public int getBlinkDetected() { + return blinkDetected; + } + + /** + * If face is recognized. + * + * @see #startFaceDetection() + */ + public int getFaceRecognized() { + return faceRecognized; + } + + /** + * The gaze angle for the detected face. + * + * @see #startFaceDetection() + */ + public int getGazeAngle() { + return gazeAngle; + } + + /** + * The up down direction for the detected face. + * + * @see #startFaceDetection() + */ + public int getUpDownDirection() { + return updownDir; + } + + /** + * The left right direction for the detected face. + * + * @see #startFaceDetection() + */ + public int getLeftRightDirection() { + return leftrightDir; + } + + /** + * The roll direction for the detected face. + * + * @see #startFaceDetection() + */ + public int getRollDirection() { + return rollDir; + } + + /** + * The degree of left eye blink for the detected face. + * + * @see #startFaceDetection() + */ + public int getLeftEyeBlinkDegree() { + return leyeBlink; + } + + /** + * The degree of right eye blink for the detected face. + * + * @see #startFaceDetection() + */ + public int getRightEyeBlinkDegree() { + return reyeBlink; + } + + /** + * The gaze degree of left-right direction for the detected face. + * + * @see #startFaceDetection() + */ + public int getLeftRightGazeDegree() { + return leftrightGaze; + } + + /** + * The gaze degree of up-down direction for the detected face. + * + * @see #startFaceDetection() + */ + public int getTopBottomGazeDegree() { + return topbottomGaze; + } + + private static final String BUNDLE_KEY_SMILE_SCORE = "smileScore"; + private static final String BUNDLE_KEY_SMILE_VALUE = "smileValue"; + private static final String BUNDLE_KEY_BLINK_DETECTED = "blinkDetected"; + private static final String BUNDLE_KEY_LEFT_EYE_CLOSED_VALUE = "leftEyeClosedValue"; + private static final String BUNDLE_KEY_RIGHT_EYE_CLOSED_VALUE = "rightEyeClosedValue"; + private static final String BUNDLE_KEY_FACE_PITCH_DEGREE = "facePitchDegree"; + private static final String BUNDLE_KEY_FACE_YAW_DEGREE = "faceYawDegree"; + private static final String BUNDLE_KEY_FACE_ROLL_DEGREE = "faceRollDegree"; + private static final String BUNDLE_KEY_GAZE_UP_DOWN_DEGREE = "gazeUpDownDegree"; + private static final String BUNDLE_KEY_GAZE_LEFT_RIGHT_DEGREE = "gazeLeftRightDegree"; + private static final String BUNDLE_KEY_FACE_RECOGNIZED = "faceRecognized"; + + public Bundle getExtendedFaceInfo() { + Bundle faceInfo = new Bundle(); + faceInfo.putInt(BUNDLE_KEY_SMILE_VALUE, this.smileDegree); + + faceInfo.putInt(BUNDLE_KEY_LEFT_EYE_CLOSED_VALUE, this.leyeBlink); + faceInfo.putInt(BUNDLE_KEY_RIGHT_EYE_CLOSED_VALUE, this.reyeBlink); + + faceInfo.putInt(BUNDLE_KEY_FACE_PITCH_DEGREE, this.updownDir); + faceInfo.putInt(BUNDLE_KEY_FACE_YAW_DEGREE, this.leftrightDir); + faceInfo.putInt(BUNDLE_KEY_FACE_ROLL_DEGREE, this.rollDir); + faceInfo.putInt(BUNDLE_KEY_GAZE_UP_DOWN_DEGREE, this.topbottomGaze); + faceInfo.putInt(BUNDLE_KEY_GAZE_LEFT_RIGHT_DEGREE, this.leftrightGaze); + + faceInfo.putInt(BUNDLE_KEY_BLINK_DETECTED, this.blinkDetected); + faceInfo.putInt(BUNDLE_KEY_SMILE_SCORE, this.smileScore); + faceInfo.putInt(BUNDLE_KEY_FACE_RECOGNIZED, this.faceRecognized); + + return faceInfo; + } + +} diff --git a/core/java/org/codeaurora/camera/org.codeaurora.camera.xml b/core/java/org/codeaurora/camera/org.codeaurora.camera.xml new file mode 100644 index 000000000000..20b2aa05822f --- /dev/null +++ b/core/java/org/codeaurora/camera/org.codeaurora.camera.xml @@ -0,0 +1,35 @@ + + + + + + + -- GitLab From c4cb19bb8b4b7c57dd9b4b30594a177828e69e2c Mon Sep 17 00:00:00 2001 From: Mingming Yin Date: Tue, 11 Aug 2015 10:32:57 -0700 Subject: [PATCH 008/185] audio: add support for extended audio encoding - add support for EVRC, QCELP ,LPCM, and multichannel encoding. Conflicts: core/jni/android_media_AudioFormat.h media/java/android/media/AudioFormat.java media/java/android/media/MediaFile.java Change-Id: I9542ec9dec1872237940846952d28bef3ce24285 --- core/jni/android_media_AudioFormat.h | 32 +++++++++++ media/java/android/media/AudioFormat.java | 64 ++++++++++++++++++++- media/java/android/media/AudioRecord.java | 9 +++ media/java/android/media/MediaFile.java | 22 ++++++- media/java/android/media/MediaRecorder.java | 13 +++++ 5 files changed, 138 insertions(+), 2 deletions(-) diff --git a/core/jni/android_media_AudioFormat.h b/core/jni/android_media_AudioFormat.h index 651330446382..973b0a5119f6 100644 --- a/core/jni/android_media_AudioFormat.h +++ b/core/jni/android_media_AudioFormat.h @@ -32,6 +32,14 @@ #define ENCODING_AAC_HE_V1 11 #define ENCODING_AAC_HE_V2 12 #define ENCODING_IEC61937 13 + +#define ENCODING_AMR_NB 100 +#define ENCODING_AMR_WB 101 +#define ENCODING_EVRC 102 +#define ENCODING_EVRC_B 103 +#define ENCODING_EVRC_WB 104 +#define ENCODING_EVRC_NW 105 + #define ENCODING_INVALID 0 #define ENCODING_DEFAULT 1 @@ -67,6 +75,18 @@ static inline audio_format_t audioFormatToNative(int audioFormat) return AUDIO_FORMAT_AAC_HE_V2; case ENCODING_IEC61937: return AUDIO_FORMAT_IEC61937; + case ENCODING_AMR_NB: + return AUDIO_FORMAT_AMR_NB; + case ENCODING_AMR_WB: + return AUDIO_FORMAT_AMR_WB; + case ENCODING_EVRC: + return AUDIO_FORMAT_EVRC; + case ENCODING_EVRC_B: + return AUDIO_FORMAT_EVRCB; + case ENCODING_EVRC_WB: + return AUDIO_FORMAT_EVRCWB; + case ENCODING_EVRC_NW: + return AUDIO_FORMAT_EVRCNW; case ENCODING_DEFAULT: return AUDIO_FORMAT_DEFAULT; default: @@ -108,6 +128,18 @@ static inline int audioFormatFromNative(audio_format_t nativeFormat) return ENCODING_AAC_HE_V2; case AUDIO_FORMAT_IEC61937: return ENCODING_IEC61937; + case AUDIO_FORMAT_AMR_NB: + return ENCODING_AMR_NB; + case AUDIO_FORMAT_AMR_WB: + return ENCODING_AMR_WB; + case AUDIO_FORMAT_EVRC: + return ENCODING_EVRC; + case AUDIO_FORMAT_EVRCB: + return ENCODING_EVRC_B; + case AUDIO_FORMAT_EVRCWB: + return ENCODING_EVRC_WB; + case AUDIO_FORMAT_EVRCNW: + return ENCODING_EVRC_NW; case AUDIO_FORMAT_DEFAULT: return ENCODING_DEFAULT; default: diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java index a4484e757ac5..bd593a3c2db6 100644 --- a/media/java/android/media/AudioFormat.java +++ b/media/java/android/media/AudioFormat.java @@ -264,6 +264,30 @@ public final class AudioFormat implements Parcelable { */ public static final int ENCODING_IEC61937 = 13; + /** Audio data format: AMRNB + * @hide + * */ + public static final int ENCODING_AMRNB = 100; + /** Audio data format: AMRWB + * @hide + * */ + public static final int ENCODING_AMRWB = 101; + /** Audio data format: EVRC + * @hide + * */ + public static final int ENCODING_EVRC = 102; + /** Audio data format: EVRCB + * @hide + * */ + public static final int ENCODING_EVRCB = 103; + /** Audio data format: EVRCWB + * @hide + * */ + public static final int ENCODING_EVRCWB = 104; + /** Audio data format: EVRCNW + * @hide + * */ + public static final int ENCODING_EVRCNW = 105; /** Invalid audio channel configuration */ /** @deprecated Use {@link #CHANNEL_INVALID} instead. */ @Deprecated public static final int CHANNEL_CONFIGURATION_INVALID = 0; @@ -439,6 +463,11 @@ public final class AudioFormat implements Parcelable { public static final int CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT); /** @hide */ public static final int CHANNEL_IN_FRONT_BACK = CHANNEL_IN_FRONT | CHANNEL_IN_BACK; + /** @hide */ + public static final int CHANNEL_IN_5POINT1 = (CHANNEL_IN_LEFT | + CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK | + CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED); + // CHANNEL_IN_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_IN_ALL /** @hide */ @@ -453,6 +482,15 @@ public final class AudioFormat implements Parcelable { return 2; case ENCODING_PCM_FLOAT: return 4; + case ENCODING_AMRNB: + return 32; + case ENCODING_AMRWB: + return 61; + case ENCODING_EVRC: + case ENCODING_EVRCB: + case ENCODING_EVRCWB: + case ENCODING_EVRCNW: + return 23; case ENCODING_INVALID: default: throw new IllegalArgumentException("Bad audio format " + audioFormat); @@ -475,6 +513,12 @@ public final class AudioFormat implements Parcelable { case ENCODING_AAC_HE_V1: case ENCODING_AAC_HE_V2: case ENCODING_IEC61937: + case ENCODING_AMRNB: + case ENCODING_AMRWB: + case ENCODING_EVRC: + case ENCODING_EVRCB: + case ENCODING_EVRCWB: + case ENCODING_EVRCNW: return true; default: return false; @@ -517,6 +561,12 @@ public final class AudioFormat implements Parcelable { case ENCODING_AAC_HE_V1: case ENCODING_AAC_HE_V2: case ENCODING_IEC61937: // wrapped in PCM but compressed + case ENCODING_AMRNB: + case ENCODING_AMRWB: + case ENCODING_EVRC: + case ENCODING_EVRCB: + case ENCODING_EVRCWB: + case ENCODING_EVRCNW: return false; case ENCODING_INVALID: default: @@ -773,6 +823,12 @@ public final class AudioFormat implements Parcelable { case ENCODING_DTS: case ENCODING_DTS_HD: case ENCODING_IEC61937: + case ENCODING_AMRNB: + case ENCODING_AMRWB: + case ENCODING_EVRC: + case ENCODING_EVRCB: + case ENCODING_EVRCWB: + case ENCODING_EVRCNW: mEncoding = encoding; break; case ENCODING_INVALID: @@ -980,7 +1036,13 @@ public final class AudioFormat implements Parcelable { ENCODING_E_AC3, ENCODING_DTS, ENCODING_DTS_HD, - ENCODING_IEC61937 + ENCODING_IEC61937, + ENCODING_AMRNB, + ENCODING_AMRWB, + ENCODING_EVRC, + ENCODING_EVRCB, + ENCODING_EVRCWB, + ENCODING_EVRCNW }) @Retention(RetentionPolicy.SOURCE) public @interface Encoding {} diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java index 39184f1af878..76776d46d368 100644 --- a/media/java/android/media/AudioRecord.java +++ b/media/java/android/media/AudioRecord.java @@ -700,6 +700,12 @@ public class AudioRecord implements AudioRouting case AudioFormat.ENCODING_PCM_FLOAT: case AudioFormat.ENCODING_PCM_16BIT: case AudioFormat.ENCODING_PCM_8BIT: + case AudioFormat.ENCODING_AMRNB: + case AudioFormat.ENCODING_AMRWB: + case AudioFormat.ENCODING_EVRC: + case AudioFormat.ENCODING_EVRCB: + case AudioFormat.ENCODING_EVRCWB: + case AudioFormat.ENCODING_EVRCNW: mAudioFormat = audioFormat; break; default: @@ -936,6 +942,9 @@ public class AudioRecord implements AudioRouting case (AudioFormat.CHANNEL_IN_FRONT | AudioFormat.CHANNEL_IN_BACK): channelCount = 2; break; + case AudioFormat.CHANNEL_IN_5POINT1: + channelCount = 6; + break; case AudioFormat.CHANNEL_INVALID: default: loge("getMinBufferSize(): Invalid channel configuration."); diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index f7becf54d340..bd179fa561a1 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -46,6 +46,18 @@ public class MediaFile { private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3; private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC; + // More audio file types + public static final int FILE_TYPE_DTS = 300; + public static final int FILE_TYPE_3GPA = 301; + public static final int FILE_TYPE_AC3 = 302; + public static final int FILE_TYPE_QCP = 303; + public static final int FILE_TYPE_PCM = 304; + public static final int FILE_TYPE_EC3 = 305; + public static final int FILE_TYPE_AIFF = 306; + public static final int FILE_TYPE_APE = 307; + private static final int FIRST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DTS; + private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_APE; + // MIDI file types public static final int FILE_TYPE_MID = 11; public static final int FILE_TYPE_SMF = 12; @@ -265,13 +277,21 @@ public class MediaFile { addFileType("ZIP", FILE_TYPE_ZIP, "application/zip"); addFileType("MPG", FILE_TYPE_MP2PS, "video/mp2p"); addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p"); + addFileType("QCP", FILE_TYPE_QCP, "audio/qcelp"); + addFileType("AC3", FILE_TYPE_AC3, "audio/ac3"); + addFileType("EC3", FILE_TYPE_EC3, "audio/eac3"); + addFileType("AIF", FILE_TYPE_AIFF, "audio/x-aiff"); + addFileType("AIFF", FILE_TYPE_AIFF, "audio/x-aiff"); + addFileType("APE", FILE_TYPE_APE, "audio/x-ape"); } public static boolean isAudioFileType(int fileType) { return ((fileType >= FIRST_AUDIO_FILE_TYPE && fileType <= LAST_AUDIO_FILE_TYPE) || (fileType >= FIRST_MIDI_FILE_TYPE && - fileType <= LAST_MIDI_FILE_TYPE)); + fileType <= LAST_MIDI_FILE_TYPE) || + (fileType >= FIRST_AUDIO_FILE_TYPE_EXT && + fileType <= LAST_AUDIO_FILE_TYPE_EXT)); } public static boolean isVideoFileType(int fileType) { diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 73485afcecff..4ae2afa9466b 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -394,6 +394,13 @@ public class MediaRecorder /** VP8/VORBIS data in a WEBM container */ public static final int WEBM = 9; + + /** @hide QCP file format */ + public static final int QCP = 20; + + /** @hide WAVE media file format*/ + public static final int WAVE = 21; + }; /** @@ -418,6 +425,12 @@ public class MediaRecorder public static final int AAC_ELD = 5; /** Ogg Vorbis audio codec */ public static final int VORBIS = 6; + /** @hide EVRC audio codec */ + public static final int EVRC = 10; + /** @hide QCELP audio codec */ + public static final int QCELP = 11; + /** @hide Linear PCM audio codec */ + public static final int LPCM = 12; } /** -- GitLab From 4d9ec1350434aa71540801e7fa42cee82c06beed Mon Sep 17 00:00:00 2001 From: Tapas Kumar Kundu Date: Tue, 11 Aug 2015 16:27:39 -0700 Subject: [PATCH 009/185] ActivityTrigger: New class to invoke when activity starts/resumes This changes is combination of following commits: 1) Author: David Ng Proprietary client library needs to know activity name. Example:app trigger Change-Id: I3078ef90d0b1846cdbbf9eaefd68544263936040 2) Author: Rajulu Ponnada Change activity trigger api to include activity flags which can be changed if required in vendor specific library. Change-Id: Icfaab21fd4c5a6290f226a338870b9031d32b498 3) Author: Rajulu Ponnada support for opening/loading multiple dynamic libraries when apps' activity start/resume invoked Change-Id: Icf42e426870ee634920c2288e4075699c472d3a6 4) Author: Xin Qi GetStringUTFChars() does not release memory untill ReleaseStringUTFChars() is called and causes memory leak. This change uses ReleaseStringUTFChars() to release unused buffer. Change-Id: If7f27ea35f5a1d1dd7c98fbe5f92729ab9ba0257 Change-Id: I089f1669e5711efcabbf1985d80b48c6e92893c6 --- .../android/internal/app/ActivityTrigger.java | 74 +++++++ core/jni/Android.mk | 3 +- core/jni/AndroidRuntime.cpp | 3 +- ...m_android_internal_app_ActivityTrigger.cpp | 208 ++++++++++++++++++ .../com/android/server/am/ActivityStack.java | 10 +- 5 files changed, 295 insertions(+), 3 deletions(-) create mode 100644 core/java/com/android/internal/app/ActivityTrigger.java create mode 100644 core/jni/com_android_internal_app_ActivityTrigger.cpp diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java new file mode 100644 index 000000000000..75da84b84d16 --- /dev/null +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -0,0 +1,74 @@ +/* Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package com.android.internal.app; + +import android.content.ComponentName; +import android.content.Intent; +import android.util.Log; + +public class ActivityTrigger +{ + private static final String TAG = "ActivityTrigger"; + + /** &hide */ + public ActivityTrigger() { + //Log.d(TAG, "ActivityTrigger initialized"); + } + + /** &hide */ + protected void finalize() { + native_at_deinit(); + } + + /** &hide */ + public int activityStartTrigger(Intent intent, int flags) { + ComponentName cn = intent.getComponent(); + String activity = null; + + if (cn != null) + activity = cn.flattenToString(); + flags = native_at_startActivity(activity, flags); + return flags; + } + + /** &hide */ + public void activityResumeTrigger(Intent intent) { + ComponentName cn = intent.getComponent(); + String activity = null; + + if (cn != null) + activity = cn.flattenToString(); + native_at_resumeActivity(activity); + } + + private native int native_at_startActivity(String activity, int flags); + private native void native_at_resumeActivity(String activity); + private native void native_at_deinit(); +} diff --git a/core/jni/Android.mk b/core/jni/Android.mk index dd66b24a6b2f..4bfb4cbffacb 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -177,7 +177,8 @@ LOCAL_SRC_FILES:= \ com_android_internal_os_PathClassLoaderFactory.cpp \ com_android_internal_os_Zygote.cpp \ com_android_internal_util_VirtualRefBasePtr.cpp \ - com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp + com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp \ + com_android_internal_app_ActivityTrigger.cpp LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 315887d954e5..64e634168fa0 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -203,6 +203,7 @@ extern int register_com_android_internal_net_NetworkStatsFactory(JNIEnv *env); extern int register_com_android_internal_os_PathClassLoaderFactory(JNIEnv* env); extern int register_com_android_internal_os_Zygote(JNIEnv *env); extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); +extern int register_com_android_internal_app_ActivityTrigger(JNIEnv *env); static AndroidRuntime* gCurRuntime = NULL; @@ -1408,7 +1409,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_animation_PropertyValuesHolder), REG_JNI(register_com_android_internal_content_NativeLibraryHelper), REG_JNI(register_com_android_internal_net_NetworkStatsFactory), - + REG_JNI(register_com_android_internal_app_ActivityTrigger), }; /* diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp new file mode 100644 index 000000000000..27e63e05480a --- /dev/null +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -0,0 +1,208 @@ +/* Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#define LOG_TAG "ActTriggerJNI" + +#include "jni.h" +#include "JNIHelp.h" +#include + +#include +#include +#include + +#include +#include + +#define LIBRARY_PATH_PREFIX "/vendor/lib/" + +namespace android +{ + +// ---------------------------------------------------------------------------- +/* + * Stuct containing handle to dynamically loaded lib as well as function + * pointers to key interfaces. + */ +typedef struct dlLibHandler { + void *dlhandle; + void (*startActivity)(const char *, int *); + void (*resumeActivity)(const char *); + void (*init)(void); + void (*deinit)(void); + const char *dlname; +}dlLibHandler; + +/* + * Array of dlhandlers + * library -both handlers for Start and Resume events. + */ +static dlLibHandler mDlLibHandlers[] = { + {NULL, NULL, NULL, NULL, NULL, + "ro.vendor.at_library"}, + {NULL, NULL, NULL, NULL, NULL, + "ro.vendor.gt_library"}, +}; + +// ---------------------------------------------------------------------------- + +static void +com_android_internal_app_ActivityTrigger_native_at_init() +{ + const char *rc; + char buf[PROPERTY_VALUE_MAX]; + bool errored = false; + size_t numlibs = 0; + + numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + + for(size_t i = 0; i < numlibs; i++) { + errored = false; + + /* Retrieve name of vendor library */ + if (property_get(mDlLibHandlers[i].dlname, buf, NULL) <= 0) { + continue; + } + + /* Sanity check - ensure */ + buf[PROPERTY_VALUE_MAX-1] = '\0'; + if (strstr(buf, "/") != NULL) { + continue; + } + + mDlLibHandlers[i].dlhandle = dlopen(buf, RTLD_NOW | RTLD_LOCAL); + if (mDlLibHandlers[i].dlhandle == NULL) { + continue; + } + + dlerror(); + + *(void **) (&mDlLibHandlers[i].startActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_start"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + + if (!errored) { + *(void **) (&mDlLibHandlers[i].resumeActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_resume"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } + if (!errored) { + *(void **) (&mDlLibHandlers[i].init) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_init"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } + + if (errored) { + mDlLibHandlers[i].startActivity = NULL; + mDlLibHandlers[i].resumeActivity = NULL; + if (mDlLibHandlers[i].dlhandle) { + dlclose(mDlLibHandlers[i].dlhandle); + mDlLibHandlers[i].dlhandle = NULL; + } + } else { + (*mDlLibHandlers[i].init)(); + } + } +} + +static void +com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject clazz) +{ + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + + for(size_t i = 0; i < numlibs; i++) { + if (mDlLibHandlers[i].dlhandle) { + mDlLibHandlers[i].startActivity = NULL; + mDlLibHandlers[i].resumeActivity = NULL; + + *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit"); + if (mDlLibHandlers[i].deinit) { + (*mDlLibHandlers[i].deinit)(); + } + + dlclose(mDlLibHandlers[i].dlhandle); + mDlLibHandlers[i].dlhandle = NULL; + } + } +} + +static jint +com_android_internal_app_ActivityTrigger_native_at_startActivity(JNIEnv *env, jobject clazz, jstring activity, jint flags) +{ + int activiyFlags = flags; + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + for(size_t i = 0; i < numlibs; i++){ + if(mDlLibHandlers[i].startActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (actStr) { + (*mDlLibHandlers[i].startActivity)(actStr, &activiyFlags); + env->ReleaseStringUTFChars(activity, actStr); + } + } + } + return activiyFlags; +} + +static void +com_android_internal_app_ActivityTrigger_native_at_resumeActivity(JNIEnv *env, jobject clazz, jstring activity) +{ + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + + for(size_t i = 0; i < numlibs; i++){ + if(mDlLibHandlers[i].resumeActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (actStr) { + (*mDlLibHandlers[i].resumeActivity)(actStr); + env->ReleaseStringUTFChars(activity, actStr); + } + } + } +} + +// ---------------------------------------------------------------------------- + +static JNINativeMethod gMethods[] = { + {"native_at_startActivity", "(Ljava/lang/String;I)I", (void *)com_android_internal_app_ActivityTrigger_native_at_startActivity}, + {"native_at_resumeActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_resumeActivity}, + {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, +}; + + +int register_com_android_internal_app_ActivityTrigger(JNIEnv *env) +{ + com_android_internal_app_ActivityTrigger_native_at_init(); + + return AndroidRuntime::registerNativeMethods(env, + "com/android/internal/app/ActivityTrigger", gMethods, NELEM(gMethods)); +} + +} // namespace android diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 4ead64b6915b..c4202874efb4 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -119,6 +119,8 @@ import android.util.EventLog; import android.util.Log; import android.util.Slog; import android.view.Display; +import com.android.internal.app.ActivityTrigger; + import com.android.internal.app.IVoiceInteractor; import com.android.internal.content.ReferrerIntent; @@ -354,6 +356,8 @@ final class ActivityStack { final Handler mHandler; + static final ActivityTrigger mActivityTrigger = new ActivityTrigger(); + final class ActivityStackHandler extends Handler { ActivityStackHandler(Looper looper) { @@ -2233,7 +2237,10 @@ final class ActivityStack { if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Resuming " + next); - // If we are currently pausing an activity, then don't do anything until that is done. + mActivityTrigger.activityResumeTrigger(next.intent); + + // If we are currently pausing an activity, then don't do anything + // until that is done. if (!mStackSupervisor.allPausedActivitiesComplete()) { if (DEBUG_SWITCH || DEBUG_PAUSE || DEBUG_STATES) Slog.v(TAG_PAUSE, "resumeTopActivityLocked: Skip resume: some activity pausing."); @@ -2699,6 +2706,7 @@ final class ActivityStack { task.setFrontOfTask(); r.putInHistory(); + r.info.flags = mActivityTrigger.activityStartTrigger(r.intent, r.info.flags); if (!isHomeStack() || numActivities() > 0) { // We want to show the starting preview window if we are // switching to a new task, or the next activity's process is -- GitLab From e14378bf325f07b9133156ff82a18bb15f3f3716 Mon Sep 17 00:00:00 2001 From: Saurabh Shah Date: Thu, 7 May 2015 14:10:23 +0530 Subject: [PATCH 010/185] frameworks/base: Add support for low resolution rendering This change is a combination of following changes: 1) frameworks/base: Handle custom activityTrigger flags * Take necessary action needed for each vendor specific flag set as part of activityTrigger. * If the HW acceleration has to be enabled for a particular activity, populate the neccessary activityInfo flags. * If the resolution needs to be overridden for SurfaceView of a specific app, set the overrideRes to 1 in applicationInfo. Author: Raj Kamal Change-Id: Ic835ec1f2ebcc016542ace4050bfef5fb32f20a0 2) frameworks/base: Add support to render certain apps at lower resolution. Add support to render certain apps at a resolution lower than the primary display device resolution. This would reduce the load on GPU and would help in saving power Author: Uday Kiran jandhyala Change-Id: I7004a145f3048aafbfb456451e08ea5ba229cfe9 3) frameworks/base: Bail out early if Resolution override disabled There is a f/w bug that causes the resources to be not initialized leading to a crash in ResolutionOverride. This change bails out early before calling getResources(), if Resolution override is disabled. Also adds null checks for getResources() for cases where the feature is enabled. Author: Saurabh Shah Change-Id: I3fa362a153fb39d933b1aa17a5fac8affdd041d8 This change also moves out custom functionality related to overriding resolution from SurfaceView, to a new class ResolutionOverride. Change-Id: Icabc17b9462a347c9c452cc53222ea7dcb6f336b --- .../android/content/pm/ApplicationInfo.java | 12 ++ .../java/android/util/ResolutionOverride.java | 143 ++++++++++++++++++ core/java/android/view/SurfaceView.java | 19 ++- .../android/internal/app/ActivityTrigger.java | 29 +++- .../com/android/server/am/ActivityStack.java | 4 +- 5 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 core/java/android/util/ResolutionOverride.java diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index b7364e299784..cf30f0c47874 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -541,6 +541,13 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public int privateFlags; + /** + * Boolean indicating whether the resolution of the SurfaceView associated + * with this appplication can be overriden. + * {@hide} + */ + public int overrideRes = 0; + /** * The required smallest screen width the application can run on. If 0, * nothing has been specified. Comes from @@ -897,6 +904,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { theme = orig.theme; flags = orig.flags; privateFlags = orig.privateFlags; + overrideRes = orig.overrideRes; requiresSmallestWidthDp = orig.requiresSmallestWidthDp; compatibleWidthLimitDp = orig.compatibleWidthLimitDp; largestWidthLimitDp = orig.largestWidthLimitDp; @@ -953,6 +961,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(theme); dest.writeInt(flags); dest.writeInt(privateFlags); + dest.writeInt(overrideRes); dest.writeInt(requiresSmallestWidthDp); dest.writeInt(compatibleWidthLimitDp); dest.writeInt(largestWidthLimitDp); @@ -1009,6 +1018,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { theme = source.readInt(); flags = source.readInt(); privateFlags = source.readInt(); + overrideRes = source.readInt(); requiresSmallestWidthDp = source.readInt(); compatibleWidthLimitDp = source.readInt(); largestWidthLimitDp = source.readInt(); @@ -1214,6 +1224,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** {@hide} */ public void setResourcePath(String resourcePath) { scanPublicSourceDir = resourcePath; } /** {@hide} */ public void setBaseResourcePath(String baseResourcePath) { publicSourceDir = baseResourcePath; } /** {@hide} */ public void setSplitResourcePaths(String[] splitResourcePaths) { splitPublicSourceDirs = splitResourcePaths; } + /** {@hide} */ public void setOverrideRes(int overrideResolution) { overrideRes = overrideResolution; } /** {@hide} */ public String getCodePath() { return scanSourceDir; } /** {@hide} */ public String getBaseCodePath() { return sourceDir; } @@ -1221,4 +1232,5 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** {@hide} */ public String getResourcePath() { return scanPublicSourceDir; } /** {@hide} */ public String getBaseResourcePath() { return publicSourceDir; } /** {@hide} */ public String[] getSplitResourcePaths() { return splitSourceDirs; } + /** {@hide} */ public int canOverrideRes() { return overrideRes; } } diff --git a/core/java/android/util/ResolutionOverride.java b/core/java/android/util/ResolutionOverride.java new file mode 100644 index 000000000000..5bb0668c32b0 --- /dev/null +++ b/core/java/android/util/ResolutionOverride.java @@ -0,0 +1,143 @@ +/* Copyright (c) 2015-2016 The Linux Foundation. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +package android.util; + +import android.content.ComponentName; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.graphics.Matrix; +import android.os.SystemProperties; +import android.util.Log; +import android.view.MotionEvent; +import android.view.SurfaceView; +import android.view.View; + +/** @hide */ +public class ResolutionOverride { + /** @hide */ + static private final boolean DEBUG = false; + static private final String TAG = "ResolutionOverride"; + private static final String RES_OVERRIDE = "persist.debug.app_res_override"; + private boolean mIsEnabled = false; + private int mOverrideXres = 0; + private int mOverrideYres = 0; + + /** @hide */ + public ResolutionOverride(SurfaceView view) { + boolean enable = (view.getContext().getApplicationInfo().canOverrideRes() == 1); + String resStr = SystemProperties.get(RES_OVERRIDE, null); + + if (!enable || resStr == null || resStr.length() == 0 || + view.getResources() == null) { + return; + } + + int orientation = view.getResources().getConfiguration().orientation; + + if(orientation == Configuration.ORIENTATION_PORTRAIT || + orientation == Configuration.ORIENTATION_LANDSCAPE) { + resStr = resStr.toLowerCase(); + final int pos = resStr.indexOf('x'); + if (pos > 0 && resStr.lastIndexOf('x') == pos) { + try { + mOverrideXres = Integer.parseInt(resStr.substring(0, pos)); + mOverrideYres = Integer.parseInt(resStr.substring(pos + 1)); + } catch (NumberFormatException ex) { + Log.e(TAG, "Error in extracting the overriding xres and yres"); + } + } + + if(orientation == Configuration.ORIENTATION_LANDSCAPE) { + int tmp = mOverrideXres; + mOverrideXres = mOverrideYres; + mOverrideYres = tmp; + } + + if(mOverrideXres > 0 && mOverrideYres > 0) { + mIsEnabled = true; + if (DEBUG) Log.i(TAG, "Orientation: " + orientation + + " Overriding resolution to" + " xres: " + mOverrideXres + + " yres: " + mOverrideYres); + } + } + } + + /** @hide */ + public void setFixedSize(SurfaceView view) { + if(!mIsEnabled) { + return; + } + + view.getHolder().setFixedSize(mOverrideXres, mOverrideYres); + } + + /** @hide */ + public void handleTouch(SurfaceView view, MotionEvent ev) { + if(!mIsEnabled) { + return; + } + + Matrix matrix = new Matrix(); + //mOverride{Xres, Yres} are already swapped if orientation is landscape + float xscale = (mOverrideXres * 1.0f) / view.getWidth(); + float yscale = (mOverrideYres * 1.0f) / view.getHeight(); + + if (DEBUG) Log.i(TAG, "Before overriding the touch event x/y : " + ev); + matrix.postScale(xscale, yscale); + ev.transform(matrix); + if (DEBUG) Log.i(TAG, "After overriding the touch event x/y : " + ev); + } + + /** @hide */ + public void handleResize(final SurfaceView surfaceView) { + if(!mIsEnabled) { + return; + } + + /* Change the visibility to GONE and back to VISIBLE and post it + * on the main thread for the touch events to be effective on the + * changed SurfaceView with the new dimensions + */ + surfaceView.post(new Runnable() { + @Override + public void run() { + surfaceView.setVisibility(View.GONE); + } + }); + + surfaceView.postDelayed(new Runnable() { + @Override + public void run() { + surfaceView.setVisibility(View.VISIBLE); + } + }, 100); + } +}; diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 203b82563ef8..b12fceb4313b 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -33,6 +33,7 @@ import android.os.SystemClock; import android.os.ParcelFileDescriptor; import android.util.AttributeSet; import android.util.Log; +import android.util.ResolutionOverride; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -189,6 +190,7 @@ public class SurfaceView extends View { private Translator mTranslator; private int mWindowInsetLeft; private int mWindowInsetTop; + ResolutionOverride mResolutionOverride = null; private boolean mGlobalListenersAdded; @@ -214,6 +216,8 @@ public class SurfaceView extends View { private void init() { setWillNotDraw(true); + mResolutionOverride = new ResolutionOverride(this); + mResolutionOverride.setFixedSize(this); } /** @@ -306,6 +310,16 @@ public class SurfaceView extends View { setMeasuredDimension(width, height); } + /** + * Transforms the touch events to the new resolution coordinate system + * if the resolution has changed + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + mResolutionOverride.handleTouch(this, ev); + return super.dispatchTouchEvent(ev); + } + /** @hide */ @Override protected boolean setFrame(int left, int top, int right, int bottom) { @@ -809,10 +823,13 @@ public class SurfaceView extends View { Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, Configuration newConfig, Rect backDropRect, boolean forceLayout, boolean alwaysConsumeNavBar) { - SurfaceView surfaceView = mSurfaceView.get(); + final SurfaceView surfaceView = mSurfaceView.get(); if (surfaceView != null) { if (DEBUG) Log.v(TAG, surfaceView + " got resized: w=" + frame.width() + " h=" + frame.height() + ", cur w=" + mCurWidth + " h=" + mCurHeight); + + surfaceView.mResolutionOverride.handleResize(surfaceView); + surfaceView.mSurfaceLock.lock(); try { if (reportDraw) { diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java index 75da84b84d16..6f6949a66551 100644 --- a/core/java/com/android/internal/app/ActivityTrigger.java +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -31,12 +31,19 @@ package com.android.internal.app; import android.content.ComponentName; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; import android.util.Log; public class ActivityTrigger { private static final String TAG = "ActivityTrigger"; + private static final int FLAG_OVERRIDE_RESOLUTION = 1; + private static final int FLAG_HARDWARE_ACCELERATED = + ActivityInfo.FLAG_HARDWARE_ACCELERATED; + + /** &hide */ public ActivityTrigger() { //Log.d(TAG, "ActivityTrigger initialized"); @@ -48,23 +55,31 @@ public class ActivityTrigger } /** &hide */ - public int activityStartTrigger(Intent intent, int flags) { + public void activityStartTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) { ComponentName cn = intent.getComponent(); + int overrideFlags = 0; String activity = null; - if (cn != null) - activity = cn.flattenToString(); - flags = native_at_startActivity(activity, flags); - return flags; + if(cn != null) + activity = cn.flattenToString() + "/" + appInfo.versionCode; + + overrideFlags = native_at_startActivity(activity, overrideFlags); + + if((overrideFlags & FLAG_HARDWARE_ACCELERATED) != 0) { + acInfo.flags |= ActivityInfo.FLAG_HARDWARE_ACCELERATED; + } + if((overrideFlags & FLAG_OVERRIDE_RESOLUTION) != 0) { + appInfo.setOverrideRes(1); + } } /** &hide */ - public void activityResumeTrigger(Intent intent) { + public void activityResumeTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) { ComponentName cn = intent.getComponent(); String activity = null; if (cn != null) - activity = cn.flattenToString(); + activity = cn.flattenToString() + "/" + appInfo.versionCode; native_at_resumeActivity(activity); } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index c4202874efb4..705f8716e729 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2237,7 +2237,7 @@ final class ActivityStack { if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Resuming " + next); - mActivityTrigger.activityResumeTrigger(next.intent); + mActivityTrigger.activityResumeTrigger(next.intent, next.info, next.appInfo); // If we are currently pausing an activity, then don't do anything // until that is done. @@ -2706,7 +2706,7 @@ final class ActivityStack { task.setFrontOfTask(); r.putInHistory(); - r.info.flags = mActivityTrigger.activityStartTrigger(r.intent, r.info.flags); + mActivityTrigger.activityStartTrigger(r.intent, r.info, r.appInfo); if (!isHomeStack() || numActivities() > 0) { // We want to show the starting preview window if we are // switching to a new task, or the next activity's process is -- GitLab From 015851c69698ff9558f3f0c7208a06083728cdad Mon Sep 17 00:00:00 2001 From: Gaurav Singh Date: Mon, 9 Nov 2015 13:15:47 +0530 Subject: [PATCH 011/185] frameworks/base: Tap process start event to trigger perf lib. Tap process start event to trigger enabling game colocation feature in perf lib Change-Id: I27259bf070f59bd06d7337ceba6f88eb21e88ee2 --- .../android/internal/app/ActivityTrigger.java | 6 ++++ ...m_android_internal_app_ActivityTrigger.cpp | 29 +++++++++++++++++-- .../server/am/ActivityManagerService.java | 5 ++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java index 6f6949a66551..770bba7cd9fb 100644 --- a/core/java/com/android/internal/app/ActivityTrigger.java +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -54,6 +54,11 @@ public class ActivityTrigger native_at_deinit(); } + /** &hide */ + public void activityStartProcessTrigger(String process, int pid) { + native_at_startProcessActivity(process, pid); + } + /** &hide */ public void activityStartTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) { ComponentName cn = intent.getComponent(); @@ -86,4 +91,5 @@ public class ActivityTrigger private native int native_at_startActivity(String activity, int flags); private native void native_at_resumeActivity(String activity); private native void native_at_deinit(); + private native void native_at_startProcessActivity(String process, int pid); } diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp index 27e63e05480a..6ba880f1522a 100644 --- a/core/jni/com_android_internal_app_ActivityTrigger.cpp +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -56,6 +56,7 @@ typedef struct dlLibHandler { void (*resumeActivity)(const char *); void (*init)(void); void (*deinit)(void); + void (*startProcessActivity)(const char *, int); const char *dlname; }dlLibHandler; @@ -64,10 +65,10 @@ typedef struct dlLibHandler { * library -both handlers for Start and Resume events. */ static dlLibHandler mDlLibHandlers[] = { - {NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.at_library"}, - {NULL, NULL, NULL, NULL, NULL, - "ro.vendor.gt_library"}, + {NULL, NULL, NULL, NULL, NULL, NULL, + "ro.vendor.gt_library"} }; // ---------------------------------------------------------------------------- @@ -120,10 +121,17 @@ com_android_internal_app_ActivityTrigger_native_at_init() errored = true; } } + if (!errored) { + *(void **) (&mDlLibHandlers[i].startProcessActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_process_start"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } if (errored) { mDlLibHandlers[i].startActivity = NULL; mDlLibHandlers[i].resumeActivity = NULL; + mDlLibHandlers[i].startProcessActivity = NULL; if (mDlLibHandlers[i].dlhandle) { dlclose(mDlLibHandlers[i].dlhandle); mDlLibHandlers[i].dlhandle = NULL; @@ -143,6 +151,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c if (mDlLibHandlers[i].dlhandle) { mDlLibHandlers[i].startActivity = NULL; mDlLibHandlers[i].resumeActivity = NULL; + mDlLibHandlers[i].startProcessActivity = NULL; *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit"); if (mDlLibHandlers[i].deinit) { @@ -155,6 +164,19 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c } } +static void +com_android_internal_app_ActivityTrigger_native_at_startProcessActivity(JNIEnv *env, jobject clazz, jstring process, jint pid) +{ + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + const char *actStr = env->GetStringUTFChars(process, NULL); + for(size_t i = 0; i < numlibs; i++){ + if(mDlLibHandlers[i].startProcessActivity && process && actStr) { + (*mDlLibHandlers[i].startProcessActivity)(actStr, pid); + } + } + env->ReleaseStringUTFChars(process, actStr); +} + static jint com_android_internal_app_ActivityTrigger_native_at_startActivity(JNIEnv *env, jobject clazz, jstring activity, jint flags) { @@ -194,6 +216,7 @@ static JNINativeMethod gMethods[] = { {"native_at_startActivity", "(Ljava/lang/String;I)I", (void *)com_android_internal_app_ActivityTrigger_native_at_startActivity}, {"native_at_resumeActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_resumeActivity}, {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, + {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity}, }; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index c124e5d9a9bc..aee75fbe390c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -29,6 +29,7 @@ import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.ProcessMap; import com.android.internal.app.SystemUserHomeActivity; import com.android.internal.app.procstats.ProcessStats; +import com.android.internal.app.ActivityTrigger; import com.android.internal.os.BackgroundThread; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.IResultReceiver; @@ -1529,6 +1530,7 @@ public final class ActivityManagerService extends ActivityManagerNative static ServiceThread sKillThread = null; static KillHandler sKillHandler = null; + static final ActivityTrigger mActivityTrigger = new ActivityTrigger(); CompatModeDialog mCompatModeDialog; UnsupportedDisplaySizeDialog mUnsupportedDisplaySizeDialog; @@ -3806,6 +3808,9 @@ public final class ActivityManagerService extends ActivityManagerNative } } checkTime(startTime, "startProcess: done updating pids map"); + if ("activity".equals(hostingType) || "service".equals(hostingType)) { + mActivityTrigger.activityStartProcessTrigger(app.processName, startResult.pid); + } } catch (RuntimeException e) { Slog.e(TAG, "Failure starting process " + app.processName, e); -- GitLab From d972df6c9a264f2efb4e194c134a667b6a039632 Mon Sep 17 00:00:00 2001 From: Shalaj Jain Date: Wed, 29 Jul 2015 13:33:25 -0700 Subject: [PATCH 012/185] frameworks/base: media: Add support for extended file types Add support for flv, divx and mime types. Change-Id: I0b3654dee776dc70f0fc3f32e9fe8eca4f4faa8e --- media/java/android/media/MediaFile.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index bd179fa561a1..bd27a79b182a 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -81,8 +81,10 @@ public class MediaFile { // More video file types public static final int FILE_TYPE_MP2PS = 200; + public static final int FILE_TYPE_DIVX = 201; + public static final int FILE_TYPE_FLV = 202; private static final int FIRST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS; - private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS; + private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_FLV; // Image file types public static final int FILE_TYPE_JPEG = 31; @@ -277,6 +279,8 @@ public class MediaFile { addFileType("ZIP", FILE_TYPE_ZIP, "application/zip"); addFileType("MPG", FILE_TYPE_MP2PS, "video/mp2p"); addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p"); + addFileType("DIVX", FILE_TYPE_DIVX, "video/divx"); + addFileType("FLV", FILE_TYPE_FLV, "video/flv"); addFileType("QCP", FILE_TYPE_QCP, "audio/qcelp"); addFileType("AC3", FILE_TYPE_AC3, "audio/ac3"); addFileType("EC3", FILE_TYPE_EC3, "audio/eac3"); -- GitLab From e14bdcef17bef3ebc02ee8b378310e827f823c95 Mon Sep 17 00:00:00 2001 From: Sandeep Kunta Date: Thu, 12 Mar 2015 18:56:30 +0530 Subject: [PATCH 013/185] Call DetectCountry only once per call In current implementation detectCountry method is called from telephon as many times as 34 for one MO voice call, causing increasing delay to appear incallui for user. This fix ensures that there is only one call to detectCountry method per one voice call thus optimizing delay. Change-Id: Ia6e832476c7f7be2750f1c2d9a4c83f728c2131e CRs-Fixed: 803069 --- .../android/telephony/PhoneNumberUtils.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java index 962a600360b8..781e5c43884b 100644 --- a/telephony/java/android/telephony/PhoneNumberUtils.java +++ b/telephony/java/android/telephony/PhoneNumberUtils.java @@ -25,6 +25,7 @@ import com.android.i18n.phonenumbers.ShortNumberUtil; import android.content.Context; import android.content.Intent; import android.database.Cursor; +import android.location.Country; import android.location.CountryDetector; import android.net.Uri; import android.os.SystemProperties; @@ -77,6 +78,7 @@ public class PhoneNumberUtils static final String LOG_TAG = "PhoneNumberUtils"; private static final boolean DBG = false; + private static Country sCountryDetector = null; /* * global-phone-number = ["+"] 1*( DIGIT / written-sep ) * written-sep = ("-"/".") @@ -2055,12 +2057,9 @@ public class PhoneNumberUtils private static boolean isLocalEmergencyNumberInternal(int subId, String number, Context context, boolean useExactMatch) { - String countryIso; - CountryDetector detector = (CountryDetector) context.getSystemService( - Context.COUNTRY_DETECTOR); - if (detector != null && detector.detectCountry() != null) { - countryIso = detector.detectCountry().getCountryIso(); - } else { + String countryIso = getCountryIso(context); + Rlog.w(LOG_TAG, "isLocalEmergencyNumberInternal" + countryIso); + if (countryIso == null) { Locale locale = context.getResources().getConfiguration().locale; countryIso = locale.getCountry(); Rlog.w(LOG_TAG, "No CountryDetector; falling back to countryIso based on locale: " @@ -2069,6 +2068,28 @@ public class PhoneNumberUtils return isEmergencyNumberInternal(subId, number, countryIso, useExactMatch); } + private static String getCountryIso(Context context) { + Rlog.w(LOG_TAG, "getCountryIso " + sCountryDetector); + if (sCountryDetector == null) { + CountryDetector detector = (CountryDetector) context.getSystemService( + Context.COUNTRY_DETECTOR); + if (detector != null) { + sCountryDetector = detector.detectCountry(); + } + } + + if (sCountryDetector == null) { + return null; + } else { + return sCountryDetector.getCountryIso(); + } + } + + /** @hide */ + public static void resetCountryDetectorInfo() { + sCountryDetector = null; + } + /** * isVoiceMailNumber: checks a given number against the voicemail * number provided by the RIL and SIM card. The caller must have -- GitLab From 51f0a55346d9490352b4f9ff497ecf76ad347515 Mon Sep 17 00:00:00 2001 From: Santhosh Behara Date: Fri, 31 Jul 2015 18:45:44 +0530 Subject: [PATCH 014/185] frameworks/base: Changes related to DASH Creating Extended MediaPlayerListener and Native MediaPlayer for DASH. Squashed the below changes frameworks/base : Handling usecases for ext mediaplayer Change-Id: Ic5242161bf30bd2688bd6aba6d6115ab0768e963 frameworks/base: media: Add support for extended file types Change-Id: I0b3654dee776dc70f0fc3f32e9fe8eca4f4faa8e Change-Id: Ief49777e94b818851052715d6dbd9e51982da85a --- media/java/android/media/MediaFile.java | 4 +- media/jni/android_media_MediaPlayer.cpp | 168 +++++++++++++++++++++++- 2 files changed, 167 insertions(+), 5 deletions(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index bd27a79b182a..f36a73dbfcc0 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -115,9 +115,10 @@ public class MediaFile { public static final int FILE_TYPE_PLS = 42; public static final int FILE_TYPE_WPL = 43; public static final int FILE_TYPE_HTTPLIVE = 44; + public static final int FILE_TYPE_DASH = 45; private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U; - private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_HTTPLIVE; + private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_DASH; // Drm file types public static final int FILE_TYPE_FL = 51; @@ -281,6 +282,7 @@ public class MediaFile { addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p"); addFileType("DIVX", FILE_TYPE_DIVX, "video/divx"); addFileType("FLV", FILE_TYPE_FLV, "video/flv"); + addFileType("MPD", FILE_TYPE_DASH, "application/dash+xml"); addFileType("QCP", FILE_TYPE_QCP, "audio/qcelp"); addFileType("AC3", FILE_TYPE_AC3, "audio/ac3"); addFileType("EC3", FILE_TYPE_EC3, "audio/eac3"); diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 2fb1a3b9fbcf..5bc45ffb4b4b 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include "android_util_Binder.h" // ---------------------------------------------------------------------------- @@ -137,6 +138,153 @@ void JNIMediaPlayerListener::notify(int msg, int ext1, int ext2, const Parcel *o } } + +static const char *EXTMEDIAJNI_LIB_NAME = "libextmedia_jni.so"; +static const char *kCreateJNIExtMediaPlayerListener = "CreateJNIExtMediaPlayerListener"; +static const char *kCheckExtMedia = "checkExtMedia"; +static const char *kCreateNativeQCMediaPlayer = "CreateNativeQCMediaPlayer"; +typedef MediaPlayerListener* (*CreateJNIExtMediaPlayerListenerFn)(JNIEnv *, jobject, jobject, sp listener); +typedef bool (*CheckExtMediaFn)(JNIEnv *env, jobject); +typedef MediaPlayer* (*CreateNativeQCMediaPlayerFn)(); + + + +class JNIMediaPlayerFactory { + public: + JNIMediaPlayerFactory() {}; + static bool CheckAndCreateExtMediaPlayer(JNIEnv *env, jobject thiz, jobject weak_this, sp &listener, sp &mp); + private: + static void *mLibHandle; + static void loadLib(); + + static CreateJNIExtMediaPlayerListenerFn loadJNIExtMediaPlayerListener(); + static CreateJNIExtMediaPlayerListenerFn sExtDashListnerFnPtr; + + static CheckExtMediaFn sExtMediaFn; + static CheckExtMediaFn loadExtMedia(); + + static CreateNativeQCMediaPlayerFn sNativeQCMediaPlayerFn; + static CreateNativeQCMediaPlayerFn loadNativeQCMediaPlayer(); + + static sp createExtMediaPlayerListener(JNIEnv *env, jobject thiz, jobject weak_this, sp listener); + static bool checkExtMedia(JNIEnv *env, jobject thiz); + static void CreateNativeQCMediaPlayer(sp &mp); +}; + +void *JNIMediaPlayerFactory::mLibHandle = NULL; + +CreateJNIExtMediaPlayerListenerFn JNIMediaPlayerFactory::sExtDashListnerFnPtr = + JNIMediaPlayerFactory::loadJNIExtMediaPlayerListener(); + +CheckExtMediaFn JNIMediaPlayerFactory::sExtMediaFn = + JNIMediaPlayerFactory::loadExtMedia(); + +CreateNativeQCMediaPlayerFn JNIMediaPlayerFactory::sNativeQCMediaPlayerFn = + JNIMediaPlayerFactory::loadNativeQCMediaPlayer(); + + +void JNIMediaPlayerFactory::loadLib() +{ + if (!mLibHandle) { + mLibHandle = ::dlopen(EXTMEDIAJNI_LIB_NAME, RTLD_LAZY); + if (!mLibHandle) { + ALOGV("%s", dlerror()); + return; + } + ALOGV("Opened %s", EXTMEDIAJNI_LIB_NAME); + } +} + +CreateJNIExtMediaPlayerListenerFn JNIMediaPlayerFactory::loadJNIExtMediaPlayerListener() +{ + loadLib(); + CreateJNIExtMediaPlayerListenerFn pCreateExtDashListnerFnPtr = NULL; + if (mLibHandle != NULL) { + pCreateExtDashListnerFnPtr = (CreateJNIExtMediaPlayerListenerFn) + dlsym(mLibHandle, kCreateJNIExtMediaPlayerListener); + if (pCreateExtDashListnerFnPtr == NULL) { + ALOGW("Failed to load symbol %s : %s", kCreateJNIExtMediaPlayerListener, dlerror()); + } + } + return pCreateExtDashListnerFnPtr; +} + +CheckExtMediaFn JNIMediaPlayerFactory::loadExtMedia() +{ + loadLib(); + CheckExtMediaFn pCheckExtMediaFnPtr = NULL; + if (mLibHandle != NULL) { + pCheckExtMediaFnPtr = (CheckExtMediaFn)dlsym(mLibHandle, kCheckExtMedia); + if (pCheckExtMediaFnPtr == NULL) { + ALOGW("Failed to load symbol %s : %s", kCheckExtMedia, dlerror()); + } + } + return pCheckExtMediaFnPtr; +} + +CreateNativeQCMediaPlayerFn JNIMediaPlayerFactory::loadNativeQCMediaPlayer() +{ + loadLib(); + CreateNativeQCMediaPlayerFn pCreateNativeQCMediaPlayerFnPtr = NULL; + if (mLibHandle != NULL) { + pCreateNativeQCMediaPlayerFnPtr = (CreateNativeQCMediaPlayerFn) + dlsym(mLibHandle, kCreateNativeQCMediaPlayer); + if (pCreateNativeQCMediaPlayerFnPtr == NULL) { + ALOGW("Failed to load symbol %s : %s", kCreateNativeQCMediaPlayer, dlerror()); + } + } + return pCreateNativeQCMediaPlayerFnPtr; +} + + +sp JNIMediaPlayerFactory::createExtMediaPlayerListener(JNIEnv *env, jobject thiz, jobject weak_this, sp listener) +{ + if (checkExtMedia(env, thiz)) { + if (sExtDashListnerFnPtr ) { + listener = (*sExtDashListnerFnPtr)(env, thiz, weak_this, listener); + if (listener != NULL) { + ALOGE("JNIMediaPlayerFactory: createExtMediaPlayerListener : success"); + } + } + } + return listener; +} + +void JNIMediaPlayerFactory::CreateNativeQCMediaPlayer(sp &mp) +{ + if (sNativeQCMediaPlayerFn) { + mp = (*sNativeQCMediaPlayerFn)(); + if (mp != NULL) { + ALOGE("JNIMediaPlayerFactory: CreateNativeQCMediaPlayer : Success"); + } + } +} + + +bool JNIMediaPlayerFactory::checkExtMedia(JNIEnv *env, jobject thiz) +{ + bool bIsQCMediaPlayerPresent = false; + if (sExtMediaFn) { + bIsQCMediaPlayerPresent = (*sExtMediaFn)(env, thiz); + } + ALOGE("JNIMediaPlayerFactory: bIsQCMediaPlayerPresent %d", bIsQCMediaPlayerPresent); + return bIsQCMediaPlayerPresent; +} + +bool JNIMediaPlayerFactory::CheckAndCreateExtMediaPlayer( + JNIEnv *env, jobject thiz, jobject weak_this, sp &listener, sp &mp) +{ + bool bOk = false; + listener = createExtMediaPlayerListener(env, thiz, weak_this, listener); + if (listener != NULL && checkExtMedia(env,thiz)) { + CreateNativeQCMediaPlayer(mp); + if (mp != NULL) { + bOk = true; + } + } + return bOk; +} + // ---------------------------------------------------------------------------- static sp getMediaPlayer(JNIEnv* env, jobject thiz) @@ -868,14 +1016,26 @@ static void android_media_MediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this) { ALOGV("native_setup"); - sp mp = new MediaPlayer(); + + sp mp = NULL; + + bool bOk = false; + JNIMediaPlayerFactory *jniMediaPlayerFactory = new JNIMediaPlayerFactory(); + + sp listener = new JNIMediaPlayerListener(env, thiz, weak_this); + + if (jniMediaPlayerFactory) { + bOk = jniMediaPlayerFactory->CheckAndCreateExtMediaPlayer(env, thiz, weak_this, listener, mp); + delete(jniMediaPlayerFactory); + } + + if (!bOk){ + mp = new MediaPlayer(); + } if (mp == NULL) { jniThrowException(env, "java/lang/RuntimeException", "Out of memory"); return; } - - // create new listener and give it to MediaPlayer - sp listener = new JNIMediaPlayerListener(env, thiz, weak_this); mp->setListener(listener); // Stow our new C++ MediaPlayer in an opaque field in the Java object. -- GitLab From 7ca3fd924152dad980dc6b25353eb85891f87069 Mon Sep 17 00:00:00 2001 From: Satish Kodishala Date: Mon, 18 Jan 2016 14:23:12 +0530 Subject: [PATCH 015/185] BT: Don't switch devices when one of the connected BT headsets disconnects Two BT headsets, hs1 and hs2 are connected to the device and a voice call is made. Call audio is present on hs2. If hs1 is disconnected, we should not switch the audio to handset or speaker. CRs-Fixed: 968437 Change-Id: I4108c7ab810f9b56a95f820c99b2b981a9a17157 --- .../com/android/server/audio/AudioService.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 7777ae23ff29..ee87713cce17 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -3097,6 +3097,18 @@ public class AudioService extends IAudioService.Stub { boolean success = handleDeviceConnection(connected, outDevice, address, btDeviceName) && handleDeviceConnection(connected, inDevice, address, btDeviceName); + + /* When one BT headset is disconnected while there is SCO with another BT + * headset, ignore the BT headset disconncting/disconnected intents. + */ + if ((state == BluetoothProfile.STATE_DISCONNECTED || + state == BluetoothProfile.STATE_DISCONNECTING) && + mBluetoothHeadset != null && + mBluetoothHeadset.getAudioState(btDevice) == BluetoothHeadset.STATE_AUDIO_CONNECTED) { + Log.w(TAG, "SCO is there with another device, returning"); + return; + } + if (success) { synchronized (mScoClients) { if (connected) { @@ -5250,7 +5262,7 @@ public class AudioService extends IAudioService.Stub { state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, BluetoothProfile.STATE_DISCONNECTED); BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - + Log.d(TAG, "Bt device " + btDevice.getAddress() + "disconnection intent received"); setBtScoDeviceConnectionState(btDevice, state); } else if (action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED)) { boolean broadcast = false; -- GitLab From 85b4a8a7d85883c5acdf9238e9ddb601eb3818d8 Mon Sep 17 00:00:00 2001 From: Sukanya Rajkhowa Date: Thu, 21 Nov 2013 18:38:56 -0800 Subject: [PATCH 016/185] Add config to send SMS on 1x When UE is attached to eHRPD network, IMS is registered and there is an active 1xRTT voice call, the config determines whether to send SMS over 1x. Default value is true. CRs-Fixed: 565247 Change-Id: Ie4e00eb57ef439e9383c616cd1b60108bcfd505f --- core/res/res/values/config.xml | 3 +++ core/res/res/values/symbols.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index c9f8c306c683..0d9fdd7c4188 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1790,6 +1790,9 @@ 524288,1048576,2097152,262144,524288,1048576 + + true + + + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml new file mode 100644 index 000000000000..59e880bfa6ad --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml @@ -0,0 +1,50 @@ + + + + + + + diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index f7a169cb4d5b..8927a2c57e19 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -348,6 +348,9 @@ 4G + + 4G+ + LTE diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 83e25ebd7497..ac3246d5ff6b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -197,8 +197,11 @@ public class MobileSignalController extends SignalController< if (mConfig.show4gForLte) { mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.FOUR_G); + mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, + TelephonyIcons.FOUR_G_PLUS); } else { mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.LTE); + mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, TelephonyIcons.LTE); } mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_IWLAN, TelephonyIcons.WFC); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index a63324134512..8b4fa4e15eed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -781,6 +781,7 @@ public class NetworkControllerImpl extends BroadcastReceiver datatype.equals("1x") ? TelephonyIcons.ONE_X : datatype.equals("3g") ? TelephonyIcons.THREE_G : datatype.equals("4g") ? TelephonyIcons.FOUR_G : + datatype.equals("4g+") ? TelephonyIcons.FOUR_G_PLUS : datatype.equals("e") ? TelephonyIcons.E : datatype.equals("g") ? TelephonyIcons.G : datatype.equals("h") ? TelephonyIcons.H : 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 6ff8f77bff4e..d91b3329d1ac 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -182,6 +182,19 @@ class TelephonyIcons { static final int QS_DATA_4G = R.drawable.ic_qs_signal_4g; + static final int[][] DATA_4G_PLUS = { + { R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus }, + { R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus } + }; + + static final int QS_DATA_4G_PLUS = R.drawable.ic_qs_signal_4g_plus; + // LTE branded "LTE" static final int[][] DATA_LTE = { { R.drawable.stat_sys_data_fully_connected_lte, @@ -204,6 +217,7 @@ class TelephonyIcons { static final int ICON_H = R.drawable.stat_sys_data_fully_connected_h; static final int ICON_3G = R.drawable.stat_sys_data_fully_connected_3g; static final int ICON_4G = R.drawable.stat_sys_data_fully_connected_4g; + static final int ICON_4G_PLUS = R.drawable.stat_sys_data_fully_connected_4g_plus; static final int ICON_1X = R.drawable.stat_sys_data_fully_connected_1x; static final int ICON_CARRIER_NETWORK_CHANGE = R.drawable.stat_sys_signal_carrier_network_change_animation; @@ -213,6 +227,7 @@ class TelephonyIcons { static final int QS_ICON_LTE = R.drawable.ic_qs_signal_lte; static final int QS_ICON_3G = R.drawable.ic_qs_signal_3g; static final int QS_ICON_4G = R.drawable.ic_qs_signal_4g; + static final int QS_ICON_4G_PLUS = R.drawable.ic_qs_signal_4g_plus; static final int QS_ICON_1X = R.drawable.ic_qs_signal_1x; static final int QS_ICON_CARRIER_NETWORK_CHANGE = R.drawable.ic_qs_signal_carrier_network_change_animation; @@ -348,6 +363,21 @@ class TelephonyIcons { TelephonyIcons.QS_DATA_4G ); + static final MobileIconGroup FOUR_G_PLUS = new MobileIconGroup( + "4G+", + TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH, + TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH, + 0,0, + TelephonyIcons.TELEPHONY_NO_NETWORK, + TelephonyIcons.QS_TELEPHONY_NO_NETWORK, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0], + R.string.accessibility_data_connection_4g_plus, + TelephonyIcons.ICON_4G_PLUS, + true, + TelephonyIcons.QS_DATA_4G_PLUS + ); + static final MobileIconGroup LTE = new MobileIconGroup( "LTE", TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH, diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java index 2bfaf1bfd86d..af07c9724c6d 100644 --- a/telephony/java/android/telephony/RadioAccessFamily.java +++ b/telephony/java/android/telephony/RadioAccessFamily.java @@ -47,6 +47,7 @@ public class RadioAccessFamily implements Parcelable { public static final int RAF_HSPAP = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP); public static final int RAF_GSM = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GSM); public static final int RAF_TD_SCDMA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA); + public static final int RAF_LTE_CA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA); // Grouping of RAFs private static final int GSM = RAF_GSM | RAF_GPRS | RAF_EDGE; @@ -54,6 +55,7 @@ public class RadioAccessFamily implements Parcelable { private static final int CDMA = RAF_IS95A | RAF_IS95B | RAF_1xRTT; private static final int EVDO = RAF_EVDO_0 | RAF_EVDO_A | RAF_EVDO_B | RAF_EHRPD; private static final int WCDMA = HS | RAF_UMTS; + private static final int LTE = RAF_LTE | RAF_LTE_CA; /* Phone ID of phone */ private int mPhoneId; @@ -162,19 +164,19 @@ public class RadioAccessFamily implements Parcelable { raf = CDMA | EVDO; break; case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO: - raf = RAF_LTE | CDMA | EVDO; + raf = LTE | CDMA | EVDO; break; case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA: - raf = RAF_LTE | GSM | WCDMA; + raf = LTE | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA: - raf = RAF_LTE | CDMA | EVDO | GSM | WCDMA; + raf = LTE | CDMA | EVDO | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_ONLY: - raf = RAF_LTE; + raf = LTE; break; case RILConstants.NETWORK_MODE_LTE_WCDMA: - raf = RAF_LTE | WCDMA; + raf = LTE | WCDMA; break; case RILConstants.NETWORK_MODE_CDMA_NO_EVDO: raf = CDMA; @@ -192,28 +194,28 @@ public class RadioAccessFamily implements Parcelable { raf = RAF_TD_SCDMA | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA: - raf = RAF_LTE | RAF_TD_SCDMA; + raf = LTE | RAF_TD_SCDMA; break; case RILConstants.NETWORK_MODE_TDSCDMA_GSM: raf = RAF_TD_SCDMA | GSM; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM: - raf = RAF_LTE | RAF_TD_SCDMA | GSM; + raf = LTE | RAF_TD_SCDMA | GSM; break; case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA: raf = RAF_TD_SCDMA | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | WCDMA; + raf = LTE | RAF_TD_SCDMA | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA; + raf = LTE | RAF_TD_SCDMA | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: raf = RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; + raf = LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; break; default: raf = RAF_UNKNOWN; @@ -232,6 +234,7 @@ public class RadioAccessFamily implements Parcelable { raf = ((WCDMA & raf) > 0) ? (WCDMA | raf) : raf; raf = ((CDMA & raf) > 0) ? (CDMA | raf) : raf; raf = ((EVDO & raf) > 0) ? (EVDO | raf) : raf; + raf = ((LTE & raf) > 0) ? (LTE | raf) : raf; return raf; } @@ -254,19 +257,19 @@ public class RadioAccessFamily implements Parcelable { case (CDMA | EVDO): type = RILConstants.NETWORK_MODE_CDMA; break; - case (RAF_LTE | CDMA | EVDO): + case (LTE | CDMA | EVDO): type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO; break; - case (RAF_LTE | GSM | WCDMA): + case (LTE | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_GSM_WCDMA; break; - case (RAF_LTE | CDMA | EVDO | GSM | WCDMA): + case (LTE | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA; break; - case RAF_LTE: + case LTE: type = RILConstants.NETWORK_MODE_LTE_ONLY; break; - case (RAF_LTE | WCDMA): + case (LTE | WCDMA): type = RILConstants.NETWORK_MODE_LTE_WCDMA; break; case CDMA: @@ -284,28 +287,28 @@ public class RadioAccessFamily implements Parcelable { case (RAF_TD_SCDMA | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA): + case (LTE | RAF_TD_SCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA; break; case (RAF_TD_SCDMA | GSM): type = RILConstants.NETWORK_MODE_TDSCDMA_GSM; break; - case (RAF_LTE | RAF_TD_SCDMA | GSM): + case (LTE | RAF_TD_SCDMA | GSM): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM; break; case (RAF_TD_SCDMA | GSM | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | WCDMA): + case (LTE | RAF_TD_SCDMA | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA): + case (LTE | RAF_TD_SCDMA | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA; break; case (RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | RAF_LTE | CDMA | EVDO | GSM | WCDMA): + case (LTE | RAF_TD_SCDMA | RAF_LTE | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA; break; default: @@ -339,6 +342,7 @@ public class RadioAccessFamily implements Parcelable { case "CDMA": return CDMA; case "EVDO": return EVDO; case "WCDMA": return WCDMA; + case "LTE_CA": return RAF_LTE_CA; default: return RAF_UNKNOWN; } } diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 39a9295ed8b6..919c494922cf 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -165,6 +165,12 @@ public class ServiceState implements Parcelable { | (1 << (RIL_RADIO_TECHNOLOGY_EVDO_B - 1)) | (1 << (RIL_RADIO_TECHNOLOGY_EHRPD - 1)); + /** + * LTE_CA + * @hide + */ + public static final int RIL_RADIO_TECHNOLOGY_LTE_CA = 19; + /** * Available registration states for GSM, UMTS and CDMA. */ @@ -746,6 +752,9 @@ public class ServiceState implements Parcelable { case RIL_RADIO_TECHNOLOGY_TD_SCDMA: rtString = "TD-SCDMA"; break; + case RIL_RADIO_TECHNOLOGY_LTE_CA: + rtString = "LTE_CA"; + break; default: rtString = "Unexpected"; Rlog.w(LOG_TAG, "Unexpected radioTechnology=" + rt); @@ -1088,6 +1097,8 @@ public class ServiceState implements Parcelable { return TelephonyManager.NETWORK_TYPE_TD_SCDMA; case ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN: return TelephonyManager.NETWORK_TYPE_IWLAN; + case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA: + return TelephonyManager.NETWORK_TYPE_LTE_CA; default: return TelephonyManager.NETWORK_TYPE_UNKNOWN; } @@ -1139,7 +1150,9 @@ public class ServiceState implements Parcelable { || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPAP || radioTechnology == RIL_RADIO_TECHNOLOGY_GSM || radioTechnology == RIL_RADIO_TECHNOLOGY_TD_SCDMA - || radioTechnology == RIL_RADIO_TECHNOLOGY_IWLAN; + || radioTechnology == RIL_RADIO_TECHNOLOGY_IWLAN + || radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA; + } /** @hide */ diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 48ba49791c5e..e2b5b98664ca 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -1451,7 +1451,8 @@ public class TelephonyManager { public static final int NETWORK_TYPE_TD_SCDMA = 17; /** Current network is IWLAN {@hide} */ public static final int NETWORK_TYPE_IWLAN = 18; - + /** Current network is LTE_CA {@hide} */ + public static final int NETWORK_TYPE_LTE_CA = 19; /** * @return the NETWORK_TYPE_xxxx for current data connection. */ @@ -1654,6 +1655,7 @@ public class TelephonyManager { return NETWORK_CLASS_3_G; case NETWORK_TYPE_LTE: case NETWORK_TYPE_IWLAN: + case NETWORK_TYPE_LTE_CA: return NETWORK_CLASS_4_G; default: return NETWORK_CLASS_UNKNOWN; @@ -1717,6 +1719,8 @@ public class TelephonyManager { return "TD_SCDMA"; case NETWORK_TYPE_IWLAN: return "IWLAN"; + case NETWORK_TYPE_LTE_CA: + return "LTE_CA"; default: return "UNKNOWN"; } -- GitLab From 4663820829a63385e440aa6e418b3a7ee6460253 Mon Sep 17 00:00:00 2001 From: Ashwini Munigala Date: Fri, 24 Jul 2015 18:08:25 +0530 Subject: [PATCH 029/185] OBEX: Set Min maxPacketLength negotiated in CONNECT Operation. Set OBEX Server maxRxLength to the minium value acceptable from either server and client during CONNECT Operation. Below basic and all PUT test cases fail without this fix, as the maxPacketLength for later is less than maxRxLength of server. TC_MSE_MMU_BV_03_I TC_MSE_MMU_BV_02_I Change-Id: Iaa4f92e3146dc13d647dca12c84eb43b91657efa --- obex/javax/obex/ServerSession.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/obex/javax/obex/ServerSession.java b/obex/javax/obex/ServerSession.java index acee5ddd5f8f..dcd0ce8bd0eb 100644 --- a/obex/javax/obex/ServerSession.java +++ b/obex/javax/obex/ServerSession.java @@ -658,6 +658,12 @@ public final class ServerSession extends ObexSession implements Runnable { */ byte[] sendData = new byte[totalLength]; int maxRxLength = ObexHelper.getMaxRxPacketSize(mTransport); + //PTS expects least of maxPacketLen + if(maxRxLength > mMaxPacketLength) { + if(V) Log.v(TAG,"Set maxRxLength to min of maxRxServrLen:" + maxRxLength + + " and MaxNegotiated from Client: " + mMaxPacketLength); + maxRxLength = mMaxPacketLength; + } sendData[0] = (byte)code; sendData[1] = length[2]; sendData[2] = length[3]; -- GitLab From 77ff38f4a71a3147f7a760facfaf88f2e52cfdda Mon Sep 17 00:00:00 2001 From: Ashwini Munigala Date: Fri, 28 Aug 2015 15:13:47 +0530 Subject: [PATCH 030/185] OBEX: Avoid pre-sending CONTINUE for SRM enabled case. OBEX lib handles a PUT Request case with NO BODY header on server session with CONTINUE response until body is found in request packet from remote. However, this needs to be avoided if SRM is enabled from remote to get proceed transfer authorization from Application layer. Change-Id: I1b5bfd65f9023d77850a34bcb08cfbb435e9a474 CRs-Fixed: 898467 --- obex/javax/obex/ServerOperation.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/obex/javax/obex/ServerOperation.java b/obex/javax/obex/ServerOperation.java index 56a675acf082..6ccccb514eb5 100644 --- a/obex/javax/obex/ServerOperation.java +++ b/obex/javax/obex/ServerOperation.java @@ -195,7 +195,12 @@ public final class ServerOperation implements Operation, BaseStream { if(!handleObexPacket(packet)) { return; } - if (!mHasBody) { + /* Don't Pre-Send continue when Remote requested for SRM + * Let the Application confirm. + */ + if(V) Log.v(TAG, "Get App confirmation if SRM ENABLED case: " + mSrmEnabled + + " not hasBody case: " + mHasBody); + if (!mHasBody && !mSrmEnabled) { while ((!mGetOperation) && (!finalBitSet)) { sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); if (mPrivateInput.available() > 0) { @@ -204,8 +209,13 @@ public final class ServerOperation implements Operation, BaseStream { } } } - - while ((!mGetOperation) && (!finalBitSet) && (mPrivateInput.available() == 0)) { + /* Don't Pre-Send continue when Remote requested for SRM + * Let the Application confirm. + */ + if(V) Log.v(TAG, "Get App confirmation if SRM ENABLED case: " + mSrmEnabled + + " not finalPacket: " + finalBitSet + " not GETOp Case: " + mGetOperation); + while ((!mSrmEnabled) && (!mGetOperation) && (!finalBitSet) + && (mPrivateInput.available() == 0)) { sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); if (mPrivateInput.available() > 0) { break; -- GitLab From d76a65c5978f6f94fa33bff0e191e7d5be98a047 Mon Sep 17 00:00:00 2001 From: Hemant Gupta Date: Thu, 5 Nov 2015 14:12:01 +0530 Subject: [PATCH 031/185] Bluetooth: OBEX: Don't close transport when obex is disconnected A case when remote device has disconnected obex connection, but has still kept the transport (L2CAP/RFCOMM) open. In such cases obex server was unnecessary assuming that transport would be disconnected so was informing registered users that transport has been disconnected, which was leading to issues on new obex connect on same transport channel from remote obex client. This patch removes check to break out of loop after obex disconnection, as that is already handled in case when read would return -1 in case transport is closed. Change-Id: Ic1682ce77c07cf2e43da09dc95fff2214338f758 CRs-Fixed: 935761 --- obex/javax/obex/ServerSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/obex/javax/obex/ServerSession.java b/obex/javax/obex/ServerSession.java index dcd0ce8bd0eb..9eb5d0c8f1e0 100644 --- a/obex/javax/obex/ServerSession.java +++ b/obex/javax/obex/ServerSession.java @@ -104,7 +104,6 @@ public final class ServerSession extends ObexSession implements Runnable { case ObexHelper.OBEX_OPCODE_DISCONNECT: handleDisconnectRequest(); - done = true; break; case ObexHelper.OBEX_OPCODE_GET: @@ -125,6 +124,7 @@ public final class ServerSession extends ObexSession implements Runnable { break; case -1: + Log.v(TAG, "Read request returned -1, exiting from loop"); done = true; break; -- GitLab From bd1e5dc9b801ac314c6055ccae331a8d3d491df6 Mon Sep 17 00:00:00 2001 From: Pradeep Panigrahi Date: Sat, 18 Jul 2015 15:34:21 +0530 Subject: [PATCH 032/185] Bluetooth: Expose l2cap api's to support bluetooth opp 1.2 feature Add change to expose l2cap api's to create an insecure l2cap socket and api to listen on insecure l2cap socket to support OPP 1.2 CRs-fixed: 878140 Change-Id: I21ed672afb4ed5d2355ff0a0f9691af220921c1f --- .../android/bluetooth/BluetoothAdapter.java | 29 +++++++++++++++++++ .../android/bluetooth/BluetoothDevice.java | 21 ++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 47ae68796f65..72d340ea0529 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -1832,6 +1832,35 @@ public final class BluetoothAdapter { return listenUsingL2capOn(port, false, false); } + + /** + * Construct an insecure L2CAP server socket. + * Call #accept to retrieve connections to this socket. + *

To auto assign a port without creating a SDP record use + * {@link SOCKET_CHANNEL_AUTO_STATIC_NO_SDP} as port number. + * @param port the PSM to listen on + * @return An L2CAP BluetoothServerSocket + * @throws IOException On error, for example Bluetooth not available, or + * insufficient permissions. + * @hide + */ + public BluetoothServerSocket listenUsingInsecureL2capOn(int port) throws IOException { + BluetoothServerSocket socket = new BluetoothServerSocket( + BluetoothSocket.TYPE_L2CAP, false, false, port, false, false); + int errno = socket.mSocket.bindListen(); + if(port == SOCKET_CHANNEL_AUTO_STATIC_NO_SDP) { + socket.setChannel(socket.mSocket.getPort()); + } + if (errno != 0) { + //TODO(BT): Throw the same exception error code + // that the previous code was using. + //socket.mSocket.throwErrnoNative(errno); + throw new IOException("Error: " + errno); + } + return socket; + + } + /** * Read the local Out of Band Pairing Data *

Requires {@link android.Manifest.permission#BLUETOOTH} diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index f43fb30abb18..87be4a8d7a3d 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1400,6 +1400,27 @@ public final class BluetoothDevice implements Parcelable { null); } + /** + * Create an L2cap {@link BluetoothSocket} ready to start an insecure + * outgoing connection to this remote device on given channel. + *

The remote device will be not authenticated and communication on this + * socket will not be encrypted. + *

Use {@link BluetoothSocket#connect} to initiate the outgoing + * connection. + *

Valid L2CAP PSM channels are in range 1 to 2^16. + *

Requires {@link android.Manifest.permission#BLUETOOTH} + * + * @param channel L2cap PSM/channel to connect to + * @return a RFCOMM BluetoothServerSocket ready for an outgoing connection + * @throws IOException on error, for example Bluetooth not available, or + * insufficient permissions + * @hide + */ + public BluetoothSocket createInsecureL2capSocket(int channel) throws IOException { + return new BluetoothSocket(BluetoothSocket.TYPE_L2CAP, -1, false, false, this, channel, + null); + } + /** * Create an RFCOMM {@link BluetoothSocket} ready to start a secure * outgoing connection to this remote device using SDP lookup of uuid. -- GitLab From 8f07c9efed55e95b8737403dd1fd3345704ad986 Mon Sep 17 00:00:00 2001 From: Hemant Gupta Date: Thu, 1 May 2014 17:10:31 +0530 Subject: [PATCH 033/185] Bluetooth: Fix resource leak in OPP (1/3) This patch adds support for ACTION_DEVICE_NOT_SELECTED intent to be broadcasted when no device is selected from DevicePicker activity. Change-Id: I8e7ef1aaf7631240df794b5cea2bba30ce8bdbac CRs-Fixed: 662147, 706665 --- core/java/android/bluetooth/BluetoothDevicePicker.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/java/android/bluetooth/BluetoothDevicePicker.java b/core/java/android/bluetooth/BluetoothDevicePicker.java index c794be2e2c9e..51d14cc0a117 100644 --- a/core/java/android/bluetooth/BluetoothDevicePicker.java +++ b/core/java/android/bluetooth/BluetoothDevicePicker.java @@ -43,6 +43,14 @@ public interface BluetoothDevicePicker { public static final String ACTION_DEVICE_SELECTED = "android.bluetooth.devicepicker.action.DEVICE_SELECTED"; + /** + * Broadcast when no BT device is selected from BT device picker screen. + * This happens when user presses back button. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_DEVICE_NOT_SELECTED = + "org.codeaurora.bluetooth.devicepicker.action.DEVICE_NOT_SELECTED"; + /** * Broadcast when someone want to select one BT device from devices list. * This intent contains below extra data: -- GitLab From 37f48826bc2146b99388e627e597c01410b5229d Mon Sep 17 00:00:00 2001 From: Hemant Gupta Date: Tue, 30 Jul 2013 16:09:20 +0530 Subject: [PATCH 034/185] Bluetooth: HID: Add support for Set Idle and Get Idle Commands (3/4) This patch provides an interface for application to send Set Idle and Get Idle commands to remote HID Device. Support for these two commands was missing from exisitng code, so existing code design is reused to add support for these two commands. Without this support following mandatory PTS test cases for HID 1.0 cannot be passed, TC_HOS_HID_BV_05/06. Change-Id: I548362cc328498920b2dae740f1a76b2cc2d6a67 CRs-Fixed: 522511 --- .../bluetooth/BluetoothInputDevice.java | 61 +++++++++++++++++++ .../bluetooth/IBluetoothInputDevice.aidl | 8 +++ 2 files changed, 69 insertions(+) diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java index 252e3d28a25e..db23ef548998 100644 --- a/core/java/android/bluetooth/BluetoothInputDevice.java +++ b/core/java/android/bluetooth/BluetoothInputDevice.java @@ -96,6 +96,12 @@ public final class BluetoothInputDevice implements BluetoothProfile { public static final String ACTION_VIRTUAL_UNPLUG_STATUS = "android.bluetooth.input.profile.action.VIRTUAL_UNPLUG_STATUS"; + /** + * @hide + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_IDLE_TIME_CHANGED = + "codeaurora.bluetooth.input.profile.action.IDLE_TIME_CHANGED"; /** * Return codes for the connect and disconnect Bluez / Dbus calls. @@ -199,6 +205,11 @@ public final class BluetoothInputDevice implements BluetoothProfile { */ public static final String EXTRA_VIRTUAL_UNPLUG_STATUS = "android.bluetooth.BluetoothInputDevice.extra.VIRTUAL_UNPLUG_STATUS"; + /** + * @hide + */ + public static final String EXTRA_IDLE_TIME = "codeaurora.bluetooth.BluetoothInputDevice.extra.IDLE_TIME"; + private Context mContext; private ServiceListener mServiceListener; private BluetoothAdapter mAdapter; @@ -658,6 +669,56 @@ public final class BluetoothInputDevice implements BluetoothProfile { if (mService == null) Log.w(TAG, "Proxy not attached to service"); return false; } + + /** + * Send Get_Idle_Time command to the connected HID input device. + * + *

Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. + * + * @param device Remote Bluetooth Device + * @return false on immediate error, + * true otherwise + * @hide + */ + public boolean getIdleTime(BluetoothDevice device) { + if (DBG) log("getIdletime(" + device + ")"); + if (mService != null && isEnabled() && isValidDevice(device)) { + try { + return mService.getIdleTime(device); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return false; + } + } + if (mService == null) Log.w(TAG, "Proxy not attached to service"); + return false; + } + + /** + * Send Set_Idle_Time command to the connected HID input device. + * + *

Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. + * + * @param device Remote Bluetooth Device + * @param idleTime Idle time to be set on HID Device + * @return false on immediate error, + * true otherwise + * @hide + */ + public boolean setIdleTime(BluetoothDevice device, byte idleTime) { + if (DBG) log("setIdletime(" + device + "), idleTime=" + idleTime); + if (mService != null && isEnabled() && isValidDevice(device)) { + try { + return mService.setIdleTime(device, idleTime); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return false; + } + } + if (mService == null) Log.w(TAG, "Proxy not attached to service"); + return false; + } + private static void log(String msg) { Log.d(TAG, msg); } diff --git a/core/java/android/bluetooth/IBluetoothInputDevice.aidl b/core/java/android/bluetooth/IBluetoothInputDevice.aidl index 1ebb9ca6eb12..5bd3f7819323 100644 --- a/core/java/android/bluetooth/IBluetoothInputDevice.aidl +++ b/core/java/android/bluetooth/IBluetoothInputDevice.aidl @@ -56,4 +56,12 @@ interface IBluetoothInputDevice { * @hide */ boolean sendData(in BluetoothDevice device, String report); + /** + * @hide + */ + boolean getIdleTime(in BluetoothDevice device); + /** + * @hide + */ + boolean setIdleTime(in BluetoothDevice device, byte idleTime); } -- GitLab From b607dedd4846408645724675fc66187d928053f8 Mon Sep 17 00:00:00 2001 From: Smriti Gupta Date: Sat, 17 Oct 2015 19:40:53 +0530 Subject: [PATCH 035/185] OBEX: Add required parameters TAG ID's for PBAP 1.2 This patch will add required application parameters TAGID's and length declarations required to support PBAP 1.2 specification. Change-Id: I8a772b0dddf6ecf74b057e12d7596421c0e0f558 --- obex/javax/obex/ApplicationParameter.java | 32 +++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/obex/javax/obex/ApplicationParameter.java b/obex/javax/obex/ApplicationParameter.java index a62210fe4d16..16770a1aef31 100644 --- a/obex/javax/obex/ApplicationParameter.java +++ b/obex/javax/obex/ApplicationParameter.java @@ -55,7 +55,7 @@ public final class ApplicationParameter { public static final byte LISTSTARTOFFSET_TAGID = 0x05; - public static final byte FILTER_TAGID = 0x06; + public static final byte PROPERTY_SELECTOR_TAGID = 0x06; public static final byte FORMAT_TAGID = 0x07; @@ -64,6 +64,20 @@ public final class ApplicationParameter { // only used in "mch" in response public static final byte NEWMISSEDCALLS_TAGID = 0x09; + + public static final byte SUPPORTEDFEATURE_TAGID = 0x10; + + public static final byte PRIMARYVERSIONCOUNTER_TAGID = 0x0A; + + public static final byte SECONDARYVERSIONCOUNTER_TAGID = 0x0B; + + public static final byte VCARDSELECTOR_TAGID = 0x0C; + + public static final byte DATABASEIDENTIFIER_TAGID = 0x0D; + + public static final byte VCARDSELECTOROPERATOR_TAGID = 0x0E; + + public static final byte RESET_NEW_MISSED_CALLS_TAGID = 0x0F; } public static class TRIPLET_VALUE { @@ -99,13 +113,27 @@ public final class ApplicationParameter { public static final byte LISTSTARTOFFSET_LENGTH = 2; - public static final byte FILTER_LENGTH = 8; + public static final byte PROPERTY_SELECTOR_LENGTH = 8; public static final byte FORMAT_LENGTH = 1; public static final byte PHONEBOOKSIZE_LENGTH = 2; public static final byte NEWMISSEDCALLS_LENGTH = 1; + + public static final byte SUPPORTEDFEATURE_LENGTH = 4; + + public static final byte PRIMARYVERSIONCOUNTER_LENGTH = 16; + + public static final byte SECONDARYVERSIONCOUNTER_LENGTH = 16; + + public static final byte VCARDSELECTOR_LENGTH = 8; + + public static final byte DATABASEIDENTIFIER_LENGTH = 16; + + public static final byte VCARDSELECTOROPERATOR_LENGTH = 1; + + public static final byte RESETNEWMISSEDCALLS_LENGTH = 1; } public ApplicationParameter() { -- GitLab From 223d668fe43c0bb0fe678b82c1cb023524d2208c Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Mon, 23 Mar 2015 18:22:29 -0700 Subject: [PATCH 036/185] binder: adjust GC interval for binder ops The current value is too conservative, and causes janks in certain use cases due to frequent explict GC. Change-Id: Iba8eecd4e8ed7dce879c144fdc4407c12f76a749 --- core/jni/android_util_Binder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index 5559d48a58b6..a00c16bacca0 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -144,7 +144,7 @@ static volatile int32_t gNumDeathRefs = 0; static void incRefsCreated(JNIEnv* env) { int old = android_atomic_inc(&gNumRefsCreated); - if (old == 200) { + if (old == 2000) { android_atomic_and(0, &gNumRefsCreated); env->CallStaticVoidMethod(gBinderInternalOffsets.mClass, gBinderInternalOffsets.mForceGc); -- GitLab From 4d97de452b1fa1124cb468910254ebd0849e6231 Mon Sep 17 00:00:00 2001 From: Chitti Babu Theegala Date: Fri, 7 Aug 2015 07:16:49 +0530 Subject: [PATCH 037/185] Performance: SystemServer: Move sensor init to a new thread. Move Sensor init to a separate thread so that it doesn't block the critical booting path. Initializing Sensors in separate thread has been seen to improve boot time on customer devices with low-tier / ult chipsets(less cpu cores) Change-Id: I5c46a5805c04ffe551019b4683523e3bf70274a2 --- .../core/jni/com_android_server_SystemServer.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp index c7d6b95083d2..5c6f140d6f15 100644 --- a/services/core/jni/com_android_server_SystemServer.cpp +++ b/services/core/jni/com_android_server_SystemServer.cpp @@ -25,12 +25,24 @@ namespace android { +void* sensorInit(void *arg) { + ALOGI("System server: starting sensor init.\n"); + // Start the sensor service + SensorService::instantiate(); + ALOGI("System server: sensor init done.\n"); + return NULL; +} + static void android_server_SystemServer_startSensorService(JNIEnv* /* env */, jobject /* clazz */) { char propBuf[PROPERTY_VALUE_MAX]; + pthread_t sensor_init_thread; + property_get("system_init.startsensorservice", propBuf, "1"); if (strcmp(propBuf, "1") == 0) { - // Start the sensor service - SensorService::instantiate(); + // We are safe to move this to a new thread because + // Android frame work has taken care to check whether the + // service is started or not before using it. + pthread_create( &sensor_init_thread, NULL, &sensorInit, NULL); } } -- GitLab From 11f94a744d55335f6dcbe6a978f3d9d2e4a6c44d Mon Sep 17 00:00:00 2001 From: Shammi Khattar Date: Fri, 6 May 2016 11:47:34 -0700 Subject: [PATCH 038/185] SystemUI: Add global reboot option. Add global reboot option when long press power key and confirmation dialog when user chooses to reboot device CRs-Fixed:934236 Change-Id: I23286cb655a4fead8dfc450f08f27d9588e47686 --- .../ic_lock_power_reboot_alpha.png | Bin 0 -> 1459 bytes .../ic_lock_power_reboot_alpha.png | Bin 0 -> 1307 bytes .../ic_lock_power_reboot_alpha.png | Bin 0 -> 1674 bytes .../ic_lock_power_reboot_alpha.png | Bin 0 -> 1921 bytes .../res/res/drawable/ic_lock_power_reboot.xml | 33 ++++++++++++++++++ core/res/res/values-zh-rCN/strings.xml | 4 +++ core/res/res/values/strings.xml | 11 ++++++ core/res/res/values/symbols.xml | 4 +++ .../android/server/policy/GlobalActions.java | 33 ++++++++++++++++++ .../android/server/power/ShutdownThread.java | 18 ++++++++-- 10 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 core/res/res/drawable-hdpi/ic_lock_power_reboot_alpha.png create mode 100644 core/res/res/drawable-mdpi/ic_lock_power_reboot_alpha.png create mode 100644 core/res/res/drawable-xhdpi/ic_lock_power_reboot_alpha.png create mode 100644 core/res/res/drawable-xxhdpi/ic_lock_power_reboot_alpha.png create mode 100644 core/res/res/drawable/ic_lock_power_reboot.xml diff --git a/core/res/res/drawable-hdpi/ic_lock_power_reboot_alpha.png b/core/res/res/drawable-hdpi/ic_lock_power_reboot_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..17b4866832206a0035c748a198d6a28c725636a5 GIT binary patch literal 1459 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FHY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNn@b!fooL3ADsO0=y{ffi_eM3D1{oGuTzrY?YE(uCSI0LKd z;*iRMRQ;gT;{4L0}qUi=xAx_>}p|TXlh{OW@c*S2r~nlUK2wnBSSYgV>cHk zS3^TrV<$Ib6K7W=b4w>PBU4LrQu$h8JcxGNoetEGbD0;wQZ{?C&lv$RV;#QQOs{jsPt4u8R zyBN4QxfxqJTe`Wqfc$OYVs7DNXyRmGVqt7yZ0@WC)tf?2nCaUo*yw{22U22z2?e>h zftcWQ4NBv73W&^;nwMg$RHS5YSDg@J$iTq(*we)^q~g|_nPvxH)hUr2jPM8ymmR%b!tGO>SOi#nF9=-uDB#Ug z#cEp6$@RTq*{lU7zqhV962C?1e#__IOr|A|4>9zpIJ)vNR0-WzmuIk^c}I!6VP4X? zY5WY!A~q(3KeB$Zu3z9_xq)FKW0%4_ziq=^^yfrVW&&*6tm_hVN_p^v^AO4gG z?%{3VFg#bTd3U4qp}uQoy@%NzJU^E9b8ni#G{-&7X1PfmE0?G+)H8(Nsf=4DvgMsZ zo7Ic8DQmNZ8-7k|Rd?j(V@PwjEH&Z3eyg6>u}vbctUDg6*)I~0{IBojb*q)b;qa~n z!2xFre%ml_eN!d>?76@`o;|Er1(IJcsCKD*^~YekN8e%fj*rhzd0GKEMg?bL{ROASKGAM1n`pYmFHrvWv}qCz=_!os zZih{Dyz`SG;_Pg{U3Zy%lDpe~Fs%J?t5xDibJ~42<^x-JtB$a|-@RnXH!H@7TMi%h n8PyvGatSgp3OMYngTe~DWM4f@wW-P literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/ic_lock_power_reboot_alpha.png b/core/res/res/drawable-mdpi/ic_lock_power_reboot_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..471a41c819132b2d2eb9d719f356394bbcd023e9 GIT binary patch literal 1307 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3m8Da#=fE;F*!T6 zL?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNn@b!fooL3ADsO0=y{ffi_eM3D1{oGuTzrY?YE(uCSI0LKd z;*iRMRQ;gT;{4L0}qUi=xAx_>}p|TXlh{OW@c*S2r~nlUQ1IG3v)wDLpK*E zS3^TrV+&(*LswU4H#aj&V>dT*SD0SUyyB9?yyR4vy_uOQR#3eLc=cL27o{eau$h8JcxGNoetEGbD0;wQZ{?C&lv$RV;#QQOs{jsPt4u8R z8yH)f8kw0IIk~#Ifc$OYVs7DNXyRmGVgd4pvl3Kq3OQk>Z>M0R4@w+Ji3KJUT(V*YDS?p)3-BCb4-T=%Zsyx~IPjq)0olLy=r(#xJDm;Xo;HagZ+93?X6 zW)@Q_=O3mD;lDrBIK0gi@5#hH6)jw38o4xX$_&z%H zuuFnNSAbA!gucnqoxHW2Cp?y%xXy5=dwp?XG}DwLY!^a~n6}9WCk?Xz5UP>QTKeSG=vEIjCb;A6s>IF6*27j*oeGJF7AIM&?x?-^E&f*fked_ho huGhOw_fOD2z`*w2^VjTP$&H}m%G1@)Wt~$(69A-pz+C_U literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_lock_power_reboot_alpha.png b/core/res/res/drawable-xhdpi/ic_lock_power_reboot_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..a786b408bb328d15b272a373213525f5b72e9a5c GIT binary patch literal 1674 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE{(JaZG%Q-e|yQz{EjrrIztFsEgPM3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTcwn`GuBNuFf>#! zGt)CPF*P$Y)KM@pFf`IPFw!?L(={})GBvX@GFN~CB|8P1qLehNAQv~NT}3Hrwn`Z# zB?VUc`sL;2dgaD?`9X%D*TxJu@#c$0a|xG&eP`#M8xAsUo*P zFC{a@%D~Lc$j#i%$;Hjh+11$4(9zP;+10|x(A2=l&CJxu5oQK9y(X?^POgrIZf-7) z&W47r#+H_*=1wL~md?&*E(Xq)7BIb@dBr7(dC93Tdowdrte|>b@#?j5E=o--$uA1Y z&(DFSfPjqrlKkR~`~n5%U^4}c@XWlF{PJQ=Q1pPq-pVDlD6=dz#jPkmR{3UrQRMh$)9L^CZMRx zVH=GrW-dnq0-|25ulTsk{lB1Q(8{IlPTY&WOjz^&Aj@Hc%`@fm%aXs@{+N`q+4}Rn z^z!@X_T1Fyd+aptt)t@eV+;}u%n1xU4U9|j;~iuJbXxA)r#ze`B6g1Vj+b9!4dv;-Iy3Wr>B}8$ zAC6n`$us!6GAt9QVYp&?JZ}l_1Fy#&oGjrCUt5yvm-8-AYAS7fz@(sA@h0CemtjSy zJBPjK@Bbbz(sf-vtXPz;me+N@O-cCi``nMU;lJKXW-Q8o(Ouja>?@zWz^v-3pF;UT!AdZF2?{BIfH@nSg>L|n!^7xz7i?wMJh1jLkFKvswP@H*N@Wtva zZzW8YYVQ2*^~pN&dBd%SNk6=g8k%?2=F51$yQ-7VIQ>EFv|~+>QL|dY8Q-!>B|MCJtbO*)mZ?XjmEP-|x49~<^l9pb zsi8tWM`lab>xw(pFp99`yea={r`Pkss@E;m=*Z^DBYDWM7 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xxhdpi/ic_lock_power_reboot_alpha.png b/core/res/res/drawable-xxhdpi/ic_lock_power_reboot_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..6072387a4359ee6db56cb24f604f38a99c549078 GIT binary patch literal 1921 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RWBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTcwn`GuBNuFf>#! zGt)CPF*P$Y)KM@pFf`IPFw!?L(={})GBvX@GFN~CB|8P1qLehNAQv~NT}3Hrwn`Z# zB?VUc`sL;2dgaD?`9+T7#d8;`MLTPi3R$GdIlgbLHwFq;OmQDX>KlDb#X~h zD#E>34K5C;EJ)Q4N-fSWElN%eN=;J+xv9X)xhOTUB)=#mKR*W+iUAqUdYPFiR?Y^F&dwH&u5K=dj)sP= z#*Ri7E>4yf7G{nXMs7|PCNRA&`N^fZsd*(Zy(tL2ZaDRVk^(3=tXxuyGRsm^+=}vZ z6~JD$%Eav!XPo9i^`_uhB6hN98~F=6q09$Y5Hr zMI&0KiLK%J%GsxmF@(sR|J|4pC)N9b@AzZA$*0|RNIf4%kA zdChr$3Uh=b!i)MWz2ub2O=qsyx$eUmd*6Mck7pNHmmi8;`dK6T=d{(vl_n4=iZ}jmjzk$@L{>6dE^a`Uu9{Dv}bnHu*mJudPpPElT6 zKaz9*39|!ReP<}Y4_^11q0;b*@%|TiEBITK4xMijQ2BF#;YRZlt)IM=`3FnitM6Ak zKl!&)s=(tzI+;^#j;%9LUvrTsDM)VeCjkZq1`+OtV9(EAf7(6UezCZ%=!WmSyw9^% zZQY)+U+;$0u7&X@?lOs=O}5>0rRF9>gZGod#v-v+p);lQ(h^zSYgMwR-5BmD*k^6#Irqd#@NNJ{ zE(3!D0|SEq14Bd0kNxxS_=a8Qp31dq^6Q7SJl`i>y?D2PYmZjaro`NHp+%lM{q+7X zJM`}Ci)l-J(sa76wp`Hpvp~S9^?p|EzbQ;Ddpdr(&Q)SkH!clKt!*%%zJVLc)E8pqG-$@?GQ z@7-$AFL?Cs?6lhqCqGQ?S^Bh8*J4h;e#^!gj2`X!TYazcuy{Y*z3%+#)}S9!pKk8`sWt6; zgYXl6!It;T4|RX0=rGKi$e-@8L2Ms43*Uc%pQ%3iht4WQ@Y?e?Mg4H)alN8wqq1N5 zyCmO#e~!OTzCZar>*4=*hAunwJa&n$_zqHaF9^CgmQf7EV mzQGzTtAV&b>c4n5Ff!chd70q6d4)fyQuK87b6Mw<&;$S^QRo){ literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/ic_lock_power_reboot.xml b/core/res/res/drawable/ic_lock_power_reboot.xml new file mode 100644 index 000000000000..82c79270130f --- /dev/null +++ b/core/res/res/drawable/ic_lock_power_reboot.xml @@ -0,0 +1,33 @@ + + + + + diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index d7490c57f2e0..18b39c151328 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -207,6 +207,9 @@ "您要关机吗?" "重新启动并进入安全模式" "您要重新启动并进入安全模式吗?这样会停用您已安装的所有第三方应用。再次重新启动将恢复这些应用。" + "重启" + "您的平板电脑将会重启。" + "您的手机将会重启。" "近期任务" "最近没有运行任何应用" "平板电脑选项" @@ -214,6 +217,7 @@ "手机选项" "屏幕锁定" "关机" + "重启" "错误报告" "提交错误报告" "这会收集有关当前设备状态的信息,并以电子邮件的形式进行发送。从开始生成错误报告到准备好发送需要一点时间,请耐心等待。" diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index b55a9b22118b..b27f0663ade2 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -458,6 +458,14 @@ This will disable all third party applications you have installed. They will be restored when you reboot again. + + Reboot + + + Your tablet will reboot. + Your phone will reboot. + Power off + + Reboot + Bug report diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 1fb512a98855..24de56d36d54 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -821,8 +821,10 @@ + + @@ -1513,6 +1515,7 @@ + @@ -1585,6 +1588,7 @@ + diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java index 5ef518e21c58..457d3d561709 100644 --- a/services/core/java/com/android/server/policy/GlobalActions.java +++ b/services/core/java/com/android/server/policy/GlobalActions.java @@ -42,6 +42,7 @@ import android.net.ConnectivityManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.IPowerManager; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; @@ -95,6 +96,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac /* Valid settings for global actions keys. * see config.xml config_globalActionList */ private static final String GLOBAL_ACTION_KEY_POWER = "power"; + private static final String GLOBAL_ACTION_KEY_REBOOT = "reboot"; private static final String GLOBAL_ACTION_KEY_AIRPLANE = "airplane"; private static final String GLOBAL_ACTION_KEY_BUGREPORT = "bugreport"; private static final String GLOBAL_ACTION_KEY_SILENT = "silent"; @@ -275,6 +277,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) { mItems.add(new PowerAction()); + } else if (GLOBAL_ACTION_KEY_REBOOT.equals(actionKey)) { + mItems.add(new RebootAction()); } else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) { mItems.add(mAirplaneModeOn); } else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) { @@ -368,6 +372,35 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mWindowManagerFuncs.shutdown(false /* confirm */); } } + + private final class RebootAction extends SinglePressAction { + private RebootAction() { + super(com.android.internal.R.drawable.ic_lock_power_reboot, + R.string.global_action_reboot); + } + + @Override + public boolean showDuringKeyguard() { + return true; + } + + @Override + public boolean showBeforeProvisioning() { + return true; + } + + @Override + public void onPress() { + try { + IPowerManager pm = IPowerManager.Stub.asInterface(ServiceManager + .getService(Context.POWER_SERVICE)); + pm.reboot(true, null, false); + } catch (RemoteException e) { + Log.e(TAG, "PowerManager service died!", e); + return; + } + } + } private class BugReportAction extends SinglePressAction implements LongPressAction { diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index 5b9d139a3e0e..38070f6fc961 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -146,13 +146,25 @@ public final class ShutdownThread extends Thread { } } + boolean showRebootOption = false; + String[] defaultActions = context.getResources().getStringArray( + com.android.internal.R.array.config_globalActionsList); + for (int i = 0; i < defaultActions.length; i++) { + if (defaultActions[i].equals("reboot")) { + showRebootOption = true; + break; + } + } final int longPressBehavior = context.getResources().getInteger( com.android.internal.R.integer.config_longPressOnPowerBehavior); - final int resourceId = mRebootSafeMode + int resourceId = mRebootSafeMode ? com.android.internal.R.string.reboot_safemode_confirm : (longPressBehavior == 2 ? com.android.internal.R.string.shutdown_confirm_question : com.android.internal.R.string.shutdown_confirm); + if (showRebootOption && !mRebootSafeMode) { + resourceId = com.android.internal.R.string.reboot_confirm; + } Log.d(TAG, "Notifying thread to start shutdown longPressBehavior=" + longPressBehavior); @@ -164,7 +176,9 @@ public final class ShutdownThread extends Thread { sConfirmDialog = new AlertDialog.Builder(context) .setTitle(mRebootSafeMode ? com.android.internal.R.string.reboot_safemode_title - : com.android.internal.R.string.power_off) + : showRebootOption + ? com.android.internal.R.string.reboot_title + : com.android.internal.R.string.power_off) .setMessage(resourceId) .setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { -- GitLab From 20eee8a9b6a79e056b5680dcae4e5c213a49b0d8 Mon Sep 17 00:00:00 2001 From: Sharad Sangle Date: Thu, 28 Apr 2016 20:29:10 +0530 Subject: [PATCH 039/185] audio: add support for extended audio encoding update the constants for extended audio file types this is needed as the values for file types are also used for image file types Change-Id: I3e87347d58d8c1d9b281185ed13fdaaa4d95f988 --- media/java/android/media/MediaFile.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index f36a73dbfcc0..b6c245a46a51 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -47,14 +47,14 @@ public class MediaFile { private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC; // More audio file types - public static final int FILE_TYPE_DTS = 300; - public static final int FILE_TYPE_3GPA = 301; - public static final int FILE_TYPE_AC3 = 302; - public static final int FILE_TYPE_QCP = 303; - public static final int FILE_TYPE_PCM = 304; - public static final int FILE_TYPE_EC3 = 305; - public static final int FILE_TYPE_AIFF = 306; - public static final int FILE_TYPE_APE = 307; + public static final int FILE_TYPE_DTS = 210; + public static final int FILE_TYPE_3GPA = 211; + public static final int FILE_TYPE_AC3 = 212; + public static final int FILE_TYPE_QCP = 213; + public static final int FILE_TYPE_PCM = 214; + public static final int FILE_TYPE_EC3 = 215; + public static final int FILE_TYPE_AIFF = 216; + public static final int FILE_TYPE_APE = 217; private static final int FIRST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DTS; private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_APE; -- GitLab From d4ecd3f8e744010bc23d854042b299628521936b Mon Sep 17 00:00:00 2001 From: Lalit Kansara Date: Tue, 10 May 2016 03:09:36 -0700 Subject: [PATCH 040/185] Revert "audio: add support for extended audio encoding" This reverts commit 3996412ac9c53b6d6b12ccf330ee1d214a7a1272 Change-Id: Ifc99e30637802d208d8f29d47938aa677ad444c0 --- media/java/android/media/MediaFile.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index b6c245a46a51..f36a73dbfcc0 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -47,14 +47,14 @@ public class MediaFile { private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC; // More audio file types - public static final int FILE_TYPE_DTS = 210; - public static final int FILE_TYPE_3GPA = 211; - public static final int FILE_TYPE_AC3 = 212; - public static final int FILE_TYPE_QCP = 213; - public static final int FILE_TYPE_PCM = 214; - public static final int FILE_TYPE_EC3 = 215; - public static final int FILE_TYPE_AIFF = 216; - public static final int FILE_TYPE_APE = 217; + public static final int FILE_TYPE_DTS = 300; + public static final int FILE_TYPE_3GPA = 301; + public static final int FILE_TYPE_AC3 = 302; + public static final int FILE_TYPE_QCP = 303; + public static final int FILE_TYPE_PCM = 304; + public static final int FILE_TYPE_EC3 = 305; + public static final int FILE_TYPE_AIFF = 306; + public static final int FILE_TYPE_APE = 307; private static final int FIRST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DTS; private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_APE; -- GitLab From 9d936149950a098d881936e316713836dfdae640 Mon Sep 17 00:00:00 2001 From: Nitin Shivpure Date: Tue, 14 Jul 2015 12:47:56 +0530 Subject: [PATCH 041/185] Bluetooth: DUN: Add framework changes to support DUN Bluetooth DUN profile APIs added to the framework APIs. As DUN server supports only disconnection of DUN profile level connection this API is implemeted along with other APIs. It registers bluetooth state changed callback with the adapter service,once there is a change in the bluetooth state,it will bind/unbind the DUN service which is implemented in BluetoothExt.APK. DUN service, and other DUN Application layer are implemented in BluetoothExt.APK. CRs-Fixed: 557180 Change-Id: I6ce1204ac6138e28ad7486f2855f0f7444ad3886 --- Android.mk | 1 + .../android/bluetooth/BluetoothAdapter.java | 7 + core/java/android/bluetooth/BluetoothDun.java | 296 ++++++++++++++++++ .../android/bluetooth/BluetoothProfile.java | 6 + .../java/android/bluetooth/IBluetoothDun.aidl | 45 +++ packages/SettingsLib/res/values/strings.xml | 6 + .../bluetooth/DunServerProfile.java | 162 ++++++++++ .../LocalBluetoothProfileManager.java | 9 + 8 files changed, 532 insertions(+) create mode 100644 core/java/android/bluetooth/BluetoothDun.java create mode 100644 core/java/android/bluetooth/IBluetoothDun.aidl create mode 100644 packages/SettingsLib/src/com/android/settingslib/bluetooth/DunServerProfile.java diff --git a/Android.mk b/Android.mk index f38caba79869..b8b9c12a16b8 100644 --- a/Android.mk +++ b/Android.mk @@ -124,6 +124,7 @@ LOCAL_SRC_FILES += \ core/java/android/bluetooth/IBluetoothGatt.aidl \ core/java/android/bluetooth/IBluetoothGattCallback.aidl \ core/java/android/bluetooth/IBluetoothGattServerCallback.aidl \ + core/java/android/bluetooth/IBluetoothDun.aidl \ core/java/android/content/IClipboard.aidl \ core/java/android/content/IContentService.aidl \ core/java/android/content/IIntentReceiver.aidl \ diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 72d340ea0529..f812ea0ef4df 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -1939,6 +1939,9 @@ public final class BluetoothAdapter { } else if (profile == BluetoothProfile.PAN) { BluetoothPan pan = new BluetoothPan(context, listener); return true; + } else if (profile == BluetoothProfile.DUN) { + BluetoothDun dun = new BluetoothDun(context, listener); + return true; } else if (profile == BluetoothProfile.HEALTH) { BluetoothHealth health = new BluetoothHealth(context, listener); return true; @@ -1998,6 +2001,10 @@ public final class BluetoothAdapter { BluetoothPan pan = (BluetoothPan)proxy; pan.close(); break; + case BluetoothProfile.DUN: + BluetoothDun dun = (BluetoothDun)proxy; + dun.close(); + break; case BluetoothProfile.HEALTH: BluetoothHealth health = (BluetoothHealth)proxy; health.close(); diff --git a/core/java/android/bluetooth/BluetoothDun.java b/core/java/android/bluetooth/BluetoothDun.java new file mode 100644 index 000000000000..09120610caa3 --- /dev/null +++ b/core/java/android/bluetooth/BluetoothDun.java @@ -0,0 +1,296 @@ +/* +*Copyright (c) 2013, The Linux Foundation. All rights reserved. +* +*Redistribution and use in source and binary forms, with or without +*modification, are permitted provided that the following conditions are +*met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +*THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +*WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +*MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +*ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +*BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +*CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +*SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +*WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +*OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +*IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +package android.bluetooth; + +import android.annotation.SdkConstant; +import android.annotation.SdkConstant.SdkConstantType; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.os.RemoteException; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class provides the APIs to control the Bluetooth Dun + * Profile. + * + *

BluetoothDun is a proxy object for controlling the Bluetooth DUN + * Service via IPC. Use {@link BluetoothAdapter#getProfileProxy} to get + * the BluetoothDun proxy object. + * + *

Each method is protected with its appropriate permission. + *@hide + */ +public final class BluetoothDun implements BluetoothProfile { + private static final String TAG = "BluetoothDun"; + private static final boolean DBG = false; + private static final boolean VDBG = false; + + /** + * Intent used to broadcast the change in connection state of the Dun + * profile. + * + *

This intent will have 3 extras: + *

    + *
  • {@link #EXTRA_STATE} - The current state of the profile.
  • + *
  • {@link #EXTRA_PREVIOUS_STATE}- The previous state of the profile.
  • + *
  • {@link BluetoothDevice#EXTRA_DEVICE} - The remote device.
  • + *
+ * + *

{@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} can be any of + * {@link #STATE_DISCONNECTED}, {@link #STATE_CONNECTED}. + * + *

Requires {@link android.Manifest.permission#BLUETOOTH} permission to + * receive. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_CONNECTION_STATE_CHANGED = + "codeaurora.bluetooth.dun.profile.action.CONNECTION_STATE_CHANGED"; + + private Context mContext; + private ServiceListener mServiceListener; + private BluetoothAdapter mAdapter; + private IBluetoothDun mDunService; + + /** + * Create a BluetoothDun proxy object for interacting with the local + * Bluetooth Service which handles the Dun profile + * + */ + /*package*/ BluetoothDun(Context context, ServiceListener l) { + mContext = context; + mServiceListener = l; + mAdapter = BluetoothAdapter.getDefaultAdapter(); + try { + mAdapter.getBluetoothManager().registerStateChangeCallback(mStateChangeCallback); + } catch (RemoteException re) { + Log.w(TAG,"Unable to register BluetoothStateChangeCallback",re); + } + Log.d(TAG, "BluetoothDun() call bindService"); + doBind(); + } + + boolean doBind() { + Intent intent = new Intent(IBluetoothDun.class.getName()); + ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0); + intent.setComponent(comp); + if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0, + android.os.Process.myUserHandle())) { + Log.e(TAG, "Could not bind to Bluetooth Dun Service with " + intent); + return false; + } + return true; + } + + + /*package*/ void close() { + if (VDBG) log("close()"); + mServiceListener = null; + IBluetoothManager mgr = mAdapter.getBluetoothManager(); + if (mgr != null) { + try { + mgr.unregisterStateChangeCallback(mStateChangeCallback); + } catch (RemoteException re) { + Log.w(TAG,"Unable to unregister BluetoothStateChangeCallback",re); + } + } + + synchronized (mConnection) { + if ( mDunService != null) { + try { + mDunService = null; + mContext.unbindService(mConnection); + } catch (Exception re) { + Log.e(TAG,"",re); + } + } + } + } + + protected void finalize() { + close(); + } + + private IBluetoothStateChangeCallback mStateChangeCallback = + new IBluetoothStateChangeCallback.Stub() { + + @Override + public void onBluetoothStateChange(boolean on) { + //Handle enable request to bind again. + Log.d(TAG, "onBluetoothStateChange on: " + on); + if (on) { + try { + if (mDunService == null) { + Log.d(TAG, "onBluetoothStateChange call bindService"); + doBind(); + } + } catch (IllegalStateException e) { + Log.e(TAG,"onBluetoothStateChange: could not bind to DUN service: ", e); + } catch (SecurityException e) { + Log.e(TAG,"onBluetoothStateChange: could not bind to DUN service: ", e); + } + } else { + if (VDBG) Log.d(TAG,"Unbinding service..."); + synchronized (mConnection) { + if ( mDunService != null) { + try { + mDunService = null; + mContext.unbindService(mConnection); + } catch (Exception re) { + Log.e(TAG,"",re); + } + } + } + } + } + }; + + /** + * Initiate disconnection from DUN server. + * + *

Once the disconnection is initiated by any device either local host + * or remote device, the state will transition from {@link #STATE_CONNECTED} + * to {@link #STATE_DISCONNECTED}. + * + *

Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} + * permission. + * + * @param device Remote Bluetooth Device + * @return false on immediate error, + * true otherwise + * @hide + */ + public boolean disconnect(BluetoothDevice device) { + if (DBG) log("disconnect(" + device + ")"); + if (mDunService != null && isEnabled() && + isValidDevice(device)) { + try { + return mDunService.disconnect(device); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return false; + } + } + if (mDunService == null) Log.w(TAG, "Proxy not attached to service"); + return false; + } + /** + * {@inheritDoc} + */ + public List getConnectedDevices() { + if (VDBG) log("getConnectedDevices()"); + if (mDunService != null && isEnabled()) { + try { + return mDunService.getConnectedDevices(); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return new ArrayList(); + } + } + if (mDunService == null) Log.w(TAG, "Proxy not attached to service"); + return new ArrayList(); + } + + /** + * {@inheritDoc} + */ + public List getDevicesMatchingConnectionStates(int[] states) { + if (VDBG) log("getDevicesMatchingStates()"); + if (mDunService != null && isEnabled()) { + try { + return mDunService.getDevicesMatchingConnectionStates(states); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return new ArrayList(); + } + } + if (mDunService == null) Log.w(TAG, "Proxy not attached to service"); + return new ArrayList(); + } + + /** + * {@inheritDoc} + */ + public int getConnectionState(BluetoothDevice device) { + if (VDBG) log("getState(" + device + ")"); + if (mDunService != null && isEnabled() + && isValidDevice(device)) { + try { + return mDunService.getConnectionState(device); + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return BluetoothProfile.STATE_DISCONNECTED; + } + } + if (mDunService == null) Log.w(TAG, "Proxy not attached to service"); + return BluetoothProfile.STATE_DISCONNECTED; + } + + private ServiceConnection mConnection = new ServiceConnection() { + public void onServiceConnected(ComponentName className, IBinder service) { + if (DBG) Log.d(TAG, "BluetoothDUN Proxy object connected"); + mDunService = IBluetoothDun.Stub.asInterface(service); + + if (mServiceListener != null) { + mServiceListener.onServiceConnected(BluetoothProfile.DUN, + BluetoothDun.this); + } + } + public void onServiceDisconnected(ComponentName className) { + if (DBG) Log.d(TAG, "BluetoothDUN Proxy object disconnected"); + mDunService = null; + if (mServiceListener != null) { + mServiceListener.onServiceDisconnected(BluetoothProfile.DUN); + } + } + }; + + private boolean isEnabled() { + if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true; + return false; + } + + private boolean isValidDevice(BluetoothDevice device) { + if (device == null) return false; + + if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true; + return false; + } + + private static void log(String msg) { + Log.d(TAG, msg); + } +} diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java index eee66d193fe4..da79b586cf66 100644 --- a/core/java/android/bluetooth/BluetoothProfile.java +++ b/core/java/android/bluetooth/BluetoothProfile.java @@ -136,6 +136,12 @@ public interface BluetoothProfile { */ public static final int PBAP_CLIENT = 17; + /** + * DUN + * @hide + */ + public static final int DUN = 21; + /** * Default priority for devices that we try to auto-connect to and * and allow incoming connections for the profile diff --git a/core/java/android/bluetooth/IBluetoothDun.aidl b/core/java/android/bluetooth/IBluetoothDun.aidl new file mode 100644 index 000000000000..a4f2017cc81b --- /dev/null +++ b/core/java/android/bluetooth/IBluetoothDun.aidl @@ -0,0 +1,45 @@ +/* +*Copyright (c) 2013, The Linux Foundation. All rights reserved. +* +*Redistribution and use in source and binary forms, with or without +*modification, are permitted provided that the following conditions are +*met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +*THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +*WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +*MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +*ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +*BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +*CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +*SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +*WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +*OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +*IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package android.bluetooth; + +import android.bluetooth.BluetoothDevice; + +/** + * API for Bluetooth Dun service + * + * {@hide} + */ +interface IBluetoothDun { + // Public API + boolean disconnect(in BluetoothDevice device); + int getConnectionState(in BluetoothDevice device); + List getConnectedDevices(); + List getDevicesMatchingConnectionStates(in int[] states); +} diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 89c46d74e710..7fe78b692781 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -123,6 +123,8 @@ Message Access SIM Access + + Dial-up Network Access Connected to media audio @@ -142,6 +144,8 @@ Connected to device for Internet access Sharing local Internet connection with device + + Connected to Dun Server Use for input + + Use for Dial-up Network access Pair diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/DunServerProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/DunServerProfile.java new file mode 100644 index 000000000000..3c7292708aa9 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/DunServerProfile.java @@ -0,0 +1,162 @@ +/* +*Copyright (c) 2013, 2015, The Linux Foundation. All rights reserved. +* +*Redistribution and use in source and binary forms, with or without +*modification, are permitted provided that the following conditions are +*met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +*THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +*WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +*MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +*ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +*BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +*CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +*SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +*WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +*OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +*IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothDun; +import android.bluetooth.BluetoothProfile; +import android.content.Context; +import android.util.Log; +import java.util.HashMap; +import java.util.List; + +import com.android.settingslib.R; + +/** + * DunServerProfile handles Bluetooth DUN server profile. + */ +final class DunServerProfile implements LocalBluetoothProfile { + private static final String TAG = "DunServerProfile"; + private static boolean V = true; + + private BluetoothDun mService; + private boolean mIsProfileReady; + + static final String NAME = "DUN Server"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 11; + + // These callbacks run on the main thread. + private final class DunServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothDun) proxy; + mIsProfileReady = true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mIsProfileReady = false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + DunServerProfile(Context context) { + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + adapter.getProfileProxy(context, new DunServiceListener(), + BluetoothProfile.DUN); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return false; + } + + public boolean connect(BluetoothDevice device) { + return false; + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + return mService.disconnect(device); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + return mService.getConnectionState(device); + } + + public boolean isPreferred(BluetoothDevice device) { + return true; + } + + public int getPreferred(BluetoothDevice device) { + return -1; + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + // ignore: isPreferred is always true for DUN + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_dun; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_dun_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_dun_profile_summary_connected; + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_network_pan; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy + (BluetoothProfile.DUN, mService); + mService = null; + } catch (Throwable t) { + Log.w(TAG, "Error cleaning up DUN proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java index 7f0e27a96c0a..996e1173f0d1 100755 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -25,6 +25,7 @@ import android.bluetooth.BluetoothMap; import android.bluetooth.BluetoothInputDevice; import android.bluetooth.BluetoothPan; import android.bluetooth.BluetoothPbapClient; +import android.bluetooth.BluetoothDun; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothUuid; import android.content.Context; @@ -36,6 +37,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import android.os.SystemProperties; /** * LocalBluetoothProfileManager provides access to the LocalBluetoothProfile @@ -85,6 +87,7 @@ public final class LocalBluetoothProfileManager { private OppProfile mOppProfile; private final PanProfile mPanProfile; private PbapClientProfile mPbapClientProfile; + private DunServerProfile mDunProfile; private final PbapServerProfile mPbapProfile; private final boolean mUsePbapPce; @@ -130,6 +133,12 @@ public final class LocalBluetoothProfileManager { addProfile(mMapProfile, MapProfile.NAME, BluetoothMap.ACTION_CONNECTION_STATE_CHANGED); + // enable DUN only if the property is set + if (SystemProperties.getBoolean("ro.bluetooth.dun", false) == true) { + mDunProfile = new DunServerProfile(context); + addProfile(mDunProfile, DunServerProfile.NAME, + BluetoothDun.ACTION_CONNECTION_STATE_CHANGED); + } //Create PBAP server profile, but do not add it to list of profiles // as we do not need to monitor the profile as part of profile list mPbapProfile = new PbapServerProfile(context); -- GitLab From 0fffc95359ce61011a5900e9a154d74faff6d11e Mon Sep 17 00:00:00 2001 From: Srinu Jella Date: Mon, 21 Oct 2013 11:48:41 +0530 Subject: [PATCH 042/185] Bluetooth: Add Get/Set socket option to the Bluetooth Socket (3/4) Introduced Get/Set socket option to the Bluetooth Socket. For these APIs it will directly call the APIs of Adapter Service.The corresponding APIs have been implemented in the Adapter service of native Bluetooth APK. CRs-Fixed: 557180 Change-Id: Ic49b66599fb3c4c500e52295895d708dbc172cc7 --- .../android/bluetooth/BluetoothSocket.java | 56 +++++++++++++++++++ core/java/android/bluetooth/IBluetooth.aidl | 3 + 2 files changed, 59 insertions(+) diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java index ae12c88ff233..eae6e8db0a65 100644 --- a/core/java/android/bluetooth/BluetoothSocket.java +++ b/core/java/android/bluetooth/BluetoothSocket.java @@ -248,6 +248,7 @@ public final class BluetoothSocket implements Closeable { as.mSocketOS = as.mSocket.getOutputStream(); as.mAddress = RemoteAddr; as.mDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(RemoteAddr); + as.mPort = mPort; return as; } /** @@ -469,6 +470,61 @@ public final class BluetoothSocket implements Closeable { return acceptedSocket; } + /** + * setSocketOpt for the Buetooth Socket. + * + * @param optionName socket option name + * @param optionVal socket option value + * @param optionLen socket option length + * @return -1 on immediate error, + * 0 otherwise + * @hide + */ + public int setSocketOpt(int optionName, byte [] optionVal, int optionLen) throws IOException { + int ret = 0; + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); + IBluetooth bluetoothProxy = BluetoothAdapter.getDefaultAdapter().getBluetoothService(null); + if (bluetoothProxy == null) { + Log.e(TAG, "setSocketOpt fail, reason: bluetooth is off"); + return -1; + } + try { + if(VDBG) Log.d(TAG, "setSocketOpt(), mType: " + mType + " mPort: " + mPort); + ret = bluetoothProxy.setSocketOpt(mType, mPort, optionName, optionVal, optionLen); + } catch (RemoteException e) { + Log.e(TAG, Log.getStackTraceString(new Throwable())); + return -1; + } + return ret; + } + + /** + * getSocketOpt for the Buetooth Socket. + * + * @param optionName socket option name + * @param optionVal socket option value + * @return -1 on immediate error, + * length of returned socket option otherwise + * @hide + */ + public int getSocketOpt(int optionName, byte [] optionVal) throws IOException { + int ret = 0; + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); + IBluetooth bluetoothProxy = BluetoothAdapter.getDefaultAdapter().getBluetoothService(null); + if (bluetoothProxy == null) { + Log.e(TAG, "getSocketOpt fail, reason: bluetooth is off"); + return -1; + } + try { + if(VDBG) Log.d(TAG, "getSocketOpt(), mType: " + mType + " mPort: " + mPort); + ret = bluetoothProxy.getSocketOpt(mType, mPort, optionName, optionVal); + } catch (RemoteException e) { + Log.e(TAG, Log.getStackTraceString(new Throwable())); + return -1; + } + return ret; + } + /*package*/ int available() throws IOException { if (VDBG) Log.d(TAG, "available: " + mSocketIS); return mSocketIS.available(); diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index a42053963678..3049255f81ac 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -115,4 +115,7 @@ interface IBluetooth void onLeServiceUp(); void onBrEdrDown(); + + int setSocketOpt(int type, int port, int optionName, in byte [] optionVal, int optionLen); + int getSocketOpt(int type, int port, int optionName, out byte [] optionVal); } -- GitLab From 698c18a245e4a024805f7ac45115103dfc6593d4 Mon Sep 17 00:00:00 2001 From: Ravindra Date: Fri, 31 Jul 2015 14:16:14 +0530 Subject: [PATCH 043/185] Add voice privacy capability Define voice privacy capability for the connection and for the call. Change-Id: I3b2f5fa776f0c869941f49b9c9b20751ddad058a --- telecomm/java/android/telecom/Call.java | 11 ++++++++++- telecomm/java/android/telecom/Connection.java | 9 ++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 7d7e1eb29e80..53f97757e5ff 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -256,8 +256,14 @@ public final class Call { */ public static final int CAPABILITY_CAN_PULL_CALL = 0x00800000; + /** + * Call has voice privacy capability. + * @hide + */ + public static final int CAPABILITY_VOICE_PRIVACY = 0x01000000; + //****************************************************************************************** - // Next CAPABILITY value: 0x01000000 + // Next CAPABILITY value: 0x02000000 //****************************************************************************************** /** @@ -413,6 +419,9 @@ public final class Call { if (can(capabilities, CAPABILITY_CAN_PULL_CALL)) { builder.append(" CAPABILITY_CAN_PULL_CALL"); } + if (can(capabilities, CAPABILITY_VOICE_PRIVACY)) { + builder.append(" CAPABILITY_VOICE_PRIVACY"); + } builder.append("]"); return builder.toString(); } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index ff220f3a4c30..ae0ddfa06fe4 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -288,8 +288,15 @@ public abstract class Connection extends Conferenceable { */ public static final int CAPABILITY_CAN_PULL_CALL = 0x01000000; + /** + * Call has voice privacy capability. + * @hide + */ + public static final int CAPABILITY_VOICE_PRIVACY = 0x02000000; + + //********************************************************************************************** - // Next CAPABILITY value: 0x02000000 + // Next CAPABILITY value: 0x04000000 //********************************************************************************************** /** -- GitLab From 29e40a45d7aee7657aececb9f6ef85bc214e23e1 Mon Sep 17 00:00:00 2001 From: Shashi Shekar Shankar Date: Mon, 5 Jan 2015 17:40:39 +0530 Subject: [PATCH 044/185] Performance: Memory Optimizations The following optimizations are squashed in this change. 1. Enable Aggressive trim settings. This change will enable aggressive trim settings for targets up to 1GB. The change can be turned on/off from system properties. By default, the properties are set for targets up to 1GB. Changes spread in to : ProcessList.java CRs-Fixed: 783020 2. Propagate B-services to higher adj. Depending on the inactivity of a service, move the B-services to highest adj 906. Under memory pressure, these services will be killed first ahead of cached apps which results in better concurrency numbers with bg apps. Inactivity time and minumum no of services to be maintained are configurable as system properties. Improves concurrency. Changes spread in to : ActivityManagerService.java CRs-Fixed: 792122 3. Postpone service restart during app launch. In the android framework, when the service gets killed, it will be rescheduled. Postpone the service restart if the app is in process of startup. By Default this feature is disabled. It can be enabled from build.prop of target. Changes spread in to : ActiveServices.java CRs-Fixed: 879756 911145 Squash of following change-IDs: Change-Id: I233dddbff07e7ec1fe2ee96402fe1d411903beb5 Change-Id: Ied6cfcc3d11951f32f18de680b0e3483db8e163e Change-Id: Ia86edf027e20df2c7aa6f34e3aa293f7a8e6f1fa Change-Id: I3b2110743a6e0dd1379aa3b7703b3a897db3f6e6 --- .../com/android/server/am/ActiveServices.java | 67 ++++++++++++++++++- .../server/am/ActivityManagerService.java | 49 ++++++++++++++ .../com/android/server/am/ProcessList.java | 36 +++++++++- 3 files changed, 148 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index ee2fa51c8666..107939ae09e5 100755 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -125,6 +125,10 @@ public final class ActiveServices { // at the same time. final int mMaxStartingBackground; + // Flag to reschedule the services during app launch. Disable by default. + private static final boolean SERVICE_RESCHEDULE + = SystemProperties.getBoolean("ro.am.reschedule_service", false); + final SparseArray mServiceMap = new SparseArray<>(); /** @@ -1492,6 +1496,14 @@ public final class ActiveServices { r.pendingStarts.add(0, si); long dur = SystemClock.uptimeMillis() - si.deliveredTime; dur *= 2; + if (SERVICE_RESCHEDULE && DEBUG_DELAYED_SERVICE) { + Slog.w(TAG,"Can add more delay !!!" + +" si.deliveredTime "+si.deliveredTime + +" dur "+dur + +" si.deliveryCount "+si.deliveryCount + +" si.doneExecutingCount "+si.doneExecutingCount + +" allowCancel "+allowCancel); + } if (minDuration < dur) minDuration = dur; if (resetTime < dur) resetTime = dur; } else { @@ -1504,6 +1516,13 @@ public final class ActiveServices { } r.totalRestartCount++; + if (SERVICE_RESCHEDULE && DEBUG_DELAYED_SERVICE) { + Slog.w(TAG,"r.name "+r.name+" N "+N+" minDuration "+minDuration + +" resetTime "+resetTime+" now "+now + +" r.restartDelay "+r.restartDelay + +" r.restartTime+resetTime "+(r.restartTime+resetTime) + +" allowCancel "+allowCancel); + } if (r.restartDelay == 0) { r.restartCount++; r.restartDelay = minDuration; @@ -1525,6 +1544,14 @@ public final class ActiveServices { } r.nextRestartTime = now + r.restartDelay; + if (SERVICE_RESCHEDULE && DEBUG_DELAYED_SERVICE) { + Slog.w(TAG,"r.name "+r.name+" N "+N+" minDuration "+minDuration + +" resetTime "+resetTime+" now "+now + +" r.restartDelay "+r.restartDelay + +" r.restartTime+resetTime "+(r.restartTime+resetTime) + +" r.nextRestartTime "+r.nextRestartTime + +" allowCancel "+allowCancel); + } // Make sure that we don't end up restarting a bunch of services // all at the same time. @@ -1567,6 +1594,15 @@ public final class ActiveServices { r.nextRestartTime = SystemClock.uptimeMillis() + r.restartDelay; Slog.w(TAG, "Scheduling restart of crashed service " + r.shortName + " in " + r.restartDelay + "ms"); + + if (SERVICE_RESCHEDULE && DEBUG_DELAYED_SERVICE) { + for (int i=mRestartingServices.size()-1; i>=0; i--) { + ServiceRecord r2 = mRestartingServices.get(i); + Slog.w(TAG,"Restarting list - i "+i+" r2.nextRestartTime " + +r2.nextRestartTime+" r2.name "+r2.name); + } + } + EventLog.writeEvent(EventLogTags.AM_SCHEDULE_SERVICE_RESTART, r.userId, r.shortName, r.restartDelay); @@ -1587,7 +1623,31 @@ public final class ActiveServices { return; } try { - bringUpServiceLocked(r, r.intent.getIntent().getFlags(), r.createdFromFg, true, false); + if(SERVICE_RESCHEDULE == true) { + boolean shouldDelay = false; + ActivityRecord top_rc = null; + ActivityStack stack = mAm.getFocusedStack(); + if(stack != null) { + top_rc = stack.topRunningActivityLocked(); + } + if(top_rc != null) { + if(!top_rc.nowVisible && !r.shortName.contains(top_rc.packageName)) { + shouldDelay = true; + } + } + if(!shouldDelay) { + bringUpServiceLocked(r, r.intent.getIntent().getFlags(), r.createdFromFg, true, false); + } else { + if (DEBUG_DELAYED_SERVICE) { + Slog.v(TAG, "Reschedule service restart due to app launch" + +" r.shortName "+r.shortName+" r.app = "+r.app); + } + r.resetRestartCounter(); + scheduleServiceRestartLocked(r, true); + } + } else { + bringUpServiceLocked(r, r.intent.getIntent().getFlags(), r.createdFromFg, true, false); + } } catch (TransactionTooLargeException e) { // Ignore, it's been logged and nothing upstack cares. } @@ -1812,6 +1872,11 @@ public final class ActiveServices { if (newService) { app.services.remove(r); r.app = null; + if (SERVICE_RESCHEDULE && DEBUG_DELAYED_SERVICE) { + Slog.w(TAG, " Failed to create Service !!!! ." + +"This will introduce huge delay... " + +r.shortName + " in " + r.restartDelay + "ms"); + } } // Retry. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index aee75fbe390c..3e5aba9e7fab 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1536,6 +1536,16 @@ public final class ActivityManagerService extends ActivityManagerNative UnsupportedDisplaySizeDialog mUnsupportedDisplaySizeDialog; long mLastMemUsageReportTime = 0; + // Min aging threshold in milliseconds to consider a B-service + int mMinBServiceAgingTime = + SystemProperties.getInt("ro.sys.fw.bservice_age", 5000); + // Threshold for B-services when in memory pressure + int mBServiceAppThreshold = + SystemProperties.getInt("ro.sys.fw.bservice_limit", 5); + // Enable B-service aging propagation on memory pressure. + boolean mEnableBServicePropagation = + SystemProperties.getBoolean("ro.sys.fw.bservice_enable", false); + /** * Flag whether the current user is a "monkey", i.e. whether * the UI is driven by a UI automation tool. @@ -20577,8 +20587,39 @@ public final class ActivityManagerService extends ActivityManagerNative int nextCachedAdj = curCachedAdj+1; int curEmptyAdj = ProcessList.CACHED_APP_MIN_ADJ; int nextEmptyAdj = curEmptyAdj+2; + ProcessRecord selectedAppRecord = null; + long serviceLastActivity = 0; + int numBServices = 0; for (int i=N-1; i>=0; i--) { ProcessRecord app = mLruProcesses.get(i); + if (mEnableBServicePropagation && app.serviceb + && (app.curAdj == ProcessList.SERVICE_B_ADJ)) { + numBServices++; + for (int s = app.services.size() - 1; s >= 0; s--) { + ServiceRecord sr = app.services.valueAt(s); + if (DEBUG_OOM_ADJ) Slog.d(TAG,"app.processName = " + app.processName + + " serviceb = " + app.serviceb + " s = " + s + " sr.lastActivity = " + + sr.lastActivity + " packageName = " + sr.packageName + + " processName = " + sr.processName); + if (SystemClock.uptimeMillis() - sr.lastActivity + < mMinBServiceAgingTime) { + if (DEBUG_OOM_ADJ) { + Slog.d(TAG,"Not aged enough!!!"); + } + continue; + } + if (serviceLastActivity == 0) { + serviceLastActivity = sr.lastActivity; + selectedAppRecord = app; + } else if (sr.lastActivity < serviceLastActivity) { + serviceLastActivity = sr.lastActivity; + selectedAppRecord = app; + } + } + } + if (DEBUG_OOM_ADJ && selectedAppRecord != null) Slog.d(TAG, + "Identified app.processName = " + selectedAppRecord.processName + + " app.pid = " + selectedAppRecord.pid); if (!app.killedByAm && app.thread != null) { app.procStateChanged = false; computeOomAdjLocked(app, ProcessList.UNKNOWN_ADJ, TOP_APP, true, now); @@ -20687,6 +20728,14 @@ public final class ActivityManagerService extends ActivityManagerNative } } } + if ((numBServices > mBServiceAppThreshold) && (true == mAllowLowerMemLevel) + && (selectedAppRecord != null)) { + ProcessList.setOomAdj(selectedAppRecord.pid, selectedAppRecord.info.uid, + ProcessList.CACHED_APP_MAX_ADJ); + selectedAppRecord.setAdj = selectedAppRecord.curAdj; + if (DEBUG_OOM_ADJ) Slog.d(TAG,"app.processName = " + selectedAppRecord.processName + + " app.pid = " + selectedAppRecord.pid + " is moved to higher adj"); + } mNumServiceProcs = mNewNumServiceProcs; diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index f073e5cd4fda..4cb27f477427 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -32,6 +32,7 @@ import com.android.server.wm.WindowManagerService; import android.content.res.Resources; import android.graphics.Point; import android.os.SystemProperties; +import android.os.Process; import android.net.LocalSocketAddress; import android.net.LocalSocket; import android.util.Slog; @@ -146,6 +147,17 @@ final class ProcessList { // process limit. static final int MAX_CACHED_APPS = 32; + static final boolean USE_TRIM_SETTINGS = + SystemProperties.getBoolean("ro.sys.fw.use_trim_settings",true); + static final int EMPTY_APP_PERCENT = SystemProperties.getInt("ro.sys.fw.empty_app_percent",50); + static final int TRIM_EMPTY_PERCENT = + SystemProperties.getInt("ro.sys.fw.trim_empty_percent",100); + static final int TRIM_CACHE_PERCENT = + SystemProperties.getInt("ro.sys.fw.trim_cache_percent",100); + static final long TRIM_ENABLE_MEMORY = + SystemProperties.getLong("ro.sys.fw.trim_enable_memory",1073741824); + public static boolean allowTrim() { return Process.getTotalMemory() < TRIM_ENABLE_MEMORY ; } + // We allow empty processes to stick around for at most 30 minutes. static final long MAX_EMPTY_TIME = 30*60*1000; @@ -154,11 +166,25 @@ final class ProcessList { // The number of empty apps at which we don't consider it necessary to do // memory trimming. - static final int TRIM_EMPTY_APPS = MAX_EMPTY_APPS/2; + public static int computeTrimEmptyApps() { + if (USE_TRIM_SETTINGS && allowTrim()) { + return MAX_EMPTY_APPS*TRIM_EMPTY_PERCENT/100; + } else { + return MAX_EMPTY_APPS/2; + } + } + static final int TRIM_EMPTY_APPS = computeTrimEmptyApps(); // The number of cached at which we don't consider it necessary to do // memory trimming. - static final int TRIM_CACHED_APPS = (MAX_CACHED_APPS-MAX_EMPTY_APPS)/3; + public static int computeTrimCachedApps() { + if (USE_TRIM_SETTINGS && allowTrim()) { + return MAX_CACHED_APPS*TRIM_CACHE_PERCENT/100; + } else { + return (MAX_CACHED_APPS-MAX_EMPTY_APPS)/3; + } + } + static final int TRIM_CACHED_APPS = computeTrimCachedApps(); // Threshold of number of cached+empty where we consider memory critical. static final int TRIM_CRITICAL_THRESHOLD = 3; @@ -319,7 +345,11 @@ final class ProcessList { } public static int computeEmptyProcessLimit(int totalProcessLimit) { - return totalProcessLimit/2; + if(USE_TRIM_SETTINGS && allowTrim()) { + return totalProcessLimit*EMPTY_APP_PERCENT/100; + } else { + return totalProcessLimit/2; + } } private static String buildOomTag(String prefix, String space, int val, int base) { -- GitLab From 844e68ae6420ac83c288e91b64adc26c6672331d Mon Sep 17 00:00:00 2001 From: pengfeix Date: Thu, 28 Apr 2016 13:06:18 +0800 Subject: [PATCH 045/185] Add UT interface to query call forward setting for service class. Current interface doesnot take any service class argument. Add a new API for querying call forward status based on service class Change-Id: I62904ba59ec2d9175f0e131582d758caec57cc0c CRs-Fixed: 1015144 --- telephony/java/com/android/ims/internal/IImsUt.aidl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/telephony/java/com/android/ims/internal/IImsUt.aidl b/telephony/java/com/android/ims/internal/IImsUt.aidl index 4ab5ee3c4f8c..e259938121a2 100644 --- a/telephony/java/com/android/ims/internal/IImsUt.aidl +++ b/telephony/java/com/android/ims/internal/IImsUt.aidl @@ -111,4 +111,9 @@ interface IImsUt { * Sets the listener. */ void setListener(in IImsUtListener listener); + + /** + * Retrieves the configuration of the call forward for specified service class. + */ + int queryCFForServiceClass(int condition, String number, int serviceClass); } -- GitLab From 514cce30e0ca22d869b186ff6952c14b0f52db1d Mon Sep 17 00:00:00 2001 From: Sharad Sangle Date: Wed, 11 May 2016 02:06:13 -0700 Subject: [PATCH 046/185] Revert "Revert "audio: add support for extended audio encoding"" This reverts commit 1f38f777625deb51c8ab4881225b65b7ae83de1b Change-Id: I47b2511e592c315e5efac2df399510411b9e7314 --- media/java/android/media/MediaFile.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index f36a73dbfcc0..b6c245a46a51 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -47,14 +47,14 @@ public class MediaFile { private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC; // More audio file types - public static final int FILE_TYPE_DTS = 300; - public static final int FILE_TYPE_3GPA = 301; - public static final int FILE_TYPE_AC3 = 302; - public static final int FILE_TYPE_QCP = 303; - public static final int FILE_TYPE_PCM = 304; - public static final int FILE_TYPE_EC3 = 305; - public static final int FILE_TYPE_AIFF = 306; - public static final int FILE_TYPE_APE = 307; + public static final int FILE_TYPE_DTS = 210; + public static final int FILE_TYPE_3GPA = 211; + public static final int FILE_TYPE_AC3 = 212; + public static final int FILE_TYPE_QCP = 213; + public static final int FILE_TYPE_PCM = 214; + public static final int FILE_TYPE_EC3 = 215; + public static final int FILE_TYPE_AIFF = 216; + public static final int FILE_TYPE_APE = 217; private static final int FIRST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DTS; private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_APE; -- GitLab From 4ea9a4ec7fac2bf280a72149277b74a53d222cbc Mon Sep 17 00:00:00 2001 From: Prasanth Kamuju Date: Thu, 28 Jan 2016 15:58:10 +0530 Subject: [PATCH 047/185] frameworks/base: activity pause/stop event triggers Framework notifies about the app activity state changes for pause, stop. Change-Id: I312ba09e7bb89c412660138aaeddd19ac1ecba5b --- .../android/internal/app/ActivityTrigger.java | 20 +++++++ ...m_android_internal_app_ActivityTrigger.cpp | 58 +++++++++++++++++-- .../com/android/server/am/ActivityStack.java | 7 +++ 3 files changed, 81 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java index 770bba7cd9fb..dea449ec6b4f 100644 --- a/core/java/com/android/internal/app/ActivityTrigger.java +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -88,8 +88,28 @@ public class ActivityTrigger native_at_resumeActivity(activity); } + public void activityPauseTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) { + ComponentName cn = intent.getComponent(); + String activity = null; + Log.d(TAG, "ActivityTrigger activityPauseTrigger "); + if (null != cn && null != appInfo) + activity = cn.flattenToString() + "/" + appInfo.versionCode; + native_at_pauseActivity(activity); + } + + public void activityStopTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) { + ComponentName cn = intent.getComponent(); + String activity = null; + Log.d(TAG, "ActivityTrigger activityStopTrigger "); + if (null != cn && null != appInfo) + activity = cn.flattenToString() + "/" + appInfo.versionCode; + native_at_stopActivity(activity); + } + private native int native_at_startActivity(String activity, int flags); private native void native_at_resumeActivity(String activity); + private native void native_at_pauseActivity(String activity); + private native void native_at_stopActivity(String activity); private native void native_at_deinit(); private native void native_at_startProcessActivity(String process, int pid); } diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp index 6ba880f1522a..3d1d013d154a 100644 --- a/core/jni/com_android_internal_app_ActivityTrigger.cpp +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -54,6 +54,8 @@ typedef struct dlLibHandler { void *dlhandle; void (*startActivity)(const char *, int *); void (*resumeActivity)(const char *); + void (*pauseActivity)(const char *); + void (*stopActivity)(const char *); void (*init)(void); void (*deinit)(void); void (*startProcessActivity)(const char *, int); @@ -65,12 +67,13 @@ typedef struct dlLibHandler { * library -both handlers for Start and Resume events. */ static dlLibHandler mDlLibHandlers[] = { - {NULL, NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.at_library"}, - {NULL, NULL, NULL, NULL, NULL, NULL, - "ro.vendor.gt_library"} + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "ro.vendor.gt_library"}, }; +static size_t gTotalNumLibs = 0; // ---------------------------------------------------------------------------- static void @@ -81,7 +84,7 @@ com_android_internal_app_ActivityTrigger_native_at_init() bool errored = false; size_t numlibs = 0; - numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + gTotalNumLibs = numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); for(size_t i = 0; i < numlibs; i++) { errored = false; @@ -115,6 +118,18 @@ com_android_internal_app_ActivityTrigger_native_at_init() errored = true; } } + if (!errored) { + *(void **) (&mDlLibHandlers[i].pauseActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_pause"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } + if (!errored) { + *(void **) (&mDlLibHandlers[i].stopActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_stop"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } if (!errored) { *(void **) (&mDlLibHandlers[i].init) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_init"); if ((rc = dlerror()) != NULL) { @@ -131,11 +146,14 @@ com_android_internal_app_ActivityTrigger_native_at_init() if (errored) { mDlLibHandlers[i].startActivity = NULL; mDlLibHandlers[i].resumeActivity = NULL; + mDlLibHandlers[i].pauseActivity = NULL; + mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; if (mDlLibHandlers[i].dlhandle) { dlclose(mDlLibHandlers[i].dlhandle); mDlLibHandlers[i].dlhandle = NULL; } + gTotalNumLibs = 0; } else { (*mDlLibHandlers[i].init)(); } @@ -151,6 +169,8 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c if (mDlLibHandlers[i].dlhandle) { mDlLibHandlers[i].startActivity = NULL; mDlLibHandlers[i].resumeActivity = NULL; + mDlLibHandlers[i].pauseActivity = NULL; + mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit"); @@ -162,6 +182,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c mDlLibHandlers[i].dlhandle = NULL; } } + gTotalNumLibs = 0; } static void @@ -210,11 +231,40 @@ com_android_internal_app_ActivityTrigger_native_at_resumeActivity(JNIEnv *env, j } } +static void +com_android_internal_app_ActivityTrigger_native_at_pauseActivity(JNIEnv *env, jobject clazz, jstring activity) +{ + for(size_t i = 0; i < gTotalNumLibs; i++){ + if(mDlLibHandlers[i].pauseActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if ( NULL != actStr) { + (*mDlLibHandlers[i].pauseActivity)(actStr); + env->ReleaseStringUTFChars(activity, actStr); + } + } + } +} + +static void +com_android_internal_app_ActivityTrigger_native_at_stopActivity(JNIEnv *env, jobject clazz, jstring activity) +{ + for(size_t i = 0; i < gTotalNumLibs; i++){ + if(mDlLibHandlers[i].stopActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (NULL != actStr) { + (*mDlLibHandlers[i].stopActivity)(actStr); + env->ReleaseStringUTFChars(activity, actStr); + } + } + } +} // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { {"native_at_startActivity", "(Ljava/lang/String;I)I", (void *)com_android_internal_app_ActivityTrigger_native_at_startActivity}, {"native_at_resumeActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_resumeActivity}, + {"native_at_pauseActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_pauseActivity}, + {"native_at_stopActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_stopActivity}, {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity}, }; diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 705f8716e729..f85af7e62c10 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1105,6 +1105,9 @@ final class ActivityStack { if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to PAUSING: " + prev); else if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Start pausing: " + prev); + + mActivityTrigger.activityPauseTrigger(prev.intent, prev.info, prev.appInfo); + mResumedActivity = null; mPausingActivity = prev; mLastPausedActivity = prev; @@ -3246,11 +3249,15 @@ final class ActivityStack { r.resumeKeyDispatchingLocked(); try { r.stopped = false; + if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to STOPPING: " + r + " (stop requested)"); r.state = ActivityState.STOPPING; if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Stopping visible=" + r.visible + " for " + r); + + mActivityTrigger.activityStopTrigger(r.intent, r.info, r.appInfo); + if (!r.visible) { mWindowManager.setAppVisibility(r.appToken, false); } -- GitLab From b24ede73e1a93da510ca2c09fa69f0e51cd74a8b Mon Sep 17 00:00:00 2001 From: Zhang Fang Date: Mon, 14 Apr 2014 19:15:37 +0800 Subject: [PATCH 048/185] Telephony: Get SIM card capacity count of SMS Add an API to get the capacity of stored SMS on ICC card CRs-Fixed: 645022 Change-Id: I8064d694d35c4200074a24ee4159d09ecb2a779c --- telephony/java/com/android/internal/telephony/ISms.aidl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/telephony/java/com/android/internal/telephony/ISms.aidl b/telephony/java/com/android/internal/telephony/ISms.aidl index 70a8653135c8..c872ad943bfc 100644 --- a/telephony/java/com/android/internal/telephony/ISms.aidl +++ b/telephony/java/com/android/internal/telephony/ISms.aidl @@ -447,4 +447,12 @@ interface ISms { void sendStoredMultipartText(int subId, String callingPkg, in Uri messageUri, String scAddress, in List sentIntents, in List deliveryIntents); + + /** + * Get the capacity count of sms on Icc card. + * + * @param subId for subId which getSmsCapacityOnIcc is queried. + * @return capacity of ICC + */ + int getSmsCapacityOnIccForSubscriber(int subId); } -- GitLab From 187cb98886e283470d8953e76d54ce26a2cd69df Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Mon, 6 Jul 2015 15:20:24 -0700 Subject: [PATCH 049/185] Camera: Extend face detection This change is the combination of below commits, plus removing ExtendedFace class from frameworks/base. # This is the 1st commit message: Add framework support for extended face detect CRs-Fixed: 587195 Change-Id: I2a1c477ee6d11f2b9764966abbb85ede9100fe91 # This is the 2nd commit message: Camera: Extended face features added - QCFace renamed to ExtendedFace CRs-Fixed: 587195 Change-Id: I7c7e2073f283522c2f0bd0fa5e7b96a74ae18011 # This is the 3rd commit message: Camera: QCFace AOST copyrights fixed AOST files copyright data must not be updated to 2014 CRs-Fixed: 587195 Change-Id: I0cd603da674152c9f47350e571ec3e230b61f8dd Change-Id: I5d099efe1721e5d26af51006dae4e5f3ea3292d6 --- core/java/android/hardware/Camera.java | 17 +++++++ core/jni/android_hardware_Camera.cpp | 68 ++++++++++++++++++++++++-- 2 files changed, 82 insertions(+), 3 deletions(-) diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index c26cf6bc3088..ae171f754a68 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -1852,6 +1852,23 @@ public class Camera { * as a set. Either they are all valid, or none of them are. */ public Point mouth = null; + + /** + * {@hide} + */ + public int smileDegree = 0; + /** + * {@hide} + */ + public int smileScore = 0; + /** + * {@hide} + */ + public int blinkDetected = 0; + /** + * {@hide} + */ + public int faceRecognised = 0; } /** diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 29a746b202b0..8b09ab7a8b57 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -62,6 +62,18 @@ struct fields_t { jmethodID rect_constructor; jmethodID face_constructor; jmethodID point_constructor; + jfieldID face_sm_degree; + jfieldID face_sm_score; + jfieldID face_blink_detected; + jfieldID face_gaze_angle; + jfieldID face_updown_dir; + jfieldID face_leftright_dir; + jfieldID face_roll_dir; + jfieldID face_leye_blink; + jfieldID face_reye_blink; + jfieldID face_left_right_gaze; + jfieldID face_top_bottom_gaze; + jfieldID face_recognised; }; static fields_t fields; @@ -97,6 +109,7 @@ private: jclass mFaceClass; // strong reference to Face class jclass mRectClass; // strong reference to Rect class jclass mPointClass; // strong reference to Point class + bool mIsExtendedFace; Mutex mLock; /* @@ -148,8 +161,16 @@ JNICameraContext::JNICameraContext(JNIEnv* env, jobject weak_this, jclass clazz, mCameraJClass = (jclass)env->NewGlobalRef(clazz); mCamera = camera; - jclass faceClazz = env->FindClass("android/hardware/Camera$Face"); - mFaceClass = (jclass) env->NewGlobalRef(faceClazz); + jclass extendedfaceClazz = env->FindClass("org/codeaurora/camera/ExtendedFace"); + if (NULL != extendedfaceClazz) { + mFaceClass = (jclass) env->NewGlobalRef(extendedfaceClazz); + mIsExtendedFace = true; + } else { + env->ExceptionClear(); + jclass faceClazz = env->FindClass("android/hardware/Camera$Face"); + mFaceClass = (jclass) env->NewGlobalRef(faceClazz); + mIsExtendedFace = false; + } jclass rectClazz = env->FindClass("android/graphics/Rect"); mRectClass = (jclass) env->NewGlobalRef(rectClazz); @@ -374,7 +395,6 @@ void JNICameraContext::postMetadata(JNIEnv *env, int32_t msgType, camera_frame_m env->SetIntField(rect, fields.rect_top, metadata->faces[i].rect[1]); env->SetIntField(rect, fields.rect_right, metadata->faces[i].rect[2]); env->SetIntField(rect, fields.rect_bottom, metadata->faces[i].rect[3]); - env->SetObjectField(face, fields.face_rect, rect); env->SetIntField(face, fields.face_score, metadata->faces[i].score); @@ -403,6 +423,21 @@ void JNICameraContext::postMetadata(JNIEnv *env, int32_t msgType, camera_frame_m env->SetIntField(mouth, fields.point_y, metadata->faces[i].mouth[1]); env->SetObjectField(face, fields.face_mouth, mouth); env->DeleteLocalRef(mouth); + + if (mIsExtendedFace) { + env->SetIntField(face, fields.face_sm_degree, metadata->faces[i].smile_degree); + env->SetIntField(face, fields.face_sm_score, metadata->faces[i].smile_score); + env->SetIntField(face, fields.face_blink_detected, metadata->faces[i].blink_detected); + env->SetIntField(face, fields.face_recognised, metadata->faces[i].face_recognised); + env->SetIntField(face, fields.face_gaze_angle, metadata->faces[i].gaze_angle); + env->SetIntField(face, fields.face_updown_dir, metadata->faces[i].updown_dir); + env->SetIntField(face, fields.face_leftright_dir, metadata->faces[i].leftright_dir); + env->SetIntField(face, fields.face_roll_dir, metadata->faces[i].roll_dir); + env->SetIntField(face, fields.face_leye_blink, metadata->faces[i].leye_blink); + env->SetIntField(face, fields.face_reye_blink, metadata->faces[i].reye_blink); + env->SetIntField(face, fields.face_left_right_gaze, metadata->faces[i].left_right_gaze); + env->SetIntField(face, fields.face_top_bottom_gaze, metadata->faces[i].top_bottom_gaze); + } } env->DeleteLocalRef(face); @@ -1198,6 +1233,27 @@ int register_android_hardware_Camera(JNIEnv *env) { "android/graphics/Point", "y", "I", &fields.point_y}, }; + field extendedfacefields_to_find[] = { + { "org/codeaurora/camera/ExtendedFace", "rect", "Landroid/graphics/Rect;", &fields.face_rect }, + { "org/codeaurora/camera/ExtendedFace", "score", "I", &fields.face_score }, + { "org/codeaurora/camera/ExtendedFace", "id", "I", &fields.face_id }, + { "org/codeaurora/camera/ExtendedFace", "leftEye", "Landroid/graphics/Point;", &fields.face_left_eye }, + { "org/codeaurora/camera/ExtendedFace", "rightEye", "Landroid/graphics/Point;", &fields.face_right_eye }, + { "org/codeaurora/camera/ExtendedFace", "mouth", "Landroid/graphics/Point;", &fields.face_mouth }, + { "org/codeaurora/camera/ExtendedFace", "smileDegree", "I", &fields.face_sm_degree }, + { "org/codeaurora/camera/ExtendedFace", "smileScore", "I", &fields.face_sm_score }, + { "org/codeaurora/camera/ExtendedFace", "blinkDetected", "I", &fields.face_blink_detected }, + { "org/codeaurora/camera/ExtendedFace", "faceRecognized", "I", &fields.face_recognised }, + { "org/codeaurora/camera/ExtendedFace", "gazeAngle", "I", &fields.face_gaze_angle }, + { "org/codeaurora/camera/ExtendedFace", "updownDir", "I", &fields.face_updown_dir }, + { "org/codeaurora/camera/ExtendedFace", "leftrightDir", "I", &fields.face_leftright_dir }, + { "org/codeaurora/camera/ExtendedFace", "rollDir", "I", &fields.face_roll_dir }, + { "org/codeaurora/camera/ExtendedFace", "leyeBlink", "I", &fields.face_leye_blink }, + { "org/codeaurora/camera/ExtendedFace", "reyeBlink", "I", &fields.face_reye_blink }, + { "org/codeaurora/camera/ExtendedFace", "leftrightGaze", "I", &fields.face_left_right_gaze }, + { "org/codeaurora/camera/ExtendedFace", "topbottomGaze", "I", &fields.face_top_bottom_gaze }, + }; + find_fields(env, fields_to_find, NELEM(fields_to_find)); jclass clazz = FindClassOrDie(env, "android/hardware/Camera"); @@ -1217,6 +1273,12 @@ int register_android_hardware_Camera(JNIEnv *env) return -1; } + clazz = env->FindClass("org/codeaurora/camera/ExtendedFace"); + if (NULL != clazz) { + fields.face_constructor = env->GetMethodID(clazz, "", "()V"); + find_fields(env, extendedfacefields_to_find, NELEM(extendedfacefields_to_find)); + } + // Register native functions return RegisterMethodsOrDie(env, "android/hardware/Camera", camMethods, NELEM(camMethods)); } -- GitLab From 70bce28c3a7e5ea3530c787e8cde1f7a4420144b Mon Sep 17 00:00:00 2001 From: Hamad Kadmany Date: Fri, 6 May 2016 21:36:24 +0300 Subject: [PATCH 050/185] Support WiGig SoftAP mode WiGig softAP needed in standalone mode and FST modes. In standalone mode, new API to start/stop WiGig softAP is added. In FST mode, when FST enabled (persist.fst.rate.upgrade.en system property), tether (including running dhcp server) over bonding driver instead of the wifi driver. Change-Id: If5d9555fddb321c38803dc77319243abfabe8c05 --- .../android/os/INetworkManagementService.aidl | 10 ++++++++++ .../server/NetworkManagementService.java | 20 +++++++++++++++++++ .../server/connectivity/Tethering.java | 10 ++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index 36ba6966effa..c82aa9af8158 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -227,11 +227,21 @@ interface INetworkManagementService */ void startAccessPoint(in WifiConfiguration wifiConfig, String iface); + /** + * Start Wigig Access Point + */ + void startWigigAccessPoint(); + /** * Stop Wifi Access Point */ void stopAccessPoint(String iface); + /** + * Stop Wigig Access Point + */ + void stopWigigAccessPoint(); + /** * Set Access Point config */ diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index f2368779336d..9bde75718f97 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1505,6 +1505,16 @@ public class NetworkManagementService extends INetworkManagementService.Stub } } + @Override + public void startWigigAccessPoint() { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + try { + mConnector.execute("softap", "qccmd", "set", "enable_wigig_softap=1"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + private static String getSecurityType(WifiConfiguration wifiConfig) { switch (wifiConfig.getAuthType()) { case KeyMgmt.WPA_PSK: @@ -1551,6 +1561,16 @@ public class NetworkManagementService extends INetworkManagementService.Stub } } + @Override + public void stopWigigAccessPoint() { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + try { + mConnector.execute("softap", "qccmd", "set", "enable_wigig_softap=0"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + @Override public void setAccessPoint(WifiConfiguration wifiConfig, String wlanIface) { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 1012f9aa031f..0454dd663a4a 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -220,11 +220,17 @@ public class Tethering extends BaseNetworkObserver { void updateConfiguration() { String[] tetherableUsbRegexs = mContext.getResources().getStringArray( com.android.internal.R.array.config_tether_usb_regexs); - String[] tetherableWifiRegexs = mContext.getResources().getStringArray( - com.android.internal.R.array.config_tether_wifi_regexs); + String[] tetherableWifiRegexs; String[] tetherableBluetoothRegexs = mContext.getResources().getStringArray( com.android.internal.R.array.config_tether_bluetooth_regexs); + if (SystemProperties.getInt("persist.fst.rate.upgrade.en", 0) == 1) { + tetherableWifiRegexs = new String[] {"bond0"}; + } else { + tetherableWifiRegexs = mContext.getResources().getStringArray( + com.android.internal.R.array.config_tether_wifi_regexs); + } + int ifaceTypes[] = mContext.getResources().getIntArray( com.android.internal.R.array.config_tether_upstream_types); Collection upstreamIfaceTypes = new ArrayList(); -- GitLab From df660b811e3b469396aa46b79ab1437a112f7f3f Mon Sep 17 00:00:00 2001 From: Puneet Mishra Date: Tue, 24 Nov 2015 14:37:38 +0000 Subject: [PATCH 051/185] frameworks/base: Support for third party NFC features and extensions This change is a combination of following changes: 1) frameworks/base: Support for third party NFC features Integration of below modifications are necessary to support third party NFC software: * a new interface in INfcAdapter.aidl allowing vendor specific extensions and features * a new size for MIFARE Classic tags * a modified constructor to distinguish MIFARE Classic tags from NfcA tags * allowing extensions to AidGroup and changing the protection of the instance variables to package protected Author: Puneet Mishra Change-Id: Ic11dc68c4ea83262c705ec50b75b5808aa064f82 (integrated from commit 57a001b7851c97d41f042dda643f9a87aa6306e5) 2) NFC: Allow extensions to ApduServiceInfo Mobile network operators expect additional features in ApduServiceInfo to support their payment solutions. To achieve this, the final keyword is removed from the class definition and its instance variables, thereby allowing extensions to the class. Author: Puneet Mishra Change-Id: I9058d08e729027b04ee94405c66ff9d99c0f963b Change-Id: I04bbe46bf9efd032e973bba7a16dc430fb6edd12 --- core/java/android/nfc/INfcAdapter.aidl | 5 ++++ .../android/nfc/cardemulation/AidGroup.java | 11 +++++---- .../nfc/cardemulation/ApduServiceInfo.java | 23 +++++++++++-------- core/java/android/nfc/tech/MifareClassic.java | 6 +++++ core/java/android/nfc/tech/NfcA.java | 13 +++++++++-- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl index f991efed07eb..8ea509c44205 100644 --- a/core/java/android/nfc/INfcAdapter.aidl +++ b/core/java/android/nfc/INfcAdapter.aidl @@ -1,4 +1,7 @@ /* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * Not a Contribution. + * * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,6 +33,7 @@ import android.nfc.INfcFCardEmulation; import android.nfc.INfcUnlockHandler; import android.nfc.ITagRemovedCallback; import android.os.Bundle; +import android.os.IBinder; /** * @hide @@ -40,6 +44,7 @@ interface INfcAdapter INfcCardEmulation getNfcCardEmulationInterface(); INfcFCardEmulation getNfcFCardEmulationInterface(); INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg); + IBinder getNfcAdapterVendorInterface(in String vendor); int getState(); boolean disable(boolean saveState); diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java index 78a9401a2abd..ce67061a084e 100644 --- a/core/java/android/nfc/cardemulation/AidGroup.java +++ b/core/java/android/nfc/cardemulation/AidGroup.java @@ -1,4 +1,7 @@ /* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * Not a Contribution. + * * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -37,7 +40,7 @@ import android.util.Log; * * @hide */ -public final class AidGroup implements Parcelable { +public class AidGroup implements Parcelable { /** * The maximum number of AIDs that can be present in any one group. */ @@ -45,9 +48,9 @@ public final class AidGroup implements Parcelable { static final String TAG = "AidGroup"; - final List aids; - final String category; - final String description; + protected List aids; + protected String category; + protected String description; /** * Creates a new AidGroup object. diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java index 7678678f3513..fe3b594bfc31 100644 --- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java +++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java @@ -1,4 +1,7 @@ /* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * Not a Contribution. + * * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -48,53 +51,53 @@ import java.util.Map; /** * @hide */ -public final class ApduServiceInfo implements Parcelable { +public class ApduServiceInfo implements Parcelable { static final String TAG = "ApduServiceInfo"; /** * The service that implements this */ - final ResolveInfo mService; + protected ResolveInfo mService; /** * Description of the service */ - final String mDescription; + protected String mDescription; /** * Whether this service represents AIDs running on the host CPU */ - final boolean mOnHost; + protected boolean mOnHost; /** * Mapping from category to static AID group */ - final HashMap mStaticAidGroups; + protected HashMap mStaticAidGroups; /** * Mapping from category to dynamic AID group */ - final HashMap mDynamicAidGroups; + protected HashMap mDynamicAidGroups; /** * Whether this service should only be started when the device is unlocked. */ - final boolean mRequiresDeviceUnlock; + protected boolean mRequiresDeviceUnlock; /** * The id of the service banner specified in XML. */ - final int mBannerResourceId; + protected int mBannerResourceId; /** * The uid of the package the service belongs to */ - final int mUid; + protected int mUid; /** * Settings Activity for this service */ - final String mSettingsActivityName; + protected String mSettingsActivityName; /** * @hide diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java index 8c92288d0047..302c02daa638 100644 --- a/core/java/android/nfc/tech/MifareClassic.java +++ b/core/java/android/nfc/tech/MifareClassic.java @@ -1,4 +1,6 @@ /* + * Copyright (C) 2015 NXP Semiconductors + * The original Work has been changed by NXP Semiconductors. * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -173,6 +175,10 @@ public final class MifareClassic extends BasicTagTechnology { mType = TYPE_CLASSIC; mSize = SIZE_4K; break; + case 0x19: + mType = TYPE_CLASSIC; + mSize = SIZE_2K; + break; case 0x28: mType = TYPE_CLASSIC; mSize = SIZE_1K; diff --git a/core/java/android/nfc/tech/NfcA.java b/core/java/android/nfc/tech/NfcA.java index 88730f9af3df..b7fa455e3880 100644 --- a/core/java/android/nfc/tech/NfcA.java +++ b/core/java/android/nfc/tech/NfcA.java @@ -1,4 +1,6 @@ /* + * Copyright (C) 2015 NXP Semiconductors + * The original Work has been changed by NXP Semiconductors. * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -66,8 +68,15 @@ public final class NfcA extends BasicTagTechnology { /** @hide */ public NfcA(Tag tag) throws RemoteException { super(tag, TagTechnology.NFC_A); - Bundle extras = tag.getTechExtras(TagTechnology.NFC_A); - mSak = extras.getShort(EXTRA_SAK); + Bundle extras; + mSak = 0; + if(tag.hasTech(TagTechnology.MIFARE_CLASSIC)) + { + extras = tag.getTechExtras(TagTechnology.MIFARE_CLASSIC); + mSak = extras.getShort(EXTRA_SAK); + } + extras = tag.getTechExtras(TagTechnology.NFC_A); + mSak |= extras.getShort(EXTRA_SAK); mAtqa = extras.getByteArray(EXTRA_ATQA); } -- GitLab From e9b142f80437158a10fae4c6a98cfff4a128f5e3 Mon Sep 17 00:00:00 2001 From: Ashwini Munigala Date: Fri, 14 Aug 2015 17:05:27 +0530 Subject: [PATCH 052/185] OBEX: Dynamic VERBOSE level logging for OBEX. - Support runtime VERBOSE level logging control for OBEX lib. - Added extra informative logs useful to debug issues from obex layer. Change-Id: If94c88b438b3c283aca0ba4cc46f42bb1d8c37eb --- obex/javax/obex/ClientOperation.java | 2 +- obex/javax/obex/ClientSession.java | 1 + obex/javax/obex/ObexHelper.java | 28 ++++++++++++++++++++++++---- obex/javax/obex/ObexSession.java | 2 +- obex/javax/obex/ServerOperation.java | 9 ++++++++- obex/javax/obex/ServerSession.java | 12 +++++++++--- 6 files changed, 44 insertions(+), 10 deletions(-) mode change 100644 => 100755 obex/javax/obex/ClientOperation.java mode change 100644 => 100755 obex/javax/obex/ClientSession.java mode change 100644 => 100755 obex/javax/obex/ObexHelper.java mode change 100644 => 100755 obex/javax/obex/ObexSession.java mode change 100644 => 100755 obex/javax/obex/ServerOperation.java mode change 100644 => 100755 obex/javax/obex/ServerSession.java diff --git a/obex/javax/obex/ClientOperation.java b/obex/javax/obex/ClientOperation.java old mode 100644 new mode 100755 index 883c8c6ed75d..cf8956f3fe56 --- a/obex/javax/obex/ClientOperation.java +++ b/obex/javax/obex/ClientOperation.java @@ -52,7 +52,7 @@ public final class ClientOperation implements Operation, BaseStream { private static final String TAG = "ClientOperation"; - private static final boolean V = ObexHelper.VDBG; + private static final boolean V = Log.isLoggable(ObexHelper.LOG_TAG, Log.VERBOSE); private ClientSession mParent; diff --git a/obex/javax/obex/ClientSession.java b/obex/javax/obex/ClientSession.java old mode 100644 new mode 100755 index 272a920754f5..111ab7fe6c13 --- a/obex/javax/obex/ClientSession.java +++ b/obex/javax/obex/ClientSession.java @@ -48,6 +48,7 @@ import android.util.Log; public final class ClientSession extends ObexSession { private static final String TAG = "ClientSession"; + private static final boolean V = Log.isLoggable(ObexHelper.LOG_TAG, Log.VERBOSE); private boolean mOpen; diff --git a/obex/javax/obex/ObexHelper.java b/obex/javax/obex/ObexHelper.java old mode 100644 new mode 100755 index fa50943343e9..431525edd23c --- a/obex/javax/obex/ObexHelper.java +++ b/obex/javax/obex/ObexHelper.java @@ -52,7 +52,8 @@ import android.util.Log; public final class ObexHelper { private static final String TAG = "ObexHelper"; - public static final boolean VDBG = false; + public static final String LOG_TAG = "BluetoothObex"; + public static final boolean VDBG = Log.isLoggable(LOG_TAG, Log.VERBOSE); /** * Defines the basic packet length used by OBEX. Every OBEX packet has the * same basic format:
@@ -190,6 +191,7 @@ public final class ObexHelper { try { while (index < headerArray.length) { headerID = 0xFF & headerArray[index]; + if (VDBG) Log.v(TAG,"updateHeaderSet headerID = " + headerID); switch (headerID & (0xC0)) { /* @@ -375,8 +377,9 @@ public final class ObexHelper { * Determine if there is a connection ID to send. If there is, * then it should be the first header in the packet. */ + if (VDBG) Log.v(TAG,"createHeader = " + head); if ((headImpl.mConnectionID != null) && (headImpl.getHeader(HeaderSet.TARGET) == null)) { - + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.CONNECTION_ID); out.write((byte)HeaderSet.CONNECTION_ID); out.write(headImpl.mConnectionID); } @@ -384,6 +387,7 @@ public final class ObexHelper { // Count Header intHeader = (Long)headImpl.getHeader(HeaderSet.COUNT); if (intHeader != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.COUNT); out.write((byte)HeaderSet.COUNT); value = ObexHelper.convertToByteArray(intHeader.longValue()); out.write(value); @@ -395,6 +399,7 @@ public final class ObexHelper { // Name Header stringHeader = (String)headImpl.getHeader(HeaderSet.NAME); if (stringHeader != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.NAME); out.write((byte)HeaderSet.NAME); value = ObexHelper.convertToUnicodeByteArray(stringHeader); length = value.length + 3; @@ -415,6 +420,7 @@ public final class ObexHelper { // Type Header stringHeader = (String)headImpl.getHeader(HeaderSet.TYPE); if (stringHeader != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.TYPE); out.write((byte)HeaderSet.TYPE); try { value = stringHeader.getBytes("ISO8859_1"); @@ -436,6 +442,7 @@ public final class ObexHelper { // Length Header intHeader = (Long)headImpl.getHeader(HeaderSet.LENGTH); if (intHeader != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.LENGTH); out.write((byte)HeaderSet.LENGTH); value = ObexHelper.convertToByteArray(intHeader.longValue()); out.write(value); @@ -447,7 +454,7 @@ public final class ObexHelper { // Time ISO Header dateHeader = (Calendar)headImpl.getHeader(HeaderSet.TIME_ISO_8601); if (dateHeader != null) { - + if (VDBG) Log.v(TAG," Add dateHeader = " + HeaderSet.TIME_ISO_8601); /* * The ISO Header should take the form YYYYMMDDTHHMMSSZ. The * 'Z' will only be included if it is a UTC time. @@ -509,6 +516,7 @@ public final class ObexHelper { // Time 4 Byte Header dateHeader = (Calendar)headImpl.getHeader(HeaderSet.TIME_4_BYTE); if (dateHeader != null) { + if (VDBG) Log.v(TAG," Add dateHeader = " + HeaderSet.TIME_4_BYTE); out.write(HeaderSet.TIME_4_BYTE); /* @@ -543,6 +551,7 @@ public final class ObexHelper { // Target Header value = (byte[])headImpl.getHeader(HeaderSet.TARGET); if (value != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.TARGET); out.write((byte)HeaderSet.TARGET); length = value.length + 3; lengthArray[0] = (byte)(255 & (length >> 8)); @@ -571,6 +580,7 @@ public final class ObexHelper { // Who Header value = (byte[])headImpl.getHeader(HeaderSet.WHO); if (value != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.WHO); out.write((byte)HeaderSet.WHO); length = value.length + 3; lengthArray[0] = (byte)(255 & (length >> 8)); @@ -582,9 +592,10 @@ public final class ObexHelper { } } - // Connection ID Header + // Application Parameter Header value = (byte[])headImpl.getHeader(HeaderSet.APPLICATION_PARAMETER); if (value != null) { + if (VDBG) Log.v(TAG," Add APP PARAM Header = " + HeaderSet.APPLICATION_PARAMETER); out.write((byte)HeaderSet.APPLICATION_PARAMETER); length = value.length + 3; lengthArray[0] = (byte)(255 & (length >> 8)); @@ -623,6 +634,7 @@ public final class ObexHelper { lengthArray[1] = (byte)(255 & length); out.write(lengthArray); out.write(value); + if (VDBG) Log.v(TAG," Add Unicode String value = " + value); if (nullOut) { headImpl.setHeader(i + 0x30, null); } @@ -637,6 +649,7 @@ public final class ObexHelper { lengthArray[1] = (byte)(255 & length); out.write(lengthArray); out.write(value); + if (VDBG) Log.v(TAG," Add ByteSeq value = " + value); if (nullOut) { headImpl.setHeader(i + 0x70, null); } @@ -647,6 +660,7 @@ public final class ObexHelper { if (byteHeader != null) { out.write((byte)i + 0xB0); out.write(byteHeader.byteValue()); + if (VDBG) Log.v(TAG," Add ByteHeader value = " + byteHeader.byteValue()); if (nullOut) { headImpl.setHeader(i + 0xB0, null); } @@ -657,6 +671,7 @@ public final class ObexHelper { if (intHeader != null) { out.write((byte)i + 0xF0); out.write(ObexHelper.convertToByteArray(intHeader.longValue())); + if (VDBG) Log.v(TAG," Add Int value = " + intHeader.longValue()); if (nullOut) { headImpl.setHeader(i + 0xF0, null); } @@ -671,6 +686,7 @@ public final class ObexHelper { lengthArray[1] = (byte)(255 & length); out.write(lengthArray); out.write(headImpl.mAuthChall); + if (VDBG) Log.v(TAG," Add mAuthChall value = " + headImpl.mAuthChall); if (nullOut) { headImpl.mAuthChall = null; } @@ -684,6 +700,7 @@ public final class ObexHelper { lengthArray[1] = (byte)(255 & length); out.write(lengthArray); out.write(headImpl.mAuthResp); + if (VDBG) Log.v(TAG," Add mAuthChall value = " + headImpl.mAuthResp); if (nullOut) { headImpl.mAuthResp = null; } @@ -699,8 +716,10 @@ public final class ObexHelper { // Add the SRM header byteHeader = (Byte)headImpl.getHeader(HeaderSet.SINGLE_RESPONSE_MODE); if (byteHeader != null) { + if (VDBG) Log.v(TAG," Add SRM Header = " + HeaderSet.SINGLE_RESPONSE_MODE); out.write((byte)HeaderSet.SINGLE_RESPONSE_MODE); out.write(byteHeader.byteValue()); + if (VDBG) Log.v(TAG," Add SRM value = " + byteHeader.byteValue()); if (nullOut) { headImpl.setHeader(HeaderSet.SINGLE_RESPONSE_MODE, null); } @@ -709,6 +728,7 @@ public final class ObexHelper { // Add the SRM parameter header byteHeader = (Byte)headImpl.getHeader(HeaderSet.SINGLE_RESPONSE_MODE_PARAMETER); if (byteHeader != null) { + if (VDBG) Log.v(TAG," Add Header = " + HeaderSet.SINGLE_RESPONSE_MODE_PARAMETER); out.write((byte)HeaderSet.SINGLE_RESPONSE_MODE_PARAMETER); out.write(byteHeader.byteValue()); if (nullOut) { diff --git a/obex/javax/obex/ObexSession.java b/obex/javax/obex/ObexSession.java old mode 100644 new mode 100755 index 542b9c8b2492..f5e607cd14c4 --- a/obex/javax/obex/ObexSession.java +++ b/obex/javax/obex/ObexSession.java @@ -50,7 +50,7 @@ import android.util.Log; public class ObexSession { private static final String TAG = "ObexSession"; - private static final boolean V = ObexHelper.VDBG; + private static final boolean V = Log.isLoggable(ObexHelper.LOG_TAG, Log.VERBOSE); protected Authenticator mAuthenticator; diff --git a/obex/javax/obex/ServerOperation.java b/obex/javax/obex/ServerOperation.java old mode 100644 new mode 100755 index 6ccccb514eb5..87943bfe494d --- a/obex/javax/obex/ServerOperation.java +++ b/obex/javax/obex/ServerOperation.java @@ -59,7 +59,7 @@ public final class ServerOperation implements Operation, BaseStream { private static final String TAG = "ServerOperation"; - private static final boolean V = ObexHelper.VDBG; // Verbose debugging + private static final boolean V = Log.isLoggable(ObexHelper.LOG_TAG, Log.VERBOSE); public boolean isAborted; @@ -124,6 +124,7 @@ public final class ServerOperation implements Operation, BaseStream { */ public ServerOperation(ServerSession p, InputStream in, int request, int maxSize, ServerRequestHandler listen) throws IOException { + if (V) Log.v(TAG, "ServerOperation"); isAborted = false; mParent = p; @@ -340,14 +341,17 @@ public final class ServerOperation implements Operation, BaseStream { */ public synchronized boolean continueOperation(boolean sendEmpty, boolean inStream) throws IOException { + if (V) Log.v(TAG, "continueOperation"); if (!mGetOperation) { if (!finalBitSet) { if (sendEmpty) { sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); + if (V) Log.v(TAG, "continueOperation:ServerSet SRM sendEmpty clause"); return true; } else { if ((mResponseSize > 3) || (mPrivateOutput.size() > 0)) { sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); + if (V) Log.v(TAG, "continueOperation: Server setting SRM"); return true; } else { return false; @@ -357,6 +361,7 @@ public final class ServerOperation implements Operation, BaseStream { return false; } } else { + if (V) Log.v(TAG, "Get continueOperation "); sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); return true; } @@ -405,6 +410,8 @@ public final class ServerOperation implements Operation, BaseStream { bodyLength = mPrivateOutput.size(); orginalBodyLength = bodyLength; } + if(V)Log.v(TAG, "mMaxPcKLen : " + mMaxPacketLength); + if(V)Log.v(TAG, "headerArryLen : " + headerArray.length); if ((ObexHelper.BASE_PACKET_LENGTH + headerArray.length) > mMaxPacketLength) { diff --git a/obex/javax/obex/ServerSession.java b/obex/javax/obex/ServerSession.java old mode 100644 new mode 100755 index 9eb5d0c8f1e0..33b0bde81423 --- a/obex/javax/obex/ServerSession.java +++ b/obex/javax/obex/ServerSession.java @@ -47,7 +47,7 @@ import java.io.OutputStream; public final class ServerSession extends ObexSession implements Runnable { private static final String TAG = "Obex ServerSession"; - private static final boolean V = ObexHelper.VDBG; + private static final boolean V = Log.isLoggable(ObexHelper.LOG_TAG, Log.VERBOSE); private ObexTransport mTransport; @@ -175,7 +175,7 @@ public final class ServerSession extends ObexSession implements Runnable { mInput.read(); } code = mListener.onAbort(request, reply); - Log.v(TAG, "onAbort request handler return value- " + code); + Log.d(TAG, "onAbort request handler return value- " + code); code = validateResponseCode(code); } sendResponse(code, null); @@ -195,6 +195,7 @@ public final class ServerSession extends ObexSession implements Runnable { * @throws IOException if an error occurred at the transport layer */ private void handlePutRequest(int type) throws IOException { + if (V) Log.v(TAG, "handlePutRequest"); ServerOperation op = new ServerOperation(this, mInput, type, mMaxPacketLength, mListener); try { int response = -1; @@ -206,10 +207,12 @@ public final class ServerSession extends ObexSession implements Runnable { response = validateResponseCode(mListener.onPut(op)); } if (response != ResponseCodes.OBEX_HTTP_OK && !op.isAborted) { + if (V) Log.v(TAG, "handlePutRequest pre != HTTP_OK sendReply"); op.sendReply(response); } else if (!op.isAborted) { // wait for the final bit while (!op.finalBitSet) { + if (V) Log.v(TAG, "handlePutRequest pre looped sendReply"); op.sendReply(ResponseCodes.OBEX_HTTP_CONTINUE); } op.sendReply(response); @@ -220,7 +223,7 @@ public final class ServerSession extends ObexSession implements Runnable { *internal error should not be sent because server has already replied with *OK response in "sendReply") */ - if(V) Log.d(TAG,"Exception occured - sending OBEX_HTTP_INTERNAL_ERROR reply",e); + if(V) Log.w(TAG,"Exception occured - sending OBEX_HTTP_INTERNAL_ERROR reply",e); if (!op.isAborted) { sendResponse(ResponseCodes.OBEX_HTTP_INTERNAL_ERROR, null); } @@ -241,6 +244,7 @@ public final class ServerSession extends ObexSession implements Runnable { * @throws IOException if an error occurred at the transport layer */ private void handleGetRequest(int type) throws IOException { + if (V) Log.v(TAG, "handleGetRequest"); ServerOperation op = new ServerOperation(this, mInput, type, mMaxPacketLength, mListener); try { int response = validateResponseCode(mListener.onGet(op)); @@ -263,6 +267,7 @@ public final class ServerSession extends ObexSession implements Runnable { public void sendResponse(int code, byte[] header) throws IOException { int totalLength = 3; byte[] data = null; + if (V) Log.v(TAG,"sendResponse code " + code + " header : " + header); OutputStream op = mOutput; if (op == null) { return; @@ -270,6 +275,7 @@ public final class ServerSession extends ObexSession implements Runnable { if (header != null) { totalLength += header.length; + if (V) Log.v(TAG, "header != null totalLength = " + totalLength); data = new byte[totalLength]; data[0] = (byte)code; data[1] = (byte)(totalLength >> 8); -- GitLab From 2dced4c7c7785e22978473d9908a9121c3c42a7d Mon Sep 17 00:00:00 2001 From: Umashankar Godachi Date: Thu, 7 Jan 2016 20:37:54 +0530 Subject: [PATCH 053/185] Fix available/remaining PIN/PUK attempts. * Fix to properly display attempts remaining for PIN/PUK. * On bootup show the available PIN/PUK attempts if sim is locked on PIN/PUK. * Show incorrect password message on entering wrong PIN/PUK password. Cherry-picked from commits 2c68d4432bc2a5bee148ed9a26c88541dea4dd58 b2194e67a442c184179b8447632d94506f89add4 d85e75609d4fed906fa50e108c0e8bbf2e9a4a5b 3830fd69499b60615771122a9ffbada3d80da931 c35875ec0e5e83e7116784615bffcd84cb12429b Change-Id: I9e46b7ff646bf68f73a75b2b0015085be6c4c7ec --- packages/Keyguard/res/values/strings.xml | 16 ++++ .../android/keyguard/KeyguardSimPinView.java | 94 +++++++++++++------ .../android/keyguard/KeyguardSimPukView.java | 94 ++++++++++++++----- 3 files changed, 150 insertions(+), 54 deletions(-) diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml index 09fec81e45ac..bb1b24f06023 100644 --- a/packages/Keyguard/res/values/strings.xml +++ b/packages/Keyguard/res/values/strings.xml @@ -363,4 +363,20 @@ Not recognized + + + Enter SIM PIN, you have %d remaining +attempt before you must contact your carrier to unlock your device. + Enter SIM PIN, you have %d remaining +attempts. + + + + + SIM is now disabled. Enter PUK code to continue. You have %d remaining attempt before SIM becomes permanently unusable. Contact carrier for details. + SIM is now disabled. Enter PUK code to continue. You have %d remaining attempts before SIM becomes permanently unusable. Contact carrier for details. + + diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java index cfaf7b622eb7..c99a7274120e 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -50,7 +50,8 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { private ProgressDialog mSimUnlockProgressDialog = null; private CheckSimPin mCheckSimPinThread; - + private boolean mShowDefaultMessage = true; + private int mRemainingAttempts = -1; private AlertDialog mRemainingAttemptsDialog; private int mSubId; private ImageView mSimImageView; @@ -75,25 +76,8 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { public void resetState() { super.resetState(); if (DEBUG) Log.v(TAG, "Resetting state"); - KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); - mSubId = monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED); - if (SubscriptionManager.isValidSubscriptionId(mSubId)) { - int count = TelephonyManager.getDefault().getSimCount(); - Resources rez = getResources(); - final String msg; - int color = Color.WHITE; - if (count < 2) { - msg = rez.getString(R.string.kg_sim_pin_instructions); - } else { - SubscriptionInfo info = monitor.getSubscriptionInfoForSubId(mSubId); - CharSequence displayName = info != null ? info.getDisplayName() : ""; // don't crash - msg = rez.getString(R.string.kg_sim_pin_instructions_multi, displayName); - if (info != null) { - color = info.getIconTint(); - } - } - mSecurityMessageDisplay.setMessage(msg, true); - mSimImageView.setImageTintList(ColorStateList.valueOf(color)); + if (mShowDefaultMessage) { + showDefaultMessage(); } } @@ -109,17 +93,19 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { return 0; } - private String getPinPasswordErrorMessage(int attemptsRemaining) { + private String getPinPasswordErrorMessage(int attemptsRemaining, boolean isDefault) { String displayMessage; - + int msgId; if (attemptsRemaining == 0) { displayMessage = getContext().getString(R.string.kg_password_wrong_pin_code_pukked); } else if (attemptsRemaining > 0) { + msgId = isDefault ? R.plurals.kg_password_default_pin_message : + R.plurals.kg_password_wrong_pin_code; displayMessage = getContext().getResources() - .getQuantityString(R.plurals.kg_password_wrong_pin_code, attemptsRemaining, - attemptsRemaining); + .getQuantityString(msgId, attemptsRemaining, attemptsRemaining); } else { - displayMessage = getContext().getString(R.string.kg_password_pin_failed); + msgId = isDefault ? R.string.kg_sim_pin_instructions : R.string.kg_password_pin_failed; + displayMessage = getContext().getString(msgId); } if (DEBUG) Log.d(LOG_TAG, "getPinPasswordErrorMessage:" + " attemptsRemaining=" + attemptsRemaining + " displayMessage=" + displayMessage); @@ -151,6 +137,9 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); + if (mShowDefaultMessage) { + showDefaultMessage(); + } KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallback); } @@ -231,7 +220,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { } private Dialog getSimRemainingAttemptsDialog(int remaining) { - String msg = getPinPasswordErrorMessage(remaining); + String msg = getPinPasswordErrorMessage(remaining, false); if (mRemainingAttemptsDialog == null) { Builder builder = new AlertDialog.Builder(mContext); builder.setMessage(msg); @@ -267,6 +256,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { post(new Runnable() { @Override public void run() { + mRemainingAttempts = attemptsRemaining; if (mSimUnlockProgressDialog != null) { mSimUnlockProgressDialog.hide(); } @@ -275,8 +265,13 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { if (result == PhoneConstants.PIN_RESULT_SUCCESS) { KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); - mCallback.dismiss(true); + mRemainingAttempts = -1; + mShowDefaultMessage = true; + if (mCallback != null) { + mCallback.dismiss(true); + } } else { + mShowDefaultMessage = false; if (result == PhoneConstants.PIN_PASSWORD_INCORRECT) { if (attemptsRemaining <= 2) { // this is getting critical - show dialog @@ -284,7 +279,8 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { } else { // show message mSecurityMessageDisplay.setMessage( - getPinPasswordErrorMessage(attemptsRemaining), true); + getPinPasswordErrorMessage( + attemptsRemaining, false), true); } } else { // "PIN operation failed!" - no idea what this was and no way to @@ -315,5 +311,47 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { public boolean startDisappearAnimation(Runnable finishRunnable) { return false; } + + private void showDefaultMessage() { + KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); + mSubId = monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED); + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return; + } + if (mRemainingAttempts >= 0) { + mSecurityMessageDisplay.setMessage(getPinPasswordErrorMessage( + mRemainingAttempts, true), true); + return; + } + + int count = TelephonyManager.getDefault().getSimCount(); + Resources rez = getResources(); + final String msg; + int color = Color.WHITE; + if (count < 2) { + msg = rez.getString(R.string.kg_sim_pin_instructions); + } else { + SubscriptionInfo info = monitor.getSubscriptionInfoForSubId(mSubId); + CharSequence displayName = info != null ? info.getDisplayName() : ""; // don't crash + msg = rez.getString(R.string.kg_sim_pin_instructions_multi, displayName); + if (info != null) { + color = info.getIconTint(); + } + } + mSecurityMessageDisplay.setMessage(msg, true); + mSimImageView.setImageTintList(ColorStateList.valueOf(color)); + + new CheckSimPin("", mSubId) { + void onSimCheckResponse(final int result, final int attemptsRemaining) { + Log.d(LOG_TAG, "onSimCheckResponse " + " dummy One result" + result + + " attemptsRemaining=" + attemptsRemaining); + if (attemptsRemaining >= 0) { + mRemainingAttempts = attemptsRemaining; + mSecurityMessageDisplay.setMessage( + getPinPasswordErrorMessage(attemptsRemaining, true), true); + } + } + }.start(); + } } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java index 59c01cf481c7..1063f3a8821f 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java @@ -50,6 +50,8 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { private ProgressDialog mSimUnlockProgressDialog = null; private CheckSimPuk mCheckSimPukThread; + private boolean mShowDefaultMessage = true; + private int mRemainingAttempts = -1; private String mPukText; private String mPinText; private StateMachine mStateMachine = new StateMachine(); @@ -116,25 +118,8 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { mPinText=""; mPukText=""; state = ENTER_PUK; - KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); - mSubId = monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED); - if (SubscriptionManager.isValidSubscriptionId(mSubId)) { - int count = TelephonyManager.getDefault().getSimCount(); - Resources rez = getResources(); - final String msg; - int color = Color.WHITE; - if (count < 2) { - msg = rez.getString(R.string.kg_puk_enter_puk_hint); - } else { - SubscriptionInfo info = monitor.getSubscriptionInfoForSubId(mSubId); - CharSequence displayName = info != null ? info.getDisplayName() : ""; - msg = rez.getString(R.string.kg_puk_enter_puk_hint_multi, displayName); - if (info != null) { - color = info.getIconTint(); - } - } - mSecurityMessageDisplay.setMessage(msg, true); - mSimImageView.setImageTintList(ColorStateList.valueOf(color)); + if (mShowDefaultMessage) { + showDefaultMessage(); } mPasswordEntry.requestFocus(); } @@ -146,17 +131,20 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { return 0; } - private String getPukPasswordErrorMessage(int attemptsRemaining) { + private String getPukPasswordErrorMessage(int attemptsRemaining, boolean isDefault) { String displayMessage; if (attemptsRemaining == 0) { displayMessage = getContext().getString(R.string.kg_password_wrong_puk_code_dead); } else if (attemptsRemaining > 0) { + int msgId = isDefault ? R.plurals.kg_password_default_puk_message : + R.plurals.kg_password_wrong_puk_code; displayMessage = getContext().getResources() - .getQuantityString(R.plurals.kg_password_wrong_puk_code, attemptsRemaining, - attemptsRemaining); + .getQuantityString(msgId, attemptsRemaining, attemptsRemaining); } else { - displayMessage = getContext().getString(R.string.kg_password_puk_failed); + int msgId = isDefault ? R.string.kg_puk_enter_puk_hint : + R.string.kg_password_puk_failed; + displayMessage = getContext().getString(msgId); } if (DEBUG) Log.d(LOG_TAG, "getPukPasswordErrorMessage:" + " attemptsRemaining=" + attemptsRemaining + " displayMessage=" + displayMessage); @@ -194,6 +182,9 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); + if (mShowDefaultMessage) { + showDefaultMessage(); + } KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallback); } @@ -276,7 +267,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { } private Dialog getPukRemainingAttemptsDialog(int remaining) { - String msg = getPukPasswordErrorMessage(remaining); + String msg = getPukPasswordErrorMessage(remaining, false); if (mRemainingAttemptsDialog == null) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setMessage(msg); @@ -332,16 +323,25 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { if (result == PhoneConstants.PIN_RESULT_SUCCESS) { KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); - mCallback.dismiss(true); + mRemainingAttempts = -1; + mShowDefaultMessage = true; + if (mCallback != null) { + mCallback.dismiss(true); + } } else { + mShowDefaultMessage = false; if (result == PhoneConstants.PIN_PASSWORD_INCORRECT) { + // show message + mSecurityMessageDisplay.setMessage(getPukPasswordErrorMessage( + attemptsRemaining, false), true); if (attemptsRemaining <= 2) { // this is getting critical - show dialog getPukRemainingAttemptsDialog(attemptsRemaining).show(); } else { // show message mSecurityMessageDisplay.setMessage( - getPukPasswordErrorMessage(attemptsRemaining), true); + getPukPasswordErrorMessage( + attemptsRemaining, false), true); } } else { mSecurityMessageDisplay.setMessage(getContext().getString( @@ -375,6 +375,48 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { public boolean startDisappearAnimation(Runnable finishRunnable) { return false; } + + private void showDefaultMessage() { + KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); + mSubId = monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED); + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return; + } + if (mRemainingAttempts >= 0) { + mSecurityMessageDisplay.setMessage(getPukPasswordErrorMessage( + mRemainingAttempts, true), true); + return; + } + + int count = TelephonyManager.getDefault().getSimCount(); + Resources rez = getResources(); + final String msg; + int color = Color.WHITE; + if (count < 2) { + msg = rez.getString(R.string.kg_puk_enter_puk_hint); + } else { + SubscriptionInfo info = monitor.getSubscriptionInfoForSubId(mSubId); + CharSequence displayName = info != null ? info.getDisplayName() : ""; + msg = rez.getString(R.string.kg_puk_enter_puk_hint_multi, displayName); + if (info != null) { + color = info.getIconTint(); + } + } + mSecurityMessageDisplay.setMessage(msg, true); + mSimImageView.setImageTintList(ColorStateList.valueOf(color)); + + new CheckSimPuk("", "", mSubId) { + void onSimLockChangedResponse(final int result, final int attemptsRemaining) { + Log.d(LOG_TAG, "onSimCheckResponse " + " dummy One result" + result + + " attemptsRemaining=" + attemptsRemaining); + if (attemptsRemaining >= 0) { + mRemainingAttempts = attemptsRemaining; + mSecurityMessageDisplay.setMessage( + getPukPasswordErrorMessage(attemptsRemaining, true), true); + } + } + }.start(); + } } -- GitLab From 5fce2f7e00a1e2b4ef86f7ee1b15d567216ac831 Mon Sep 17 00:00:00 2001 From: mqi Date: Tue, 17 May 2016 09:36:04 +0800 Subject: [PATCH 054/185] SystemUI: Add support for charging animation Support charging animation by updating battery icon while charging. Add config to control whether show battery charging animation. Change-Id: I17b429bb6cb88d4ec51878cc3fd93e83b1366860 CRs-Fixed: 960847 --- packages/SystemUI/res/values/config.xml | 2 + .../systemui/BatteryMeterDrawable.java | 47 +++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) mode change 100644 => 100755 packages/SystemUI/res/values/config.xml diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml old mode 100644 new mode 100755 index 02b1b50859cd..d420e11b0f35 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -264,5 +264,7 @@ false + + true diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java index 076b5bcd0861..702157ab2ecb 100755 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java @@ -100,6 +100,17 @@ public class BatteryMeterDrawable extends Drawable implements private int mLevel = -1; private boolean mPluggedIn; private boolean mListening; + private static final int ADD_LEVEL = 10; + private static final int ANIM_DURATION = 500; + private int mAnimOffset; + private boolean mCharging; + + private final Runnable mInvalidate = new Runnable() { + @Override + public void run() { + invalidateSelf(); + } + }; public BatteryMeterDrawable(Context context, Handler handler, int frameColor) { mContext = context; @@ -199,12 +210,7 @@ public class BatteryMeterDrawable extends Drawable implements } private void postInvalidate() { - mHandler.post(new Runnable() { - @Override - public void run() { - invalidateSelf(); - } - }); + mHandler.post(mInvalidate); } public void setBatteryController(BatteryController batteryController) { @@ -216,7 +222,7 @@ public class BatteryMeterDrawable extends Drawable implements public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { mLevel = level; mPluggedIn = pluggedIn; - + mCharging = charging; postInvalidate(); } @@ -226,6 +232,26 @@ public class BatteryMeterDrawable extends Drawable implements invalidateSelf(); } + private int updateChargingAnimLevel() { + int curLevel = mLevel; + if (!mCharging) { + mAnimOffset = 0; + mHandler.removeCallbacks(mInvalidate); + } else { + curLevel += mAnimOffset; + if (curLevel >= FULL) { + curLevel = 100; + mAnimOffset = 0; + } else { + mAnimOffset += ADD_LEVEL; + } + + mHandler.removeCallbacks(mInvalidate); + mHandler.postDelayed(mInvalidate, ANIM_DURATION); + } + return curLevel; + } + private static float[] loadBoltPoints(Resources res) { final int[] pts = res.getIntArray(R.array.batterymeter_bolt_points); int maxX = 0, maxY = 0; @@ -323,7 +349,11 @@ public class BatteryMeterDrawable extends Drawable implements @Override public void draw(Canvas c) { - final int level = mLevel; + final boolean showChargingAnim + = mContext.getResources().getBoolean(R.bool.config_show_battery_charging_anim); + final int level = showChargingAnim + ? updateChargingAnimLevel() + : mLevel; if (level == -1) return; @@ -517,5 +547,4 @@ public class BatteryMeterDrawable extends Drawable implements postInvalidate(); } } - } -- GitLab From 5b0cb0d965a50eeadce42f237c0e40eba168b7aa Mon Sep 17 00:00:00 2001 From: qqzhou Date: Mon, 1 Jun 2015 14:59:31 +0800 Subject: [PATCH 055/185] pm: Improve the scan process Use multi task to speed up the scan process Change-Id: Icbcb88c42e794c3b83037fa763c7f479a9df5bcb CRs-Fixed: 984513 --- .../android/server/pm/MultiTaskDealer.java | 141 ++++++++++++++++++ .../server/pm/PackageManagerService.java | 59 ++++++-- 2 files changed, 184 insertions(+), 16 deletions(-) create mode 100644 services/core/java/com/android/server/pm/MultiTaskDealer.java diff --git a/services/core/java/com/android/server/pm/MultiTaskDealer.java b/services/core/java/com/android/server/pm/MultiTaskDealer.java new file mode 100644 index 000000000000..9b8d46ecc556 --- /dev/null +++ b/services/core/java/com/android/server/pm/MultiTaskDealer.java @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of The Linux Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.android.server.pm; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; + +import android.util.Log; + +public class MultiTaskDealer { + + public static final String TAG = "MultiTaskDealer"; + public static final String PACKAGEMANAGER_SCANER = "packagescan"; + private static final boolean DEBUG_TASK = false; + + private static HashMap> map = new HashMap>(); + + public static MultiTaskDealer getDealer(String name) { + WeakReference ref = map.get(name); + MultiTaskDealer dealer = ref!=null?ref.get():null; + return dealer; + } + + public static MultiTaskDealer startDealer(String name,int taskCount) { + MultiTaskDealer dealer = getDealer(name); + if(dealer==null) { + dealer = new MultiTaskDealer(name,taskCount); + WeakReference ref = new WeakReference(dealer); + map.put(name,ref); + } + return dealer; + } + + public void startLock() { + mLock.lock(); + } + + public void endLock() { + mLock.unlock(); + } + + private ThreadPoolExecutor mExecutor; + private int mTaskCount = 0; + private boolean mNeedNotifyEnd = false; + private Object mObjWaitAll = new Object(); + private ReentrantLock mLock = new ReentrantLock(); + + public MultiTaskDealer(String name,int taskCount) { + final String taskName = name; + ThreadFactory factory = new ThreadFactory() + { + private final AtomicInteger mCount = new AtomicInteger(1); + + public Thread newThread(final Runnable r) { + if (DEBUG_TASK) Log.d(TAG, "create a new thread:" + taskName); + return new Thread(r, taskName + "-" + mCount.getAndIncrement()); + } + }; + mExecutor = new ThreadPoolExecutor(taskCount, taskCount, 5, TimeUnit.SECONDS, + new LinkedBlockingQueue(), factory){ + protected void afterExecute(Runnable r, Throwable t) { + if(t!=null) { + t.printStackTrace(); + } + MultiTaskDealer.this.TaskCompleteNotify(r); + if (DEBUG_TASK) Log.d(TAG, "end task"); + super.afterExecute(r,t); + } + protected void beforeExecute(Thread t, Runnable r) { + if (DEBUG_TASK) Log.d(TAG, "start task"); + super.beforeExecute(t,r); + } + }; + } + + public void addTask(Runnable task) { + synchronized (mObjWaitAll) { + mTaskCount+=1; + } + mExecutor.execute(task); + if (DEBUG_TASK) Log.d(TAG, "addTask"); + } + + private void TaskCompleteNotify(Runnable task) { + synchronized (mObjWaitAll) { + mTaskCount-=1; + if(mTaskCount<=0 && mNeedNotifyEnd) { + if (DEBUG_TASK) Log.d(TAG, "complete notify"); + mObjWaitAll.notify(); + } + } + } + + public void waitAll() { + if (DEBUG_TASK) Log.d(TAG, "start wait all"); + synchronized (mObjWaitAll) { + if(mTaskCount>0) { + mNeedNotifyEnd = true; + try { + mObjWaitAll.wait(); + } catch (Exception e) { + } + mNeedNotifyEnd = false; + } + if (DEBUG_TASK) Log.d(TAG, "wait finish"); + return; + } + } +} diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8f84aabf2c7f..9f991d26020a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1,4 +1,7 @@ /* + * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. + * Not a Contribution. + * * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -2276,9 +2279,9 @@ public class PackageManagerService extends IPackageManager.Stub { mSystemPermissions = systemConfig.getSystemPermissions(); mAvailableFeatures = systemConfig.getAvailableFeatures(); - synchronized (mInstallLock) { +// synchronized (mInstallLock) { // writer - synchronized (mPackages) { +// synchronized (mPackages) { mHandlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/); mHandlerThread.start(); @@ -2834,8 +2837,8 @@ public class PackageManagerService extends IPackageManager.Stub { } mEphemeralApplicationRegistry = new EphemeralApplicationRegistry(this); - } // synchronized (mPackages) - } // synchronized (mInstallLock) + //} // synchronized (mPackages) + //} // synchronized (mInstallLock) // Now after opening every single application zip, make sure they // are all flushed. Not really needed, but keeps things nice and @@ -6702,6 +6705,13 @@ public class PackageManagerService extends IPackageManager.Stub { + " flags=0x" + Integer.toHexString(parseFlags)); } + Log.d(TAG, "start scanDirLI:"+dir); + // use multi thread to speed up scanning + int iMultitaskNum = SystemProperties.getInt("persist.pm.multitask", 6); + Log.d(TAG, "max thread:" + iMultitaskNum); + final MultiTaskDealer dealer = (iMultitaskNum > 1) ? MultiTaskDealer.startDealer( + MultiTaskDealer.PACKAGEMANAGER_SCANER, iMultitaskNum) : null; + for (File file : files) { final boolean isPackage = (isApkFile(file) || file.isDirectory()) && !PackageInstallerService.isStageName(file.getName()); @@ -6709,20 +6719,37 @@ public class PackageManagerService extends IPackageManager.Stub { // Ignore entries which are not packages continue; } - try { - scanPackageTracedLI(file, parseFlags | PackageParser.PARSE_MUST_BE_APK, - scanFlags, currentTime, null); - } catch (PackageManagerException e) { - Slog.w(TAG, "Failed to parse " + file + ": " + e.getMessage()); + final File ref_file = file; + final int ref_parseFlags = parseFlags; + final int ref_scanFlags = scanFlags; + final long ref_currentTime = currentTime; + Runnable scanTask = new Runnable() { + public void run() { + try { + scanPackageTracedLI(ref_file, ref_parseFlags | PackageParser.PARSE_MUST_BE_APK, + ref_scanFlags, ref_currentTime, null); + } catch (PackageManagerException e) { + Slog.w(TAG, "Failed to parse " + ref_file + ": " + e.getMessage()); - // Delete invalid userdata apps - if ((parseFlags & PackageParser.PARSE_IS_SYSTEM) == 0 && - e.error == PackageManager.INSTALL_FAILED_INVALID_APK) { - logCriticalInfo(Log.WARN, "Deleting invalid package at " + file); - removeCodePathLI(file); + // Delete invalid userdata apps + if ((ref_parseFlags & PackageParser.PARSE_IS_SYSTEM) == 0 && + e.error == PackageManager.INSTALL_FAILED_INVALID_APK) { + logCriticalInfo(Log.WARN, "Deleting invalid package at " + ref_file); + removeCodePathLI(ref_file); + } + } } - } + }; + + if (dealer != null) + dealer.addTask(scanTask); + else + scanTask.run(); } + + if (dealer != null) + dealer.waitAll(); + Log.d(TAG, "end scanDirLI:"+dir); } private static File getSettingsProblemFile() { @@ -6736,7 +6763,7 @@ public class PackageManagerService extends IPackageManager.Stub { logCriticalInfo(priority, msg); } - static void logCriticalInfo(int priority, String msg) { + static synchronized void logCriticalInfo(int priority, String msg) { Slog.println(priority, TAG, msg); EventLogTags.writePmCriticalInfo(msg); try { -- GitLab From 94296a5c02e817ab09d24dacb5561913fc0636ee Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Mon, 25 Apr 2016 14:57:19 +0800 Subject: [PATCH 056/185] telephony: Make the disconnect cause distinguishable Modify the disconnect cause code to make them distinguishable. Following the guide comments, update the cause code mappings. CRs-Fixed: 801884 Change-Id: Ib10f2fad3f95fa3b88ee02c476605f583e943cd2 --- .../android/telephony/DisconnectCause.java | 158 +++++++++++++++++- 1 file changed, 156 insertions(+), 2 deletions(-) diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java index 9eb1304c6ab6..19f9c39582f5 100644 --- a/telephony/java/android/telephony/DisconnectCause.java +++ b/telephony/java/android/telephony/DisconnectCause.java @@ -194,6 +194,62 @@ public class DisconnectCause { */ public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; + public static final int NO_CIRCUIT_AVAIL = 51; + public static final int NO_ROUTE_TO_DESTINAON = 52; + public static final int OPERATOR_DETERMINED_BARRING = 53; + public static final int CALL_FAIL_NO_USER_RESPONDING = 54; + public static final int CALL_FAIL_NO_ANSWER_FROM_USER = 55; + public static final int CALL_FAIL_DESTINATION_OUT_OF_ORDER = 56; + public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; + public static final int CHANNEL_UNACCEPTABLE = 58; + public static final int CALL_REJECTED = 59; + public static final int NUMBER_CHANGED = 60; + public static final int PREEMPTION = 61; + public static final int FACILITY_REJECTED = 62; + public static final int RESP_TO_STATUS_ENQUIRY = 63; + public static final int NORMAL_UNSPECIFIED = 64; + public static final int NETWORK_OUT_OF_ORDER = 65; + public static final int TEMPORARY_FAILURE = 66; + public static final int SWITCHING_EQUIPMENT_CONGESTION = 67; + public static final int ACCESS_INFORMATION_DISCARDED = 68; + public static final int REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE = 69; + public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 70; + public static final int QOS_UNAVAILABLE = 71; + public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 72; + public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 73; + public static final int BEARER_CAPABILITY_UNAVAILABLE = 74; + public static final int SERVICE_OPTION_NOT_AVAILABLE = 75; + public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 76; + public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 77; + public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 78; + public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; + public static final int INVALID_TRANSACTION_IDENTIFIER = 80; + public static final int USER_NOT_MEMBER_OF_CUG = 81; + public static final int INCOMPATIBLE_DESTINATION = 82; + public static final int INVALID_TRANSIT_NW_SELECTION = 83; + public static final int SEMANTICALLY_INCORRECT_MESSAGE = 84; + public static final int INVALID_MANDATORY_INFORMATION = 85; + public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 86; + public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 87; + public static final int INFORMATION_ELEMENT_NON_EXISTENT = 88; + public static final int CONDITIONAL_IE_ERROR = 89; + public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 90; + public static final int RECOVERY_ON_TIMER_EXPIRED = 91; + public static final int PROTOCOL_ERROR_UNSPECIFIED = 92; + public static final int INTERWORKING_UNSPECIFIED = 93; + public static final int LOCAL_LOW_BATTERY = 94; + public static final int LOW_BATTERY = 95; + + /** EMERGENCY call failed with temporary fail cause */ + public static final int EMERGENCY_TEMP_FAILURE = 96; + /** EMERGENCY call failed with permanent fail cause */ + public static final int EMERGENCY_PERM_FAILURE = 97; + + /** call failed due to LTE to 3G/2G handover not feasible */ + public static final int HO_NOT_FEASIBLE = 98; + + public static final int NON_SELECTED_USER_CLEARING = 99; + //********************************************************************************************* // When adding a disconnect type: // 1) Please assign the new type the next id value below. @@ -202,14 +258,14 @@ public class DisconnectCause { // 4) Update toString() with the newly added disconnect type. // 5) Update android.telecom.DisconnectCauseUtil with any mappings to a telecom.DisconnectCause. // - // NextId: 50 + // NextId: 100 //********************************************************************************************* /** Smallest valid value for call disconnect codes. */ public static final int MINIMUM_VALID_VALUE = NOT_DISCONNECTED; /** Largest valid value for call disconnect codes. */ - public static final int MAXIMUM_VALID_VALUE = VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED; + public static final int MAXIMUM_VALID_VALUE = NON_SELECTED_USER_CLEARING; /** Private constructor to avoid class instantiation. */ private DisconnectCause() { @@ -319,6 +375,104 @@ public class DisconnectCause { return "CDMA_ALREADY_ACTIVATED"; case VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED: return "VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED"; + case NO_CIRCUIT_AVAIL: + return "NO_CIRCUIT_AVAIL"; + case NO_ROUTE_TO_DESTINAON: + return "NO_ROUTE_TO_DESTINAON"; + case OPERATOR_DETERMINED_BARRING: + return "OPERATOR_DETERMINED_BARRING"; + case CALL_FAIL_NO_USER_RESPONDING: + return "CALL_FAIL_NO_USER_RESPONDING"; + case CALL_FAIL_NO_ANSWER_FROM_USER: + return "CALL_FAIL_NO_ANSWER_FROM_USER"; + case CALL_FAIL_DESTINATION_OUT_OF_ORDER: + return "CALL_FAIL_DESTINATION_OUT_OF_ORDER"; + case BEARER_CAPABILITY_NOT_AUTHORIZED: + return "BEARER_CAPABILITY_NOT_AUTHORIZED"; + case CHANNEL_UNACCEPTABLE: + return "CHANNEL_UNACCEPTABLE"; + case CALL_REJECTED: + return "CALL_REJECTED"; + case NUMBER_CHANGED: + return "NUMBER_CHANGED"; + case PREEMPTION: + return "PREEMPTION"; + case FACILITY_REJECTED: + return "FACILITY_REJECTED"; + case RESP_TO_STATUS_ENQUIRY: + return "RESP_TO_STATUS_ENQUIRY"; + case NORMAL_UNSPECIFIED: + return "NORMAL_UNSPECIFIED"; + case NETWORK_OUT_OF_ORDER: + return "NETWORK_OUT_OF_ORDER"; + case TEMPORARY_FAILURE: + return "TEMPORARY_FAILURE"; + case SWITCHING_EQUIPMENT_CONGESTION: + return "SWITCHING_EQUIPMENT_CONGESTION"; + case ACCESS_INFORMATION_DISCARDED: + return "ACCESS_INFORMATION_DISCARDED"; + case REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE: + return "REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE"; + case RESOURCES_UNAVAILABLE_OR_UNSPECIFIED: + return "RESOURCES_UNAVAILABLE_OR_UNSPECIFIED"; + case QOS_UNAVAILABLE: + return "QOS_UNAVAILABLE"; + case REQUESTED_FACILITY_NOT_SUBSCRIBED: + return "REQUESTED_FACILITY_NOT_SUBSCRIBED"; + case INCOMING_CALLS_BARRED_WITHIN_CUG: + return "INCOMING_CALLS_BARRED_WITHIN_CUG"; + case BEARER_CAPABILITY_UNAVAILABLE: + return "BEARER_CAPABILITY_UNAVAILABLE"; + case SERVICE_OPTION_NOT_AVAILABLE: + return "SERVICE_OPTION_NOT_AVAILABLE"; + case BEARER_SERVICE_NOT_IMPLEMENTED: + return "BEARER_SERVICE_NOT_IMPLEMENTED"; + case REQUESTED_FACILITY_NOT_IMPLEMENTED: + return "REQUESTED_FACILITY_NOT_IMPLEMENTED"; + case ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE: + return "ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE"; + case SERVICE_OR_OPTION_NOT_IMPLEMENTED: + return "SERVICE_OR_OPTION_NOT_IMPLEMENTED"; + case INVALID_TRANSACTION_IDENTIFIER: + return "INVALID_TRANSACTION_IDENTIFIER"; + case USER_NOT_MEMBER_OF_CUG: + return "USER_NOT_MEMBER_OF_CUG"; + case INCOMPATIBLE_DESTINATION: + return "INCOMPATIBLE_DESTINATION"; + case INVALID_TRANSIT_NW_SELECTION: + return "INVALID_TRANSIT_NW_SELECTION"; + case SEMANTICALLY_INCORRECT_MESSAGE: + return "SEMANTICALLY_INCORRECT_MESSAGE"; + case INVALID_MANDATORY_INFORMATION: + return "INVALID_MANDATORY_INFORMATION"; + case MESSAGE_TYPE_NON_IMPLEMENTED: + return "MESSAGE_TYPE_NON_IMPLEMENTED"; + case MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE: + return "MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"; + case INFORMATION_ELEMENT_NON_EXISTENT: + return "INFORMATION_ELEMENT_NON_EXISTENT"; + case CONDITIONAL_IE_ERROR: + return "CONDITIONAL_IE_ERROR"; + case MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE: + return "MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"; + case RECOVERY_ON_TIMER_EXPIRED: + return "RECOVERY_ON_TIMER_EXPIRED"; + case PROTOCOL_ERROR_UNSPECIFIED: + return "PROTOCOL_ERROR_UNSPECIFIED"; + case INTERWORKING_UNSPECIFIED: + return "INTERWORKING_UNSPECIFIED"; + case LOCAL_LOW_BATTERY: + return "LOCAL_LOW_BATTERY"; + case LOW_BATTERY: + return "LOW_BATTERY"; + case EMERGENCY_TEMP_FAILURE: + return "EMERGENCY_TEMP_FAILURE"; + case EMERGENCY_PERM_FAILURE: + return "EMERGENCY_PERM_FAILURE"; + case HO_NOT_FEASIBLE: + return "HO_NOT_FEASIBLE"; + case NON_SELECTED_USER_CLEARING: + return "NON_SELECTED_USER_CLEARING"; default: return "INVALID: " + cause; } -- GitLab From 6ede6c4e1ef0a53e00e1d428716cfd5058cfe276 Mon Sep 17 00:00:00 2001 From: Sridhar Dubbaka Date: Fri, 18 Jul 2014 00:54:55 +0530 Subject: [PATCH 057/185] Add support for send Message with messaging options Add support for following messaging options. 1.Add support for message priority in 3gpp2. 2.Add link control support while sending multiple messages. 3.Add validity period support in 3gpp. Change-Id: I19f4fbc5a3b6922884196b301d30280acd9e501e MSIM(Telephony):Add changes to SMS APIs as per new SmsManager design Change SMS Msim APIs as per new SmsManager design Change-Id: I14ad7685e23b14203a76dfe3cc5a95a337f7d0e3 --- .../com/android/internal/telephony/ISms.aidl | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/telephony/java/com/android/internal/telephony/ISms.aidl b/telephony/java/com/android/internal/telephony/ISms.aidl index c872ad943bfc..13777348a094 100644 --- a/telephony/java/com/android/internal/telephony/ISms.aidl +++ b/telephony/java/com/android/internal/telephony/ISms.aidl @@ -186,6 +186,53 @@ interface ISms { in String destAddr, in String scAddr, in String text, in PendingIntent sentIntent, in PendingIntent deliveryIntent); + /** + * Send an SMS with options using Subscription Id. + * + * @param subId the subId on which the SMS has to be sent. + * @param destAddr the address to send the message to + * @param scAddr the SMSC to send the message through, or NULL for the + * default SMSC + * @param text the body of the message to send + * @param sentIntent if not NULL this PendingIntent is + * broadcast when the message is sucessfully sent, or failed. + * The result code will be Activity.RESULT_OK for success, + * or one of these errors:
+ * RESULT_ERROR_GENERIC_FAILURE
+ * RESULT_ERROR_RADIO_OFF
+ * RESULT_ERROR_NULL_PDU
+ * For RESULT_ERROR_GENERIC_FAILURE the sentIntent may include + * the extra "errorCode" containing a radio technology specific value, + * generally only useful for troubleshooting.
+ * The per-application based SMS control checks sentIntent. If sentIntent + * is NULL the caller will be checked against all unknown applications, + * which cause smaller number of SMS to be sent in checking period. + * @param deliveryIntent if not NULL this PendingIntent is + * broadcast when the message is delivered to the recipient. The + * raw pdu of the status report is in the extended data ("pdu"). + * @param priority Priority level of the message + * Refer specification See 3GPP2 C.S0015-B, v2.0, table 4.5.9-1 + * --------------------------------- + * PRIORITY | Level of Priority + * --------------------------------- + * '00' | Normal + * '01' | Interactive + * '10' | Urgent + * '11' | Emergency + * ---------------------------------- + * Any Other values included Negative considered as Invalid Priority Indicator of the message. + * @param isExpectMore is a boolean to indicate the sending message is multi segmented or not. + * @param validityPeriod Validity Period of the message in mins. + * Refer specification 3GPP TS 23.040 V6.8.1 section 9.2.3.12.1. + * Validity Period(Minimum) -> 5 mins + * Validity Period(Maximum) -> 635040 mins(i.e.63 weeks). + * Any Other values included Negative considered as Invalid Validity Period of the message. + */ + void sendTextForSubscriberWithOptions(in int subId, String callingPkg, in String destAddr, + in String scAddr, in String text, in PendingIntent sentIntent, + in PendingIntent deliveryIntent, in int priority, in boolean isExpectMore, + in int validityPeriod); + /** * Inject an SMS PDU into the android platform. * @@ -233,6 +280,51 @@ interface ISms { in List parts, in List sentIntents, in List deliveryIntents, in boolean persistMessageForNonDefaultSmsApp); + /** + * Send a multi-part text based SMS with options using Subscription Id. + * + * @param subId the subId on which the SMS has to be sent. + * @param destinationAddress the address to send the message to + * @param scAddress is the service center address or null to use + * the current default SMSC + * @param parts an ArrayList of strings that, in order, + * comprise the original message + * @param sentIntents if not null, an ArrayList of + * PendingIntents (one for each message part) that is + * broadcast when the corresponding message part has been sent. + * The result code will be Activity.RESULT_OK for success, + * or one of these errors: + * RESULT_ERROR_GENERIC_FAILURE + * RESULT_ERROR_RADIO_OFF + * RESULT_ERROR_NULL_PDU. + * @param deliveryIntents if not null, an ArrayList of + * PendingIntents (one for each message part) that is + * broadcast when the corresponding message part has been delivered + * to the recipient. The raw pdu of the status report is in the + * extended data ("pdu"). + * @param priority Priority level of the message + * Refer specification See 3GPP2 C.S0015-B, v2.0, table 4.5.9-1 + * --------------------------------- + * PRIORITY | Level of Priority + * --------------------------------- + * '00' | Normal + * '01' | Interactive + * '10' | Urgent + * '11' | Emergency + * ---------------------------------- + * Any Other values included Negative considered as Invalid Priority Indicator of the message. + * @param isExpectMore is a boolean to indicate the sending message is multi segmented or not. + * @param validityPeriod Validity Period of the message in mins. + * Refer specification 3GPP TS 23.040 V6.8.1 section 9.2.3.12.1. + * Validity Period(Minimum) -> 5 mins + * Validity Period(Maximum) -> 635040 mins(i.e.63 weeks). + * Any Other values included Negative considered as Invalid Validity Period of the message. + */ + void sendMultipartTextForSubscriberWithOptions(in int subId, String callingPkg, + in String destinationAddress, in String scAddress, in List parts, + in List sentIntents, in List deliveryIntents, + in int priority, in boolean isExpectMore, in int validityPeriod); + /** * Enable reception of cell broadcast (SMS-CB) messages with the given * message identifier and RAN type. The RAN type specify this message ID -- GitLab From d4fd539ca73c35048b7d419d56c08d8090f55cdd Mon Sep 17 00:00:00 2001 From: jiangmin Date: Tue, 2 Jun 2015 17:34:59 +0800 Subject: [PATCH 058/185] PackageScan: Use external iterator to scan the package Support for external iterator for scanning the package. Change-Id: Ie804572a015e81ee15d46aaa50ecabf417bc0647 CRs-Fixed: 968694 --- ...d_internal_content_NativeLibraryHelper.cpp | 185 +++++++++++++++++- include/androidfw/ZipFileRO.h | 2 + libs/androidfw/ZipFileRO.cpp | 5 + 3 files changed, 189 insertions(+), 3 deletions(-) mode change 100644 => 100755 core/jni/com_android_internal_content_NativeLibraryHelper.cpp diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp old mode 100644 new mode 100755 index 364ac44ee0f6..59e192fc6776 --- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp +++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp @@ -36,7 +36,7 @@ #include #include #include - +#include #define APK_LIB "lib/" #define APK_LIB_LEN (sizeof(APK_LIB) - 1) @@ -55,6 +55,56 @@ #define TMP_FILE_PATTERN "/tmp.XXXXXX" #define TMP_FILE_PATTERN_LEN (sizeof(TMP_FILE_PATTERN) - 1) +typedef void* PFilterObject; + +typedef PFilterObject (*PRegistFilterObject)(int fd); + +typedef void (*PUnRegistFilterObject)(int fd); + +typedef PFilterObject (*PGetFilterObject)(int fd); + +typedef int (*PNameFilter)(char* name, int length, void* param); + +typedef int (*PFilterLibrary)(PFilterObject obj, PNameFilter filter, void* param); + +typedef int (*PHasRenderScript)(PFilterObject obj); + +#define LIB_UNINIT 0 +#define LIB_INITED_AND_FAIL -1 +#define LIB_INITED_AND_SUCCESS 1 +static int g_libInit = LIB_UNINIT; + +static PRegistFilterObject RegistFilterObjectFunc = NULL; +static PUnRegistFilterObject UnRegistFilterObjectFunc = NULL; +static PGetFilterObject GetFilterObjectFunc = NULL; +static PFilterLibrary FilterLibraryFunc = NULL; +static PHasRenderScript HasRenderScriptFunc = NULL; + +static int initApkScanLib() { + if (g_libInit!=LIB_UNINIT) + return g_libInit; + void* handle = dlopen("libapkscanner.so", RTLD_NOW); + if (handle != NULL) { + RegistFilterObjectFunc = (PRegistFilterObject)dlsym(handle, "RegistFilterObject"); + UnRegistFilterObjectFunc = (PUnRegistFilterObject)dlsym(handle, "UnRegistFilterObject"); + GetFilterObjectFunc = (PGetFilterObject)dlsym(handle, "GetFilterObject"); + FilterLibraryFunc = (PFilterLibrary)dlsym(handle, "FilterLibrary"); + HasRenderScriptFunc = (PHasRenderScript)dlsym(handle, "HasRenderScript"); + if (NULL != RegistFilterObjectFunc && + NULL != UnRegistFilterObjectFunc && + NULL != GetFilterObjectFunc && + NULL != FilterLibraryFunc && + NULL != HasRenderScriptFunc) { + g_libInit = LIB_INITED_AND_SUCCESS; + } else { + g_libInit = LIB_INITED_AND_FAIL; + } + } else { + g_libInit = LIB_INITED_AND_FAIL; + } + return g_libInit; +} + namespace android { // These match PackageManager.java install codes @@ -390,6 +440,77 @@ private: const char* mLastSlash; }; +typedef struct _LibFileDealer +{ + ZipFileRO* zipFile; + iterFunc callFunc; + JNIEnv *env; + void* callArg; + const ScopedUtfChars* cpuAbi; + install_status_t ret; +} LibFileDealer, *PLibFileDealer; + +typedef struct _LibFileAbiDealer +{ + int status; + int numAbis; + Vector* supportedAbis; +} LibFileAbiDealer, *PLibFileAbiDealer; + +static int dealLibFile(char* fileName, int fileNameLen, void* param) +{ + PLibFileDealer dealer = (PLibFileDealer)param; + char temp = fileName[fileNameLen]; + fileName[fileNameLen] = '\0'; + // Check to make sure the CPU ABI of this file is one we support. + const char* lastSlash = strrchr(fileName, '/'); + const char* cpuAbiOffset = fileName + APK_LIB_LEN; + const size_t cpuAbiRegionSize = lastSlash - cpuAbiOffset; + int ret = 0; + if (dealer->cpuAbi->size() == cpuAbiRegionSize + && !strncmp(cpuAbiOffset, dealer->cpuAbi->c_str(), cpuAbiRegionSize)) { + ZipEntryRO entry = dealer->zipFile->findEntryByName(fileName); + dealer->ret = dealer->callFunc(dealer->env, dealer->callArg, + dealer->zipFile, entry, lastSlash + 1); + if (dealer->ret != INSTALL_SUCCEEDED) { + ALOGV("Failure for entry %s", lastSlash + 1); + ret = 1; + } + } + fileName[fileNameLen] = temp; + return ret; +} + +static int dealLibAbiFile(char* fileName, int fileNameLen, void* param) +{ + PLibFileAbiDealer dealer = (PLibFileAbiDealer)param; + char temp = fileName[fileNameLen]; + fileName[fileNameLen] = '\0'; + int status = dealer->status; + if (status == NO_NATIVE_LIBRARIES) { + status = dealer->status = INSTALL_FAILED_NO_MATCHING_ABIS; + } + const char* abiOffset = fileName + APK_LIB_LEN; + const char* lastSlash = strrchr(fileName, '/'); + const size_t abiSize = lastSlash - abiOffset; + int ret = 0; + for (int i = 0; i < dealer->numAbis; i++) { + const ScopedUtfChars* abi = (*(dealer->supportedAbis))[i]; + if (abi != NULL && abi->size() == abiSize && !strncmp(abiOffset, abi->c_str(), abiSize)) { + // The entry that comes in first (i.e. with a lower index) has the higher priority. + if (((i < status) && (status >= 0)) || (status < 0) ) { + status = dealer->status = i; + if (0 == status) { + ret = 1; + break; + } + } + } + } + fileName[fileNameLen] = temp; + return ret; +} + static install_status_t iterateOverNativeFiles(JNIEnv *env, jlong apkHandle, jstring javaCpuAbi, iterFunc callFunc, void* callArg) { @@ -397,7 +518,27 @@ iterateOverNativeFiles(JNIEnv *env, jlong apkHandle, jstring javaCpuAbi, if (zipFile == NULL) { return INSTALL_FAILED_INVALID_APK; } - + if (initApkScanLib() == LIB_INITED_AND_SUCCESS) { + PFilterObject filter = GetFilterObjectFunc(zipFile->getFileDescriptor()); + if (filter != NULL) { + const ScopedUtfChars cpuAbi(env, javaCpuAbi); + if (cpuAbi.c_str() == NULL) { + // This would've thrown, so this return code isn't observable by + // Java. + return INSTALL_FAILED_INVALID_APK; + } + LibFileDealer param; + param.zipFile = zipFile; + param.callFunc = callFunc; + param.env = env; + param.callArg = callArg; + param.cpuAbi = &cpuAbi; + param.ret = INSTALL_SUCCEEDED; + if (0 == FilterLibraryFunc(filter, dealLibFile, ¶m)) { + return param.ret; + } + } + } UniquePtr it(NativeLibrariesIterator::create(zipFile)); if (it.get() == NULL) { return INSTALL_FAILED_INVALID_APK; @@ -445,6 +586,24 @@ static int findSupportedAbi(JNIEnv *env, jlong apkHandle, jobjectArray supported if (zipFile == NULL) { return INSTALL_FAILED_INVALID_APK; } + int status = NO_NATIVE_LIBRARIES; + if (initApkScanLib() == LIB_INITED_AND_SUCCESS) { + PFilterObject filter = GetFilterObjectFunc(zipFile->getFileDescriptor()); + if (filter != NULL) { + LibFileAbiDealer param; + param.status = status; + param.numAbis = numAbis; + param.supportedAbis = &supportedAbis; + int ret = FilterLibraryFunc(filter, dealLibAbiFile, ¶m); + if ((0 == ret) || (1 == ret)) { + status = param.status; + for (int i = 0; i < numAbis; ++i) { + delete supportedAbis[i]; + } + return status; + } + } + } UniquePtr it(NativeLibrariesIterator::create(zipFile)); if (it.get() == NULL) { @@ -452,7 +611,7 @@ static int findSupportedAbi(JNIEnv *env, jlong apkHandle, jobjectArray supported } ZipEntryRO entry = NULL; - int status = NO_NATIVE_LIBRARIES; + while ((entry = it->next()) != NULL) { // We're currently in the lib/ directory of the APK, so it does have some native // code. We should return INSTALL_FAILED_NO_MATCHING_ABIS if none of the @@ -523,6 +682,16 @@ static jint com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv *env, jclass clazz, jlong apkHandle) { ZipFileRO* zipFile = reinterpret_cast(apkHandle); + if (initApkScanLib() == LIB_INITED_AND_SUCCESS) { + PFilterObject filter = GetFilterObjectFunc(zipFile->getFileDescriptor()); + if (filter != NULL) { + int ret = HasRenderScriptFunc(filter); + if (1 == ret) + return BITCODE_PRESENT; + else if(0 == ret) + return NO_BITCODE_PRESENT; + } + } void* cookie = NULL; if (!zipFile->startIteration(&cookie, NULL /* prefix */, RS_BITCODE_SUFFIX)) { return APK_SCAN_ERROR; @@ -551,6 +720,9 @@ com_android_internal_content_NativeLibraryHelper_openApk(JNIEnv *env, jclass, js { ScopedUtfChars filePath(env, apkPath); ZipFileRO* zipFile = ZipFileRO::open(filePath.c_str()); + if (zipFile != NULL && initApkScanLib() == LIB_INITED_AND_SUCCESS) { + RegistFilterObjectFunc(zipFile->getFileDescriptor()); + } return reinterpret_cast(zipFile); } @@ -558,6 +730,13 @@ com_android_internal_content_NativeLibraryHelper_openApk(JNIEnv *env, jclass, js static void com_android_internal_content_NativeLibraryHelper_close(JNIEnv *env, jclass, jlong apkHandle) { + if (initApkScanLib() == LIB_INITED_AND_SUCCESS) { + ZipFileRO* zipFile = reinterpret_cast(apkHandle); + if (zipFile != NULL) { + UnRegistFilterObjectFunc(zipFile->getFileDescriptor()); + } + } + delete reinterpret_cast(apkHandle); } diff --git a/include/androidfw/ZipFileRO.h b/include/androidfw/ZipFileRO.h index 768034287afa..83dcb417448f 100644 --- a/include/androidfw/ZipFileRO.h +++ b/include/androidfw/ZipFileRO.h @@ -154,6 +154,8 @@ public: ~ZipFileRO(); + int getFileDescriptor() const; + private: /* these are private and not defined */ ZipFileRO(const ZipFileRO& src); diff --git a/libs/androidfw/ZipFileRO.cpp b/libs/androidfw/ZipFileRO.cpp index 49fe8a261178..57282236dcb1 100644 --- a/libs/androidfw/ZipFileRO.cpp +++ b/libs/androidfw/ZipFileRO.cpp @@ -252,3 +252,8 @@ bool ZipFileRO::uncompressEntry(ZipEntryRO entry, int fd) const return true; } + +int ZipFileRO::getFileDescriptor() const +{ + return GetFileDescriptor(mHandle); +} -- GitLab From 467bb03206cfb099f7983b3c2a2fd98af4fa5f0d Mon Sep 17 00:00:00 2001 From: Sridhar Dubbaka Date: Wed, 29 Oct 2014 22:48:21 +0530 Subject: [PATCH 059/185] Add change to show Invalid card when erroneous card is inserted Add change to show "Invalid card" on UI on CARD_IO_ERROR when erroneous SIM card is inserted Change-Id: I94c52ff462c999cdb8dbe742fa0bd3f1019ce335 Update carrier text when sim state changes - CarrierText is not registered for the onSimStateChanged callback, so it is never updated with the CARD_IO_ERROR state. - "Invalid card" is not shown on the UI when an erroneous card is inserted - Implement the callback to trigger showing "Invalid card" on the UI for CARD_IO_ERROR Change-Id: Ibaacf06f2aad8f206095783cc431a87485f1c2ad CRs-Fixed: 882387 --- packages/Keyguard/res/values/strings.xml | 3 + .../src/com/android/keyguard/CarrierText.java | 59 ++++++++++++++++++- .../keyguard/KeyguardUpdateMonitor.java | 2 + 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml index bb1b24f06023..bac921582dab 100644 --- a/packages/Keyguard/res/values/strings.xml +++ b/packages/Keyguard/res/values/strings.xml @@ -48,6 +48,9 @@ to unlock the keyguard. Displayed in one line in a large font. --> Incorrect PIN code. + + Invalid Card. + Charged diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index 159ac4cc6cbd..ae5687ba424f 100644 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -39,6 +39,7 @@ import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.TelephonyIntents; import com.android.settingslib.WirelessUtils; +import android.telephony.TelephonyManager; public class CarrierText extends TextView { private static final boolean DEBUG = KeyguardConstants.DEBUG; @@ -52,6 +53,8 @@ public class CarrierText extends TextView { private WifiManager mWifiManager; + private boolean[] mSimErrorState = new boolean[TelephonyManager.getDefault().getPhoneCount()]; + private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { @Override public void onRefreshCarrierInfo() { @@ -65,6 +68,22 @@ public class CarrierText extends TextView { public void onStartedWakingUp() { setSelected(true); }; + + public void onSimStateChanged(int subId, int slotId, IccCardConstants.State simState) { + if (slotId < 0) { + Log.d(TAG, "onSimStateChanged() - slotId invalid: " + slotId); + return; + } + + Log.d(TAG,"onSimStateChanged: " + getStatusForIccState(simState)); + if (getStatusForIccState(simState) == StatusMode.SimIoError) { + mSimErrorState[slotId] = true; + updateCarrierText(); + } else if (mSimErrorState[slotId]) { + mSimErrorState[slotId] = false; + updateCarrierText(); + } + }; }; /** * The status of this lock screen. Primarily used for widgets on LockScreen. @@ -77,7 +96,8 @@ public class CarrierText extends TextView { SimPukLocked, // SIM card is PUK locked because SIM entered wrong too many times SimLocked, // SIM card is currently locked SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure - SimNotReady; // SIM is not ready yet. May never be on devices w/o a SIM. + SimNotReady, // SIM is not ready yet. May never be on devices w/o a SIM. + SimIoError; //The sim card is faulty } public CarrierText(Context context) { @@ -101,6 +121,35 @@ public class CarrierText extends TextView { mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); } + /** + * Checks if there are faulty cards. Adds the text depending on the slot of the card + * @param text: current carrier text based on the sim state + * @param noSims: whether a valid sim card is inserted + * @return text + */ + private CharSequence updateCarrierTextWithSimIoError(CharSequence text, boolean noSims) { + final CharSequence carrier = ""; + CharSequence carrierTextForSimState = getCarrierTextForSimState( + IccCardConstants.State.CARD_IO_ERROR, carrier); + for (int index = 0; index < mSimErrorState.length; index++) { + if (mSimErrorState[index]) { + // In the case when no sim cards are detected but a faulty card is inserted + // overwrite the text and only show "Invalid card" + if (noSims) { + return concatenate(carrierTextForSimState, + getContext().getText(com.android.internal.R.string.emergency_calls_only)); + } else if (index == 0) { + // prepend "Invalid card" when faulty card is inserted in slot 0 + text = concatenate(carrierTextForSimState, text); + } else { + // concatenate "Invalid card" when faulty card is inserted in slot 1 + text = concatenate(text, carrierTextForSimState); + } + } + } + return text; + } + protected void updateCarrierText() { boolean allSimsMissing = true; boolean anySimReadyAndInService = false; @@ -179,6 +228,7 @@ public class CarrierText extends TextView { } } + displayText = updateCarrierTextWithSimIoError(displayText, allSimsMissing); // APM (airplane mode) != no carrier state. There are carrier services // (e.g. WFC = Wi-Fi calling) which may operate in APM. if (!anySimReadyAndInService && WirelessUtils.isAirplaneModeOn(mContext)) { @@ -270,6 +320,11 @@ public class CarrierText extends TextView { getContext().getText(R.string.keyguard_sim_puk_locked_message), text); break; + case SimIoError: + carrierText = makeCarrierStringOnEmergencyCapable( + getContext().getText(R.string.lockscreen_sim_error_message_short), + text); + break; } return carrierText; @@ -319,6 +374,8 @@ public class CarrierText extends TextView { return StatusMode.SimPermDisabled; case UNKNOWN: return StatusMode.SimMissing; + case CARD_IO_ERROR: + return StatusMode.SimIoError; } return StatusMode.SimMissing; } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index a8419bf4cbdf..f1a8b56499e3 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -797,6 +797,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } else if (IccCardConstants.INTENT_VALUE_LOCKED_NETWORK.equals(stateExtra)) { state = IccCardConstants.State.NETWORK_LOCKED; + } else if (IccCardConstants.INTENT_VALUE_ICC_CARD_IO_ERROR.equals(stateExtra)) { + state = IccCardConstants.State.CARD_IO_ERROR; } else if (IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(stateExtra) || IccCardConstants.INTENT_VALUE_ICC_IMSI.equals(stateExtra)) { // This is required because telephony doesn't return to "READY" after -- GitLab From 9f74ab069c7c6d387ef7a85b5af40c3f8a8fdfe9 Mon Sep 17 00:00:00 2001 From: Ruthwar Kumar Ambeer Date: Wed, 16 Mar 2016 21:37:25 +0530 Subject: [PATCH 060/185] Default NW mode property for each slot Different default Network mode can be set for each slot using system property CRs-Fixed: 960986 Change-Id: I39991ae400b9e1937e8c2471c020219b72c02890 --- .../providers/settings/DatabaseHelper.java | 21 +++++++++++++++---- .../internal/telephony/RILConstants.java | 7 +++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 7338a9cb654b..2ac27df9326e 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -40,6 +40,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.Global; import android.provider.Settings.Secure; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -2688,13 +2689,25 @@ class DatabaseHelper extends SQLiteOpenHelper { loadSetting(stmt, Settings.Global.CALL_AUTO_RETRY, 0); // Set the preferred network mode to target desired value or Default - // value defined in RILConstants - int type; - type = RILConstants.PREFERRED_NETWORK_MODE; - loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, type); + // value defined in system property + int phoneCount = TelephonyManager.getDefault().getPhoneCount(); + String val = ""; + String mode = ""; + for (int phoneId = 0; phoneId < phoneCount; phoneId++) { + mode = TelephonyManager.getTelephonyProperty(phoneId, + "ro.telephony.default_network", + Integer.toString(RILConstants.NETWORK_MODE_GSM_ONLY)); + if (phoneId == 0) { + val = mode; + } else { + val = val + "," + mode; + } + } + loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, val); // Set the preferred cdma subscription source to target desired value or default // value defined in CdmaSubscriptionSourceManager + int type; type = SystemProperties.getInt("ro.telephony.default_cdma_sub", CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION); loadSetting(stmt, Settings.Global.CDMA_SUBSCRIPTION_MODE, type); diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 8335513bea32..47f2aea39aa5 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -25,6 +25,7 @@ package com.android.internal.telephony; */ import android.os.SystemProperties; +import android.telephony.TelephonyManager; /** * {@hide} @@ -161,8 +162,10 @@ public interface RILConstants { int NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA = 20; /* TD-SCDMA, GSM/WCDMA and LTE */ int NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 21; /*TD-SCDMA,EvDo,CDMA,GSM/WCDMA*/ int NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 22; /* TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo */ - int PREFERRED_NETWORK_MODE = SystemProperties.getInt("ro.telephony.default_network", - NETWORK_MODE_WCDMA_PREF); + + int PREFERRED_NETWORK_MODE = Integer.parseInt(TelephonyManager.getTelephonyProperty(0, + "ro.telephony.default_network", + Integer.toString(NETWORK_MODE_WCDMA_PREF))); int BAND_MODE_UNSPECIFIED = 0; //"unspecified" (selected by baseband automatically) int BAND_MODE_EURO = 1; //"EURO band" (GSM-900 / DCS-1800 / WCDMA-IMT-2000) -- GitLab From 5c84a384c21ba24bff344407406a6621c5961687 Mon Sep 17 00:00:00 2001 From: Susheel Yadagiri Date: Mon, 2 May 2016 14:17:17 -0700 Subject: [PATCH 061/185] Enable NSRM (Network Socket Request Manager). NSRM is a feature to synchronize app socket requests to reduce network signalling and there by save power. Change-Id: Ic34b9c54404ba2156701da1f63232013978bf3a4 CRs-Fixed: 997493 --- core/java/android/app/IAlarmManager.aidl | 2 + .../android/os/IDeviceIdleController.aidl | 2 + core/java/android/os/IPowerManager.aidl | 2 + .../android/server/AlarmManagerService.java | 27 ++- .../android/server/DeviceIdleController.java | 12 ++ .../android/server/QCNsrmAlarmExtension.java | 116 +++++++++++++ .../server/power/PowerManagerService.java | 28 +++- .../server/power/QCNsrmPowerExtension.java | 156 ++++++++++++++++++ 8 files changed, 334 insertions(+), 11 deletions(-) create mode 100644 services/core/java/com/android/server/QCNsrmAlarmExtension.java create mode 100644 services/core/java/com/android/server/power/QCNsrmPowerExtension.java diff --git a/core/java/android/app/IAlarmManager.aidl b/core/java/android/app/IAlarmManager.aidl index 7b05b4918103..ab45e29151ea 100644 --- a/core/java/android/app/IAlarmManager.aidl +++ b/core/java/android/app/IAlarmManager.aidl @@ -37,4 +37,6 @@ interface IAlarmManager { void remove(in PendingIntent operation, in IAlarmListener listener); long getNextWakeFromIdleTime(); AlarmManager.AlarmClockInfo getNextAlarmClock(int userId); + // update the uids being synchronized by network socket request manager + void updateBlockedUids(int uid, boolean isBlocked); } diff --git a/core/java/android/os/IDeviceIdleController.aidl b/core/java/android/os/IDeviceIdleController.aidl index cc2af215c2c6..9cd7dfa4cbef 100644 --- a/core/java/android/os/IDeviceIdleController.aidl +++ b/core/java/android/os/IDeviceIdleController.aidl @@ -40,4 +40,6 @@ interface IDeviceIdleController { void exitIdle(String reason); boolean registerMaintenanceActivityListener(IMaintenanceActivityListener listener); void unregisterMaintenanceActivityListener(IMaintenanceActivityListener listener); + int getIdleStateDetailed(); + int getLightIdleStateDetailed(); } diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 1d464c005cb9..646f665d5a6c 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -65,4 +65,6 @@ interface IPowerManager // sets the attention light (used by phone app only) void setAttentionLight(boolean on, int color); + // update the uids being synchronized by network socket request manager + void updateBlockedUids(int uid, boolean isBlocked); } diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 312553a980b2..6d478386af5d 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -129,6 +129,7 @@ class AlarmManagerService extends SystemService { private long mLastWakeup; int mBroadcastRefCount = 0; PowerManager.WakeLock mWakeLock; + private QCNsrmAlarmExtension qcNsrmExt = new QCNsrmAlarmExtension(); boolean mLastWakeLockUnimportantForLogging; ArrayList mPendingNonWakeupAlarms = new ArrayList<>(); ArrayList mInFlight = new ArrayList<>(); @@ -1353,6 +1354,16 @@ class AlarmManagerService extends SystemService { dumpImpl(pw); } + + @Override + /* updates the blocked uids, so if a wake lock is acquired to only fire + * alarm for it, it can be released. + */ + public void updateBlockedUids(int uid, boolean isBlocked) { + synchronized(mLock) { + qcNsrmExt.processBlockedUids(uid, isBlocked, mWakeLock); + } + } }; public final class LocalService { @@ -2582,11 +2593,10 @@ class AlarmManagerService extends SystemService { mWakeLock.setWorkSource(new WorkSource(uid)); return; } + // Something went wrong; fall back to attributing the lock to the OS + mWakeLock.setWorkSource(null); } catch (Exception e) { } - - // Something went wrong; fall back to attributing the lock to the OS - mWakeLock.setWorkSource(null); } private class AlarmHandler extends Handler { @@ -2884,9 +2894,13 @@ class AlarmManagerService extends SystemService { updateStatsLocked(inflight); } mBroadcastRefCount--; + qcNsrmExt.removeTriggeredUid(inflight.mUid); + if (mBroadcastRefCount == 0) { mHandler.obtainMessage(AlarmHandler.REPORT_ALARMS_ACTIVE, 0).sendToTarget(); - mWakeLock.release(); + if (mWakeLock.isHeld()) { + mWakeLock.release(); + } if (mInFlight.size() > 0) { mLog.w("Finished all dispatches with " + mInFlight.size() + " remaining inflights"); @@ -3028,7 +3042,9 @@ class AlarmManagerService extends SystemService { setWakelockWorkSource(alarm.operation, alarm.workSource, alarm.type, alarm.statsTag, (alarm.operation == null) ? alarm.uid : -1, true); + if (!mWakeLock.isHeld()) { mWakeLock.acquire(); + } mHandler.obtainMessage(AlarmHandler.REPORT_ALARMS_ACTIVE, 1).sendToTarget(); } final InFlight inflight = new InFlight(AlarmManagerService.this, @@ -3036,6 +3052,9 @@ class AlarmManagerService extends SystemService { alarm.packageName, alarm.type, alarm.statsTag, nowELAPSED); mInFlight.add(inflight); mBroadcastRefCount++; + qcNsrmExt.addTriggeredUid((alarm.operation != null) ? + alarm.operation.getCreatorUid() : + alarm.uid); if (allowWhileIdle) { // Record the last time this uid handled an ALLOW_WHILE_IDLE alarm. diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index afed5ef066ff..ded736921d07 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -1189,6 +1189,18 @@ public class DeviceIdleController extends SystemService return isPowerSaveWhitelistAppInternal(name); } + @Override public int getIdleStateDetailed() { + getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, + null); + return mState; + } + + @Override public int getLightIdleStateDetailed() { + getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, + null); + return mLightState; + } + @Override public void addPowerSaveTempWhitelistApp(String packageName, long duration, int userId, String reason) throws RemoteException { addPowerSaveTempWhitelistAppChecked(packageName, duration, userId, reason); diff --git a/services/core/java/com/android/server/QCNsrmAlarmExtension.java b/services/core/java/com/android/server/QCNsrmAlarmExtension.java new file mode 100644 index 000000000000..56110c6c62ad --- /dev/null +++ b/services/core/java/com/android/server/QCNsrmAlarmExtension.java @@ -0,0 +1,116 @@ +/* + *Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + *Redistribution and use in source and binary forms, with or without + *modification, are permitted provided that the following conditions are + *met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + *ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + *BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + *IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.server; + +import android.os.Binder; +import android.os.PowerManager; +import android.os.Process; +import android.util.Slog; + +import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; + +public final class QCNsrmAlarmExtension { + static final String TAG = "QCNsrmAlarmExtn"; + static final boolean localLOGV = false; + + //track the blocked and triggered uids in AlarmManagerService + private static final ArrayList mTriggeredUids = new ArrayList(); + private static final ArrayList mBlockedUids = new ArrayList(); + private static final int BLOCKED_UID_CHECK_INTERVAL = 1000; // 1 sec. + + public QCNsrmAlarmExtension() { + } + + //AlarmManagerService extension Methods + protected void processBlockedUids(int uid, boolean isBlocked, PowerManager.WakeLock mWakeLock ){ + if (localLOGV) Slog.v(TAG, "UpdateBlockedUids: uid = " + uid + + " isBlocked = " + isBlocked); + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + if (localLOGV) Slog.v(TAG, "UpdateBlockedUids is not allowed"); + return; + } + + if(isBlocked) { + if (localLOGV) Slog.v(TAG, "updating alarmMgr mBlockedUids "+ + "with uid " + uid); + mBlockedUids.add(new Integer(uid)); + Timer checkBlockedUidTimer = new Timer(); + checkBlockedUidTimer.schedule( new CheckBlockedUidTimerTask( + uid, + mWakeLock + ),BLOCKED_UID_CHECK_INTERVAL); + } else { + if (localLOGV) Slog.v(TAG, "clearing alarmMgr mBlockedUids "); + mBlockedUids.clear(); + } + } + + protected void addTriggeredUid (int uid){ + if (localLOGV) Slog.v(TAG, "adding uid to mTriggeredUids uid=" + uid); + mTriggeredUids.add(new Integer(uid)); + + } + + protected void removeTriggeredUid (int uid) { + if (localLOGV) Slog.v(TAG, "removing uid from mTriggeredUids uid= " + uid); + mTriggeredUids.remove(new Integer(uid)); + } + + protected boolean hasBlockedUid (int uid) { + + return mBlockedUids.contains(uid); + + } + + class CheckBlockedUidTimerTask extends TimerTask { + private int mUid; + PowerManager.WakeLock mWakeLock; + + CheckBlockedUidTimerTask(int uid, PowerManager.WakeLock lWakeLock) { + mUid = uid; + mWakeLock = lWakeLock; + } + + @Override + public void run(){ + if (mBlockedUids.contains(mUid) && mTriggeredUids.contains(mUid)) { + if (mWakeLock.isHeld()) { + mWakeLock.release(); + if (localLOGV) + Slog.v(TAG, "CheckBlockedUidTimerTask: AM WakeLock "+ + "Released Internally!!"); + } + } + return; + } + } +} diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 12a2d2ef924a..24d0ca3bc99c 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -110,7 +110,7 @@ public final class PowerManagerService extends SystemService private static final int MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT = 3; // Dirty bit: mWakeLocks changed - private static final int DIRTY_WAKE_LOCKS = 1 << 0; + protected static final int DIRTY_WAKE_LOCKS = 1 << 0; // Dirty bit: mWakefulness changed private static final int DIRTY_WAKEFULNESS = 1 << 1; // Dirty bit: user activity was poked or may have timed out @@ -197,7 +197,7 @@ public final class PowerManagerService extends SystemService // A bitfield that indicates what parts of the power state have // changed and need to be recalculated. - private int mDirty; + protected int mDirty; // Indicates whether the device is awake or asleep or somewhere in between. // This is distinct from the screen power state, which is managed separately. @@ -216,7 +216,7 @@ public final class PowerManagerService extends SystemService private final ArrayList mSuspendBlockers = new ArrayList(); // Table of all wake locks acquired by applications. - private final ArrayList mWakeLocks = new ArrayList(); + protected final ArrayList mWakeLocks = new ArrayList(); // A bitfield that summarizes the state of all active wakelocks. private int mWakeLockSummary; @@ -474,6 +474,8 @@ public final class PowerManagerService extends SystemService // Set of app ids that are temporarily allowed to acquire wakelocks due to high-pri message int[] mDeviceIdleTempWhitelist = new int[0]; + private QCNsrmPowerExtension qcNsrmPowExt = new QCNsrmPowerExtension(this); + private final SparseIntArray mUidState = new SparseIntArray(); // True if theater mode is enabled @@ -873,6 +875,7 @@ public final class PowerManagerService extends SystemService } mWakeLocks.add(wakeLock); setWakeLockDisabledStateLocked(wakeLock); + qcNsrmPowExt.checkPmsBlockedWakelocks(uid, pid, flags, tag, wakeLock); notifyAcquire = true; } @@ -1019,7 +1022,7 @@ public final class PowerManagerService extends SystemService return -1; } - private void notifyWakeLockAcquiredLocked(WakeLock wakeLock) { + protected void notifyWakeLockAcquiredLocked(WakeLock wakeLock) { if (mSystemReady && !wakeLock.mDisabled) { wakeLock.mNotifiedAcquired = true; mNotifier.onWakeLockAcquired(wakeLock.mFlags, wakeLock.mTag, wakeLock.mPackageName, @@ -1037,7 +1040,7 @@ public final class PowerManagerService extends SystemService } } - private void notifyWakeLockReleasedLocked(WakeLock wakeLock) { + protected void notifyWakeLockReleasedLocked(WakeLock wakeLock) { if (mSystemReady && wakeLock.mNotifiedAcquired) { wakeLock.mNotifiedAcquired = false; mNotifier.onWakeLockReleased(wakeLock.mFlags, wakeLock.mTag, @@ -1356,7 +1359,7 @@ public final class PowerManagerService extends SystemService * each time something important changes, and ensure that we do it the same * way each time. The point is to gather all of the transition logic here. */ - private void updatePowerStateLocked() { + protected void updatePowerStateLocked() { if (!mSystemReady || mDirty == 0) { return; } @@ -2991,7 +2994,7 @@ public final class PowerManagerService extends SystemService /** * Represents a wake lock that has been acquired by an application. */ - private final class WakeLock implements IBinder.DeathRecipient { + protected final class WakeLock implements IBinder.DeathRecipient { public final IBinder mLock; public int mFlags; public String mTag; @@ -3643,6 +3646,17 @@ public final class PowerManagerService extends SystemService Binder.restoreCallingIdentity(ident); } } + + @Override + /* updates the blocked uids, so if a wake lock is acquired for it + * can be released. + */ + public void updateBlockedUids(int uid, boolean isBlocked) { + synchronized(mLock) { + qcNsrmPowExt.processPmsBlockedUid(uid, isBlocked, + mWakeLocks); + } + } } private final class LocalService extends PowerManagerInternal { diff --git a/services/core/java/com/android/server/power/QCNsrmPowerExtension.java b/services/core/java/com/android/server/power/QCNsrmPowerExtension.java new file mode 100644 index 000000000000..a891fac690ed --- /dev/null +++ b/services/core/java/com/android/server/power/QCNsrmPowerExtension.java @@ -0,0 +1,156 @@ +/* + *Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + *Redistribution and use in source and binary forms, with or without + *modification, are permitted provided that the following conditions are + *met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + *ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + *BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + *IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.server.power; + +import java.util.ArrayList; + +import android.os.Binder; +import android.os.PowerManager; +import android.os.Process; +import android.util.Slog; + +public final class QCNsrmPowerExtension { + static final String TAG = "QCNsrmPowerExtn"; + static final boolean localLOGV = false; + private PowerManagerService pmHandle; + + //track the blocked uids in PowerManagerService. + private final ArrayList mPmsBlockedUids = new ArrayList(); + + public QCNsrmPowerExtension (PowerManagerService handle) { + PowerManagerService pmHandle = handle ; + } + + protected void checkPmsBlockedWakelocks ( + int uid, int pid, int flags, + String tag, PowerManagerService.WakeLock pMwakeLock + ) { + if(mPmsBlockedUids.contains(new Integer(uid)) && uid != Process.myUid()) { + // wakelock acquisition for blocked uid, disable it. + if (localLOGV) { + Slog.d(TAG, "uid is blocked disabling wakeLock flags=0x" + + Integer.toHexString(flags) + " tag=" + tag + " uid=" + + uid + " pid =" + pid); + } + updatePmsBlockedWakelock(pMwakeLock, true); + } + } + + private boolean checkWorkSourceObjectId ( + int uid, PowerManagerService.WakeLock wl + ) { + try { + for (int index = 0; index < wl.mWorkSource.size(); index++) { + if (uid == wl.mWorkSource.get(index)) { + if (localLOGV) Slog.v(TAG, "WS uid matched"); + return true; + } + } + } + catch (Exception e) { + return false; + } + return false; + } + + protected boolean processPmsBlockedUid ( + int uid, boolean isBlocked, + ArrayList mWakeLocks + ) { + boolean changed = false; + if (updatePmsBlockedUidAllowed(uid, isBlocked)) + return changed; + + for (int index = 0; index < mWakeLocks.size(); index++) { + PowerManagerService.WakeLock wl = mWakeLocks.get(index); + if(wl != null) { + // update the wakelock for the blocked uid + if ((wl.mOwnerUid == uid || checkWorkSourceObjectId(uid, wl)) + || (wl.mTag.startsWith("*sync*") && wl.mOwnerUid == + Process.SYSTEM_UID)) { + if(updatePmsBlockedWakelock(wl, isBlocked)) { + changed = true; + } + } + } + } + if(changed) { + pmHandle.mDirty |= pmHandle.DIRTY_WAKE_LOCKS; + pmHandle.updatePowerStateLocked(); + } + return changed; + } + + protected boolean updatePmsBlockedUidAllowed ( + int uid, boolean isBlocked + ) { + if (localLOGV) Slog.v(TAG, "updateBlockedUids: uid = " + uid + + "isBlocked = " + isBlocked); + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + if (localLOGV) Slog.v(TAG, "UpdateBlockedUids is not allowed"); + return true; + } + updatePmsBlockedUids(uid, isBlocked); + return false; + } + + private void updatePmsBlockedUids (int uid, boolean isBlocked) { + if(isBlocked) { + if (localLOGV) Slog.v(TAG, "adding powerMgr mPmBlockedUids "+ + "with uid "+ uid); + mPmsBlockedUids.add(new Integer(uid)); + } + else { + if (localLOGV) Slog.v(TAG, "clearing powerMgr mPmBlockedUids "); + mPmsBlockedUids.clear(); + } + } + + private boolean updatePmsBlockedWakelock ( + PowerManagerService.WakeLock wakeLock, boolean update + ) { + if (wakeLock != null && ((wakeLock.mFlags & + PowerManager.WAKE_LOCK_LEVEL_MASK + ) == PowerManager.PARTIAL_WAKE_LOCK )) { + if (wakeLock.mDisabled != update) { + wakeLock.mDisabled = update; + if (wakeLock.mDisabled) { + // This wake lock is no longer being respected. + pmHandle.notifyWakeLockReleasedLocked(wakeLock); + } else { + pmHandle.notifyWakeLockAcquiredLocked(wakeLock); + } + return true; + } + } + return false; + } +} + -- GitLab From 941102cc99e0cfe5f11eea3069b8945e7ef44a71 Mon Sep 17 00:00:00 2001 From: Sushil Chauhan Date: Wed, 18 May 2016 11:08:37 -0700 Subject: [PATCH 062/185] framework: Force S/W rendering based on property Force S/W rendering and avoid OpenGL H/W renderer, based on whether persist.sys.force_sw_gles is set. CRs-Fixed: 1021870 Change-Id: I4c4ba9a2782dab640ac5f6b1a9e1b47ff675339f --- core/java/android/app/ActivityManager.java | 3 ++- core/jni/android_view_DisplayListCanvas.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index c96bd39eeffe..5eca0b3fd83e 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -899,7 +899,8 @@ public class ActivityManager { * @hide */ static public boolean isHighEndGfx() { - return !isLowRamDeviceStatic() && + return !("1".equals(SystemProperties.get("persist.sys.force_sw_gles", "0"))) && + !isLowRamDeviceStatic() && !Resources.getSystem().getBoolean(com.android.internal.R.bool.config_avoidGfxAccel); } diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp index d6f9db58c361..71aee9031a40 100644 --- a/core/jni/android_view_DisplayListCanvas.cpp +++ b/core/jni/android_view_DisplayListCanvas.cpp @@ -204,6 +204,12 @@ static void android_view_DisplayListCanvas_drawLayer(JNIEnv* env, jobject clazz, static jboolean android_view_DisplayListCanvas_isAvailable(JNIEnv* env, jobject clazz) { char prop[PROPERTY_VALUE_MAX]; + + property_get("persist.sys.force_sw_gles", prop, "0"); + if (atoi(prop) == 1) { + return JNI_FALSE; + } + if (property_get("ro.kernel.qemu", prop, NULL) == 0) { // not in the emulator return JNI_TRUE; -- GitLab From ed29480f3ce6176ee363cedcb8f4ae2fa51f3e5d Mon Sep 17 00:00:00 2001 From: Mao Jinlong Date: Thu, 28 Apr 2016 16:43:25 +0800 Subject: [PATCH 063/185] Alarm: Add one more RTC alarm type for poweroff alarm. Now we use type of RTC_WAKEUP for the poweroff alarm. Actually lots of other applications also use this type. But these applications never expect the device will power on after it has been shut down. So we need to add dedicated alarm type for the Deskclock or similar applications. Change-Id: Ib515d8a737ab73cdd809597ad8cde57030c0a0a1 --- core/java/android/app/AlarmManager.java | 9 +++ .../android/server/AlarmManagerService.java | 77 +++++++++++++++++-- ...com_android_server_AlarmManagerService.cpp | 45 +++++++++++ 3 files changed, 123 insertions(+), 8 deletions(-) diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index c561a1908b21..b00a4adc2325 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -106,6 +106,15 @@ public class AlarmManager { */ public static final int ELAPSED_REALTIME = 3; + /** + * Alarm time in {@link System#currentTimeMillis System.currentTimeMillis()} + * (wall clock time in UTC), which will wake up the device when + * it goes off. And it will power on the devices when it shuts down. + * Set as 5 to make it be compatible with android_alarm_type. + * @hide + */ + public static final int RTC_POWEROFF_WAKEUP = 5; + /** * Broadcast Action: Sent after the value returned by * {@link #getNextAlarmClock()} has changed. diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 6d478386af5d..c1ef2bd6a6f7 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -80,6 +80,7 @@ import static android.app.AlarmManager.RTC_WAKEUP; import static android.app.AlarmManager.RTC; import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP; import static android.app.AlarmManager.ELAPSED_REALTIME; +import static android.app.AlarmManager.RTC_POWEROFF_WAKEUP; import com.android.internal.util.LocalLog; @@ -88,8 +89,10 @@ class AlarmManagerService extends SystemService { private static final int RTC_MASK = 1 << RTC; private static final int ELAPSED_REALTIME_WAKEUP_MASK = 1 << ELAPSED_REALTIME_WAKEUP; private static final int ELAPSED_REALTIME_MASK = 1 << ELAPSED_REALTIME; + private static final int RTC_POWEROFF_WAKEUP_MASK = 1 << RTC_POWEROFF_WAKEUP; static final int TIME_CHANGED_MASK = 1 << 16; - static final int IS_WAKEUP_MASK = RTC_WAKEUP_MASK|ELAPSED_REALTIME_WAKEUP_MASK; + static final int IS_WAKEUP_MASK = RTC_WAKEUP_MASK|ELAPSED_REALTIME_WAKEUP_MASK + |RTC_POWEROFF_WAKEUP_MASK; // Mask for testing whether a given alarm type is wakeup vs non-wakeup static final int TYPE_NONWAKEUP_MASK = 0x1; // low bit => non-wakeup @@ -124,6 +127,7 @@ class AlarmManagerService extends SystemService { long mNativeData; private long mNextWakeup; + private long mNextRtcWakeup; private long mNextNonWakeup; private long mLastWakeupSet; private long mLastWakeup; @@ -389,6 +393,15 @@ class AlarmManagerService extends SystemService { return alarms.get(index); } + long getWhenByElapsedTime(long whenElapsed) { + for(int i=0;i< alarms.size();i++) { + if(alarms.get(i).whenElapsed == whenElapsed) { + return alarms.get(i).when; + } + } + return 0; + } + boolean canHold(long whenElapsed, long maxWhen) { return (end >= whenElapsed) && (start <= maxWhen); } @@ -587,6 +600,17 @@ class AlarmManagerService extends SystemService { return false; } + boolean isRtcPowerOffWakeup() { + final int N = alarms.size(); + for (int i = 0; i < N; i++) { + Alarm a = alarms.get(i); + if (a.type == RTC_POWEROFF_WAKEUP) { + return true; + } + } + return false; + } + @Override public String toString() { StringBuilder b = new StringBuilder(40); @@ -697,7 +721,8 @@ class AlarmManagerService extends SystemService { } static long convertToElapsed(long when, int type) { - final boolean isRtc = (type == RTC || type == RTC_WAKEUP); + final boolean isRtc = (type == RTC || type == RTC_WAKEUP + || type == RTC_POWEROFF_WAKEUP); if (isRtc) { when -= System.currentTimeMillis() - SystemClock.elapsedRealtime(); } @@ -904,7 +929,7 @@ class AlarmManagerService extends SystemService { @Override public void onStart() { mNativeData = init(); - mNextWakeup = mNextNonWakeup = 0; + mNextWakeup = mNextRtcWakeup = mNextNonWakeup = 0; // We have to set current TimeZone info to kernel // because kernel doesn't keep this after reboot @@ -1042,7 +1067,7 @@ class AlarmManagerService extends SystemService { interval = minInterval; } - if (type < RTC_WAKEUP || type > ELAPSED_REALTIME) { + if (type < RTC_WAKEUP || type > RTC_POWEROFF_WAKEUP) { throw new IllegalArgumentException("Invalid alarm type " + type); } @@ -1704,6 +1729,18 @@ class AlarmManagerService extends SystemService { return null; } + private Batch findFirstRtcWakeupBatchLocked() { + final int N = mAlarmBatches.size(); + for (int i = 0; i < N; i++) { + Batch b = mAlarmBatches.get(i); + long intervalTime = b.start - SystemClock.elapsedRealtime(); + if (b.isRtcPowerOffWakeup()) { + return b; + } + } + return null; + } + long getNextWakeFromIdleTimeImpl() { synchronized (mLock) { return mNextWakeFromIdle != null ? mNextWakeFromIdle.whenElapsed : Long.MAX_VALUE; @@ -1852,11 +1889,19 @@ class AlarmManagerService extends SystemService { if (mAlarmBatches.size() > 0) { final Batch firstWakeup = findFirstWakeupBatchLocked(); final Batch firstBatch = mAlarmBatches.get(0); + final Batch firstRtcWakeup = findFirstRtcWakeupBatchLocked(); if (firstWakeup != null && mNextWakeup != firstWakeup.start) { mNextWakeup = firstWakeup.start; mLastWakeupSet = SystemClock.elapsedRealtime(); setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); } + if (firstRtcWakeup != null && mNextRtcWakeup != firstRtcWakeup.start) { + mNextRtcWakeup = firstRtcWakeup.start; + long when = firstRtcWakeup.getWhenByElapsedTime(mNextRtcWakeup); + if (when != 0) { + setLocked(RTC_POWEROFF_WAKEUP, when); + } + } if (firstBatch != firstWakeup) { nextNonWakeup = firstBatch.start; } @@ -1876,6 +1921,18 @@ class AlarmManagerService extends SystemService { boolean didRemove = false; for (int i = mAlarmBatches.size() - 1; i >= 0; i--) { Batch b = mAlarmBatches.get(i); + ArrayList alarmList = b.alarms; + Alarm alarm = null; + for (int j = alarmList.size() - 1; j >= 0; j--) { + alarm = alarmList.get(j); + if (alarm.type == RTC_POWEROFF_WAKEUP && alarm.operation.equals(operation)) { + long alarmSeconds, alarmNanoseconds; + alarmSeconds = alarm.when / 1000; + alarmNanoseconds = (alarm.when % 1000) * 1000 * 1000; + clear(mNativeData, alarm.type, alarmSeconds, alarmNanoseconds); + mNextRtcWakeup = 0; + } + } didRemove |= b.remove(operation, directReceiver); if (b.size() == 0) { mAlarmBatches.remove(i); @@ -2079,6 +2136,7 @@ class AlarmManagerService extends SystemService { case RTC_WAKEUP : return "RTC_WAKEUP"; case ELAPSED_REALTIME : return "ELAPSED"; case ELAPSED_REALTIME_WAKEUP: return "ELAPSED_WAKEUP"; + case RTC_POWEROFF_WAKEUP : return "RTC_POWEROFF_WAKEUP"; default: break; } @@ -2099,6 +2157,7 @@ class AlarmManagerService extends SystemService { private native long init(); private native void close(long nativeData); private native void set(long nativeData, int type, long seconds, long nanoseconds); + private native void clear(long nativeData, int type, long seconds, long nanoseconds); private native int waitForAlarm(long nativeData); private native int setKernelTime(long nativeData, long millis); private native int setKernelTimezone(long nativeData, int minuteswest); @@ -2256,7 +2315,8 @@ class AlarmManagerService extends SystemService { type = _type; origWhen = _when; wakeup = _type == AlarmManager.ELAPSED_REALTIME_WAKEUP - || _type == AlarmManager.RTC_WAKEUP; + || _type == AlarmManager.RTC_WAKEUP + || _type == AlarmManager.RTC_POWEROFF_WAKEUP; when = _when; whenElapsed = _whenElapsed; windowLength = _windowLength; @@ -2277,7 +2337,7 @@ class AlarmManagerService extends SystemService { public static String makeTag(PendingIntent pi, String tag, int type) { final String alarmString = type == ELAPSED_REALTIME_WAKEUP || type == RTC_WAKEUP - ? "*walarm*:" : "*alarm*:"; + || type == RTC_POWEROFF_WAKEUP? "*walarm*:" : "*alarm*:"; return (pi != null) ? pi.getTag(alarmString) : (alarmString + tag); } @@ -2322,7 +2382,8 @@ class AlarmManagerService extends SystemService { public void dump(PrintWriter pw, String prefix, long nowRTC, long nowELAPSED, SimpleDateFormat sdf) { - final boolean isRtc = (type == RTC || type == RTC_WAKEUP); + final boolean isRtc = (type == RTC || type == RTC_WAKEUP + || type == RTC_POWEROFF_WAKEUP); pw.print(prefix); pw.print("tag="); pw.println(statsTag); pw.print(prefix); pw.print("type="); pw.print(type); pw.print(" whenElapsed="); TimeUtils.formatDuration(whenElapsed, @@ -3087,7 +3148,7 @@ class AlarmManagerService extends SystemService { fs.nesting++; } if (alarm.type == ELAPSED_REALTIME_WAKEUP - || alarm.type == RTC_WAKEUP) { + || alarm.type == RTC_WAKEUP || alarm.type == RTC_POWEROFF_WAKEUP) { bs.numWakeup++; fs.numWakeup++; if (alarm.workSource != null && alarm.workSource.size() > 0) { diff --git a/services/core/jni/com_android_server_AlarmManagerService.cpp b/services/core/jni/com_android_server_AlarmManagerService.cpp index 246ab0d259f4..2138458d3a08 100644 --- a/services/core/jni/com_android_server_AlarmManagerService.cpp +++ b/services/core/jni/com_android_server_AlarmManagerService.cpp @@ -51,6 +51,7 @@ static const clockid_t android_alarm_to_clockid[N_ANDROID_TIMERFDS] = { CLOCK_BOOTTIME_ALARM, CLOCK_BOOTTIME, CLOCK_MONOTONIC, + CLOCK_POWEROFF_ALARM, CLOCK_REALTIME, }; /* to match the legacy alarm driver implementation, we need an extra @@ -63,6 +64,7 @@ public: virtual ~AlarmImpl(); virtual int set(int type, struct timespec *ts) = 0; + virtual int clear(int type, struct timespec *ts) = 0; virtual int setTime(struct timeval *tv) = 0; virtual int waitForAlarm() = 0; @@ -77,6 +79,7 @@ public: AlarmImplAlarmDriver(int fd) : AlarmImpl(&fd, 1) { } int set(int type, struct timespec *ts); + int clear(int type, struct timespec *ts); int setTime(struct timeval *tv); int waitForAlarm(); }; @@ -89,6 +92,7 @@ public: ~AlarmImplTimerFd(); int set(int type, struct timespec *ts); + int clear(int type, struct timespec *ts); int setTime(struct timeval *tv); int waitForAlarm(); @@ -116,6 +120,11 @@ int AlarmImplAlarmDriver::set(int type, struct timespec *ts) return ioctl(fds[0], ANDROID_ALARM_SET(type), ts); } +int AlarmImplAlarmDriver::clear(int type, struct timespec *ts) +{ + return ioctl(fds[0], ANDROID_ALARM_CLEAR(type), ts); +} + int AlarmImplAlarmDriver::setTime(struct timeval *tv) { struct timespec ts; @@ -162,6 +171,23 @@ int AlarmImplTimerFd::set(int type, struct timespec *ts) return timerfd_settime(fds[type], TFD_TIMER_ABSTIME, &spec, NULL); } +int AlarmImplTimerFd::clear(int type, struct timespec *ts) +{ + if (type > ANDROID_ALARM_TYPE_COUNT) { + errno = EINVAL; + return -1; + } + + ts->tv_sec = 0; + ts->tv_nsec = 0; + + struct itimerspec spec; + memset(&spec, 0, sizeof(spec)); + memcpy(&spec.it_value, ts, sizeof(spec.it_value)); + + return timerfd_settime(fds[type], TFD_TIMER_ABSTIME, &spec, NULL); +} + int AlarmImplTimerFd::setTime(struct timeval *tv) { struct rtc_time rtc; @@ -443,6 +469,24 @@ static void android_server_AlarmManagerService_set(JNIEnv*, jobject, jlong nativ } } +static void android_server_AlarmManagerService_clear(JNIEnv*, jobject, jlong nativeData, jint type, jlong seconds, + jlong nanoseconds) +{ + AlarmImpl *impl = reinterpret_cast(nativeData); + struct timespec ts; + ts.tv_sec = seconds; + ts.tv_nsec = nanoseconds; + + int result = impl->clear(type, &ts); + if (result < 0) + { + ALOGE("Unable to clear alarm %lld.%09lld: %s\n", + static_cast(seconds), + static_cast(nanoseconds), strerror(errno)); + } +} + + static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv*, jobject, jlong nativeData) { AlarmImpl *impl = reinterpret_cast(nativeData); @@ -467,6 +511,7 @@ static const JNINativeMethod sMethods[] = { {"init", "()J", (void*)android_server_AlarmManagerService_init}, {"close", "(J)V", (void*)android_server_AlarmManagerService_close}, {"set", "(JIJJ)V", (void*)android_server_AlarmManagerService_set}, + {"clear", "(JIJJ)V", (void*)android_server_AlarmManagerService_clear}, {"waitForAlarm", "(J)I", (void*)android_server_AlarmManagerService_waitForAlarm}, {"setKernelTime", "(JJ)I", (void*)android_server_AlarmManagerService_setKernelTime}, {"setKernelTimezone", "(JI)I", (void*)android_server_AlarmManagerService_setKernelTimezone}, -- GitLab From 754b57e267863c032f2c1520fe53442334836734 Mon Sep 17 00:00:00 2001 From: Gaurav Asati Date: Tue, 28 Jul 2015 20:57:29 +0530 Subject: [PATCH 064/185] BT: Multi A2dp support in Settings App. 1. The connected sinks are not disconnected from A2dpProfile when new sink is connecting. 2. Also return correct connection status for specific HS. 3. Sets priority for specific HS while disconnecting. Change-Id: I56142d1527aa86d2bb47fb7166b2f3ab451d9b17 Bluetooth: Add support of two A2dp connections. Audio Service will now manage two a2dp connections and makes sure that BT a2dp connections are consistently seen by other applications. The change removes the BD address usage in BT names, and uses a new Strin "BluetoothA2dp" in order to show A2dp connected devices. Change-Id: I59b8f8eff7bbc8033fcd46d0ac21d94ee338ca36 Purge A2dp connected device list Purge A2dp connected device list on A2dp service connect incase the same is not purged during service disconnect earlier. Change-Id: Ie4e7e79530eaf2ec138bb5d0c51996d4172eb4b9 Update A2DP device connection state properly. Update Audio devices only for first connected and last disconnected A2DP devices. Change-Id: I3ac83e507e2b8c638a08881cd70f7900c9312391 --- .../settingslib/bluetooth/A2dpProfile.java | 28 +++++-- .../android/server/audio/AudioService.java | 78 ++++++++++++++++--- 2 files changed, 92 insertions(+), 14 deletions(-) mode change 100755 => 100644 packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java old mode 100755 new mode 100644 index b9fb5aa8609f..873d39252339 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java @@ -128,18 +128,36 @@ public final class A2dpProfile implements LocalBluetoothProfile { public boolean disconnect(BluetoothDevice device) { if (mService == null) return false; - // Downgrade priority as user is disconnecting the headset. - if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON){ - mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + List deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty()) { + for (BluetoothDevice dev : deviceList) { + if (dev.equals(device)) { + if (V) Log.d(TAG,"Downgrade priority as user" + + "is disconnecting the headset"); + // Downgrade priority as user is disconnecting the headset. + if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + return mService.disconnect(device); + } + } } - return mService.disconnect(device); + return false; } public int getConnectionStatus(BluetoothDevice device) { if (mService == null) { return BluetoothProfile.STATE_DISCONNECTED; } - return mService.getConnectionState(device); + List deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty()) { + for (BluetoothDevice dev : deviceList) { + if (dev.equals(device)) { + return mService.getConnectionState(device); + } + } + } + return BluetoothProfile.STATE_DISCONNECTED; } public boolean isPreferred(BluetoothDevice device) { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index ee87713cce17..4d8612e46e1d 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -431,6 +431,11 @@ public class AudioService extends IAudioService.Stub { private final ArrayMap mConnectedDevices = new ArrayMap<>(); + private String mA2dpConnectedDevice = ""; //Used for BT a2dp connection + //Add connected A2dp devices in this list + private ArrayList mConnectedBTDevicesList = + new ArrayList(); + // Forced device usage for communications private int mForcedUseForComm; @@ -3131,9 +3136,18 @@ public class AudioService extends IAudioService.Stub { synchronized (mConnectedDevices) { synchronized (mA2dpAvrcpLock) { mA2dp = (BluetoothA2dp) proxy; + if (mConnectedBTDevicesList.size() > 0) { + Log.d(TAG,"A2dp connection list not empty, purge it, size " + + mConnectedBTDevicesList.size()); + mConnectedBTDevicesList.clear(); + } + //In Dual A2dp, we can have two devices connected deviceList = mA2dp.getConnectedDevices(); - if (deviceList.size() > 0) { - btDevice = deviceList.get(0); + Log.d(TAG, "onServiceConnected: A2dp Service connected: " + + deviceList.size()); + for (int i = 0; i < deviceList.size(); i++) { + //Add the device in Connected list + btDevice = deviceList.get(i); int state = mA2dp.getConnectionState(btDevice); int delay = checkSendBecomingNoisyIntent( AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, @@ -3256,6 +3270,10 @@ public class AudioService extends IAudioService.Stub { synchronized (mConnectedDevices) { synchronized (mA2dpAvrcpLock) { ArraySet toRemove = null; + Log.d(TAG,"mConnectedBTDevicesList size " + mConnectedBTDevicesList.size()); + if (mConnectedBTDevicesList.size() > 0) { + mConnectedBTDevicesList.clear(); + } // Disconnect ALL DEVICE_OUT_BLUETOOTH_A2DP devices for (int i = 0; i < mConnectedDevices.size(); i++) { DeviceListSpec deviceSpec = mConnectedDevices.valueAt(i); @@ -3813,10 +3831,41 @@ public class AudioService extends IAudioService.Stub { public int setBluetoothA2dpDeviceConnectionState(BluetoothDevice device, int state, int profile) { - int delay; + int delay = 0; if (profile != BluetoothProfile.A2DP && profile != BluetoothProfile.A2DP_SINK) { throw new IllegalArgumentException("invalid profile " + profile); } + /*check the state of the currnt device*/ + if (state == BluetoothA2dp.STATE_CONNECTING) { + Log.d(TAG, "Device is still connecting "); + return delay; + } + if ((mConnectedBTDevicesList.contains(device) && + (state == BluetoothA2dp.STATE_CONNECTED))) { + Log.d(TAG, "Device conn is updated again, ignore "); + return delay; + } + if (!mConnectedBTDevicesList.contains(device) && + (state == BluetoothA2dp.STATE_CONNECTED)) { + /*add the device in the list*/ + Log.d(TAG, "Add new connected device in the list: " + device); + mConnectedBTDevicesList.add(device); + if (mConnectedBTDevicesList.size() > 1) { + Log.d(TAG, "Second device connected, add new device "); + return delay; + } + } else if ((state == BluetoothA2dp.STATE_DISCONNECTED) || + (state == BluetoothA2dp.STATE_DISCONNECTING)) { + Log.d(TAG, "Device is getting disconnected: " + device); + if (mConnectedBTDevicesList.contains(device)) { + Log.d(TAG, "Remove the BT device "); + mConnectedBTDevicesList.remove(device); + } + if (mConnectedBTDevicesList.size() > 0) { + Log.d(TAG, "Not all are disconnected "); + return delay; + } + } synchronized (mConnectedDevices) { if (profile == BluetoothProfile.A2DP) { delay = checkSendBecomingNoisyIntent(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, @@ -4883,11 +4932,12 @@ public class AudioService extends IAudioService.Stub { // introduction of a delay for transient disconnections of docks when // power is rapidly turned off/on, this message will be canceled if // we reconnect the dock under a preset delay - makeA2dpDeviceUnavailableLater(address, BTA2DP_DOCK_TIMEOUT_MILLIS); + makeA2dpDeviceUnavailableLater(btDevice.getAddress(), BTA2DP_DOCK_TIMEOUT_MILLIS); // the next time isConnected is evaluated, it will be false for the dock } } else { - makeA2dpDeviceUnavailableNow(address); + Log.d(TAG, "All devices are disconneted, update Policymanager "); + makeA2dpDeviceUnavailableNow(btDevice.getAddress()); } synchronized (mCurAudioRoutes) { if (mCurAudioRoutes.bluetoothName != null) { @@ -4897,21 +4947,24 @@ public class AudioService extends IAudioService.Stub { } } } else if (!isConnected && state == BluetoothProfile.STATE_CONNECTED) { + //This function is not implemented + mA2dpConnectedDevice = "BluetoothA2dp"; // Add this String if (btDevice.isBluetoothDock()) { // this could be a reconnection after a transient disconnection cancelA2dpDeviceTimeout(); - mDockAddress = address; + mDockAddress = mA2dpConnectedDevice; } else { // this could be a connection of another A2DP device before the timeout of // a dock: cancel the dock timeout, and make the dock unavailable now if(hasScheduledA2dpDockTimeout()) { cancelA2dpDeviceTimeout(); - makeA2dpDeviceUnavailableNow(mDockAddress); + makeA2dpDeviceUnavailableNow(btDevice.getAddress()); } } - makeA2dpDeviceAvailable(address, btDevice.getName()); + makeA2dpDeviceAvailable(btDevice.getAddress(), btDevice.getName()); + //Updated the Router for a2dp device synchronized (mCurAudioRoutes) { - String name = btDevice.getAliasName(); + String name = mA2dpConnectedDevice; if (!TextUtils.equals(mCurAudioRoutes.bluetoothName, name)) { mCurAudioRoutes.bluetoothName = name; sendMsg(mAudioHandler, MSG_REPORT_NEW_ROUTES, @@ -4928,6 +4981,7 @@ public class AudioService extends IAudioService.Stub { Log.d(TAG, "onSetA2dpSourceConnectionState btDevice="+btDevice+" state="+state); } if (btDevice == null) { + Log.d(TAG, "onSetA2dpSourceConnectionState device is null"); //gasati return; } String address = btDevice.getAddress(); @@ -5011,8 +5065,14 @@ public class AudioService extends IAudioService.Stub { // Called synchronized on mConnectedDevices private int checkSendBecomingNoisyIntent(int device, int state) { int delay = 0; + if (mConnectedBTDevicesList.size() > 1) { + Log.d(TAG, "checkSendBecomingNoisyIntent on state: " + state); + return delay; + } + if ((state == 0) && ((device & mBecomingNoisyIntentDevices) != 0)) { int devices = 0; + Log.d(TAG, "checkSendBecomingNoisyIntent update the noise"); for (int i = 0; i < mConnectedDevices.size(); i++) { int dev = mConnectedDevices.valueAt(i).mDeviceType; if (((dev & AudioSystem.DEVICE_BIT_IN) == 0) -- GitLab From 9e2591710264b8d811bde37c50f9f0472a5c9708 Mon Sep 17 00:00:00 2001 From: Hamad Kadmany Date: Sun, 29 May 2016 14:44:08 +0300 Subject: [PATCH 065/185] SystemServer: add WiGig services WiGig services implement an API for managing wigig wireless network device, in similar fashion done for WiFi. The services are not enabled by default. Change-Id: Iff682ec191cbd4ab3e78837308312ef3fbb7564e CRs-Fixed: 997364 --- .../java/com/android/server/SystemServer.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index f59b2ff16482..81de92fcf342 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -32,6 +32,7 @@ import android.os.Build; import android.os.Environment; import android.os.FactoryTest; import android.os.FileUtils; +import android.os.IBinder; import android.os.IPowerManager; import android.os.Looper; import android.os.PowerManager; @@ -99,6 +100,9 @@ import com.android.server.webkit.WebViewUpdateService; import com.android.server.wm.WindowManagerService; import dalvik.system.VMRuntime; +import dalvik.system.PathClassLoader; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.io.File; import java.io.IOException; @@ -523,6 +527,8 @@ public final class SystemServer { ConsumerIrService consumerIr = null; MmsServiceBroker mmsService = null; HardwarePropertiesManagerService hardwarePropertiesService = null; + Object wigigP2pService = null; + Object wigigService = null; boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); boolean disableBluetooth = SystemProperties.getBoolean("config.disable_bluetooth", false); @@ -543,6 +549,7 @@ public final class SystemServer { boolean disableSamplingProfiler = SystemProperties.getBoolean("config.disable_samplingprof", false); boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1"); + boolean enableWigig = SystemProperties.getBoolean("persist.wigig.enable", false); try { Slog.i(TAG, "Reading configuration..."); @@ -832,6 +839,31 @@ public final class SystemServer { mSystemServiceManager.startService("com.android.server.wifi.RttService"); } + if (enableWigig) { + try { + Slog.i(TAG, "Wigig Service"); + PathClassLoader wigigClassLoader = + new PathClassLoader("/system/framework/wigig-service.jar", + "/system/lib64:/system/vendor/lib64", + getClass().getClassLoader()); + Class wigigP2pClass = wigigClassLoader.loadClass( + "com.qualcomm.qti.server.wigig.p2p.WigigP2pServiceImpl"); + Constructor ctor = wigigP2pClass.getConstructor(Context.class); + wigigP2pService = ctor.newInstance(context); + Slog.i(TAG, "Successfully loaded WigigP2pServiceImpl class"); + ServiceManager.addService("wigigp2p", (IBinder) wigigP2pService); + + Class wigigClass = wigigClassLoader.loadClass( + "com.qualcomm.qti.server.wigig.WigigService"); + ctor = wigigClass.getConstructor(Context.class); + wigigService = ctor.newInstance(context); + Slog.i(TAG, "Successfully loaded WigigService class"); + ServiceManager.addService("wigig", (IBinder) wigigService); + } catch (Throwable e) { + reportWtf("starting WigigService", e); + } + } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET) || mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) { mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS); @@ -1203,6 +1235,26 @@ public final class SystemServer { mSystemServiceManager.startBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeWindowManagerServiceReady"); + + // Wigig services are not registered as system services because of class loader + // limitations, send boot phase notification separately + if (enableWigig) { + try { + Slog.i(TAG, "calling onBootPhase for Wigig Services"); + Class wigigP2pClass = wigigP2pService.getClass(); + Method m = wigigP2pClass.getMethod("onBootPhase", int.class); + m.invoke(wigigP2pService, new Integer( + SystemService.PHASE_SYSTEM_SERVICES_READY)); + + Class wigigClass = wigigService.getClass(); + m = wigigClass.getMethod("onBootPhase", int.class); + m.invoke(wigigService, new Integer( + SystemService.PHASE_SYSTEM_SERVICES_READY)); + } catch (Throwable e) { + reportWtf("Wigig services ready", e); + } + } + try { wm.systemReady(); } catch (Throwable e) { -- GitLab From 7b76aa232482e4e5177769309814be91cc4632e0 Mon Sep 17 00:00:00 2001 From: Ayan Ghosh Date: Fri, 25 Jul 2014 18:07:23 +0530 Subject: [PATCH 066/185] AVRCP 1.5 implementation AVRCP 1.5 Implementation. Change-Id: I9a21348ec7e0c21735448ea29b781167f01e1580 Bluetooth: Add Total track number. Add support to add total number of tracks in Meta-data Change-Id: I5b1287f791615adcd4f920fe5c7cae0c7c7b04ea CRs-Fixed: 627869 Bluetooth: Modify Avrcp 1.5 implementation to adapt to latest AOSP changes Modify Avrcp 1.5 implementation to adapt to latest AOSP changes. CRs-Fixed: 719567 Change-Id: I0958fb12f573054f1da16df0ac46f3bec7374222 Move media player list management to Audioservice Move media player list management to Audioservice so that list is retained even after BT restart. Change-Id: Ia2455e6def1900b4af2225c50e1b5325a7ce1a98 Update RemoteController on Session update Update RemoteController on Session update in order to update AVRCP player list to honor peer initiated browsing command. This change fixes AVRCP browing failure due stale entry of player session upated to AVRCP player list after device reboot. Change-Id: I529a13e2c8a70e4b53319798c952b41f369b8bec Introduce new interface class for Avrcp Browsing feature Separate out Avrcp Browsing Apis from SDK interface class to ensure compatibility with all available apps implementing the mentioned SDK interface class. Bluetooth: Access mediaplayerlist in synchronized way Access mediaplayerlist in synchronized way to make sure no transient update is tried to be worked upon in multithreaded environment. Change-Id: I0e7810ac89e0ddc19d57b32c679450aa7cb87273 CRs-Fixed: 979840 Conflicts: media/java/android/media/IAudioService.aidl Change-Id: I713527ee3622ba28fe92d5bc743b9471632299b3 --- .../src/com/android/commands/media/Media.java | 20 ++ media/java/android/media/AudioManager.java | 56 ++++- media/java/android/media/IAudioService.aidl | 10 + .../android/media/MediaMetadataEditor.java | 4 +- .../android/media/RemoteControlClient.java | 231 ++++++++++++++++++ .../java/android/media/RemoteController.java | 188 ++++++++++++++ .../java/android/media/session/ISession.aidl | 4 + .../media/session/ISessionCallback.aidl | 3 + .../media/session/ISessionController.aidl | 3 + .../session/ISessionControllerCallback.aidl | 4 + .../media/session/MediaController.java | 114 +++++++++ .../android/media/session/MediaSession.java | 141 +++++++++++ .../session/MediaSessionLegacyHelper.java | 21 ++ .../android/server/audio/AudioService.java | 122 ++++++++- .../server/media/MediaSessionRecord.java | 185 ++++++++++++++ 15 files changed, 1102 insertions(+), 4 deletions(-) diff --git a/cmds/media/src/com/android/commands/media/Media.java b/cmds/media/src/com/android/commands/media/Media.java index d7f23cb44098..d185b5625d4e 100644 --- a/cmds/media/src/com/android/commands/media/Media.java +++ b/cmds/media/src/com/android/commands/media/Media.java @@ -222,6 +222,26 @@ public class Media extends BaseCommand { System.out.println("onVolumeInfoChanged " + info); } + @Override + public void onPlayItemResponse(boolean success) throws RemoteException { + System.out.println("onPlayItemResponse "); + } + + @Override + public void onUpdateNowPlayingEntries(long[] playList) throws RemoteException { + System.out.println("onUpdateNowPlayingEntries "); + } + + @Override + public void onUpdateFolderInfoBrowsedPlayer(String stringUri) throws RemoteException { + System.out.println("onUpdateFolderInfoBrowsedPlayer "); + } + + @Override + public void onUpdateNowPlayingContentChange() throws RemoteException { + System.out.println("onUpdateNowPlayingContentChange "); + } + void printUsageMessage() { try { System.out.println("V2Monitoring session " + mController.getTag() diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 4bdc70e37621..835c452f4a74 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -69,7 +69,6 @@ public class AudioManager { private final boolean mUseFixedVolume; private static String TAG = "AudioManager"; private static final AudioPortEventHandler sAudioPortEventHandler = new AudioPortEventHandler(); - /** * Broadcast intent, a hint for applications that audio is about to become * 'noisy' due to a change in audio outputs. For example, this intent may @@ -312,6 +311,32 @@ public class AudioManager { */ public static final String EXTRA_ENCODINGS = "android.media.extra.ENCODINGS"; + /** + * @hide Broadcast intent when RemoteControlClient list is updated. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String RCC_CHANGED_ACTION = + "org.codeaurora.bluetooth.RCC_CHANGED_ACTION"; + + /** + * @hide Used for sharing the calling package name + */ + public static final String EXTRA_CALLING_PACKAGE_NAME = + "org.codeaurora.bluetooth.EXTRA_CALLING_PACKAGE_NAME"; + + /** + * @hide Used for sharing the focus changed value + */ + public static final String EXTRA_FOCUS_CHANGED_VALUE = + "org.codeaurora.bluetooth.EXTRA_FOCUS_CHANGED_VALUE"; + + /** + * @hide Used for sharing the availability changed value + */ + public static final String EXTRA_AVAILABLITY_CHANGED_VALUE = + "org.codeaurora.bluetooth.EXTRA_AVAILABLITY_CHANGED_VALUE"; + + /** The audio stream for phone calls */ public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL; /** The audio stream for system sounds */ @@ -2504,6 +2529,7 @@ public class AudioManager { //==================================================================== // Remote Control + /** * Register a component to be the sole receiver of MEDIA_BUTTON intents. * @param eventReceiver identifier of a {@link android.content.BroadcastReceiver} @@ -2522,6 +2548,7 @@ public class AudioManager { "receiver and context package names don't match"); return; } + // construct a PendingIntent for the media button and register it Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); // the associated intent will be handled by the component being registered @@ -2531,6 +2558,7 @@ public class AudioManager { registerMediaButtonIntent(pi, eventReceiver); } + /** * Register a component to be the sole receiver of MEDIA_BUTTON intents. This is like * {@link #registerMediaButtonEventReceiver(android.content.ComponentName)}, but allows @@ -2660,6 +2688,13 @@ public class AudioManager { return false; } rctlr.startListeningToSessions(); + IAudioService service = getService(); + try { + service.updateRemoteControllerOnExistingMediaPlayers(); + } catch (RemoteException e) { + Log.e(TAG, "Error in calling Audio service interface" + + "updateRemoteControllerOnExistingMediaPlayers() due to " + e); + } return true; } @@ -2681,6 +2716,24 @@ public class AudioManager { rctlr.stopListeningToSessions(); } + /** + * @hide + */ + public void updateMediaPlayerList(String packageName, boolean toAdd) { + IAudioService service = getService(); + try { + if (toAdd) { + Log.d(TAG, "updateMediaPlayerList: Add RCC " + packageName + " to List"); + service.addMediaPlayerAndUpdateRemoteController(packageName); + } else { + Log.d(TAG, "updateMediaPlayerList: Remove RCC " + packageName + " from List"); + service.removeMediaPlayerAndUpdateRemoteController(packageName); + } + } catch (RemoteException e) { + Log.e(TAG, "Exception while executing updateMediaPlayerList: " + e); + } + } + //==================================================================== // Audio policy @@ -2734,7 +2787,6 @@ public class AudioManager { } } - //==================================================================== // Recording configuration /** diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index c7931fcd297b..c3cc5bf61b6b 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -164,5 +164,15 @@ interface IAudioService { oneway void unregisterRecordingCallback(in IRecordingConfigDispatcher rcdb); +<<<<<<< HEAD List getActiveRecordingConfigurations(); +======= + AudioRecordingConfiguration[] getActiveRecordingConfigurations(); + + void updateRemoteControllerOnExistingMediaPlayers(); + + void addMediaPlayerAndUpdateRemoteController(String packageName); + + void removeMediaPlayerAndUpdateRemoteController(String packageName); +>>>>>>> 810a57e... AVRCP 1.5 implementation } diff --git a/media/java/android/media/MediaMetadataEditor.java b/media/java/android/media/MediaMetadataEditor.java index 877c8729543e..648ff242dc10 100644 --- a/media/java/android/media/MediaMetadataEditor.java +++ b/media/java/android/media/MediaMetadataEditor.java @@ -440,7 +440,7 @@ import android.util.SparseIntArray; protected static final SparseIntArray METADATA_KEYS_TYPE; static { - METADATA_KEYS_TYPE = new SparseIntArray(17); + METADATA_KEYS_TYPE = new SparseIntArray(18); // NOTE: if adding to the list below, make sure you increment the array initialization size // keys with long values METADATA_KEYS_TYPE.put( @@ -466,5 +466,7 @@ import android.util.SparseIntArray; // keys with Rating values METADATA_KEYS_TYPE.put(RATING_KEY_BY_OTHERS, METADATA_TYPE_RATING); METADATA_KEYS_TYPE.put(RATING_KEY_BY_USER, METADATA_TYPE_RATING); + // Meta data for total number of tracks in Album + METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS, METADATA_TYPE_LONG); } } diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java index 6d32eff9e8d0..87b156f4a85a 100644 --- a/media/java/android/media/RemoteControlClient.java +++ b/media/java/android/media/RemoteControlClient.java @@ -349,6 +349,16 @@ import java.lang.IllegalArgumentException; */ public RemoteControlClient(PendingIntent mediaButtonIntent) { mRcMediaIntent = mediaButtonIntent; + + Looper looper; + if ((looper = Looper.myLooper()) != null) { + mEventHandler = new EventHandler(this, looper); + } else if ((looper = Looper.getMainLooper()) != null) { + mEventHandler = new EventHandler(this, looper); + } else { + mEventHandler = null; + Log.e(TAG, "RemoteControlClient() couldn't find main application thread"); + } } /** @@ -368,6 +378,8 @@ import java.lang.IllegalArgumentException; */ public RemoteControlClient(PendingIntent mediaButtonIntent, Looper looper) { mRcMediaIntent = mediaButtonIntent; + + mEventHandler = new EventHandler(this, looper); } /** @@ -695,6 +707,79 @@ import java.lang.IllegalArgumentException; } } + /** + * @hide + */ + public void playItemResponse(boolean success) { + Log.e(TAG, "playItemResponse"); + playItemResponseInt(success); + } + + private void playItemResponseInt(boolean success) { + Log.d(TAG, "playItemResponseInt"); + Log.v(TAG, "success: " + success); + + // USE_SESSIONS + if (mSession != null) { + mSession.playItemResponse(success); + } + } + + /** + * @hide + */ + public void updateNowPlayingEntries(long[] playList) { + Log.e(TAG, "updateNowPlayingEntries: Item numbers: " + playList.length); + updateNowPlayingEntriesInt(playList); + } + + private void updateNowPlayingEntriesInt(long[] playList) { + Log.d(TAG, "updateNowPlayingEntriesInt"); + + // USE_SESSIONS + if (mSession != null) { + mSession.updateNowPlayingEntries(playList); + } + } + + /** + * @hide + */ + public void updateFolderInfoBrowsedPlayer(String stringUri) { + Log.e(TAG, "updateFolderInfoBrowsedPlayer"); + synchronized(mCacheLock) { + updateFolderInfoBrowsedPlayerInt(stringUri); + } + } + + private void updateFolderInfoBrowsedPlayerInt(String stringUri) { + Log.d(TAG, "updateFolderInfoBrowsedPlayerInt"); + + // USE_SESSIONS + if (mSession != null) { + mSession.updateFolderInfoBrowsedPlayer(stringUri); + } + } + + /** + * @hide + */ + public void updateNowPlayingContentChange() { + Log.e(TAG, "updateNowPlayingContentChange"); + synchronized(mCacheLock) { + updateNowPlayingContentChangeInt(); + } + } + + private void updateNowPlayingContentChangeInt() { + Log.d(TAG, "updateNowPlayingContentChangeInt"); + + // USE_SESSIONS + if (mSession != null) { + mSession.updateNowPlayingContentChange(); + } + } + /** * Sets the flags for the media transport control buttons that this client supports. * @param transportControlFlags A combination of the following flags: @@ -753,6 +838,56 @@ import java.lang.IllegalArgumentException; } } + /** + * @hide + */ + public interface OnGetNowPlayingEntriesListener { + public abstract void onGetNowPlayingEntries(); + } + + /** + * @hide + */ + public void setNowPlayingEntriesUpdateListener(OnGetNowPlayingEntriesListener l) { + Log.d(TAG, "setNowPlayingEntriesUpdateListener"); + synchronized(mCacheLock) { + mGetNowPlayingEntriesListener = l; + } + } + + /** + * @hide + */ + public interface OnSetBrowsedPlayerListener { + public abstract void onSetBrowsedPlayer(); + } + + /** + * @hide + */ + public void setBrowsedPlayerUpdateListener(OnSetBrowsedPlayerListener l) { + Log.d(TAG, "setBrowsedPlayerUpdateListener"); + synchronized(mCacheLock) { + mSetBrowsedPlayerListener = l; + } + } + + /** + * @hide + */ + public interface OnSetPlayItemListener { + public abstract void onSetPlayItem(int scope, long uid); + } + + /** + * @hide + */ + public void setPlayItemListener(OnSetPlayItemListener l) { + Log.d(TAG, "setPlayItemListener"); + synchronized(mCacheLock) { + mSetPlayItemListener = l; + } + } /** * Interface definition for a callback to be invoked when the media playback position is @@ -893,6 +1028,13 @@ import java.lang.IllegalArgumentException; /** * The current remote control client generation ID across the system, as known by this object */ + + private OnSetBrowsedPlayerListener mSetBrowsedPlayerListener; + + private OnSetPlayItemListener mSetPlayItemListener; + + private OnGetNowPlayingEntriesListener mGetNowPlayingEntriesListener; + private int mCurrentClientGenId = -1; /** @@ -946,8 +1088,67 @@ import java.lang.IllegalArgumentException; onUpdateMetadata(mCurrentClientGenId, MetadataEditor.RATING_KEY_BY_USER, rating); } } + + @Override + public void setPlayItem(int scope, long uid) { + // only post messages, we can't block here + if (mEventHandler != null) { + mEventHandler.removeMessages(MSG_SET_PLAY_ITEM); + mEventHandler.sendMessage(mEventHandler.obtainMessage( + MSG_SET_PLAY_ITEM, 0 /* arg1 */, scope /* arg2, ignored */, + new Long(uid))); + } + } + + @Override + public void getNowPlayingEntries() { + // only post messages, we can't block here + if (mEventHandler != null) { + mEventHandler.removeMessages(MSG_GET_NOW_PLAYING_ENTRIES); + mEventHandler.sendMessage(mEventHandler.obtainMessage( + MSG_GET_NOW_PLAYING_ENTRIES, 0, 0, null)); + } + } + + @Override + public void setBrowsedPlayer() { + Log.d(TAG, "setBrowsedPlayer in RemoteControlClient"); + if (mEventHandler != null) { + mEventHandler.sendMessage(mEventHandler.obtainMessage( + MSG_SET_BROWSED_PLAYER, 0 /* arg1 */, 0 /* arg2*/, null)); + } + } }; + private EventHandler mEventHandler; + private final static int MSG_SET_BROWSED_PLAYER = 12; + private final static int MSG_SET_PLAY_ITEM = 13; + private final static int MSG_GET_NOW_PLAYING_ENTRIES = 14; + + private class EventHandler extends Handler { + public EventHandler(RemoteControlClient rcc, Looper looper) { + super(looper); + } + + @Override + public void handleMessage(Message msg) { + switch(msg.what) { + case MSG_SET_BROWSED_PLAYER: + Log.d(TAG, "MSG_SET_BROWSED_PLAYER in RemoteControlClient"); + onSetBrowsedPlayer(); + break; + case MSG_SET_PLAY_ITEM: + onSetPlayItem(msg.arg2, ((Long)msg.obj).longValue()); + break; + case MSG_GET_NOW_PLAYING_ENTRIES: + onGetNowPlayingEntries(); + break; + default: + Log.e(TAG, "Unknown event " + msg.what + " in RemoteControlClient handler"); + } + } + } + //=========================================================== // Message handlers @@ -967,6 +1168,36 @@ import java.lang.IllegalArgumentException; } } + private void onSetPlayItem(int scope, long uid) { + Log.d(TAG, "onSetPlayItem"); + synchronized (mCacheLock) { + if (mSetPlayItemListener != null) { + Log.d(TAG, "mSetPlayItemListener.onSetPlayItem"); + mSetPlayItemListener.onSetPlayItem(scope, uid); + } + } + } + + private void onSetBrowsedPlayer() { + Log.d(TAG, "onSetBrowsedPlayer"); + synchronized (mCacheLock) { + if (mSetBrowsedPlayerListener != null) { + Log.d(TAG, "mSetBrowsedPlayerListener.onSetBrowsedPlayer"); + mSetBrowsedPlayerListener.onSetBrowsedPlayer(); + } + } + } + + private void onGetNowPlayingEntries() { + Log.d(TAG, "onGetNowPlayingEntries"); + synchronized (mCacheLock) { + if (mGetNowPlayingEntriesListener != null) { + Log.d(TAG, "mGetNowPlayingEntriesListener.onGetNowPlayingEntries"); + mGetNowPlayingEntriesListener.onGetNowPlayingEntries(); + } + } + } + //=========================================================== // Internal utilities diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 90f2163f1210..9f2d545dc969 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -69,11 +69,13 @@ import java.util.List; private MediaSessionManager.OnActiveSessionsChangedListener mSessionListener; private MediaController.Callback mSessionCb = new MediaControllerCallback(); + private final AudioManager mAudioManager; /** * Synchronized on mInfoLock */ private boolean mIsRegistered = false; private OnClientUpdateListener mOnClientUpdateListener; + private OnClientAvrcpUpdateListener mOnClientAvrcpUpdateListener; private PlaybackInfo mLastPlaybackInfo; private int mArtworkWidth = -1; private int mArtworkHeight = -1; @@ -124,6 +126,7 @@ import java.util.List; mContext = context; mSessionManager = (MediaSessionManager) context .getSystemService(Context.MEDIA_SESSION_SERVICE); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mSessionListener = new TopTransportSessionListener(); if (ActivityManager.isLowRamDeviceStatic()) { @@ -134,6 +137,25 @@ import java.util.List; } } + /** + * @hide + */ + public RemoteController(Context context, OnClientUpdateListener updateListener, Looper looper, + OnClientAvrcpUpdateListener avrcpUpdateListener) throws IllegalArgumentException { + this(context, updateListener, looper); + mOnClientAvrcpUpdateListener = avrcpUpdateListener; + } + + /** + * @hide + */ + public interface OnClientAvrcpUpdateListener { + public void onClientFolderInfoBrowsedPlayer(String stringUri); + public void onClientUpdateNowPlayingEntries(long[] playList); + public void onClientNowPlayingContentChange(); + public void onClientPlayItemResponse(boolean success); + }; + /** * Interface definition for the callbacks to be invoked whenever media events, metadata @@ -268,6 +290,7 @@ import java.util.List; * @throws IllegalArgumentException */ public boolean seekTo(long timeMs) throws IllegalArgumentException { + Log.e(TAG, "seekTo() in RemoteController"); if (!mEnabled) { Log.e(TAG, "Cannot use seekTo() from a disabled RemoteController"); return false; @@ -283,6 +306,69 @@ import java.util.List; return true; } + /** + * @hide + * Request the user of a RemoteControlClient to play the requested item. + * @param generationId the RemoteControlClient generation counter for which this request is + * issued. + * @param uid uid of the song to be played. + * @scope scope of the file system to use + */ + public void setRemoteControlClientPlayItem(long uid, int scope) { + Log.e(TAG, "setRemoteControlClientPlayItem()"); + if (!mEnabled) { + Log.e(TAG, "Cannot use setRemoteControlClientPlayItem()" + + " from a disabled RemoteController"); + return; + } + synchronized (mInfoLock) { + if (mCurrentSession != null) { + mCurrentSession.getTransportControls().setRemoteControlClientPlayItem(uid, scope); + } + } + return; + } + + /** + * @hide + * Request the user of a RemoteControlClient to provide with the now playing list entries. + * @param generationId the RemoteControlClient generation counter for which this request is + * issued. + */ + public void getRemoteControlClientNowPlayingEntries() { + Log.e(TAG, "getRemoteControlClientNowPlayingEntries()"); + if (!mEnabled) { + Log.e(TAG, "Cannot use getRemoteControlClientNowPlayingEntries()" + + " from a disabled RemoteController"); + return; + } + synchronized (mInfoLock) { + if (mCurrentSession != null) { + mCurrentSession.getTransportControls().getRemoteControlClientNowPlayingEntries(); + } + } + return; + } + + /** + * @hide + * Request the user of a RemoteControlClient to set the music player as current browsed player. + * @param packageName package name of the targeted media player. + */ + public void setRemoteControlClientBrowsedPlayer() { + Log.e(TAG, "setRemoteControlClientBrowsedPlayer()"); + if (!mEnabled) { + Log.e(TAG, "Cannot use setRemoteControlClientBrowsedPlayer()" + + " from a disabled RemoteController"); + return; + } + synchronized (mInfoLock) { + if (mCurrentSession != null) { + mCurrentSession.getTransportControls().setRemoteControlClientBrowsedPlayer(); + } + } + return; + } /** * @hide @@ -468,6 +554,30 @@ import java.util.List; public void onMetadataChanged(MediaMetadata metadata) { onNewMediaMetadata(metadata); } + + @Override + public void onUpdateFolderInfoBrowsedPlayer(String stringUri) { + Log.d(TAG, "MediaControllerCallback: onUpdateFolderInfoBrowsedPlayer"); + onFolderInfoBrowsedPlayer(stringUri); + } + + @Override + public void onUpdateNowPlayingEntries(long[] playList) { + Log.d(TAG, "MediaControllerCallback: onUpdateNowPlayingEntries"); + onNowPlayingEntriesUpdate(playList); + } + + @Override + public void onUpdateNowPlayingContentChange() { + Log.d(TAG, "MediaControllerCallback: onUpdateNowPlayingContentChange"); + onNowPlayingContentChange(); + } + + @Override + public void onPlayItemResponse(boolean success) { + Log.d(TAG, "MediaControllerCallback: onPlayItemResponse"); + onSetPlayItemResponse(success); + } } /** @@ -597,6 +707,8 @@ import java.util.List; synchronized (mInfoLock) { if (controller == null) { if (mCurrentSession != null) { + Log.v(TAG, "Updating current controller as null"); + mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), false); mCurrentSession.unregisterCallback(mSessionCb); mCurrentSession = null; sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, @@ -606,13 +718,21 @@ import java.util.List; || !controller.getSessionToken() .equals(mCurrentSession.getSessionToken())) { if (mCurrentSession != null) { + Log.v(TAG, "Updating current controller package as " + + controller.getPackageName() + " from " + mCurrentSession.getPackageName()); mCurrentSession.unregisterCallback(mSessionCb); + } else { + Log.v(TAG, "Updating current controller package as " + + controller.getPackageName() + " from null"); } + sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, 0 /* arg1 ignored */, 0 /* clearing */, null /* obj */, 0 /* delay */); mCurrentSession = controller; mCurrentSession.registerCallback(mSessionCb, mEventHandler); + mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), true); + PlaybackState state = controller.getPlaybackState(); sendMsg(mEventHandler, MSG_NEW_PLAYBACK_STATE, SENDMSG_REPLACE, 0 /* arg1 ignored */, 0 /* arg2 ignored */, state /* obj */, 0 /* delay */); @@ -669,6 +789,74 @@ import java.util.List; } } + private void onFolderInfoBrowsedPlayer(String stringUri) { + Log.d(TAG, "RemoteController: onFolderInfoBrowsedPlayer"); + final OnClientAvrcpUpdateListener l; + + synchronized(mInfoLock) { + l = mOnClientAvrcpUpdateListener; + } + + try { + if (l != null) { + l.onClientFolderInfoBrowsedPlayer(stringUri); + } + } catch (Exception e) { + Log.e(TAG, "Error Updating AVRCP on receiving Browsed player response", e); + } + } + + private void onNowPlayingEntriesUpdate(long[] playList) { + Log.d(TAG, "RemoteController: onUpdateNowPlayingEntries"); + final OnClientAvrcpUpdateListener l; + + synchronized(mInfoLock) { + l = mOnClientAvrcpUpdateListener; + } + + try { + if (l != null) { + l.onClientUpdateNowPlayingEntries(playList); + } + } catch (Exception e) { + Log.e(TAG, "Error Updating AVRCP on receiving Now Playing Entries", e); + } + } + + private void onNowPlayingContentChange() { + Log.d(TAG, "RemoteController: onNowPlayingContentChange"); + final OnClientAvrcpUpdateListener l; + + synchronized(mInfoLock) { + l = mOnClientAvrcpUpdateListener; + } + + try { + if (l != null) { + l.onClientNowPlayingContentChange(); + } + } catch (Exception e) { + Log.e(TAG, "Error Updating AVRCP on Now Playing Content Change", e); + } + } + + private void onSetPlayItemResponse(boolean success) { + Log.d(TAG, "RemoteController: onPlayItemResponse"); + final OnClientAvrcpUpdateListener l; + + synchronized(mInfoLock) { + l = mOnClientAvrcpUpdateListener; + } + + try { + if (l != null) { + l.onClientPlayItemResponse(success); + } + } catch (Exception e) { + Log.e(TAG, "Error Updating AVRCP on receiving Play Item response", e); + } + } + //================================================== private static class PlaybackInfo { int mState; diff --git a/media/java/android/media/session/ISession.aidl b/media/java/android/media/session/ISession.aidl index 3affee5c0aa7..477c778a0575 100644 --- a/media/java/android/media/session/ISession.aidl +++ b/media/java/android/media/session/ISession.aidl @@ -45,6 +45,10 @@ interface ISession { void setQueueTitle(CharSequence title); void setExtras(in Bundle extras); void setRatingType(int type); + void playItemResponse(boolean success); + void updateNowPlayingEntries(in long[] playList); + void updateFolderInfoBrowsedPlayer(String stringUri); + void updateNowPlayingContentChange(); // These commands relate to volume handling void setPlaybackToLocal(in AudioAttributes attributes); diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl index 893bd3c8cbb1..fabd71fea5d5 100644 --- a/media/java/android/media/session/ISessionCallback.aidl +++ b/media/java/android/media/session/ISessionCallback.aidl @@ -45,6 +45,9 @@ oneway interface ISessionCallback { void onFastForward(); void onRewind(); void onSeekTo(long pos); + void setRemoteControlClientBrowsedPlayer(); + void setRemoteControlClientPlayItem(long uid, int scope); + void getRemoteControlClientNowPlayingEntries(); void onRate(in Rating rating); void onCustomAction(String action, in Bundle args); diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 249bcdc802ce..3d7c413c3b99 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -66,6 +66,9 @@ interface ISessionController { void fastForward(); void rewind(); void seekTo(long pos); + void setRemoteControlClientBrowsedPlayer(); + void setRemoteControlClientPlayItem(long uid, int scope); + void getRemoteControlClientNowPlayingEntries(); void rate(in Rating rating); void sendCustomAction(String action, in Bundle args); MediaMetadata getMetadata(); diff --git a/media/java/android/media/session/ISessionControllerCallback.aidl b/media/java/android/media/session/ISessionControllerCallback.aidl index cf3176706d7e..a5ad9132bc3b 100644 --- a/media/java/android/media/session/ISessionControllerCallback.aidl +++ b/media/java/android/media/session/ISessionControllerCallback.aidl @@ -36,4 +36,8 @@ oneway interface ISessionControllerCallback { void onQueueTitleChanged(CharSequence title); void onExtrasChanged(in Bundle extras); void onVolumeInfoChanged(in ParcelableVolumeInfo info); + void onPlayItemResponse(boolean success); + void onUpdateNowPlayingEntries(in long[] playList); + void onUpdateFolderInfoBrowsedPlayer(String stringUri); + void onUpdateNowPlayingContentChange(); } diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 622900f5c7f9..670ff794344e 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -64,6 +64,10 @@ public final class MediaController { private static final int MSG_UPDATE_QUEUE_TITLE = 6; private static final int MSG_UPDATE_EXTRAS = 7; private static final int MSG_DESTROYED = 8; + private static final int MSG_FOLDER_INFO_BROWSED_PLAYER = 9; + private static final int MSG_UPDATE_NOWPLAYING_ENTRIES = 10; + private static final int MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE = 11; + private static final int MSG_PLAY_ITEM_RESPONSE = 12; private final ISessionController mSessionBinder; @@ -579,6 +583,31 @@ public final class MediaController { */ public void onAudioInfoChanged(PlaybackInfo info) { } + + /** + * @hide + */ + public void onUpdateFolderInfoBrowsedPlayer(String stringUri) { + } + + /** + * @hide + */ + public void onUpdateNowPlayingEntries(long[] playList) { + } + + /** + * @hide + */ + public void onUpdateNowPlayingContentChange() { + } + + /** + * @hide + */ + public void onPlayItemResponse(boolean success) { + } + } /** @@ -793,6 +822,7 @@ public final class MediaController { * @param pos Position to move to, in milliseconds. */ public void seekTo(long pos) { + Log.d(TAG, "seekTo in TransportControls"); try { mSessionBinder.seekTo(pos); } catch (RemoteException e) { @@ -800,6 +830,42 @@ public final class MediaController { } } + /** + * @hide + */ + public void setRemoteControlClientBrowsedPlayer() { + Log.d(TAG, "setRemoteControlClientBrowsedPlayer in TransportControls"); + try { + mSessionBinder.setRemoteControlClientBrowsedPlayer(); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling setRemoteControlClientBrowsedPlayer.", e); + } + } + + /** + * @hide + */ + public void setRemoteControlClientPlayItem(long uid, int scope) { + Log.d(TAG, "setRemoteControlClientPlayItem in TransportControls"); + try { + mSessionBinder.setRemoteControlClientPlayItem(uid, scope); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling setRemoteControlClientPlayItem.", e); + } + } + + /** + * @hide + */ + public void getRemoteControlClientNowPlayingEntries() { + Log.d(TAG, "getRemoteControlClientNowPlayingEntries in TransportControls"); + try { + mSessionBinder.getRemoteControlClientNowPlayingEntries(); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling getRemoteControlClientNowPlayingEntries.", e); + } + } + /** * Start fast forwarding. If playback is already fast forwarding this * may increase the rate. @@ -1062,6 +1128,42 @@ public final class MediaController { } } + @Override + public void onUpdateFolderInfoBrowsedPlayer(String stringUri) { + Log.d(TAG, "CallBackStub: onUpdateFolderInfoBrowsedPlayer"); + MediaController controller = mController.get(); + if (controller != null) { + controller.postMessage(MSG_FOLDER_INFO_BROWSED_PLAYER, stringUri, null); + } + } + + @Override + public void onUpdateNowPlayingEntries(long[] playList) { + Log.d(TAG, "CallBackStub: onUpdateNowPlayingEntries"); + MediaController controller = mController.get(); + if (controller != null) { + controller.postMessage(MSG_UPDATE_NOWPLAYING_ENTRIES, playList, null); + } + } + + @Override + public void onUpdateNowPlayingContentChange() { + Log.d(TAG, "CallBackStub: onUpdateNowPlayingContentChange"); + MediaController controller = mController.get(); + if (controller != null) { + controller.postMessage(MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE, null, null); + } + } + + @Override + public void onPlayItemResponse(boolean success) { + Log.d(TAG, "CallBackStub: onPlayItemResponse"); + MediaController controller = mController.get(); + if (controller != null) { + controller.postMessage(MSG_PLAY_ITEM_RESPONSE, new Boolean(success), null); + } + } + } private final static class MessageHandler extends Handler { @@ -1103,6 +1205,18 @@ public final class MediaController { case MSG_DESTROYED: mCallback.onSessionDestroyed(); break; + case MSG_FOLDER_INFO_BROWSED_PLAYER: + mCallback.onUpdateFolderInfoBrowsedPlayer((String) msg.obj); + break; + case MSG_UPDATE_NOWPLAYING_ENTRIES: + mCallback.onUpdateNowPlayingEntries((long[]) msg.obj); + break; + case MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE: + mCallback.onUpdateNowPlayingContentChange(); + break; + case MSG_PLAY_ITEM_RESPONSE: + mCallback.onPlayItemResponse(((Boolean)(msg.obj)).booleanValue()); + break; } } diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 7f9653d336df..59b2f6ff86a6 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -492,6 +492,58 @@ public final class MediaSession { } } + /** + * @hide + */ + public void playItemResponse(boolean success) { + Log.d(TAG, "MediaSession: playItemResponse"); + + try { + mBinder.playItemResponse(success); + } catch (RemoteException e) { + Log.wtf(TAG, "Dead object in playItemResponse.", e); + } + } + + /** + * @hide + */ + public void updateNowPlayingEntries(long[] playList) { + Log.d(TAG, "MediaSession: updateNowPlayingEntries"); + + try { + mBinder.updateNowPlayingEntries(playList); + } catch (RemoteException e) { + Log.wtf(TAG, "Dead object in updateNowPlayingEntries.", e); + } + } + + /** + * @hide + */ + public void updateFolderInfoBrowsedPlayer(String stringUri) { + Log.d(TAG, "MediaSession: updateFolderInfoBrowsedPlayer"); + + try { + mBinder.updateFolderInfoBrowsedPlayer(stringUri); + } catch (RemoteException e) { + Log.wtf(TAG, "Dead object in updateFolderInfoBrowsedPlayer.", e); + } + } + + /** + * @hide + */ + public void updateNowPlayingContentChange() { + Log.d(TAG, "MediaSession: updateNowPlayingContentChange"); + + try { + mBinder.updateNowPlayingContentChange(); + } catch (RemoteException e) { + Log.wtf(TAG, "Dead object in updateNowPlayingContentChange.", e); + } + } + /** * Notify the system that the remote volume changed. * @@ -604,6 +656,34 @@ public final class MediaSession { postToCallback(CallbackMessageHandler.MSG_MEDIA_BUTTON, mediaButtonIntent); } + private void dispatchSetBrowsedPlayerCommand() { + postToCallback(CallbackMessageHandler.MSG_SET_BROWSED_PLAYER); + } + + private void dispatchSetPlayItemCommand(long uid, int scope) { + PlayItemToken playItemToken = new PlayItemToken(uid, scope); + postToCallback(CallbackMessageHandler.MSG_SET_PLAY_ITEM, playItemToken); + } + + private class PlayItemToken { + private long mUid; + private int mScope; + public PlayItemToken(long uid, int scope) { + mUid = uid; + mScope = scope; + } + public int getScope() { + return mScope; + } + public long getUid() { + return mUid; + } + } + + private void dispatchGetNowPlayingItemsCommand() { + postToCallback(CallbackMessageHandler.MSG_GET_NOW_PLAYING_ITEMS); + } + private void dispatchAdjustVolume(int direction) { postToCallback(CallbackMessageHandler.MSG_ADJUST_VOLUME, direction); } @@ -971,6 +1051,25 @@ public final class MediaSession { */ public void onCustomAction(@NonNull String action, @Nullable Bundle extras) { } + + /** + * @hide + */ + public void setBrowsedPlayer() { + } + + /** + * @hide + */ + public void setPlayItem(int scope, long uid) { + } + + /** + * @hide + */ + public void getNowPlayingEntries() { + } + } /** @@ -1142,6 +1241,33 @@ public final class MediaSession { } } + @Override + public void setRemoteControlClientBrowsedPlayer() throws RemoteException { + Log.d(TAG, "setRemoteControlClientBrowsedPlayer in CallbackStub"); + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchSetBrowsedPlayerCommand(); + } + } + + @Override + public void setRemoteControlClientPlayItem(long uid, int scope) throws RemoteException { + Log.d(TAG, "setRemoteControlClientPlayItem in CallbackStub"); + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchSetPlayItemCommand(uid, scope); + } + } + + @Override + public void getRemoteControlClientNowPlayingEntries() throws RemoteException { + Log.d(TAG, "getRemoteControlClientNowPlayingEntries in CallbackStub"); + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchGetNowPlayingItemsCommand(); + } + } + @Override public void onCustomAction(String action, Bundle args) { MediaSession session = mMediaSession.get(); @@ -1286,6 +1412,9 @@ public final class MediaSession { private static final int MSG_CUSTOM_ACTION = 20; private static final int MSG_ADJUST_VOLUME = 21; private static final int MSG_SET_VOLUME = 22; + private static final int MSG_SET_BROWSED_PLAYER = 23; + private static final int MSG_SET_PLAY_ITEM = 24; + private static final int MSG_GET_NOW_PLAYING_ITEMS = 25; private MediaSession.Callback mCallback; @@ -1392,6 +1521,18 @@ public final class MediaSession { if (vp != null) { vp.onSetVolumeTo((int) msg.obj); } + case MSG_SET_BROWSED_PLAYER: + Log.d(TAG, "MSG_SET_BROWSED_PLAYER received in CallbackMessageHandler"); + mCallback.setBrowsedPlayer(); + break; + case MSG_SET_PLAY_ITEM: + Log.d(TAG, "MSG_SET_PLAY_ITEM received in CallbackMessageHandler"); + PlayItemToken playItemToken = (PlayItemToken) msg.obj; + mCallback.setPlayItem(playItemToken.getScope(), playItemToken.getUid()); + break; + case MSG_GET_NOW_PLAYING_ITEMS: + Log.d(TAG, "MSG_GET_NOW_PLAYING_ITEMS received in CallbackMessageHandler"); + mCallback.getNowPlayingEntries(); break; } } diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java index 95cb8aee6ac5..d1e9454c0459 100644 --- a/media/java/android/media/session/MediaSessionLegacyHelper.java +++ b/media/java/android/media/session/MediaSessionLegacyHelper.java @@ -549,6 +549,27 @@ public class MediaSessionLegacyHelper { mRccListener.onSetRating(rating); } } + + @Override + public void setBrowsedPlayer() { + if (mRccListener != null) { + mRccListener.setBrowsedPlayer(); + } + } + + @Override + public void setPlayItem(int scope, long uid) { + if (mRccListener != null) { + mRccListener.setPlayItem(scope, uid); + } + } + + @Override + public void getNowPlayingEntries() { + if (mRccListener != null) { + mRccListener.getNowPlayingEntries(); + } + } } } } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 4d8612e46e1d..8b6fe1467f38 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -174,6 +174,27 @@ public class AudioService extends IAudioService.Stub { // the platform type affects volume and silent mode behavior private final int mPlatformType; + private static final ArrayList mMediaPlayers = + new ArrayList(); + + private class MediaPlayerInfo { + private String mPackageName; + private boolean mIsfocussed; + public MediaPlayerInfo(String packageName, boolean isfocussed) { + mPackageName = packageName; + mIsfocussed = isfocussed; + } + public boolean isFocussed() { + return mIsfocussed; + } + public void setFocus(boolean focus) { + mIsfocussed = focus; + } + public String getPackageName() { + return mPackageName; + } + } + private boolean isPlatformVoice() { return mPlatformType == AudioSystem.PLATFORM_VOICE; } @@ -896,6 +917,106 @@ public class AudioService extends IAudioService.Stub { } } + /** + * @hide + */ + public void addMediaPlayerAndUpdateRemoteController (String packageName) { + synchronized(mMediaPlayers) { + Log.v(TAG, "addMediaPlayerAndUpdateRemoteController: size of existing list: " + + mMediaPlayers.size()); + boolean playerToAdd = true; + if (mMediaPlayers.size() > 0) { + final Iterator rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + if (packageName.equals(player.getPackageName())) { + Log.e(TAG, "Player entry present, no need to add"); + playerToAdd = false; + player.setFocus(true); + } else { + Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus"); + player.setFocus(false); + } + } + } + if (playerToAdd) { + Log.e(TAG, "Adding Player: " + packageName + " to available player list"); + mMediaPlayers.add(new MediaPlayerInfo(packageName, true)); + } + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:" + + packageName); + } + } + + /** + * @hide + */ + public void updateRemoteControllerOnExistingMediaPlayers() { + synchronized(mMediaPlayers) { + Log.v(TAG, "updateRemoteControllerOnExistingMediaPlayers: size of Player list: " + + mMediaPlayers.size()); + if (mMediaPlayers.size() > 0) { + Log.v(TAG, "Inform RemoteController regarding existing RCC entry"); + final Iterator rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, + player.getPackageName()); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, + player.isFocussed()); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating RCC change: CallingPackageName:" + + player.getPackageName()); + } + } else { + Log.e(TAG, "No RCC entry present to update"); + } + } + } + + /** + * @hide + */ + public void removeMediaPlayerAndUpdateRemoteController (String packageName) { + synchronized(mMediaPlayers) { + Log.v(TAG, "removeMediaPlayerAndUpdateRemoteController: size of existing list: " + + mMediaPlayers.size()); + boolean playerToRemove = false; + int index = -1; + if (mMediaPlayers.size() > 0) { + final Iterator rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + index++; + final MediaPlayerInfo player = rccIterator.next(); + if (packageName.equals(player.getPackageName())) { + Log.v(TAG, "Player entry present remove and update RemoteController"); + playerToRemove = true; + break; + } else { + Log.v(TAG, "Player entry for " + player.getPackageName()+ " is not present"); + } + } + } + if (playerToRemove) { + Log.e(TAG, "Removing Player: " + packageName + " from index" + index); + mMediaPlayers.remove(index); + } + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, false); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, false); + sendBroadcastToAll(intent); + Log.v(TAG, "Updated List size: " + mMediaPlayers.size()); + } + } + private void checkAllAliasStreamVolumes() { synchronized (VolumeStreamState.class) { int numStreamTypes = AudioSystem.getNumStreamTypes(); @@ -5506,7 +5627,6 @@ public class AudioService extends IAudioService.Stub { } } - //========================================================================================== // Audio Focus //========================================================================================== diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 29c54e9bf78c..11d2cfdbf3ab 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -108,6 +108,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { private CharSequence mQueueTitle; private int mRatingType; private long mLastActiveTime; + private String mBrowsedPlayerURI; + private boolean mPlayItemStatus; + private long[] mNowPlayingList; // End TransportPerformer fields // Volume handling fields @@ -525,6 +528,86 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } + private void pushBrowsePlayerInfo() { + synchronized (mLock) { + if (mDestroyed) { + return; + } + for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) { + ISessionControllerCallback cb = mControllerCallbacks.get(i); + try { + Log.d(TAG, "pushBrowsePlayerInfo"); + cb.onUpdateFolderInfoBrowsedPlayer(mBrowsedPlayerURI); + } catch (DeadObjectException e) { + Log.w(TAG, "Removing dead callback in pushBrowsePlayerInfo. ", e); + mControllerCallbacks.remove(i); + } catch (RemoteException e) { + Log.w(TAG, "unexpected exception in pushBrowsePlayerInfo. ", e); + } + } + } + } + + private void pushNowPlayingEntries() { + synchronized (mLock) { + if (mDestroyed) { + return; + } + for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) { + ISessionControllerCallback cb = mControllerCallbacks.get(i); + try { + Log.d(TAG, "pushNowPlayingEntries"); + cb.onUpdateNowPlayingEntries(mNowPlayingList); + } catch (DeadObjectException e) { + Log.w(TAG, "Removing dead callback in pushNowPlayingEntries. ", e); + mControllerCallbacks.remove(i); + } catch (RemoteException e) { + Log.w(TAG, "unexpected exception in pushNowPlayingEntries. ", e); + } + } + } + } + + private void pushNowPlayingContentChange() { + synchronized (mLock) { + if (mDestroyed) { + return; + } + for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) { + ISessionControllerCallback cb = mControllerCallbacks.get(i); + try { + Log.d(TAG, "pushNowPlayingContentChange"); + cb.onUpdateNowPlayingContentChange(); + } catch (DeadObjectException e) { + Log.w(TAG, "Removing dead callback in pushNowPlayingContentChange. ", e); + mControllerCallbacks.remove(i); + } catch (RemoteException e) { + Log.w(TAG, "unexpected exception in pushNowPlayingContentChange. ", e); + } + } + } + } + + private void pushPlayItemResponse() { + synchronized (mLock) { + if (mDestroyed) { + return; + } + for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) { + ISessionControllerCallback cb = mControllerCallbacks.get(i); + try { + Log.d(TAG, "pushPlayItemResponse"); + cb.onPlayItemResponse(mPlayItemStatus); + } catch (DeadObjectException e) { + Log.w(TAG, "Removing dead callback in pushPlayItemResponse. ", e); + mControllerCallbacks.remove(i); + } catch (RemoteException e) { + Log.w(TAG, "unexpected exception in pushPlayItemResponse. ", e); + } + } + } + } + private void pushQueueUpdate() { synchronized (mLock) { if (mDestroyed) { @@ -808,6 +891,33 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { mHandler.post(MessageHandler.MSG_UPDATE_QUEUE); } + @Override + public void updateFolderInfoBrowsedPlayer(String stringUri) { + Log.d(TAG, "SessionStub: updateFolderInfoBrowsedPlayer"); + mBrowsedPlayerURI = stringUri; + mHandler.post(MessageHandler.MSG_FOLDER_INFO_BROWSED_PLAYER); + } + + @Override + public void updateNowPlayingEntries(long[] playList) { + Log.d(TAG, "SessionStub: updateNowPlayingEntries"); + mNowPlayingList = playList; + mHandler.post(MessageHandler.MSG_UPDATE_NOWPLAYING_ENTRIES); + } + + @Override + public void updateNowPlayingContentChange() { + Log.d(TAG, "SessionStub: updateNowPlayingContentChange"); + mHandler.post(MessageHandler.MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE); + } + + @Override + public void playItemResponse(boolean success) { + Log.d(TAG, "SessionStub: playItemResponse"); + mPlayItemStatus = success; + mHandler.post(MessageHandler.MSG_PLAY_ITEM_RESPONSE); + } + @Override public void setQueueTitle(CharSequence title) { mQueueTitle = title; @@ -1028,6 +1138,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void seekTo(long pos) { + Slog.d(TAG, "seekTo in SessionCb"); try { mCb.onSeekTo(pos); } catch (RemoteException e) { @@ -1035,6 +1146,42 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } + /** + * @hide + */ + public void setRemoteControlClientBrowsedPlayer() { + Slog.d(TAG, "setRemoteControlClientBrowsedPlayer in SessionCb"); + try { + mCb.setRemoteControlClientBrowsedPlayer(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in setRemoteControlClientBrowsedPlayer.", e); + } + } + + /** + * @hide + */ + public void setRemoteControlClientPlayItem(long uid, int scope) throws RemoteException { + Slog.d(TAG, "setRemoteControlClientPlayItem in SessionCb"); + try { + mCb.setRemoteControlClientPlayItem(uid, scope); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in setRemoteControlClientPlayItem.", e); + } + } + + /** + * @hide + */ + public void getRemoteControlClientNowPlayingEntries() throws RemoteException { + Slog.d(TAG, "getRemoteControlClientNowPlayingEntries in SessionCb"); + try { + mCb.getRemoteControlClientNowPlayingEntries(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in getRemoteControlClientNowPlayingEntries.", e); + } + } + public void rate(Rating rating) { try { mCb.onRate(rating); @@ -1267,10 +1414,32 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { @Override public void seekTo(long pos) throws RemoteException { + Log.d(TAG, "seekTo in ControllerStub"); updateCallingPackage(); mSessionCb.seekTo(pos); } + @Override + public void setRemoteControlClientBrowsedPlayer() throws RemoteException { + Log.d(TAG, "setRemoteControlClientBrowsedPlayer in ControllerStub"); + updateCallingPackage(); + mSessionCb.setRemoteControlClientBrowsedPlayer(); + } + + @Override + public void setRemoteControlClientPlayItem(long uid, int scope) throws RemoteException { + Log.d(TAG, "setRemoteControlClientPlayItem in ControllerStub"); + updateCallingPackage(); + mSessionCb.setRemoteControlClientPlayItem(uid, scope); + } + + @Override + public void getRemoteControlClientNowPlayingEntries() throws RemoteException { + Log.d(TAG, "getRemoteControlClientNowPlayingEntries in ControllerStub"); + updateCallingPackage(); + mSessionCb.getRemoteControlClientNowPlayingEntries(); + } + @Override public void rate(Rating rating) throws RemoteException { updateCallingPackage(); @@ -1337,6 +1506,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { private static final int MSG_UPDATE_SESSION_STATE = 7; private static final int MSG_UPDATE_VOLUME = 8; private static final int MSG_DESTROYED = 9; + private static final int MSG_FOLDER_INFO_BROWSED_PLAYER = 10; + private static final int MSG_UPDATE_NOWPLAYING_ENTRIES = 11; + private static final int MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE = 12; + private static final int MSG_PLAY_ITEM_RESPONSE = 13; public MessageHandler(Looper looper) { super(looper); @@ -1370,6 +1543,18 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { break; case MSG_DESTROYED: pushSessionDestroyed(); + case MSG_FOLDER_INFO_BROWSED_PLAYER: + pushBrowsePlayerInfo(); + break; + case MSG_UPDATE_NOWPLAYING_ENTRIES: + pushNowPlayingEntries(); + break; + case MSG_UPDATE_NOWPLAYING_CONTENT_CHANGE: + pushNowPlayingContentChange(); + break; + case MSG_PLAY_ITEM_RESPONSE: + pushPlayItemResponse(); + break; } } -- GitLab From 2a593b60cb3d66df5e55b5bfdaa447894d60bacf Mon Sep 17 00:00:00 2001 From: Sravanthi Palakonda Date: Thu, 14 Apr 2016 17:35:02 +0530 Subject: [PATCH 067/185] Wifi: Define intent/setting to notify delay in Wifi disconnection This commit defines a setting to configure disconnect delay duration. Based on this value Wi-Fi disconnection is delayed. Also, define an intent for Wifi framework to broadcast when wifi framework starts disconnection and waits for the duration to expire. Change-Id: I764529da4a416be57360e478c49e8937280df04e CRs-Fixed: 1003459 --- core/java/android/provider/Settings.java | 9 ++++++++- wifi/java/android/net/wifi/WifiManager.java | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 9c567a95df74..9f7806a809a3 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4802,6 +4802,12 @@ public final class Settings { * Best-effort location computation allowed. */ public static final int LOCATION_MODE_HIGH_ACCURACY = 3; + /** + * Setting to configure Wifi disconnect delay duration in seconds. + * @hide + **/ + public static final String WIFI_DISCONNECT_DELAY_DURATION = + "wifi_disconnect_delay_duration"; /** * A flag containing settings used for biometric weak @@ -6308,7 +6314,8 @@ public final class Settings { PREFERRED_TTY_MODE, ENHANCED_VOICE_PRIVACY_ENABLED, TTY_MODE_ENABLED, - INCALL_POWER_BUTTON_BEHAVIOR + INCALL_POWER_BUTTON_BEHAVIOR, + WIFI_DISCONNECT_DELAY_DURATION }; /** diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 1cd32b6bff0f..d2aad487d710 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -515,6 +515,14 @@ public class WifiManager { public static final String LINK_CONFIGURATION_CHANGED_ACTION = "android.net.wifi.LINK_CONFIGURATION_CHANGED"; + /** + * Broadcast intent action indicating that the user initiated Wifi OFF + * or APM ON and Wifi disconnection is in progress + * Actual Wifi disconnection happens after mDisconnectDelayDuration seconds. + * @hide + */ + public static final String ACTION_WIFI_DISCONNECT_IN_PROGRESS = "wifi_disconnect_in_progress"; + /** * The lookup key for a {@link android.net.LinkProperties} object associated with the * Wi-Fi network. Retrieve with -- GitLab From f7212726348d436c12b55251595d5c19d2ea0ea7 Mon Sep 17 00:00:00 2001 From: Sachin Sharma Date: Tue, 5 Aug 2014 12:10:38 -0700 Subject: [PATCH 068/185] frameworks/base: move the traces file to avoid data loss. If an ANR comes just after the framework reboot, the traces for the framework reboot will get over-written with the ANR traces. So, We are missing the traces for the framework reboot which makes debugging the framework reboot difficult. This patch will rename and will append a unique timestamp this trace file name for the framework reboot once the ActivityManager collects the traces. In case of multiple Watchdog Kills the trace file generated will have diffrent timestamp so that it does not get overwritten on multiple Watchdog kills. Change-Id: I90cb400d06aa909c1560328de4751aa02dbb6858 --- .../java/com/android/server/Watchdog.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index be021ea48ab8..8c5fb195f60b 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -42,6 +42,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.Date; +import java.text.SimpleDateFormat; /** This class calls its monitor every minute. Killing this process if they don't return **/ public class Watchdog extends Thread { @@ -87,6 +89,7 @@ public class Watchdog extends Thread { int mPhonePid; IActivityController mController; boolean mAllowRestart = true; + SimpleDateFormat mTraceDateFormat = new SimpleDateFormat("dd_MMM_HH_mm_ss.SSS"); /** * Used for checking status of handle threads and scheduling monitor callbacks. @@ -439,6 +442,23 @@ public class Watchdog extends Thread { doSysRq('w'); doSysRq('l'); + String tracesPath = SystemProperties.get("dalvik.vm.stack-trace-file", null); + String traceFileNameAmendment = "_SystemServer_WDT" + mTraceDateFormat.format(new Date()); + + if (tracesPath != null && tracesPath.length() != 0) { + File traceRenameFile = new File(tracesPath); + String newTracesPath; + int lpos = tracesPath.lastIndexOf ("."); + if (-1 != lpos) + newTracesPath = tracesPath.substring (0, lpos) + traceFileNameAmendment + tracesPath.substring (lpos); + else + newTracesPath = tracesPath + traceFileNameAmendment; + traceRenameFile.renameTo(new File(newTracesPath)); + tracesPath = newTracesPath; + } + + final File newFd = new File(tracesPath); + // Try to add the error to the dropbox, but assuming that the ActivityManager // itself may be deadlocked. (which has happened, causing this statement to // deadlock and the watchdog as a whole to be ineffective) @@ -446,7 +466,7 @@ public class Watchdog extends Thread { public void run() { mActivity.addErrorToDropBox( "watchdog", null, "system_server", null, null, - subject, null, stack, null); + subject, null, newFd, null); } }; dropboxThread.start(); -- GitLab From fc1b0d75b43042968a5ee1726b5accd19a8dcfad Mon Sep 17 00:00:00 2001 From: Shilpa Suresh Date: Tue, 31 May 2016 16:33:39 +0530 Subject: [PATCH 069/185] Enable download mode on framework watchdog, based on property Enabling download mode allows to get better insight of the device state at the time of framework watchdog. Also moving the SysRq triggers inside the conditional block to avoid watchdog bark and to ensure traces are collected before dumping blocked threads and CPU backtraces. Change-Id: I444e550af0e23053f34b3d47db07c67c6f43133f --- .../java/com/android/server/Watchdog.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index 8c5fb195f60b..6e4cf48e1a48 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -438,10 +438,6 @@ public class Watchdog extends Thread { dumpKernelStackTraces(); } - // Trigger the kernel to dump all blocked threads, and backtraces on all CPUs to the kernel log - doSysRq('w'); - doSysRq('l'); - String tracesPath = SystemProperties.get("dalvik.vm.stack-trace-file", null); String traceFileNameAmendment = "_SystemServer_WDT" + mTraceDateFormat.format(new Date()); @@ -474,6 +470,26 @@ public class Watchdog extends Thread { dropboxThread.join(2000); // wait up to 2 seconds for it to return. } catch (InterruptedException ignored) {} + + // At times, when user space watchdog traces don't give an indication on + // which component held a lock, because of which other threads are blocked, + // (thereby causing Watchdog), crash the device to analyze RAM dumps + boolean crashOnWatchdog = SystemProperties + .getBoolean("persist.sys.crashOnWatchdog", false); + if (crashOnWatchdog) { + // Trigger the kernel to dump all blocked threads, and backtraces + // on all CPUs to the kernel log + Slog.e(TAG, "Triggering SysRq for system_server watchdog"); + doSysRq('w'); + doSysRq('l'); + + // wait until the above blocked threads be dumped into kernel log + SystemClock.sleep(3000); + + // now try to crash the target + doSysRq('c'); + } + IActivityController controller; synchronized (this) { controller = mController; -- GitLab From 8acb9ebb51f1f89503ad05d48f9ac6f14280ac5b Mon Sep 17 00:00:00 2001 From: hoffc Date: Tue, 31 May 2016 14:58:55 +0800 Subject: [PATCH 070/185] Don't copy the same alarm ring tone repeatedly (1) Oxygen.ogg Cesium.ogg Alarm_Classic.ogg are identical (2) Hassium.ogg Helium.ogg are identical (3) Platinum.ogg Promethium.ogg are identical (4) Fermium.ogg Argon.ogg are identical (5) Nobelium.ogg Neon.ogg are identical So remove duplicate and retain one Change-Id: I1004a809606f470332bad0e372fb329e912e4943 CRs-Fixed: 1022235 --- data/sounds/AllAudio.mk | 6 ------ 1 file changed, 6 deletions(-) diff --git a/data/sounds/AllAudio.mk b/data/sounds/AllAudio.mk index edfd3800600c..bfb41d1c8d9e 100644 --- a/data/sounds/AllAudio.mk +++ b/data/sounds/AllAudio.mk @@ -24,19 +24,13 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/alarms/ogg/Argon.ogg:system/media/audio/alarms/Argon.ogg \ $(LOCAL_PATH)/alarms/ogg/Barium.ogg:system/media/audio/alarms/Barium.ogg \ $(LOCAL_PATH)/alarms/ogg/Carbon.ogg:system/media/audio/alarms/Carbon.ogg \ - $(LOCAL_PATH)/alarms/ogg/Cesium.ogg:system/media/audio/alarms/Cesium.ogg \ - $(LOCAL_PATH)/alarms/ogg/Fermium.ogg:system/media/audio/alarms/Fermium.ogg \ $(LOCAL_PATH)/alarms/ogg/Hassium.ogg:system/media/audio/alarms/Hassium.ogg \ - $(LOCAL_PATH)/alarms/ogg/Helium.ogg:system/media/audio/alarms/Helium.ogg \ $(LOCAL_PATH)/alarms/ogg/Krypton.ogg:system/media/audio/alarms/Krypton.ogg \ $(LOCAL_PATH)/alarms/ogg/Neon.ogg:system/media/audio/alarms/Neon.ogg \ $(LOCAL_PATH)/alarms/ogg/Neptunium.ogg:system/media/audio/alarms/Neptunium.ogg \ - $(LOCAL_PATH)/alarms/ogg/Nobelium.ogg:system/media/audio/alarms/Nobelium.ogg \ $(LOCAL_PATH)/alarms/ogg/Osmium.ogg:system/media/audio/alarms/Osmium.ogg \ - $(LOCAL_PATH)/alarms/ogg/Oxygen.ogg:system/media/audio/alarms/Oxygen.ogg \ $(LOCAL_PATH)/alarms/ogg/Platinum.ogg:system/media/audio/alarms/Platinum.ogg \ $(LOCAL_PATH)/alarms/ogg/Plutonium.ogg:system/media/audio/alarms/Plutonium.ogg \ - $(LOCAL_PATH)/alarms/ogg/Promethium.ogg:system/media/audio/alarms/Promethium.ogg \ $(LOCAL_PATH)/alarms/ogg/Scandium.ogg:system/media/audio/alarms/Scandium.ogg \ $(LOCAL_PATH)/notifications/ogg/Adara.ogg:system/media/audio/notifications/Adara.ogg \ $(LOCAL_PATH)/notifications/Aldebaran.ogg:system/media/audio/notifications/Aldebaran.ogg \ -- GitLab From 87a1bdc54f1ccff20fda5225d7d8f5cf02c0b4c1 Mon Sep 17 00:00:00 2001 From: Lalit Kansara Date: Mon, 6 Jun 2016 21:50:02 +0530 Subject: [PATCH 071/185] NRD56: Compilation error fix Compilation fix as an earlier commit did not resolve conflict properly. Change-Id: I2317972189c5a6faa2280e4a90c7ab9dcd172f4a --- media/java/android/media/IAudioService.aidl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index c3cc5bf61b6b..425bb1cd077c 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -164,15 +164,11 @@ interface IAudioService { oneway void unregisterRecordingCallback(in IRecordingConfigDispatcher rcdb); -<<<<<<< HEAD List getActiveRecordingConfigurations(); -======= - AudioRecordingConfiguration[] getActiveRecordingConfigurations(); void updateRemoteControllerOnExistingMediaPlayers(); void addMediaPlayerAndUpdateRemoteController(String packageName); void removeMediaPlayerAndUpdateRemoteController(String packageName); ->>>>>>> 810a57e... AVRCP 1.5 implementation } -- GitLab From ccbae6843edeb9bd8c3d7a3d3d380d69c38ae626 Mon Sep 17 00:00:00 2001 From: Preetam Singh Ranawat Date: Wed, 11 May 2016 12:39:14 +0530 Subject: [PATCH 072/185] audio: add DSD as a valid file format Add entry for files with DSD file extensions to be recognized as a valid format. Change-Id: I7d8ba4ce2e8b5185e0e2db8f92957112614e8d44 --- media/java/android/media/MediaFile.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index b6c245a46a51..f0b418926780 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -55,8 +55,9 @@ public class MediaFile { public static final int FILE_TYPE_EC3 = 215; public static final int FILE_TYPE_AIFF = 216; public static final int FILE_TYPE_APE = 217; + public static final int FILE_TYPE_DSD = 218; private static final int FIRST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DTS; - private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_APE; + private static final int LAST_AUDIO_FILE_TYPE_EXT = FILE_TYPE_DSD; // MIDI file types public static final int FILE_TYPE_MID = 11; @@ -289,6 +290,9 @@ public class MediaFile { addFileType("AIF", FILE_TYPE_AIFF, "audio/x-aiff"); addFileType("AIFF", FILE_TYPE_AIFF, "audio/x-aiff"); addFileType("APE", FILE_TYPE_APE, "audio/x-ape"); + addFileType("DSF", FILE_TYPE_DSD, "audio/x-dsf"); + addFileType("DFF", FILE_TYPE_DSD, "audio/x-dff"); + addFileType("DSD", FILE_TYPE_DSD, "audio/dsd"); } public static boolean isAudioFileType(int fileType) { -- GitLab From 3b00945c77d26da979a8de311335f77d7caa4b88 Mon Sep 17 00:00:00 2001 From: Sumit Bajpai Date: Mon, 22 Feb 2016 19:41:33 +0530 Subject: [PATCH 073/185] BT: Send info if call is CS type from telecomm service to BT apps. The change adds broadcast intent for updating call info from telecomm service to bluetooth application. CRs-Fixed: 977025 Change-Id: I18d3a22d25099906d86efb0412f309696c02e321 --- .../java/android/telecom/TelecomManager.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index da0d048795c2..91ed57c6d1e3 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -152,6 +152,17 @@ public class TelecomManager { public static final String ACTION_DEFAULT_DIALER_CHANGED = "android.telecom.action.DEFAULT_DIALER_CHANGED"; + /** + *@hide Broadcast intent action indicating the call type(CS call or Non-CS call). + * The string extra {@link #EXTRA_CALL_TYPE_CS} will contain the + * boolean value true if call is CS call else false. + * + * @see #EXTRA_CALL_TYPE_CS + */ + public static final String ACTION_CALL_TYPE = + "codeaurora.telecom.action.CALL_TYPE"; + + /** * Extra value used to provide the package name for {@link #ACTION_CHANGE_DEFAULT_DIALER}. */ @@ -279,6 +290,13 @@ public class TelecomManager { public static final String EXTRA_CALL_TECHNOLOGY_TYPE = "android.telecom.extra.CALL_TECHNOLOGY_TYPE"; + /** + *@hide Extra value used to provide the call type for {@link #ACTION_CALL_TYPE}. + */ + public static final String EXTRA_CALL_TYPE_CS = + "codeaurora.telecom.extra.CALL_TYPE_CS"; + + /** * An optional {@link android.content.Intent#ACTION_CALL} intent extra denoting the * package name of the app specifying an alternative gateway for the call. -- GitLab From 794b99d6aa041b03e5f4d552b84325117045680b Mon Sep 17 00:00:00 2001 From: Subash Abhinov Kasiviswanathan Date: Thu, 19 May 2016 18:26:24 -0600 Subject: [PATCH 074/185] connectivity: Update the logic for running clatd Enable/disable Android XLAT feature based on persist property "persist.net.doxlat". Disabling this property allows hardware to take over the XLAT functionality. CRs-Fixed: 1017795 Change-Id: Iae830e7d74e08161ed8ab1ff0ea50c5b2cb97079 --- .../java/com/android/server/connectivity/Nat464Xlat.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java index b3908847137a..0dc9d35f3888 100644 --- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java +++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java @@ -29,6 +29,7 @@ import android.os.Handler; import android.os.Message; import android.os.INetworkManagementService; import android.os.RemoteException; +import android.os.SystemProperties; import android.util.Slog; import com.android.server.net.BaseNetworkObserver; @@ -96,7 +97,12 @@ public class Nat464Xlat extends BaseNetworkObserver { (nai.linkProperties != null) ? nai.linkProperties.hasIPv4Address() : false; // Only support clat on mobile and wifi for now, because these are the only IPv6-only // networks we can connect to. - return connected && !hasIPv4Address && ArrayUtils.contains(NETWORK_TYPES, netType); + boolean doXlat = SystemProperties.getBoolean("persist.net.doxlat",true); + if(!doXlat) { + Slog.i(TAG, "Android Xlat is disabled"); + } + return connected && !hasIPv4Address && ArrayUtils.contains(NETWORK_TYPES, netType) + && ((netType == ConnectivityManager.TYPE_MOBILE) ? doXlat : true); } /** -- GitLab From da961b4a02f89434e28057c4aad9619a0399731f Mon Sep 17 00:00:00 2001 From: Dinesh K Garg Date: Fri, 7 Aug 2015 14:47:57 -0700 Subject: [PATCH 075/185] Port password retention feature Password retention feature for HW FDE is needed. Porting from L release. This patch also include these changes: - Fix clearing of retained password - keyguard: Fix password doesnot sanitize after verification - LockSettings: fix the get password issue during boot up Change-Id: I2def56b14c10229b72feccd1c97b281cad65f282 --- .../internal/widget/ILockSettings.aidl | 2 + .../internal/widget/LockPatternUtils.java | 11 +++++ .../keyguard/KeyguardAbsKeyInputView.java | 1 + .../android/keyguard/KeyguardPatternView.java | 1 + .../android/server/LockSettingsService.java | 48 ++++++++++++++++++- .../java/com/android/server/MountService.java | 18 ++++++- 6 files changed, 79 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl index 05b839df9fa4..e91f53d942ef 100644 --- a/core/java/com/android/internal/widget/ILockSettings.aidl +++ b/core/java/com/android/internal/widget/ILockSettings.aidl @@ -46,4 +46,6 @@ interface ILockSettings { void systemReady(); void userPresent(int userId); int getStrongAuthForUser(int userId); + void sanitizePassword(); + String getPassword(); } diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 2e0dfa5fa731..207043c7b216 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -639,6 +639,17 @@ public class LockPatternUtils { } } + /** + * clears stored password. + */ + public void sanitizePassword() { + try { + getLockSettings().sanitizePassword(); + } catch (RemoteException re) { + Log.e(TAG, "Couldn't sanitize password" + re); + } + } + private void updateCryptoUserInfo(int userId) { if (userId != UserHandle.USER_SYSTEM) { return; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index 60eaad2699ee..260113091e29 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -151,6 +151,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout boolean isValidPassword) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { + mLockPatternUtils.sanitizePassword(); mCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mDismissing = true; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index e07049262c6e..90553ab8ebf0 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -255,6 +255,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit boolean isValidPattern) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { + mLockPatternUtils.sanitizePassword(); mCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct); diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java index d64fe32cca55..c840c7bbfd40 100644 --- a/services/core/java/com/android/server/LockSettingsService.java +++ b/services/core/java/com/android/server/LockSettingsService.java @@ -117,6 +117,7 @@ public class LockSettingsService extends ILockSettings.Stub { private static final int PROFILE_KEY_IV_SIZE = 12; private static final String SEPARATE_PROFILE_CHALLENGE_KEY = "lockscreen.profilechallenge"; private final Object mSeparateChallengeLock = new Object(); + private static final String DEFAULT_PASSWORD = "default_password"; private final Context mContext; private final Handler mHandler; @@ -129,6 +130,7 @@ public class LockSettingsService extends ILockSettings.Stub { private IGateKeeperService mGateKeeperService; private NotificationManager mNotificationManager; private UserManager mUserManager; + private static String mSavePassword = DEFAULT_PASSWORD; private final KeyStore mKeyStore = KeyStore.getInstance(); @@ -716,6 +718,45 @@ public class LockSettingsService extends ILockSettings.Stub { return mStorage.hasPattern(userId); } + public void retainPassword(String password) { + if (LockPatternUtils.isDeviceEncryptionEnabled()) { + if (password != null) + mSavePassword = password; + else + mSavePassword = DEFAULT_PASSWORD; + } + } + + public void sanitizePassword() { + if (LockPatternUtils.isDeviceEncryptionEnabled()) { + mSavePassword = DEFAULT_PASSWORD; + } + } + + private boolean checkCryptKeeperPermissions() { + boolean permission_err = false; + try { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.CRYPT_KEEPER, + "no permission to get the password"); + } catch (SecurityException e) { + permission_err = true; + } + return permission_err; + } + + public String getPassword() { + /** if calling process does't have crypt keeper or admin permissions, + * throw the exception. + */ + if (checkCryptKeeperPermissions()) + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.MANAGE_DEVICE_ADMINS, + "no crypt_keeper or admin permission to get the password"); + + return mSavePassword; + } + private void setKeystorePassword(String password, int userHandle) { final KeyStore ks = KeyStore.getInstance(); ks.onUserPasswordChanged(userHandle, password); @@ -1256,6 +1297,8 @@ public class LockSettingsService extends ILockSettings.Stub { && shouldReEnrollBaseZero) { setLockPatternInternal(pattern, patternToVerify, userId); } + if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) + retainPassword(pattern); return response; } @@ -1263,7 +1306,10 @@ public class LockSettingsService extends ILockSettings.Stub { @Override public VerifyCredentialResponse checkPassword(String password, int userId) throws RemoteException { - return doVerifyPassword(password, false, 0, userId); + VerifyCredentialResponse response = doVerifyPassword(password, false, 0, userId); + if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) + retainPassword(password); + return response; } @Override diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index cdd977be29ed..3310f41c6ca7 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -103,6 +103,7 @@ import com.android.internal.widget.LockPatternUtils; import com.android.server.NativeDaemonConnector.Command; import com.android.server.NativeDaemonConnector.SensitiveArg; import com.android.server.pm.PackageManagerService; +import com.android.internal.widget.ILockSettings; import libcore.io.IoUtils; import libcore.util.EmptyArray; @@ -2610,9 +2611,24 @@ class MountService extends IMountService.Stub Slog.i(TAG, "changing encryption password..."); } + ILockSettings lockSettings = ILockSettings.Stub.asInterface( + ServiceManager.getService("lock_settings")); + String currentPassword="default_password"; + try { + currentPassword = lockSettings.getPassword(); + } catch (RemoteException e) { + Slog.e(TAG, "Couldn't get password" + e); + } + try { NativeDaemonEvent event = mCryptConnector.execute("cryptfs", "changepw", CRYPTO_TYPES[type], - new SensitiveArg(password)); + new SensitiveArg(currentPassword), new SensitiveArg(password)); + try { + lockSettings.sanitizePassword(); + } catch (RemoteException e) { + Slog.e(TAG, "Couldn't sanitize password" + e); + } + return Integer.parseInt(event.getMessage()); } catch (NativeDaemonConnectorException e) { // Encryption failed -- GitLab From dd7a7101fa3fb76c4c4bc8a264eac02f1a8366b9 Mon Sep 17 00:00:00 2001 From: AnilKumar Chimata Date: Mon, 16 May 2016 15:32:16 +0530 Subject: [PATCH 076/185] frameworks/base: Fix pattern update issue Fix pattern update issue while changing the user pin/password/ pattern. Change-Id: Ie7461eef4cc82a1f591a50d094e47c586cc24198 --- .../core/java/com/android/server/LockSettingsService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java index c840c7bbfd40..e267872eb236 100644 --- a/services/core/java/com/android/server/LockSettingsService.java +++ b/services/core/java/com/android/server/LockSettingsService.java @@ -1244,7 +1244,10 @@ public class LockSettingsService extends ILockSettings.Stub { @Override public VerifyCredentialResponse checkPattern(String pattern, int userId) throws RemoteException { - return doVerifyPattern(pattern, false, 0, userId); + VerifyCredentialResponse response = doVerifyPattern(pattern, false, 0, userId); + if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) + retainPassword(pattern); + return response; } @Override @@ -1297,8 +1300,6 @@ public class LockSettingsService extends ILockSettings.Stub { && shouldReEnrollBaseZero) { setLockPatternInternal(pattern, patternToVerify, userId); } - if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) - retainPassword(pattern); return response; } -- GitLab From 9d60d940b1980d5f292c61e61514cd44c4665f67 Mon Sep 17 00:00:00 2001 From: Raj Kamal Date: Wed, 23 Jul 2014 16:44:42 +0530 Subject: [PATCH 077/185] wifidisplay: Use ExtendedRemoteDisplay to launch Wifi Display. - RemoteDisplay class is used to launch WiFi Display implementation in the Android framework with a discovered peer. There is a need to support proprietary implementation of wifi display instead of the framework implementation. - To enable this support, ExtendedRemoteDisplay is added, which launches the proprietary solution. ExtendedRemoteDisplay object is created if the class is available in the package. If the class is not available the default implementation will be used by creating RemoteDisplay. Change-Id: I2e2a5e552bc86888848c0402bafd873620b05c21 --- .../display/ExtendedRemoteDisplayHelper.java | 163 ++++++++++++++++++ .../server/display/WifiDisplayController.java | 35 +++- 2 files changed, 191 insertions(+), 7 deletions(-) create mode 100644 services/core/java/com/android/server/display/ExtendedRemoteDisplayHelper.java diff --git a/services/core/java/com/android/server/display/ExtendedRemoteDisplayHelper.java b/services/core/java/com/android/server/display/ExtendedRemoteDisplayHelper.java new file mode 100644 index 000000000000..1be474b09ef2 --- /dev/null +++ b/services/core/java/com/android/server/display/ExtendedRemoteDisplayHelper.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2014, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.android.server.display; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import android.media.RemoteDisplay; +import android.os.Handler; +import android.util.Slog; +import android.content.Context; + +class ExtendedRemoteDisplayHelper { + private static final String TAG = "ExtendedRemoteDisplayHelper"; + + // ExtendedRemoteDisplay class + // ExtendedRemoteDisplay is an enhanced RemoteDisplay. It has + // similar interface as RemoteDisplay class + private static Class sExtRemoteDisplayClass; + + // Method object for the API ExtendedRemoteDisplay.Listen + // ExtendedRemoteDisplay.Listen has the same API signature as + // RemoteDisplay.Listen except for an additional argument to pass the + // Context + private static Method sExtRemoteDisplayListen; + + // Method Object for the API ExtendedRemoteDisplay.Dispose + // ExtendedRemoteDisplay.Dispose follows the same API signature as + // RemoteDisplay.Dispose + private static Method sExtRemoteDisplayDispose; + + static { + //Check availability of ExtendedRemoteDisplay runtime + try { + sExtRemoteDisplayClass = Class.forName("com.qualcomm.wfd.ExtendedRemoteDisplay"); + } catch (Throwable t) { + Slog.i(TAG, "ExtendedRemoteDisplay Not available."); + } + + if(sExtRemoteDisplayClass != null) { + // If ExtendedRemoteDisplay is available find the methods + Slog.i(TAG, "ExtendedRemoteDisplay Is available. Find Methods"); + try { + Class args[] = { + String.class, + RemoteDisplay.Listener.class, + Handler.class, Context.class + }; + sExtRemoteDisplayListen = sExtRemoteDisplayClass.getDeclaredMethod("listen", args); + } catch (Throwable t) { + Slog.i(TAG, "ExtendedRemoteDisplay.listen Not available."); + } + + try { + Class args[] = {}; + sExtRemoteDisplayDispose = sExtRemoteDisplayClass.getDeclaredMethod("dispose", args); + } catch (Throwable t) { + Slog.i(TAG, "ExtendedRemoteDisplay.dispose Not available."); + } + } + } + + /** + * Starts listening for displays to be connected on the specified interface. + * + * @param iface The interface address and port in the form "x.x.x.x:y". + * @param listener The listener to invoke + * when displays are connected or disconnected. + * @param handler The handler on which to invoke the listener. + * @param context The current service context + * */ + public static Object listen(String iface, RemoteDisplay.Listener listener, + Handler handler, Context context) + { + Object extRemoteDisplay = null; + Slog.i(TAG, "ExtendedRemoteDisplay.listen"); + + if(sExtRemoteDisplayListen != null && sExtRemoteDisplayDispose != null){ + try { + extRemoteDisplay = sExtRemoteDisplayListen.invoke(null, + iface, listener, handler, context); + } catch (InvocationTargetException e) { + Slog.i(TAG, "ExtendedRemoteDisplay.listen - InvocationTargetException"); + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } else if (cause instanceof Error) { + throw (Error) cause; + } else { + throw new RuntimeException(e); + } + } catch (IllegalAccessException e) { + Slog.i(TAG, "ExtendedRemoteDisplay.listen -IllegalAccessException"); + e.printStackTrace(); + } + } + return extRemoteDisplay; + } + + /** + * Disconnects the remote display and stops listening for new connections. + */ + public static void dispose(Object extRemoteDisplay) { + Slog.i(TAG, "ExtendedRemoteDisplay.dispose"); + try{ + sExtRemoteDisplayDispose.invoke(extRemoteDisplay); + } catch (InvocationTargetException e) { + Slog.i(TAG, "ExtendedRemoteDisplay.dispose - InvocationTargetException"); + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } else if (cause instanceof Error) { + throw (Error) cause; + } else { + throw new RuntimeException(e); + } + } catch (IllegalAccessException e) { + Slog.i(TAG, "ExtendedRemoteDisplay.dispose-IllegalAccessException"); + e.printStackTrace(); + } + } + + /** + * Checks if ExtendedRemoteDisplay is available + */ + public static boolean isAvailable() + { + if(sExtRemoteDisplayClass != null && + sExtRemoteDisplayDispose != null && + sExtRemoteDisplayListen != null) { + Slog.i(TAG, "ExtendedRemoteDisplay isAvailable() : Available."); + return true; + } + Slog.i(TAG, "ExtendedRemoteDisplay isAvailable() : Not Available."); + return false; + } +} diff --git a/services/core/java/com/android/server/display/WifiDisplayController.java b/services/core/java/com/android/server/display/WifiDisplayController.java index 8932ca0cf85b..239f8cd25cc4 100644 --- a/services/core/java/com/android/server/display/WifiDisplayController.java +++ b/services/core/java/com/android/server/display/WifiDisplayController.java @@ -137,6 +137,10 @@ final class WifiDisplayController implements DumpUtils.Dump { // Number of connection retries remaining. private int mConnectionRetriesLeft; + // The Extended remote display that is listening on the connection. + // Created after the Wifi P2P network is connected. + private Object mExtRemoteDisplay; + // The remote display that is listening on the connection. // Created after the Wifi P2P network is connected. private RemoteDisplay mRemoteDisplay; @@ -565,11 +569,19 @@ final class WifiDisplayController implements DumpUtils.Dump { // Step 1. Before we try to connect to a new device, tell the system we // have disconnected from the old one. - if (mRemoteDisplay != null && mConnectedDevice != mDesiredDevice) { - Slog.i(TAG, "Stopped listening for RTSP connection on " + mRemoteDisplayInterface + if ((mRemoteDisplay != null || mExtRemoteDisplay != null) && + mConnectedDevice != mDesiredDevice) { + Slog.i(TAG, "Stopped listening for RTSP connection on " + + mRemoteDisplayInterface + " from Wifi display: " + mConnectedDevice.deviceName); - mRemoteDisplay.dispose(); + if(mRemoteDisplay != null) { + mRemoteDisplay.dispose(); + } else if(mExtRemoteDisplay != null) { + ExtendedRemoteDisplayHelper.dispose(mExtRemoteDisplay); + } + + mExtRemoteDisplay = null; mRemoteDisplay = null; mRemoteDisplayInterface = null; mRemoteDisplayConnected = false; @@ -717,7 +729,8 @@ final class WifiDisplayController implements DumpUtils.Dump { } // Step 6. Listen for incoming RTSP connection. - if (mConnectedDevice != null && mRemoteDisplay == null) { + if (mConnectedDevice != null && mRemoteDisplay == null && + mExtRemoteDisplay== null) { Inet4Address addr = getInterfaceAddress(mConnectedDeviceGroupInfo); if (addr == null) { Slog.i(TAG, "Failed to get local interface address for communicating " @@ -736,7 +749,7 @@ final class WifiDisplayController implements DumpUtils.Dump { Slog.i(TAG, "Listening for RTSP connection on " + iface + " from Wifi display: " + mConnectedDevice.deviceName); - mRemoteDisplay = RemoteDisplay.listen(iface, new RemoteDisplay.Listener() { + RemoteDisplay.Listener listener = new RemoteDisplay.Listener() { @Override public void onDisplayConnected(Surface surface, int width, int height, int flags, int session) { @@ -775,7 +788,14 @@ final class WifiDisplayController implements DumpUtils.Dump { handleConnectionFailure(false); } } - }, mHandler, mContext.getOpPackageName()); + }; + if(ExtendedRemoteDisplayHelper.isAvailable()){ + mExtRemoteDisplay = ExtendedRemoteDisplayHelper.listen(iface, + listener, mHandler, mContext); + } else { + mRemoteDisplay = RemoteDisplay.listen(iface, listener, + mHandler, mContext.getOpPackageName()); + } // Use extended timeout value for certification, as some tests require user inputs int rtspTimeout = mWifiDisplayCertMode ? @@ -910,7 +930,8 @@ final class WifiDisplayController implements DumpUtils.Dump { @Override public void run() { if (mConnectedDevice != null - && mRemoteDisplay != null && !mRemoteDisplayConnected) { + && (mRemoteDisplay != null || mExtRemoteDisplay != null) + && !mRemoteDisplayConnected) { Slog.i(TAG, "Timed out waiting for Wifi display RTSP connection after " + RTSP_TIMEOUT_SECONDS + " seconds: " + mConnectedDevice.deviceName); -- GitLab From e7b6415c010c269e34cce09277148f7b2f91bcf5 Mon Sep 17 00:00:00 2001 From: Ruthwar Kumar Ambeer Date: Sat, 10 Oct 2015 00:49:17 +0530 Subject: [PATCH 078/185] Emergency call button on Swipe lock Screen. Emergency Call button is added on Swipe lock screen. CRs-Fixed: 913911 Change-Id: I182f48627f8e53283d1afede8c43ea84e1bd8291 --- .../src/com/android/keyguard/EmergencyButton.java | 6 ++++-- .../SystemUI/res/layout/keyguard_bottom_area.xml | 9 +++++++++ packages/SystemUI/res/values/dimens.xml | 2 +- .../statusbar/phone/KeyguardBottomAreaView.java | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java index 8d411453b5ae..ff94d1e5ec03 100644 --- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java +++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java @@ -24,6 +24,7 @@ import android.content.res.Configuration; import android.os.PowerManager; import android.os.RemoteException; import android.os.SystemClock; +import android.os.SystemProperties; import android.os.UserHandle; import android.telecom.TelecomManager; import android.util.AttributeSet; @@ -146,7 +147,7 @@ public class EmergencyButton extends Button { } } - private void updateEmergencyCallButton() { + public void updateEmergencyCallButton() { boolean visible = false; if (mIsVoiceCapable) { // Emergency calling requires voice capability. @@ -160,7 +161,8 @@ public class EmergencyButton extends Button { visible = mEnableEmergencyCallWhileSimLocked; } else { // Only show if there is a secure screen (pin/pattern/SIM pin/SIM puk); - visible = mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser()); + visible = mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser()) || + SystemProperties.getBoolean("persist.radio.emgcy_btn_onswipe", false); } } } diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml index 444f0f016b85..de7353813727 100644 --- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml +++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml @@ -36,6 +36,15 @@ android:textAppearance="?android:attr/textAppearanceSmall" android:accessibilityLiveRegion="polite" /> + + 24dp 24dp - 65dp + 90dp 12sp diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 772c76642b9e..e0290b0fbb12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -35,6 +35,7 @@ import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.os.SystemProperties; import android.os.UserHandle; import android.provider.MediaStore; import android.service.media.CameraPrewarmService; @@ -49,6 +50,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.android.internal.widget.LockPatternUtils; +import com.android.keyguard.EmergencyButton; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.EventLogConstants; @@ -92,6 +94,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private static final int DOZE_ANIMATION_STAGGER_DELAY = 48; private static final int DOZE_ANIMATION_ELEMENT_DURATION = 250; + private EmergencyButton mEmergencyButton; private KeyguardAffordanceView mCameraImageView; private KeyguardAffordanceView mLeftAffordanceView; private LockIcon mLockIcon; @@ -189,6 +192,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL super.onFinishInflate(); mLockPatternUtils = new LockPatternUtils(mContext); mPreviewContainer = (ViewGroup) findViewById(R.id.preview_container); + mEmergencyButton = (EmergencyButton) findViewById(R.id.emergency_call_button); mCameraImageView = (KeyguardAffordanceView) findViewById(R.id.camera_button); mLeftAffordanceView = (KeyguardAffordanceView) findViewById(R.id.left_button); mLockIcon = (LockIcon) findViewById(R.id.lock_icon); @@ -198,6 +202,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL mUnlockMethodCache = UnlockMethodCache.getInstance(getContext()); mUnlockMethodCache.addListener(this); mLockIcon.update(); + updateEmergencyButton(); setClipChildren(false); setClipToPadding(false); mPreviewInflater = new PreviewInflater(mContext, new LockPatternUtils(mContext)); @@ -248,6 +253,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_height); mLeftAffordanceView.setLayoutParams(lp); updateLeftAffordanceIcon(); + updateEmergencyButton(); } public void setActivityStarter(ActivityStarter activityStarter) { @@ -698,4 +704,12 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL updateLeftAffordanceIcon(); updateLeftPreview(); } + + private void updateEmergencyButton() { + if (SystemProperties.getBoolean("persist.radio.emgcy_btn_onswipe",false)) { + if (mEmergencyButton != null) { + mEmergencyButton.updateEmergencyCallButton(); + } + } + } } -- GitLab From c4f67aad43c5ee87941d0ca7d4902f3903cd7046 Mon Sep 17 00:00:00 2001 From: Bhargav Upperla Date: Wed, 8 Jul 2015 15:14:36 -0700 Subject: [PATCH 079/185] Start Home Process as an empty app when killed by LMK. We maintain the empty app as a persistent process and keep it around until we go back to home. Once we go back to home, the original home app behavior persists. Helps with back-to-home latencies, especially under memory pressure. Change-Id: I447aeb4c84629c9e3b9d2d4b3095d2b3e43343dc --- .../server/am/ActivityManagerService.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3e5aba9e7fab..5e3e42cf073e 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -522,6 +522,10 @@ public final class ActivityManagerService extends ActivityManagerNative private static final int PERSISTENT_MASK = ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT; + // Start home process as an empty app + private boolean mHomeKilled = false; + private String mHomeProcessName = null; + // Intent sent when remote bugreport collection has been completed private static final String INTENT_REMOTE_BUGREPORT_FINISHED = "android.intent.action.REMOTE_BUGREPORT_FINISHED"; @@ -5176,7 +5180,12 @@ public final class ActivityManagerService extends ActivityManagerNative app.thread.asBinder() == thread.asBinder()) { boolean doLowMem = app.instrumentationClass == null; boolean doOomAdj = doLowMem; + boolean homeRestart = false; if (!app.killedByAm) { + if (mHomeProcessName != null && app.processName.equals(mHomeProcessName)) { + mHomeKilled = true; + homeRestart = true; + } Slog.i(TAG, "Process " + app.processName + " (pid " + pid + ") has died"); mAllowLowerMemLevel = true; @@ -5197,6 +5206,13 @@ public final class ActivityManagerService extends ActivityManagerNative if (doLowMem) { doLowMemReportIfNeededLocked(app); } + if (mHomeKilled && homeRestart) { + Intent intent = getHomeIntent(); + ActivityInfo aInfo = mStackSupervisor.resolveActivity(intent, null, 0, null, 0); + startProcessLocked(aInfo.processName, aInfo.applicationInfo, true, 0, + "activity", null, false, false, true); + homeRestart = false; + } } else if (app.pid != pid) { // A new process has already been started. Slog.i(TAG, "Process " + app.processName + " (pid " + pid @@ -16820,6 +16836,7 @@ public final class ActivityManagerService extends ActivityManagerNative mProcessesOnHold.remove(app); if (app == mHomeProcess) { + mHomeProcessName = mHomeProcess.processName; mHomeProcess = null; } if (app == mPreviousProcess) { @@ -19104,6 +19121,10 @@ public final class ActivityManagerService extends ActivityManagerNative app.adjType = "top-activity"; foregroundActivities = true; procState = PROCESS_STATE_CUR_TOP; + if(app == mHomeProcess) { + mHomeKilled = false; + mHomeProcessName = mHomeProcess.processName; + } } else if (app.instrumentationClass != null) { // Don't want to kill running instrumentation. adj = ProcessList.FOREGROUND_APP_ADJ; @@ -19139,6 +19160,14 @@ public final class ActivityManagerService extends ActivityManagerNative app.cached = true; app.empty = true; app.adjType = "cch-empty"; + + if (mHomeKilled && app.processName.equals(mHomeProcessName)) { + adj = ProcessList.PERSISTENT_PROC_ADJ; + schedGroup = Process.THREAD_GROUP_DEFAULT; + app.cached = false; + app.empty = false; + app.adjType = "top-activity"; + } } // Examine all activities if not already foreground. -- GitLab From 9ee4375c292046a40ffa7a355843e82ca1934c1b Mon Sep 17 00:00:00 2001 From: Richard LIU Date: Thu, 7 Jan 2016 16:25:47 +0800 Subject: [PATCH 080/185] Add config to disable CDMA call fwd/waiting Add config to disable CDMA call forwarding and call waiting by default Change-Id: I2752cb38d6a6627a14afb892ead5bc3bf4ef00e1 --- telephony/java/android/telephony/CarrierConfigManager.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index ff7ca6201b55..a5ee24249e81 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -615,6 +615,12 @@ public class CarrierConfigManager { public static final String KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL = "broadcast_emergency_call_state_changes_bool"; + /** + * Flag specifying whether CDMA call waiting and call forwarding are enabled + * @hide + */ + public static final String KEY_CDMA_CW_CF_ENABLED_BOOL = "cdma_cw_cf_enabled_bool"; + // These variables are used by the MMS service and exposed through another API, {@link // SmsManager}. The variable names and string values are copied from there. public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled"; @@ -798,6 +804,7 @@ public class CarrierConfigManager { new String[]{"default", "mms", "dun", "supl"}); sDefaults.putStringArray(KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{"default", "mms", "dun", "supl"}); + sDefaults.putBoolean(KEY_CDMA_CW_CF_ENABLED_BOOL, false); sDefaults.putStringArray(KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY, null); sDefaults.putStringArray(KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY, null); -- GitLab From 581b092041d1091350082b95c47312f4b8fbfcbe Mon Sep 17 00:00:00 2001 From: Omprakash Dhyade Date: Wed, 2 Sep 2015 20:04:57 -0700 Subject: [PATCH 081/185] frameworks/base: build drawing Cache only if not drawing with render node If layer is software rendered, its cache will be built twice, if invalidated during draw. Check for drawing with rendernode. Change-Id: Ic95ea1d7ce7087528789dc11c1ca766a3f4d5ead --- core/java/android/view/View.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index d4ac30076eaa..ec18f2055f11 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16819,7 +16819,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Bitmap cache = null; int layerType = getLayerType(); // TODO: signify cache state with just 'cache' local if (layerType == LAYER_TYPE_SOFTWARE || !drawingWithRenderNode) { - if (layerType != LAYER_TYPE_NONE) { + if (layerType != LAYER_TYPE_NONE && layerType != LAYER_TYPE_SOFTWARE) { // If not drawing with RenderNode, treat HW layers as SW layerType = LAYER_TYPE_SOFTWARE; buildDrawingCache(true); -- GitLab From 7889706d4eabeb03e0548623190cca9b0b056f32 Mon Sep 17 00:00:00 2001 From: Uma Mehta Date: Mon, 13 Jun 2016 15:32:00 +0530 Subject: [PATCH 082/185] MediaRecorder: 4kdci Timelapse recording crash For time lapse CamcorderProfile is used, setting audio parameters should be ignored. Adding 4KDCI profile in check to ignore audio parameters setting. Change-Id: I704c37c7e3c1b2ab9968200ec4c7d60ff47c53f1 --- media/java/android/media/MediaRecorder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) mode change 100644 => 100755 media/java/android/media/MediaRecorder.java diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java old mode 100644 new mode 100755 index 4ae2afa9466b..b96151114807 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -499,8 +499,10 @@ public class MediaRecorder setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); setVideoEncodingBitRate(profile.videoBitRate); setVideoEncoder(profile.videoCodec); - if (profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW && - profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA) { + if ((profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW && + profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_2160P) || + (profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_VGA && + profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_4KDCI)) { // Nothing needs to be done. Call to setCaptureRate() enables // time lapse video recording. } else { -- GitLab From 5510923ac71921b220eb4ac4dbeefff2b175987d Mon Sep 17 00:00:00 2001 From: Omkar Kolangade Date: Mon, 22 Sep 2014 11:38:22 +0530 Subject: [PATCH 083/185] IMS: Conference URI support. Add Telephony extras EXTRAS_IS_CONFERENCE_URI, EXTRA_DIAL_CONFERENCE_URI which will require by Telecomm, TeleService, Telephony, Framework, IMS framework etc. IMS: Allow placeCall with complete URI Add extra "org.codeaurora.extra.SKIP_SCHEMA_PARSING". Application need to set the intent extra to dial with complete uri. IMS: Add participant support. Add Phone Capabilities ADD_PARTICIPANT and Telephony Property ADD_PARTICIPANT_KEY. IMS: Allow add participant with normal IMS call We should allow add participant with normal IMS call to make it conference. Send add participant through existing connection of normal IMS call. IMS: Add Participant support. Do not create new connection while adding participant with existing call. Rather send add participant request through IMSConference. CRs-Fixed: 1023216 Change-Id: I5052710a2d11a57331bdfbe64247e6a39bf9147a --- telecomm/java/android/telecom/Call.java | 11 ++++- telecomm/java/android/telecom/Conference.java | 8 ++++ telecomm/java/android/telecom/Connection.java | 7 +++ .../android/telecom/ConnectionService.java | 45 +++++++++++++++++++ .../internal/telecom/IConnectionService.aidl | 2 + .../telephony/TelephonyProperties.java | 30 +++++++++++++ 6 files changed, 102 insertions(+), 1 deletion(-) diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 53f97757e5ff..6a66023f8804 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -262,8 +262,14 @@ public final class Call { */ public static final int CAPABILITY_VOICE_PRIVACY = 0x01000000; + /** + * Add participant in an active or conference call option + * @hide + */ + public static final int CAPABILITY_ADD_PARTICIPANT = 0x02000000; + //****************************************************************************************** - // Next CAPABILITY value: 0x02000000 + // Next CAPABILITY value: 0x04000000 //****************************************************************************************** /** @@ -422,6 +428,9 @@ public final class Call { if (can(capabilities, CAPABILITY_VOICE_PRIVACY)) { builder.append(" CAPABILITY_VOICE_PRIVACY"); } + if (can(capabilities, CAPABILITY_ADD_PARTICIPANT)) { + builder.append(" CAPABILITY_ADD_PARTICIPANT"); + } builder.append("]"); return builder.toString(); } diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index 0227d27180b5..a4a06b2d0534 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -267,6 +267,14 @@ public abstract class Conference extends Conferenceable { */ public void onSeparate(Connection connection) {} + /** + * Invoked when the conference adds a participant to the conference call. + * + * @param participant The participant to be added with conference call. + * @hide + */ + public void onAddParticipant(String participant) {} + /** * Invoked when the specified {@link Connection} should merged with the conference call. * diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index ae0ddfa06fe4..a646d42a6c10 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -235,6 +235,13 @@ public abstract class Connection extends Conferenceable { */ public static final int CAPABILITY_CAN_PAUSE_VIDEO = 0x00100000; + /** + * Add participant in an active or conference call option + * + * @hide + */ + public static final int CAPABILITY_ADD_PARTICIPANT = 0x02000000; + /** * For a conference, indicates the conference will not have child connections. *

diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index fc7d7412d8b5..053124b60229 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -106,6 +106,8 @@ public abstract class ConnectionService extends Service { private static final int MSG_PULL_EXTERNAL_CALL = 22; private static final int MSG_SEND_CALL_EVENT = 23; private static final int MSG_ON_EXTRAS_CHANGED = 24; + //Proprietary values starts after this. + private static final int MSG_ADD_PARTICIPANT_WITH_CONFERENCE = 30; private static Connection sNullConnection; @@ -231,6 +233,14 @@ public abstract class ConnectionService extends Service { mHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, callId).sendToTarget(); } + @Override + public void addParticipantWithConference(String callId, String participant) { + SomeArgs args = SomeArgs.obtain(); + args.arg1 = callId; + args.arg2 = participant; + mHandler.obtainMessage(MSG_ADD_PARTICIPANT_WITH_CONFERENCE, args).sendToTarget(); + } + @Override public void mergeConference(String callId) { mHandler.obtainMessage(MSG_MERGE_CONFERENCE, callId).sendToTarget(); @@ -390,6 +400,17 @@ public abstract class ConnectionService extends Service { case MSG_SPLIT_FROM_CONFERENCE: splitFromConference((String) msg.obj); break; + case MSG_ADD_PARTICIPANT_WITH_CONFERENCE: { + SomeArgs args = (SomeArgs) msg.obj; + try { + String callId = (String) args.arg1; + String participant = (String) args.arg2; + addParticipantWithConference(callId, participant); + } finally { + args.recycle(); + } + break; + } case MSG_MERGE_CONFERENCE: mergeConference((String) msg.obj); break; @@ -940,6 +961,17 @@ public abstract class ConnectionService extends Service { } } + private void addParticipantWithConference(String callId, String participant) { + Log.d(this, "ConnectionService addParticipantWithConference(%s, %s)", participant, callId); + Conference conference = findConferenceForAction(callId, "addParticipantWithConference"); + Connection connection = findConnectionForAction(callId, "addParticipantWithConnection"); + if (connection != getNullConnection()) { + onAddParticipant(connection, participant); + } else if (conference != getNullConference()) { + conference.onAddParticipant(participant); + } + } + private void mergeConference(String callId) { Log.d(this, "mergeConference(%s)", callId); Conference conference = findConferenceForAction(callId, "mergeConference"); @@ -1292,6 +1324,19 @@ public abstract class ConnectionService extends Service { */ public void onConference(Connection connection1, Connection connection2) {} + /** + * Add participant with connection. Invoked when user has made a request to add + * participant with specified connection. In response, the participant should add with + * the connection. + * + * @param connection A connection where participant need to add. + * @param participant Address of participant which will be added. + * @return + * + * @hide + */ + public void onAddParticipant(Connection connection, String participant) {} + /** * Indicates that a remote conference has been created for existing {@link RemoteConnection}s. * When this method is invoked, this {@link ConnectionService} should create its own diff --git a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl index a4c179820331..e85dfb90a691 100644 --- a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl +++ b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl @@ -81,4 +81,6 @@ oneway interface IConnectionService { void sendCallEvent(String callId, String event, in Bundle extras); void onExtrasChanged(String callId, in Bundle extras); + + void addParticipantWithConference(String callId, String recipients); } diff --git a/telephony/java/com/android/internal/telephony/TelephonyProperties.java b/telephony/java/com/android/internal/telephony/TelephonyProperties.java index 6567ea764b50..1d142e7f9f59 100644 --- a/telephony/java/com/android/internal/telephony/TelephonyProperties.java +++ b/telephony/java/com/android/internal/telephony/TelephonyProperties.java @@ -218,4 +218,34 @@ public interface TelephonyProperties */ static final String PROPERTY_VIDEOCALL_AUDIO_OUTPUT = "persist.radio.call.audio.output"; + /** + * Used when Presence app sends Dial intent with specific schema + * If true: skip schema parsing and use Tel schema + * If false: parse schema + */ + static final String EXTRA_SKIP_SCHEMA_PARSING = + "org.codeaurora.extra.SKIP_SCHEMA_PARSING"; + + /** + * For Group Conference Calling + * If true: isConferenceUri in Dial is set to true, + * which indicates that Dial is for Conference Calling + * If false: above is set to false + */ + static final String EXTRAS_IS_CONFERENCE_URI = "isConferenceUri"; + + /** + * For Group Conference Dialing Feature + * If true: Dial intent triggered from Group Conference Calling screen + * if false: normal dial + */ + static final String EXTRA_DIAL_CONFERENCE_URI = + "org.codeaurora.extra.DIAL_CONFERENCE_URI"; + + /** + * For Add Participant Feature + * If true: Dial intent triggered from Dialpad is for AddParticipant + * if false: normal dial + */ + static final String ADD_PARTICIPANT_KEY = "add_participant"; } -- GitLab From f3e1f66af6a5a68bc9e410d2910bc94aa88ce26e Mon Sep 17 00:00:00 2001 From: jinfaw Date: Fri, 3 Jun 2016 15:42:28 +0800 Subject: [PATCH 084/185] Add regionalization environment to support carrier switching 1. Add RegionalizationService to SystemServer for accessing files for carrier 2. Add RegionalizationEnvironment to load path of carrier package Change-Id: I4e3e6c2606d3fbebd42952eabac318797f1d8b0b CRs-Fixed: 1025803 --- Android.mk | 1 + .../internal/os/IRegionalizationService.aidl | 46 +++ .../os/RegionalizationEnvironment.java | 279 ++++++++++++++++++ .../server/os/RegionalizationService.java | 155 ++++++++++ .../java/com/android/server/SystemServer.java | 8 + 5 files changed, 489 insertions(+) create mode 100644 core/java/com/android/internal/os/IRegionalizationService.aidl create mode 100644 core/java/com/android/internal/os/RegionalizationEnvironment.java create mode 100644 services/core/java/com/android/server/os/RegionalizationService.java diff --git a/Android.mk b/Android.mk index b8b9c12a16b8..a8b3f657d4a6 100644 --- a/Android.mk +++ b/Android.mk @@ -325,6 +325,7 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/policy/IShortcutService.aidl \ core/java/com/android/internal/os/IDropBoxManagerService.aidl \ core/java/com/android/internal/os/IParcelFileDescriptorFactory.aidl \ + core/java/com/android/internal/os/IRegionalizationService.aidl \ core/java/com/android/internal/os/IResultReceiver.aidl \ core/java/com/android/internal/statusbar/IStatusBar.aidl \ core/java/com/android/internal/statusbar/IStatusBarService.aidl \ diff --git a/core/java/com/android/internal/os/IRegionalizationService.aidl b/core/java/com/android/internal/os/IRegionalizationService.aidl new file mode 100644 index 000000000000..0e091ff342d0 --- /dev/null +++ b/core/java/com/android/internal/os/IRegionalizationService.aidl @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.internal.os; + +/** + * Direct interface to the RegionalizationService's functionality + * + * {@hide} + */ +interface IRegionalizationService { + + boolean checkFileExists(String filepath); + + List readFile(String filepath, String regularExpression); + + boolean writeFile(String filepath, String content, boolean append); + + void deleteFilesUnderDir(String dirPath, String ext, boolean delDir); +} diff --git a/core/java/com/android/internal/os/RegionalizationEnvironment.java b/core/java/com/android/internal/os/RegionalizationEnvironment.java new file mode 100644 index 000000000000..24b9120e2533 --- /dev/null +++ b/core/java/com/android/internal/os/RegionalizationEnvironment.java @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.internal.os; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemProperties; +import android.text.TextUtils; +import android.util.Log; + +public class RegionalizationEnvironment { + private final static String TAG = "RegionalizationEnvironment"; + + private final static boolean SUPPORTED = SystemProperties.getBoolean( + "ro.regionalization.support", false); + private final static boolean DEBUG = true; + + private static IRegionalizationService mRegionalizationService = null; + + private final static String SPEC_FILE_PATH = "/persist/speccfg/spec"; + + private static ArrayList mPackages = new ArrayList(); + private static ArrayList mExcludedApps = new ArrayList(); + + private static boolean isLoaded = false; + private static void init() { + IBinder iBinder = ServiceManager.getService("regionalization"); + mRegionalizationService = IRegionalizationService.Stub.asInterface(iBinder); + if (mRegionalizationService != null) { + loadSwitchedPackages(); + loadExcludedApplist(); + isLoaded = true; + } + } + + /** + * {@hide} + */ + public static boolean isSupported() { + if (SUPPORTED && !isLoaded) { + init(); + } + return SUPPORTED; + } + + /** + * {@hide} + */ + public static int getPackagesCount() { + return mPackages.size(); + } + + /** + * {@hide} + */ + public static List getAllPackageNames() { + ArrayList packages = new ArrayList(); + for (Package p : mPackages) { + packages.add(p.getName()); + } + return packages; + } + + /** + * {@hide} + */ + public static List getAllPackageDirectories() { + ArrayList directories = new ArrayList(); + for (Package p : mPackages) { + if (DEBUG) + Log.v(TAG, "Package Directoriy(" + p.getPriority() + "):" + p.getDirectory()); + directories.add(p.getDirectory()); + } + return directories; + } + + /** + * {@hide} + */ + public static boolean isExcludedApp(String appName) { + if (getPackagesCount() == 0) { + return false; + } + + if (!appName.endsWith(".apk")) { + return mExcludedApps.contains(appName + ".apk"); + } else { + return mExcludedApps.contains(appName); + } + } + + /** + * {@hide} + */ + public static IRegionalizationService getRegionalizationService() { + return mRegionalizationService; + } + + /** + * {@hide} + */ + public static String getStoragePos() { + for (Package pack: mPackages) { + String pos = pack.getStoragePos(); + if (!TextUtils.isEmpty(pos)) + return pos; + } + try { + mPackages.clear(); + throw new IOException("Read wrong package for Carrier!"); + } catch (IOException e) { + Log.e(TAG, "Get storage pos error, caused by: " + e.getMessage()); + } + return ""; + } + + private static void loadSwitchedPackages() { + if (DEBUG) + Log.d(TAG, "load packages for Carrier!"); + + try { + ArrayList contents = null; + try { + contents = (ArrayList) + mRegionalizationService.readFile(SPEC_FILE_PATH, null); + } catch (RemoteException e) { + e.printStackTrace(); + } + + if (contents != null && contents.size() > 0) { + // Get storage pos of carrier pack + if (!contents.get(0).startsWith("packStorage=")) { + throw new IOException("Can't read storage pos for Carrier package!"); + } + String storagePos = contents.get(0).substring("packStorage=".length()); + if (TextUtils.isEmpty(storagePos)) { + throw new IOException("Storage pos for Carrier package is wrong!"); + } + + // Get carrier pack count + String packNumRegularExpresstion = "^packCount=[0-9]$"; + if (!contents.get(1).matches(packNumRegularExpresstion)) { + throw new IOException("Can't read package count of Carrier!"); + } + int packNum = Integer.parseInt(contents.get(1) + .substring("packCount=".length())); + if (packNum <= 0 || contents.size() <= packNum) { + throw new IOException("Package count of Carrier is wrong!"); + } + + for (int i = 2; i < packNum + 2; i++) { + String packRegularExpresstion = "^strSpec[0-9]=\\w+$"; + if (contents.get(i).matches(packRegularExpresstion)) { + String packName = contents.get(i).substring("strSpec".length() + 2); + if (!TextUtils.isEmpty(packName)) { + boolean exists = false; + try { + exists = mRegionalizationService.checkFileExists( + storagePos + "/" + packName); + } catch (RemoteException e) { + e.printStackTrace(); + } + + if (exists) { + mPackages.add(new Package(packName, i, storagePos)); + } else { + mPackages.clear(); + throw new IOException("Read wrong packages for Carrier!"); + } + } + } else { + mPackages.clear(); + throw new IOException("Read wrong packages for Carrier!"); + } + } + } + } catch (IOException e) { + Log.e(TAG, "Load package for carrier error, caused by: " + e.getMessage()); + } + } + + private static void loadExcludedApplist() { + if (DEBUG) + Log.d(TAG, "loadExcludedApps!"); + + if (getPackagesCount() == 0) return; + + for (Package pack : mPackages) { + Log.d(TAG, "load excluded apps for " + pack.getDirectory()); + String excListFilePath = pack.getExcludedListFilePath(); + ArrayList contents = null; + try { + contents = (ArrayList) + mRegionalizationService.readFile(excListFilePath, null); + } catch (RemoteException e) { + e.printStackTrace(); + } + if (contents != null && contents.size() > 0) { + for (String content : contents) { + if (!TextUtils.isEmpty(content)) { + int pos = content.lastIndexOf("/"); + if (pos != -1) { + String apkName = content.substring(pos + 1); + if (!TextUtils.isEmpty(apkName) && !mExcludedApps.contains(apkName)) { + mExcludedApps.add(apkName); + } + } + } + } + } + } + } + + private static class Package { + private final String mName; + private final int mPriority; + private final String mStorage; + + public Package(String name, int priority, String storage) { + mName = name; + mPriority = priority; + mStorage = storage; + } + + public String getName() { + return mName; + } + + public int getPriority() { + return mPriority; + } + + public String getStoragePos() { + return mStorage; + } + + public File getDirectory() { + return new File(mStorage, mName); + } + + public String getExcludedListFilePath() { + return getDirectory().getAbsolutePath() + "/exclude.list"; + } + } + +} diff --git a/services/core/java/com/android/server/os/RegionalizationService.java b/services/core/java/com/android/server/os/RegionalizationService.java new file mode 100644 index 000000000000..bced2eaa3cd3 --- /dev/null +++ b/services/core/java/com/android/server/os/RegionalizationService.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.server.os; + +import android.text.TextUtils; +import android.util.Log; + +import com.android.internal.os.IRegionalizationService; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; + +/** + * The implementation of the regionalization service interface. + * + * @hide + */ +public class RegionalizationService extends IRegionalizationService.Stub { + + private static final String TAG = "RegionalizationService"; + + public RegionalizationService() { + } + + @Override + public boolean checkFileExists(String filepath) { + File file = new File(filepath); + if (file == null || !file.exists()) + return false; + + return true; + } + + @Override + public ArrayList readFile(String filepath, String regularExpression) { + File file = new File(filepath); + if (file == null || !file.exists() || !file.canRead()) return null; + + + ArrayList contents = new ArrayList(); + + FileReader fr = null; + BufferedReader br = null; + try { + fr = new FileReader(file); + br = new BufferedReader(fr); + String line = null; + while ((line = br.readLine()) != null && (line = line.trim()) != null) { + if (!TextUtils.isEmpty(regularExpression)) { + if (line.matches(regularExpression)) { + contents.add(line); + } + } else { + contents.add(line); + } + } + } catch (IOException e) { + Log.e(TAG, "Read File error, caused by: " + e.getMessage()); + } finally { + try { + if (br != null) br.close(); + if (fr != null) fr.close(); + } catch (IOException e) { + Log.e(TAG, "Close the reader error, caused by: " + e.getMessage()); + } + } + + return contents; + } + + @Override + public boolean writeFile(String filepath, String content, boolean append) { + File file = new File(filepath); + if (file == null || !file.exists() || !file.canWrite()) return false; + + if (TextUtils.isEmpty(content)) return false; + + // Write the file with the content. + FileWriter fw = null; + try { + fw = new FileWriter(file, append); + fw.write(content); + } catch (IOException e) { + e.printStackTrace(); + return false; + } finally { + if (fw != null) try { + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + return true; + } + + @Override + public void deleteFilesUnderDir(String dirPath, String ext, boolean delDir) { + File file = new File(dirPath); + if (file == null || !file.exists()) return; + + deleteFiles(file, ext, delDir); + } + + // Delete all files under this folder and its subfolders + private void deleteFiles(File dir, String ext, boolean delDir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + if (children == null) return; + + for (int i = 0; i < children.length; i++) { + deleteFiles(new File(dir, children[i]), ext, delDir); + } + if (delDir) { + dir.delete(); + } + } else { + if (dir.isFile() && (ext.isEmpty() || dir.getName().endsWith(ext))) { + dir.delete(); + } + } + } +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 81de92fcf342..30ec21d6302c 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -51,6 +51,7 @@ import android.view.WindowManager; import com.android.internal.R; import com.android.internal.os.BinderInternal; +import com.android.internal.os.RegionalizationEnvironment; import com.android.internal.os.SamplingProfilerIntegration; import com.android.internal.os.ZygoteInit; import com.android.internal.widget.ILockSettings; @@ -75,6 +76,7 @@ import com.android.server.media.projection.MediaProjectionManagerService; import com.android.server.net.NetworkPolicyManagerService; import com.android.server.net.NetworkStatsService; import com.android.server.notification.NotificationManagerService; +import com.android.server.os.RegionalizationService; import com.android.server.os.SchedulingPolicyService; import com.android.server.pm.BackgroundDexOptService; import com.android.server.pm.Installer; @@ -447,6 +449,12 @@ public final class SystemServer { mOnlyCore = true; } + if (RegionalizationEnvironment.isSupported()) { + Slog.i(TAG, "Regionalization Service"); + RegionalizationService regionalizationService = new RegionalizationService(); + ServiceManager.addService("regionalization", regionalizationService); + } + // Start the package manager. traceBeginAndSlog("StartPackageManagerService"); mPackageManagerService = PackageManagerService.main(mSystemContext, installer, -- GitLab From 66e75fa71d1db5e2bbc0bacc05fc53cedd713fbb Mon Sep 17 00:00:00 2001 From: Devi Sandeep Endluri V V Date: Fri, 20 May 2016 19:09:35 +0530 Subject: [PATCH 085/185] Show "Sign-in network" notification with correct operator name. Use getNetworkOperatorName specifically with the DDS sub Id to get and display the correct operator name in the "sign in to network" notification. Change-Id: Id6a27ec2f3c3f1a165f9a36d88b8359774b428ca CRs-Fixed: 1012068 --- .../core/java/com/android/server/ConnectivityService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 534b544a0c15..1e4da099a2f3 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -99,6 +99,7 @@ import android.os.UserManager; import android.provider.Settings; import android.security.Credentials; import android.security.KeyStore; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.ArraySet; @@ -3511,7 +3512,8 @@ public class ConnectivityService extends IConnectivityManager.Stub title = r.getString(R.string.network_available_sign_in, 0); // TODO: Change this to pull from NetworkInfo once a printable // name has been added to it - details = mTelephonyManager.getNetworkOperatorName(); + details = mTelephonyManager.getNetworkOperatorName( + SubscriptionManager.getDefaultDataSubscriptionId()); icon = R.drawable.stat_notify_rssi_in_range; break; default: -- GitLab From d9f11dc2c5d043a797c207207c50b6a8061f75b4 Mon Sep 17 00:00:00 2001 From: caiqinl Date: Mon, 20 Jun 2016 16:37:49 +0800 Subject: [PATCH 086/185] Performance Optimization: Align texture dirty rect Align x offset and width to 32, y offset and height to 4. It improves the font texture upload performance. CRs-Fixed: 1031411 Change-Id: Ifee5ae334a58254a63a89535bb443fe5f80e7ba0 --- libs/hwui/font/CacheTexture.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp index 8ba4761c1b2e..fcdde45c49f2 100644 --- a/libs/hwui/font/CacheTexture.cpp +++ b/libs/hwui/font/CacheTexture.cpp @@ -188,15 +188,21 @@ void CacheTexture::allocatePixelBuffer() { bool CacheTexture::upload() { const Rect& dirtyRect = mDirtyRect; - uint32_t x = mHasUnpackRowLength ? dirtyRect.left : 0; - uint32_t y = dirtyRect.top; - uint32_t width = mHasUnpackRowLength ? dirtyRect.getWidth() : getWidth(); - uint32_t height = dirtyRect.getHeight(); + // align the x direction to 32 and y direction to 4 for better performance + uint32_t x = (((uint32_t)dirtyRect.left) & (~0x1F)); + uint32_t y = (((uint32_t)dirtyRect.top) & (~0x3)); + uint32_t r = ((((uint32_t)dirtyRect.right) + 0x1F) & (~0x1F)) - x; + uint32_t b = ((((uint32_t)dirtyRect.bottom) + 0x3) & (~0x3)) - y; + uint32_t width = (r > getWidth() ? getWidth() : r); + uint32_t height = (b > getHeight() ? getHeight() : b); // The unpack row length only needs to be specified when a new // texture is bound if (mHasUnpackRowLength) { glPixelStorei(GL_UNPACK_ROW_LENGTH, getWidth()); + } else { + x = 0; + width = getWidth(); } mPixelBuffer->upload(x, y, width, height); -- GitLab From 6a196f084267ec9ca3fdf6f2e2950e85609a4cdb Mon Sep 17 00:00:00 2001 From: Richard LIU Date: Thu, 6 Aug 2015 19:24:02 +0800 Subject: [PATCH 087/185] Add Radio Tech support when search PLMN Add radio technology interface when search PLMN. It works in both cases when RIL reports radio tech or not. Change-Id: Ia98879d9c11ed6ebc0eca3980855cdf2e9ccde8e --- .../internal/telephony/OperatorInfo.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/telephony/java/com/android/internal/telephony/OperatorInfo.java b/telephony/java/com/android/internal/telephony/OperatorInfo.java index a29d7c161990..f9f939c7e615 100644 --- a/telephony/java/com/android/internal/telephony/OperatorInfo.java +++ b/telephony/java/com/android/internal/telephony/OperatorInfo.java @@ -33,6 +33,7 @@ public class OperatorInfo implements Parcelable { private String mOperatorAlphaLong; private String mOperatorAlphaShort; private String mOperatorNumeric; + private String mRadioTech; private State mState = State.UNKNOWN; @@ -57,6 +58,11 @@ public class OperatorInfo implements Parcelable { return mState; } + public String + getRadioTech() { + return mRadioTech; + } + OperatorInfo(String operatorAlphaLong, String operatorAlphaShort, String operatorNumeric, @@ -65,6 +71,14 @@ public class OperatorInfo implements Parcelable { mOperatorAlphaLong = operatorAlphaLong; mOperatorAlphaShort = operatorAlphaShort; mOperatorNumeric = operatorNumeric; + mRadioTech = ""; + /* operatorNumeric format: PLMN+RAT or PLMN */ + if (null != operatorNumeric) { + String values[] = operatorNumeric.split("\\+"); + mOperatorNumeric = values[0]; + if (values.length > 1) + mRadioTech = values[1]; + } mState = state; } @@ -108,6 +122,7 @@ public class OperatorInfo implements Parcelable { return "OperatorInfo " + mOperatorAlphaLong + "/" + mOperatorAlphaShort + "/" + mOperatorNumeric + + "/" + mRadioTech + "/" + mState; } @@ -132,7 +147,10 @@ public class OperatorInfo implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeString(mOperatorAlphaLong); dest.writeString(mOperatorAlphaShort); - dest.writeString(mOperatorNumeric); + if (mRadioTech.equals("")) + dest.writeString(mOperatorNumeric); + else + dest.writeString(mOperatorNumeric + "+" + mRadioTech); dest.writeSerializable(mState); } -- GitLab From 75182939d32835cd373105604604d0b60f7490f4 Mon Sep 17 00:00:00 2001 From: c_jyuan Date: Tue, 14 Jun 2016 14:43:38 +0800 Subject: [PATCH 088/185] AppOpsManager: Fix wrong coarse location permission issue Android intentionally defines 3 duplicated coarse location permissions in the mapping table, but for CTA security, it does not allow one switch to control the other 2. Therefore, it need to update the table with exact permissions. However, it is not proper to mainline currently to conflict AOSP's way. Change-Id: If534a21beb32253abb4f603c7f36b5a8b0ab0601 --- core/java/android/app/AppOpsManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 1e4ffbeca33d..8e9e284700cf 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -386,8 +386,8 @@ public class AppOpsManager { */ private static int[] sOpToSwitch = new int[] { OP_COARSE_LOCATION, - OP_COARSE_LOCATION, - OP_COARSE_LOCATION, + OP_FINE_LOCATION, + OP_GPS, OP_VIBRATE, OP_READ_CONTACTS, OP_WRITE_CONTACTS, @@ -426,8 +426,8 @@ public class AppOpsManager { OP_AUDIO_NOTIFICATION_VOLUME, OP_AUDIO_BLUETOOTH_VOLUME, OP_WAKE_LOCK, - OP_COARSE_LOCATION, - OP_COARSE_LOCATION, + OP_FINE_LOCATION, + OP_FINE_LOCATION, OP_GET_USAGE_STATS, OP_MUTE_MICROPHONE, OP_TOAST_WINDOW, -- GitLab From 44764ccde343d64233fa8c96881af3f76c595cd7 Mon Sep 17 00:00:00 2001 From: jinfaw Date: Mon, 6 Jun 2016 16:20:55 +0800 Subject: [PATCH 089/185] Support AOSP service to scan carrier resources 1. Modify PackageManagerService to scan carrier apps. 2. Modify AssetManager to scan carrier frameworks-res overlay. Change-Id: I8daea23f372a9d32e0caf3d36a1ab0e2f4770371 CRs-Fixed: 1025803 --- core/jni/Android.mk | 3 +- core/jni/android_util_AssetManager.cpp | 25 ++- include/private/regionalization/Environment.h | 75 +++++++ libs/regionalization/Android.mk | 18 ++ libs/regionalization/Environment.cpp | 201 ++++++++++++++++++ .../server/pm/PackageManagerService.java | 45 ++++ 6 files changed, 361 insertions(+), 6 deletions(-) create mode 100644 include/private/regionalization/Environment.h create mode 100644 libs/regionalization/Android.mk create mode 100644 libs/regionalization/Environment.cpp diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 4bfb4cbffacb..5455205655a3 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -264,7 +264,8 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_SHARED_LIBRARIES += \ libhwui \ - libdl + libdl \ + libregionalization # we need to access the private Bionic header # in com_google_android_gles_jni_GLImpl.cpp diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 3473d9dab732..1a7294f14243 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -27,6 +27,7 @@ #include #include // for AID_SYSTEM +#include #include "androidfw/Asset.h" #include "androidfw/AssetManager.h" @@ -129,7 +130,7 @@ jint copyValue(JNIEnv* env, jobject outValue, const ResTable* table, } // This is called by zygote (running as user root) as part of preloadResources. -static void verifySystemIdmaps() +static void verifySystemIdmaps(const char* overlay_dir) { pid_t pid; char system_id[10]; @@ -186,9 +187,10 @@ static void verifySystemIdmaps() // Directories to scan for overlays // /vendor/overlay - if (stat(AssetManager::OVERLAY_DIR, &st) == 0) { - argv[argc++] = AssetManager::OVERLAY_DIR; - } + + if (stat(overlay_dir, &st) == 0) { + argv[argc++] = overlay_dir; + } // Finally, invoke idmap (if any overlay directory exists) if (argc > 5) { @@ -2077,7 +2079,20 @@ static jintArray android_content_AssetManager_getStyleAttributes(JNIEnv* env, jo static void android_content_AssetManager_init(JNIEnv* env, jobject clazz, jboolean isSystem) { if (isSystem) { - verifySystemIdmaps(); + // Load frameworks-res.apk's overlay through regionalization environment + if (Environment::isSupported()) { + Environment* environment = new Environment(); + if (environment != NULL) { + const char* overlay_dir = environment->getOverlayDir(); + if (overlay_dir != NULL && strcmp(overlay_dir, "") != 0) { + ALOGD("Regionalization - getOverlayDir:%s", overlay_dir); + verifySystemIdmaps(overlay_dir); + } + delete environment; + } + } + + verifySystemIdmaps(AssetManager::OVERLAY_DIR); } AssetManager* am = new AssetManager(); if (am == NULL) { diff --git a/include/private/regionalization/Environment.h b/include/private/regionalization/Environment.h new file mode 100644 index 000000000000..d912383431a3 --- /dev/null +++ b/include/private/regionalization/Environment.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ANDROID_REGIONALIZATION_ENVIRONMENT_H +#define ANDROID_REGIONALIZATION_ENVIRONMENT_H + +namespace android { + + /** + * Class used by Regionalization Carrier switching in order to get + * the resource path of switched packages for Carrier. + */ +class Environment { +public: + /** For boot and shutdown animation and music + * The value which will get different type Animation and boot + * audio file path from BOOT_SHUTDOWN_FILE Array. + * (STATUS:TYPE) + * (0:0) Boot Animation,(0:1) Boot Audio + * (1:0) Shutdown Animation,(1,1) Shutdown Audio + */ + const static int BOOT_STATUS = 0; + const static int SHUTDOWN_STATUS = 1; + const static int ANIMATION_TYPE = 0; + const static int MUSIC_TYPE = 1; + + Environment(void); + + ~Environment(void); + + static bool isSupported(void); + + bool loadPackagesFromSpecFile(void); + + const char* getMediaFile(int type, int state); + + const char* getOverlayDir(void); + +private: + char* mStoragePos; + int mPackagesCount; + char** mPackages; + char* mMediaFile; + char* mOverlayDir; +}; + +}; // namespace android + +#endif // ANDROID_REGIONALIZATION_ENVIRONMENT_H diff --git a/libs/regionalization/Android.mk b/libs/regionalization/Android.mk new file mode 100644 index 000000000000..4a33a3c6f816 --- /dev/null +++ b/libs/regionalization/Android.mk @@ -0,0 +1,18 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + +LOCAL_MODULE:= libregionalization +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := \ + Environment.cpp +LOCAL_C_INCLUDES := \ + frameworks/base/include +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libcutils \ + libutils + +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + +include $(BUILD_SHARED_LIBRARY) diff --git a/libs/regionalization/Environment.cpp b/libs/regionalization/Environment.cpp new file mode 100644 index 000000000000..f16fa3786528 --- /dev/null +++ b/libs/regionalization/Environment.cpp @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +using namespace android; + +static const char* ENVIRONMENT_PROP = "ro.regionalization.support"; +static const char* SPEC_FILE = "/persist/speccfg/spec"; +static const char* BOOT_SHUTDOWN_FILE[2][2] = { + {"/system/media/bootanimation.zip", "/system/media/shutdownanimation.zip"}, + {"/system/media/boot.wav", "/system/media/shutdown.wav"} }; +static const char* OVERLAY_DIR = "/system/vendor/overlay"; + +static const bool kIsDebug = true; + +Environment::Environment(void) + : mStoragePos(NULL), mPackagesCount(0), + mPackages(NULL), mMediaFile(NULL), + mOverlayDir(NULL) +{ + mStoragePos = new char[PATH_MAX]; + mMediaFile = new char[PATH_MAX]; + mOverlayDir = new char[PATH_MAX]; + if (mStoragePos == NULL || mMediaFile == NULL || mOverlayDir == NULL) { + if (kIsDebug) { + ALOGD("Regionalization Environment new memory error!"); + } + return; + } + + bool success = loadPackagesFromSpecFile(); + if (!success) { + if (kIsDebug) { + ALOGD("Regionalization Environment load packages for Carrier error!"); + } + } +} + +Environment::~Environment(void) +{ + if (mStoragePos != NULL) { + delete[] mStoragePos; + } + + if (mPackages != NULL) { + for (int i=0; i < mPackagesCount; i++) { + if (mPackages[i] != NULL) { + delete[] mPackages[i]; + } + } + delete[] mPackages; + } + + mPackagesCount = 0; + + if (mMediaFile != NULL) { + delete[] mMediaFile; + } + + if (mOverlayDir != NULL) { + delete[] mOverlayDir; + } +} + +bool Environment::isSupported(void) +{ + char value[PROPERTY_VALUE_MAX]; + memset(value, 0, PROPERTY_VALUE_MAX * sizeof(char)); + property_get(ENVIRONMENT_PROP, value, "false"); + if (!strcmp(value, "true")) { + return true; + } + + return false; +} + +bool Environment::loadPackagesFromSpecFile(void) { + FILE* fSpec = NULL; + if ((fSpec = fopen(SPEC_FILE, "r")) == NULL) { + return false; + } + + // Read first line to get storage position of packages + int res = fscanf(fSpec, "%*[^=]=%s", mStoragePos); + if (res < 1 || strcmp(mStoragePos, "") == 0) { + fclose(fSpec); + return false; + } + + // Read second line to get count of packages. + res = fscanf(fSpec, "%*[^=]=%d", &mPackagesCount); + if (res < 1 || mPackagesCount <= 0) { + fclose(fSpec); + return false; + } + + mPackages = new char*[mPackagesCount]; + if (mPackages == NULL) { + fclose(fSpec); + return false; + } + for (int i = 0; i < mPackagesCount; i++) { + mPackages[i] = new char[PATH_MAX]; + } + + for (int i = 0; i < mPackagesCount; i++) { + res = fscanf(fSpec, "%*[^=]=%s", mPackages[i]); + if (res < 1) { + fclose(fSpec); + return false; + } + } + + fclose(fSpec); + return true; +} + +// type: {0:Animation; 1:Audio} +// state: {0:boot; 1:shutdown} +const char* Environment::getMediaFile(int type, int state) +{ + if (mPackagesCount != 0 && mStoragePos != NULL && mPackages != NULL) { + for(int i = mPackagesCount-1; i >= 0; i--) { + memset(mMediaFile, 0, PATH_MAX); + strlcpy(mMediaFile, mStoragePos, PATH_MAX); + strlcat(mMediaFile, "/", PATH_MAX); + strlcat(mMediaFile, mPackages[i], PATH_MAX); + strlcat(mMediaFile, BOOT_SHUTDOWN_FILE[type][state], PATH_MAX); + if(access(mMediaFile, R_OK) == 0) { + if (kIsDebug) { + ALOGD("Environment::getMediaFile() = %s\n", mMediaFile); + } + return mMediaFile; + } + } + } + + return NULL; +} + +const char* Environment::getOverlayDir(void) +{ + if (mPackagesCount != 0 && mStoragePos != NULL && mPackages != NULL) { + for (int i = mPackagesCount-1; i >= 0; i--) { + memset(mMediaFile, 0, PATH_MAX); + strlcpy(mOverlayDir, mStoragePos, PATH_MAX); + strlcat(mOverlayDir, "/", PATH_MAX); + strlcat(mOverlayDir, mPackages[i], PATH_MAX); + strlcat(mOverlayDir, OVERLAY_DIR, PATH_MAX); + if (kIsDebug) { + ALOGD("Environment::getOverlayDir() = %s\n", mOverlayDir); + } + // Check if PackageFrameworksRes dir exists. + char overlayFile[PATH_MAX]; + memset(overlayFile, 0, PATH_MAX); + strlcpy(overlayFile, mOverlayDir, PATH_MAX); + strlcat(overlayFile, "/", PATH_MAX); + strlcat(overlayFile, mPackages[i], PATH_MAX); + strlcat(overlayFile, "FrameworksRes", PATH_MAX); + if (access(overlayFile, R_OK) == 0) { + if (kIsDebug) { + ALOGD("Environment::getOverlayDir() - overlayFile exists!\n"); + } + return mOverlayDir; + } + } + } + + return NULL; +} diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9f991d26020a..7975dcac29b3 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -233,6 +233,7 @@ import com.android.internal.content.PackageHelper; import com.android.internal.logging.MetricsLogger; import com.android.internal.os.IParcelFileDescriptorFactory; import com.android.internal.os.InstallerConnection.InstallerException; +import com.android.internal.os.RegionalizationEnvironment; import com.android.internal.os.SomeArgs; import com.android.internal.os.Zygote; import com.android.internal.telephony.CarrierAppUtils; @@ -559,6 +560,9 @@ public class PackageManagerService extends IPackageManager.Stub { // apps. final File mDrmAppPrivateInstallDir; + // Directory containing the regionalization 3rd apps. + final File mRegionalizationAppInstallDir; + // ---------------------------------------------------------------- // Lock for state used when installing and doing other long running @@ -2295,6 +2299,7 @@ public class PackageManagerService extends IPackageManager.Stub { mEphemeralInstallDir = new File(dataDir, "app-ephemeral"); mAsecInternalPath = new File(dataDir, "app-asec").getPath(); mDrmAppPrivateInstallDir = new File(dataDir, "app-private"); + mRegionalizationAppInstallDir = new File(dataDir, "app-regional"); sUserManager = new UserManagerService(context, this, mPackages); @@ -2468,6 +2473,28 @@ public class PackageManagerService extends IPackageManager.Stub { | PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0); + // Collect all Regionalization packages form Carrier's res packages. + if (RegionalizationEnvironment.isSupported()) { + Log.d(TAG, "Load Regionalization vendor apks"); + final List RegionalizationDirs = + RegionalizationEnvironment.getAllPackageDirectories(); + for (File f : RegionalizationDirs) { + File RegionalizationSystemDir = new File(f, "system"); + // Collect packages in /system/priv-app + scanDirLI(new File(RegionalizationSystemDir, "priv-app"), + PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR + | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0); + // Collect packages in /system/app + scanDirLI(new File(RegionalizationSystemDir, "app"), + PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, + scanFlags, 0); + // Collect overlay in /system/vendor + scanDirLI(new File(RegionalizationSystemDir, "vendor/overlay"), + PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, + scanFlags | SCAN_TRUSTED_OVERLAY, 0); + } + } + // Prune any system packages that no longer exist. final List possiblyDeletedUpdatedSystemApps = new ArrayList(); if (!mOnlyCore) { @@ -2554,6 +2581,17 @@ public class PackageManagerService extends IPackageManager.Stub { | PackageParser.PARSE_IS_EPHEMERAL, scanFlags | SCAN_REQUIRE_KNOWN, 0); + // Collect all Regionalization 3rd packages. + if (RegionalizationEnvironment.isSupported()) { + Log.d(TAG, "Load Regionalization 3rd apks from res packages."); + final List packages = RegionalizationEnvironment.getAllPackageNames(); + for (String pack : packages) { + File appFolder = new File(mRegionalizationAppInstallDir, pack); + Log.d(TAG, "Load Regionalization 3rd apks of path " + appFolder.getPath()); + scanDirLI(appFolder, 0, scanFlags | SCAN_REQUIRE_KNOWN, 0); + } + } + /** * Remove disable package settings for any updated system * apps that were removed via an OTA. If they're not a @@ -6719,6 +6757,13 @@ public class PackageManagerService extends IPackageManager.Stub { // Ignore entries which are not packages continue; } + if (RegionalizationEnvironment.isSupported()) { + if (RegionalizationEnvironment.isExcludedApp(file.getName())) { + Slog.d(TAG, "Regionalization Excluded:" + file.getName()); + continue; + } + } + final File ref_file = file; final int ref_parseFlags = parseFlags; final int ref_scanFlags = scanFlags; -- GitLab From e77a5332220f87b06bfc2f551cb6a72ce4708883 Mon Sep 17 00:00:00 2001 From: Karthik Reddy Katta Date: Thu, 9 Jun 2016 12:13:17 +0530 Subject: [PATCH 090/185] frameworks/base: Adjust the index of LHR tones Adjust the index of Local Hold Recall tone types as per their sequence in tone_type array of ToneManager. CRs-Fixed: 1029731 Change-Id: I21a35f7f88c33e13b28a612840ea30f8de4839c4 --- media/java/android/media/ToneGenerator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/media/java/android/media/ToneGenerator.java b/media/java/android/media/ToneGenerator.java index 4661226cdb5c..f2b234533567 100644 --- a/media/java/android/media/ToneGenerator.java +++ b/media/java/android/media/ToneGenerator.java @@ -729,6 +729,13 @@ public class ToneGenerator */ public static final int TONE_CDMA_SIGNAL_OFF = 98; + /** + * HOLD_RECALL - 440Hz + * + * @hide #ToneGenerator(int, int) + */ + public static final int TONE_HOLD_RECALL = 99; + /** Maximum volume, for use with {@link #ToneGenerator(int,int)} */ public static final int MAX_VOLUME = 100; /** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */ -- GitLab From 283001ed8418305c5f89336ada07f662f53f6ff2 Mon Sep 17 00:00:00 2001 From: Susheel Yadagiri Date: Wed, 15 Jun 2016 18:41:44 -0700 Subject: [PATCH 091/185] Adding Synchronization for PowerManager mWakeLock. Race Condition was causing Runtime Exception in PowerManager.Lock Variable named mWakeLock. It was occuring while releasing mWakeLock. So Adding Synchronization Mechanism to Fix this Issue. Change-Id: Ic0376b702298fa45e0d1cc426abb64933bfaa8dc CRs-Fixed: 1017355 --- .../android/server/AlarmManagerService.java | 2 +- .../android/server/QCNsrmAlarmExtension.java | 24 +++++++++++-------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index c1ef2bd6a6f7..288ad25d41d7 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -133,7 +133,7 @@ class AlarmManagerService extends SystemService { private long mLastWakeup; int mBroadcastRefCount = 0; PowerManager.WakeLock mWakeLock; - private QCNsrmAlarmExtension qcNsrmExt = new QCNsrmAlarmExtension(); + private QCNsrmAlarmExtension qcNsrmExt = new QCNsrmAlarmExtension(this); boolean mLastWakeLockUnimportantForLogging; ArrayList mPendingNonWakeupAlarms = new ArrayList<>(); ArrayList mInFlight = new ArrayList<>(); diff --git a/services/core/java/com/android/server/QCNsrmAlarmExtension.java b/services/core/java/com/android/server/QCNsrmAlarmExtension.java index 56110c6c62ad..a042f720ef86 100644 --- a/services/core/java/com/android/server/QCNsrmAlarmExtension.java +++ b/services/core/java/com/android/server/QCNsrmAlarmExtension.java @@ -41,13 +41,15 @@ import java.util.TimerTask; public final class QCNsrmAlarmExtension { static final String TAG = "QCNsrmAlarmExtn"; static final boolean localLOGV = false; + private AlarmManagerService almHandle; //track the blocked and triggered uids in AlarmManagerService private static final ArrayList mTriggeredUids = new ArrayList(); private static final ArrayList mBlockedUids = new ArrayList(); private static final int BLOCKED_UID_CHECK_INTERVAL = 1000; // 1 sec. - public QCNsrmAlarmExtension() { + public QCNsrmAlarmExtension(AlarmManagerService handle) { + almHandle = handle; } //AlarmManagerService extension Methods @@ -65,9 +67,9 @@ public final class QCNsrmAlarmExtension { mBlockedUids.add(new Integer(uid)); Timer checkBlockedUidTimer = new Timer(); checkBlockedUidTimer.schedule( new CheckBlockedUidTimerTask( - uid, - mWakeLock - ),BLOCKED_UID_CHECK_INTERVAL); + uid, + mWakeLock), + BLOCKED_UID_CHECK_INTERVAL); } else { if (localLOGV) Slog.v(TAG, "clearing alarmMgr mBlockedUids "); mBlockedUids.clear(); @@ -103,14 +105,16 @@ public final class QCNsrmAlarmExtension { @Override public void run(){ if (mBlockedUids.contains(mUid) && mTriggeredUids.contains(mUid)) { - if (mWakeLock.isHeld()) { - mWakeLock.release(); - if (localLOGV) - Slog.v(TAG, "CheckBlockedUidTimerTask: AM WakeLock "+ - "Released Internally!!"); + synchronized(almHandle.mLock) { + if (mWakeLock.isHeld()) { + mWakeLock.release(); + if (localLOGV) + Slog.v(TAG, "CheckBlockedUidTimerTask: AM "+ + "WakeLock Released Internally!!"); + } } + return; } - return; } } } -- GitLab From 2f1b28122493a80448f3af499d660a5b7cbaa879 Mon Sep 17 00:00:00 2001 From: zfu Date: Thu, 16 Jun 2016 16:58:29 +0800 Subject: [PATCH 092/185] Set animation scale values for specific activity. Reducing animation scale values for some specific activity can improve performance. This is no impact for UE. There is whitelist.xml to maintain the activities which have no impact when animation scale values are changed. Change-Id: I1b02f05fc287b587201a1e533bf870b889c07b04 CRs-Fixed: 1036319 --- .../android/internal/app/ActivityTrigger.java | 8 +++- ...m_android_internal_app_ActivityTrigger.cpp | 34 ++++++++++++-- .../server/wm/WindowManagerService.java | 45 +++++++++++++++++-- 3 files changed, 79 insertions(+), 8 deletions(-) diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java index dea449ec6b4f..c6682cb75f57 100644 --- a/core/java/com/android/internal/app/ActivityTrigger.java +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -106,10 +106,16 @@ public class ActivityTrigger native_at_stopActivity(activity); } + /** &hide */ + public float animationScalesCheck(String activity, int scaleType) { + return native_at_animationScalesCheck(activity, scaleType); + } + private native int native_at_startActivity(String activity, int flags); private native void native_at_resumeActivity(String activity); private native void native_at_pauseActivity(String activity); private native void native_at_stopActivity(String activity); private native void native_at_deinit(); private native void native_at_startProcessActivity(String process, int pid); -} + private native float native_at_animationScalesCheck(String activity, int scaleType); +} \ No newline at end of file diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp index 3d1d013d154a..795751121527 100644 --- a/core/jni/com_android_internal_app_ActivityTrigger.cpp +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -56,6 +56,7 @@ typedef struct dlLibHandler { void (*resumeActivity)(const char *); void (*pauseActivity)(const char *); void (*stopActivity)(const char *); + void (*animationScalesCheck)(const char *, int, float *); void (*init)(void); void (*deinit)(void); void (*startProcessActivity)(const char *, int); @@ -67,9 +68,9 @@ typedef struct dlLibHandler { * library -both handlers for Start and Resume events. */ static dlLibHandler mDlLibHandlers[] = { - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.at_library"}, - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.gt_library"}, }; @@ -142,6 +143,12 @@ com_android_internal_app_ActivityTrigger_native_at_init() errored = true; } } + if (!errored) { + *(void **) (&mDlLibHandlers[i].animationScalesCheck) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_animationScalesCheck"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } if (errored) { mDlLibHandlers[i].startActivity = NULL; @@ -149,6 +156,7 @@ com_android_internal_app_ActivityTrigger_native_at_init() mDlLibHandlers[i].pauseActivity = NULL; mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; + mDlLibHandlers[i].animationScalesCheck = NULL; if (mDlLibHandlers[i].dlhandle) { dlclose(mDlLibHandlers[i].dlhandle); mDlLibHandlers[i].dlhandle = NULL; @@ -172,6 +180,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c mDlLibHandlers[i].pauseActivity = NULL; mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; + mDlLibHandlers[i].animationScalesCheck = NULL; *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit"); if (mDlLibHandlers[i].deinit) { @@ -258,6 +267,24 @@ com_android_internal_app_ActivityTrigger_native_at_stopActivity(JNIEnv *env, job } } } + +static jfloat +com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck(JNIEnv *env, jobject clazz, jstring activity, jint scaleType) +{ + int type = scaleType; + float scaleValue = -1.0f; + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + for (size_t i = 0; i < numlibs; i++) { + if (mDlLibHandlers[i].animationScalesCheck && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (actStr) { + (*mDlLibHandlers[i].animationScalesCheck)(actStr, type, &scaleValue); + env->ReleaseStringUTFChars(activity, actStr); + } + } + } + return scaleValue; +} // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { @@ -267,6 +294,7 @@ static JNINativeMethod gMethods[] = { {"native_at_stopActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_stopActivity}, {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity}, + {"native_at_animationScalesCheck", "(Ljava/lang/String;I)F", (void *)com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck}, }; @@ -278,4 +306,4 @@ int register_com_android_internal_app_ActivityTrigger(JNIEnv *env) "com/android/internal/app/ActivityTrigger", gMethods, NELEM(gMethods)); } -} // namespace android +} // namespace android \ No newline at end of file diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 36875123d42c..9e0279d6333f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -122,6 +122,7 @@ import android.view.animation.Animation; import android.view.inputmethod.InputMethodManagerInternal; import com.android.internal.R; +import com.android.internal.app.ActivityTrigger; import com.android.internal.app.IAssistScreenshotReceiver; import com.android.internal.os.IResultReceiver; import com.android.internal.policy.IShortcutService; @@ -256,7 +257,10 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean PROFILE_ORIENTATION = false; static final boolean localLOGV = DEBUG; - + static final boolean mEnableAnimCheck = SystemProperties.getBoolean("persist.animcheck.enable", false); + static ActivityTrigger mActivityTrigger = new ActivityTrigger(); + static WindowState mFocusingWindow; + String mFocusingActivity; /** How much to multiply the policy's type layer, to reserve room * for multiple windows of the same type and Z-ordering adjustment * with TYPE_LAYER_OFFSET. */ @@ -1860,6 +1864,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState attachedWindow = null; long origId; final int type = attrs.type; + mFocusingActivity = attrs.getTitle().toString(); synchronized(mWindowMap) { if (!mDisplayReady) { @@ -5549,12 +5554,38 @@ public class WindowManagerService extends IWindowManager.Stub ValueAnimator.setDurationScale(scale); } + private float animationScalesCheck (int which) { + float value = -1.0f; + if (!mAnimationsDisabled) { + if (mEnableAnimCheck) { + if (mFocusingActivity != null) { + if (mActivityTrigger == null) { + mActivityTrigger = new ActivityTrigger(); + } + if (mActivityTrigger != null) { + value = mActivityTrigger.animationScalesCheck(mFocusingActivity, which); + } + } + } + if (value == -1.0f) { + switch (which) { + case WINDOW_ANIMATION_SCALE: value = mWindowAnimationScaleSetting; break; + case TRANSITION_ANIMATION_SCALE: value = mTransitionAnimationScaleSetting; break; + case ANIMATION_DURATION_SCALE: value = mAnimatorDurationScaleSetting; break; + } + } + } else { + value = 0; + } + return value; + } + public float getWindowAnimationScaleLocked() { - return mAnimationsDisabled ? 0 : mWindowAnimationScaleSetting; + return animationScalesCheck(WINDOW_ANIMATION_SCALE); } public float getTransitionAnimationScaleLocked() { - return mAnimationsDisabled ? 0 : mTransitionAnimationScaleSetting; + return animationScalesCheck(TRANSITION_ANIMATION_SCALE); } @Override @@ -5576,7 +5607,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public float getCurrentAnimatorScale() { synchronized(mWindowMap) { - return mAnimationsDisabled ? 0 : mAnimatorDurationScaleSetting; + return animationScalesCheck(ANIMATION_DURATION_SCALE); } } @@ -9693,6 +9724,12 @@ public class WindowManagerService extends IWindowManager.Stub // No focus for you!!! if (localLOGV || DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "findFocusedWindow: Reached focused app=" + mFocusedApp); + if (mFocusedApp.hasWindowsAlive()) { + mFocusingWindow = mFocusedApp.findMainWindow(); + if (mFocusingWindow != null) { + mFocusingActivity = mFocusingWindow.mAttrs.getTitle().toString(); + } + } return null; } } -- GitLab From d841ef6271723021a663243ff34284a33a15cebf Mon Sep 17 00:00:00 2001 From: zfu Date: Tue, 21 Jun 2016 12:45:02 +0800 Subject: [PATCH 093/185] add network related API into ActivityTrigger This API is used for specific apps, which have high requirement for the quality of mobile network. AMS is the right client to trigger this feature. Hooks are added in several senarios in AMS: 1.app start. 2.app die. 3.device goes to sleep mode. 4.device is in Keyguard mode. 5.WIFI/MOBILE switch. 6.Aipplane mode switch. Change-Id: I322737edc4d343c36445c91d60d9fb2abe127e75 CRs-Fixed: 1036319 --- .../android/internal/app/ActivityTrigger.java | 6 ++ ...m_android_internal_app_ActivityTrigger.cpp | 31 +++++++- .../server/am/ActivityManagerService.java | 70 +++++++++++++++++++ 3 files changed, 104 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java index c6682cb75f57..8186701157ff 100644 --- a/core/java/com/android/internal/app/ActivityTrigger.java +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -111,6 +111,11 @@ public class ActivityTrigger return native_at_animationScalesCheck(activity, scaleType); } + /** &hide */ + public void networkOptsCheck (int flag, int netType, String packageName) { + native_at_networkOptsCheck(flag, netType, packageName); + } + private native int native_at_startActivity(String activity, int flags); private native void native_at_resumeActivity(String activity); private native void native_at_pauseActivity(String activity); @@ -118,4 +123,5 @@ public class ActivityTrigger private native void native_at_deinit(); private native void native_at_startProcessActivity(String process, int pid); private native float native_at_animationScalesCheck(String activity, int scaleType); + private native void native_at_networkOptsCheck(int flag, int netType, String packageName); } \ No newline at end of file diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp index 795751121527..26381e440a6a 100644 --- a/core/jni/com_android_internal_app_ActivityTrigger.cpp +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -57,6 +57,7 @@ typedef struct dlLibHandler { void (*pauseActivity)(const char *); void (*stopActivity)(const char *); void (*animationScalesCheck)(const char *, int, float *); + void (*networkOptsCheck)(int, int, const char *); void (*init)(void); void (*deinit)(void); void (*startProcessActivity)(const char *, int); @@ -68,9 +69,9 @@ typedef struct dlLibHandler { * library -both handlers for Start and Resume events. */ static dlLibHandler mDlLibHandlers[] = { - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.at_library"}, - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "ro.vendor.gt_library"}, }; @@ -149,7 +150,12 @@ com_android_internal_app_ActivityTrigger_native_at_init() errored = true; } } - + if (!errored) { + *(void **) (&mDlLibHandlers[i].networkOptsCheck) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_networkOptsCheck"); + if ((rc = dlerror()) != NULL) { + errored = true; + } + } if (errored) { mDlLibHandlers[i].startActivity = NULL; mDlLibHandlers[i].resumeActivity = NULL; @@ -157,6 +163,7 @@ com_android_internal_app_ActivityTrigger_native_at_init() mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; mDlLibHandlers[i].animationScalesCheck = NULL; + mDlLibHandlers[i].networkOptsCheck = NULL; if (mDlLibHandlers[i].dlhandle) { dlclose(mDlLibHandlers[i].dlhandle); mDlLibHandlers[i].dlhandle = NULL; @@ -181,6 +188,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c mDlLibHandlers[i].stopActivity = NULL; mDlLibHandlers[i].startProcessActivity = NULL; mDlLibHandlers[i].animationScalesCheck = NULL; + mDlLibHandlers[i].networkOptsCheck = NULL; *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit"); if (mDlLibHandlers[i].deinit) { @@ -285,6 +293,22 @@ com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck(JNIEnv * } return scaleValue; } + +static void +com_android_internal_app_ActivityTrigger_native_at_networkOptsCheck(JNIEnv *env, jobject clazz, jint flag, jint netType, jstring packageName) +{ + size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers); + + for (size_t i = 0; i < numlibs; i++) { + if (mDlLibHandlers[i].networkOptsCheck && packageName) { + const char *actStr = env->GetStringUTFChars(packageName, NULL); + if (actStr) { + (*mDlLibHandlers[i].networkOptsCheck)(flag, netType, actStr); + env->ReleaseStringUTFChars(packageName, actStr); + } + } + } +} // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { @@ -295,6 +319,7 @@ static JNINativeMethod gMethods[] = { {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity}, {"native_at_animationScalesCheck", "(Ljava/lang/String;I)F", (void *)com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck}, + {"native_at_networkOptsCheck", "(IILjava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_networkOptsCheck}, }; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 5e3e42cf073e..76a52c216358 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -150,6 +150,8 @@ import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; import android.location.LocationManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Proxy; import android.net.ProxyInfo; import android.net.Uri; @@ -1550,6 +1552,9 @@ public final class ActivityManagerService extends ActivityManagerNative boolean mEnableBServicePropagation = SystemProperties.getBoolean("ro.sys.fw.bservice_enable", false); + static final boolean mEnableNetOpts = + SystemProperties.getBoolean("persist.netopts.enable",false); + /** * Flag whether the current user is a "monkey", i.e. whether * the UI is driven by a UI automation tool. @@ -2929,6 +2934,25 @@ public final class ActivityManagerService extends ActivityManagerNative return mAppBindArgs; } + private final void networkOptsCheck(int flag, String packageName) { + ConnectivityManager connectivityManager = + (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager != null) { + NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo(); + if (netInfo != null) { + /* netType: 0 for Mobile, 1 for WIFI*/ + int netType = netInfo.getType(); + if (mActivityTrigger != null) { + mActivityTrigger.networkOptsCheck(flag, netType, packageName); + } + } else { + if (mActivityTrigger != null) { + mActivityTrigger.networkOptsCheck(flag, ConnectivityManager.TYPE_NONE, packageName); + } + } + } + } + boolean setFocusedActivityLocked(ActivityRecord r, String reason) { if (r == null || mFocusedActivity == r) { return false; @@ -2948,6 +2972,10 @@ public final class ActivityManagerService extends ActivityManagerNative final ActivityRecord last = mFocusedActivity; mFocusedActivity = r; + if (mEnableNetOpts) { + networkOptsCheck(0, r.processName); + } + if (r.task.isApplicationTask()) { if (mCurAppTimeTracker != r.appTimeTracker) { // We are switching app tracking. Complete the current one. @@ -5189,6 +5217,9 @@ public final class ActivityManagerService extends ActivityManagerNative Slog.i(TAG, "Process " + app.processName + " (pid " + pid + ") has died"); mAllowLowerMemLevel = true; + if (mEnableNetOpts) { + networkOptsCheck(1, app.processName); + } } else { // Note that we always want to do oom adj to update our state with the // new number of procs. @@ -6781,6 +6812,27 @@ public final class ActivityManagerService extends ActivityManagerNative } }, dumpheapFilter); + if (mEnableNetOpts) { + IntentFilter netInfoFilter = new IntentFilter(); + netInfoFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + netInfoFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + ActivityStack stack = mStackSupervisor.getLastStack(); + if (stack != null) { + ActivityRecord r = stack.topRunningActivityLocked(); + if (r != null) { + PowerManager powerManager = + (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); + if (powerManager != null && powerManager.isInteractive()) + networkOptsCheck(0, r.processName); + } + } + } + }, netInfoFilter); + } + // Let system services know. mSystemServiceManager.startBootPhase(SystemService.PHASE_BOOT_COMPLETED); @@ -21623,6 +21675,15 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (ActivityManagerService.this) { SleepTokenImpl token = new SleepTokenImpl(tag); mSleepTokens.add(token); + if (mEnableNetOpts) { + ActivityStack stack = mStackSupervisor.getLastStack(); + if (stack != null) { + ActivityRecord r = stack.topRunningActivityLocked(); + if (r != null) { + networkOptsCheck(1, r.processName); + } + } + } updateSleepIfNeededLocked(); return token; } @@ -21747,6 +21808,15 @@ public final class ActivityManagerService extends ActivityManagerNative public void release() { synchronized (ActivityManagerService.this) { if (mSleepTokens.remove(this)) { + if (mEnableNetOpts) { + ActivityStack stack = mStackSupervisor.getLastStack(); + if (stack != null) { + ActivityRecord r = stack.topRunningActivityLocked(); + if (r != null) { + networkOptsCheck(0, r.processName); + } + } + } updateSleepIfNeededLocked(); } } -- GitLab From 3cae949c9c558837c967eeee0b5eb66d3a219eba Mon Sep 17 00:00:00 2001 From: Anju Mathapati Date: Sat, 10 Oct 2015 02:23:59 -0700 Subject: [PATCH 094/185] IMS: Changes for VICE FR - Extra for CallPull in - - TelephonyProperties - ImsProfile - Error codes in ImsReasonInfo Change-Id: Iedb0632ed585548b06ae7300584192d3031682f5 CRs-Fixed: 1036618 --- .../android/internal/telephony/TelephonyProperties.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/telephony/java/com/android/internal/telephony/TelephonyProperties.java b/telephony/java/com/android/internal/telephony/TelephonyProperties.java index 1d142e7f9f59..9674016786e1 100644 --- a/telephony/java/com/android/internal/telephony/TelephonyProperties.java +++ b/telephony/java/com/android/internal/telephony/TelephonyProperties.java @@ -248,4 +248,13 @@ public interface TelephonyProperties * if false: normal dial */ static final String ADD_PARTICIPANT_KEY = "add_participant"; + + /* + * For VICE Feature + * If true: Dial intent is for call pull functionality + * if false: normal dial + */ + static final String EXTRA_IS_CALL_PULL = + "org.codeaurora.extra.IS_CALL_PULL"; + } -- GitLab From e3464af6e910733a524075e99d36858085f5305c Mon Sep 17 00:00:00 2001 From: Preetam Singh Ranawat Date: Tue, 1 Sep 2015 14:02:09 +0530 Subject: [PATCH 095/185] audio: register for device shutdown notification - Device shutdown notification has to be intimated to HAL - Add changes to register for device shutdown notification CRs-fixed: 1034581 Conflicts: services/core/java/com/android/server/audio/AudioService.java Change-Id: I966795640d4cc5a4d3f9d247e8a6bc00b3a7b750 --- services/core/java/com/android/server/audio/AudioService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 8b6fe1467f38..deb6bc187637 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -716,6 +716,7 @@ public class AudioService extends IAudioService.Stub { intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); + intentFilter.addAction(Intent.ACTION_SHUTDOWN); // TODO merge orientation and rotation mMonitorOrientation = SystemProperties.getBoolean("ro.audio.monitorOrientation", false); if (mMonitorOrientation) { @@ -5550,6 +5551,8 @@ public class AudioService extends IAudioService.Stub { state == BluetoothAdapter.STATE_TURNING_OFF) { disconnectAllBluetoothProfiles(); } + } else if (action.equals(Intent.ACTION_SHUTDOWN)) { + AudioSystem.setParameters("dev_shutdown=true"); } } } // end class AudioServiceBroadcastReceiver -- GitLab From 9b0499db993e2bb471cb88f6d1ce69ce5262b225 Mon Sep 17 00:00:00 2001 From: Devi Sandeep Endluri V V Date: Wed, 27 Apr 2016 22:38:25 +0530 Subject: [PATCH 096/185] server: add network stat plugin framework Enable custom network statistics plugin framework. Use platform specific custom implementation to compute network stats and enforce quota for user Change-Id: Ie711ec0bbd58bf72c2b3450708768a02cfbba2f8 server: modify network stat plugin framework Add setUpstream function from Tethering to handle IPv6-only Tethering. Change-Id: I38392d0678df027c54469564746ee5d9897f5829 frameworks: Avoid calling API if jar loading fails Even if the ConnectivityExt jar file is not present, APIs are getting called resulting in page faults. Avoid calling APIs if ConnectivityExt jar file is not present or the jar loading fails. Change-Id: Ie0983c03f8d35aa11cb86e19244b6aac529ac099 server: enhance network stat plugin framework Add peekTetherStats function for third party apps to query current hardware statistics. This API is necessary to allow third party applications to inquire about hardware statistics without affecting NetworkStatsService accounting. Change-Id: I90633585c8af6983f64ac78a77ee0419731a2a44 server: Whitelist non-INTERNET/non-CELLULAR Network for metering Avoid setting a quota or counting statistics for non-internet and non-cellular Networks. Fixes an issue with metering feature where mobile data usage is incorrectly applied to IMS or other non-internet PDN. Change-Id: Ib68f5e560ea1dd230747e4f367081501b70cfc60 Related CRs: 878013 959359 936622 984228 998263 984189 CRs-Fixed: 994082 Change-Id: Ie711ec0bbd58bf72c2b3450708768a02cfbba2f8 --- .../com/android/server/NetPluginDelegate.java | 136 ++++++++++++++++++ .../server/connectivity/Tethering.java | 4 +- .../net/NetworkPolicyManagerService.java | 10 +- .../server/net/NetworkStatsService.java | 9 +- 4 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 services/core/java/com/android/server/NetPluginDelegate.java diff --git a/services/core/java/com/android/server/NetPluginDelegate.java b/services/core/java/com/android/server/NetPluginDelegate.java new file mode 100644 index 000000000000..df36fec95c8f --- /dev/null +++ b/services/core/java/com/android/server/NetPluginDelegate.java @@ -0,0 +1,136 @@ +/* + *Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * + *Redistribution and use in source and binary forms, with or without + *modification, are permitted provided that the following conditions are + *met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + *ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + *BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + *IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.server; + +import dalvik.system.PathClassLoader; + +import java.io.File; +import java.lang.reflect.Constructor; + +import android.util.Slog; +import android.net.Network; +import android.net.NetworkStats; +import android.util.Log; + +public class NetPluginDelegate { + + private static final String TAG = "ConnectivityExtension"; + private static final boolean LOGV = false; + + private static Class tetherExtensionClass = null; + private static Object tetherExtensionObj = null; + + public static void getTetherStats(NetworkStats uidStats, NetworkStats devStats, + NetworkStats xtStats) { + if (LOGV) Slog.v(TAG, "getTetherStats() E"); + if(!loadTetherExtJar()) return; + try { + tetherExtensionClass.getMethod("getTetherStats", NetworkStats.class, + NetworkStats.class, NetworkStats.class).invoke(tetherExtensionObj, uidStats, + devStats, xtStats); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "error in invoke method"); + } + if (LOGV) Slog.v(TAG, "getTetherStats() X"); + } + + public static NetworkStats peekTetherStats() { + if (LOGV) Slog.v(TAG, "peekTetherStats() E"); + NetworkStats ret_val = null; + if(!loadTetherExtJar()) return ret_val; + try { + ret_val = (NetworkStats) tetherExtensionClass.getMethod("peekTetherStats") + .invoke(tetherExtensionObj); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "error in invoke method"); + } + if (LOGV) Slog.v(TAG, "peekTetherStats() X"); + return ret_val; + } + + public static void setQuota(String iface, long quota) { + if (LOGV) Slog.v(TAG, "setQuota(" + iface + ", " + quota + ") E"); + if(!loadTetherExtJar()) return; + try { + tetherExtensionClass.getMethod("setQuota", String.class, long.class).invoke( + tetherExtensionObj, iface, quota); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "Error calling setQuota Method on extension jar"); + } + if (LOGV) Slog.v(TAG, "setQuota(" + iface + ", " + quota + ") X"); + } + + public static void setUpstream(Network net) { + if (LOGV) Slog.v(TAG, "setUpstream(" + net + ") E"); + if(!loadTetherExtJar()) return; + try { + tetherExtensionClass.getMethod("setUpstream", Network.class).invoke( + tetherExtensionObj, net); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "Error calling setUpstream Method on extension jar"); + } + if (LOGV) Slog.v(TAG, "setUpstream(" + net + ") X"); + } + + + private static boolean loadTetherExtJar() { + final String realProvider = "com.qualcomm.qti.tetherstatsextension.TetherStatsReporting"; + final String realProviderPath = "/system/framework/ConnectivityExt.jar"; + if (tetherExtensionClass != null && tetherExtensionObj != null) { + return true; + } + boolean pathExists = new File(realProviderPath).exists(); + if (!pathExists) { + Log.w(TAG, "ConnectivityExt jar file not present"); + return false; + } + + if (tetherExtensionClass == null && tetherExtensionObj == null) { + if (LOGV) Slog.v(TAG, "loading ConnectivityExt jar"); + try { + PathClassLoader classLoader = new PathClassLoader(realProviderPath, + ClassLoader.getSystemClassLoader()); + + tetherExtensionClass = classLoader.loadClass(realProvider); + tetherExtensionObj = tetherExtensionClass.newInstance(); + if (LOGV) Slog.v(TAG, "ConnectivityExt jar loaded"); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "unable to load ConnectivityExt jar"); + return false; + } + } + return true; + } +} diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 0454dd663a4a..c83f6fe94595 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -70,6 +70,7 @@ import com.android.internal.util.Protocol; import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.server.IoThread; +import com.android.server.NetPluginDelegate; import com.android.server.net.BaseNetworkObserver; import java.io.FileDescriptor; @@ -1730,6 +1731,8 @@ public class Tethering extends BaseNetworkObserver { } if (upType != ConnectivityManager.TYPE_NONE) { + Network network = getConnectivityManager().getNetworkForType(upType); + NetPluginDelegate.setUpstream(network); LinkProperties linkProperties = getConnectivityManager().getLinkProperties(upType); if (linkProperties != null) { @@ -1748,7 +1751,6 @@ public class Tethering extends BaseNetworkObserver { } if (iface != null) { - Network network = getConnectivityManager().getNetworkForType(upType); if (network == null) { Log.e(TAG, "No Network for upstream type " + upType + "!"); } diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 228c015b30e8..e24a33a8142c 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -116,6 +116,7 @@ import android.net.INetworkPolicyListener; import android.net.INetworkPolicyManager; import android.net.INetworkStatsService; import android.net.LinkProperties; +import android.net.NetworkCapabilities; import android.net.NetworkIdentity; import android.net.NetworkInfo; import android.net.NetworkPolicy; @@ -171,6 +172,7 @@ import com.android.server.DeviceIdleController; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.SystemConfig; +import com.android.server.NetPluginDelegate; import libcore.io.IoUtils; @@ -1214,7 +1216,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final ArrayList> connIdents = new ArrayList<>(states.length); final ArraySet connIfaces = new ArraySet(states.length); for (NetworkState state : states) { - if (state.networkInfo != null && state.networkInfo.isConnected()) { + if (state.networkInfo != null && state.networkInfo.isConnected() + && (state.networkCapabilities == null + || !state.networkCapabilities.hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR) + || state.networkCapabilities.hasCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET))) { final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state); final String baseIface = state.linkProperties.getInterfaceName(); @@ -3270,6 +3277,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private void setInterfaceQuota(String iface, long quotaBytes) { try { mNetworkManager.setInterfaceQuota(iface, quotaBytes); + NetPluginDelegate.setQuota(iface, quotaBytes); } catch (IllegalStateException e) { Log.wtf(TAG, "problem setting interface quota", e); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 23c111e56cde..66f51c15190c 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -79,6 +79,7 @@ import android.net.INetworkManagementEventObserver; import android.net.INetworkStatsService; import android.net.INetworkStatsSession; import android.net.LinkProperties; +import android.net.NetworkCapabilities; import android.net.NetworkIdentity; import android.net.NetworkInfo; import android.net.NetworkState; @@ -120,6 +121,7 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.FileRotator; import com.android.internal.util.IndentingPrintWriter; import com.android.server.EventLogTags; +import com.android.server.NetPluginDelegate; import com.android.server.connectivity.Tethering; import java.io.File; @@ -957,7 +959,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub { final ArraySet mobileIfaces = new ArraySet<>(); for (NetworkState state : states) { - if (state.networkInfo.isConnected()) { + if (state.networkInfo.isConnected() && (state.networkCapabilities == null + || !state.networkCapabilities.hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR) + || state.networkCapabilities.hasCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET))) { final boolean isMobile = isNetworkTypeMobile(state.networkInfo.getType()); final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state); @@ -1016,6 +1022,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { devSnapshot, mActiveIfaces, null /* vpnArray */, currentTime); mXtRecorder.recordSnapshotLocked( xtSnapshot, mActiveIfaces, null /* vpnArray */, currentTime); + NetPluginDelegate.getTetherStats(uidSnapshot, xtSnapshot, devSnapshot); // For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps. VpnInfo[] vpnArray = mConnManager.getAllVpnInfo(); -- GitLab From f56206d659dd686db3f7bf3c2660609917e9777d Mon Sep 17 00:00:00 2001 From: Arusha Goyal Date: Mon, 28 Mar 2016 17:56:31 -0700 Subject: [PATCH 097/185] BoostFramework to enhance performance during critical scenarios Adding Boost APIs which can ensure the best possible resource availability during critical UX scenarios. These APIs can be either turned off or dynamically hooked to OEM specific performance optimizations Squashed with change: I90a733d7134d86efffadf6815ce3d2944dd09419 Performance: Make Cached apps limit configurable. Set it via a target specific property file. Allows flexibility to set the limit based on device config Normally, setting a smaller value for low-end device helps with performance. Conflicts: core/res/res/values/symbols.xml Change-Id: I51a83708d145ab8fd780b10c33d40db1291d6edd --- core/java/android/app/Activity.java | 34 ++++ core/java/android/util/BoostFramework.java | 148 ++++++++++++++++++ core/java/android/widget/OverScroller.java | 48 ++++++ core/java/android/widget/Scroller.java | 36 +++++ core/res/res/values/config.xml | 36 +++++ core/res/res/values/symbols.xml | 37 +++++ .../systemui/statusbar/phone/PanelView.java | 24 +++ .../com/android/server/am/ActivityStack.java | 23 ++- .../server/am/ActivityStackSupervisor.java | 63 ++++++++ .../com/android/server/am/ProcessList.java | 2 +- 10 files changed, 449 insertions(+), 2 deletions(-) create mode 100644 core/java/android/util/BoostFramework.java diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index ae3e0ce201a4..612837e835c5 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -127,6 +127,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import android.util.BoostFramework; /** * An activity is a single, focused thing that the user can do. Almost all @@ -689,6 +690,10 @@ public class Activity extends ContextThemeWrapper OnCreateContextMenuListener, ComponentCallbacks2, Window.OnWindowDismissedCallback, WindowControllerCallback { private static final String TAG = "Activity"; + private static BoostFramework mPerf = null; + private static int mDragBoostPossible = -1; + private static int mPerfLockDuration = -1; + private static int mAsParamVal[]; private static final boolean DEBUG_LIFECYCLE = false; /** Standard activity result: operation canceled. */ @@ -3055,6 +3060,35 @@ public class Activity extends ContextThemeWrapper * @return boolean Return true if this event was consumed. */ public boolean dispatchTouchEvent(MotionEvent ev) { + if(mDragBoostPossible == -1) { + mDragBoostPossible = 0; + String currentActivity = getPackageName(); + String[] activityList = getResources().getStringArray( + com.android.internal.R.array.boost_activityList); + if(activityList != null){ + for (String match : activityList) { + if (currentActivity.indexOf(match) != -1){ + mDragBoostPossible = 1; + break; + } + } + } + } + if (mDragBoostPossible == 1) { + if (mPerf == null){ + mPerf = new BoostFramework(); + } + if(mPerfLockDuration == -1){ + mPerfLockDuration = getResources().getInteger( + com.android.internal.R.integer.ascrollboost_timeout); + mAsParamVal = getResources().getIntArray( + com.android.internal.R.array.ascrollboost_param_value); + } + mPerf.perfLockAcquireTouch(ev, + getResources().getDisplayMetrics(), + mPerfLockDuration, mAsParamVal); + } + if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java new file mode 100644 index 000000000000..badbda5ff496 --- /dev/null +++ b/core/java/android/util/BoostFramework.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package android.util; + +import android.util.Log; +import dalvik.system.PathClassLoader; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.System; +import android.view.MotionEvent; +import android.util.DisplayMetrics; + +/** @hide */ +public class BoostFramework { + + private static final String TAG = "BoostFramework"; + private static final String PERFORMANCE_JAR = "/system/framework/QPerformance.jar"; + private static final String PERFORMANCE_CLASS = "com.qualcomm.qti.Performance"; + +/** @hide */ + private static boolean mIsLoaded = false; + private static Method mAcquireFunc = null; + private static Method mReleaseFunc = null; + private static Method mAcquireTouchFunc = null; + private static Constructor mConstructor = null; + +/** @hide */ + private Object mPerf = null; + +/** @hide */ + public BoostFramework() { + + if (mIsLoaded == false) { + try { + Class perfClass; + PathClassLoader perfClassLoader; + + perfClassLoader = new PathClassLoader(PERFORMANCE_JAR, + ClassLoader.getSystemClassLoader()); + perfClass = perfClassLoader.loadClass(PERFORMANCE_CLASS); + mConstructor = perfClass.getConstructor(); + + Class[] argClasses = new Class[] {int.class, int[].class}; + mAcquireFunc = perfClass.getDeclaredMethod("perfLockAcquire", argClasses); + Log.v(TAG,"mAcquireFunc method = " + mAcquireFunc); + + argClasses = new Class[] {}; + mReleaseFunc = perfClass.getDeclaredMethod("perfLockRelease", argClasses); + Log.v(TAG,"mReleaseFunc method = " + mReleaseFunc); + + argClasses = new Class[] {MotionEvent.class, DisplayMetrics.class, int.class, int[].class}; + mAcquireTouchFunc = perfClass.getDeclaredMethod("perfLockAcquireTouch", argClasses); + Log.v(TAG,"mAcquireTouchFunc method = " + mAcquireTouchFunc); + + mIsLoaded = true; + } + catch(Exception e) { + Log.e(TAG,"BoostFramework() : Exception_1 = " + e); + } + } + + try { + if (mConstructor != null) { + mPerf = mConstructor.newInstance(); + } + } + catch(Exception e) { + Log.e(TAG,"BoostFramework() : Exception_2 = " + e); + } + + Log.v(TAG,"BoostFramework() : mPerf = " + mPerf); + } + +/** @hide */ +/* private static void loadNative() { + if(!isLoaded){ + //System.loadLibrary("perf_jni"); + System.loadLibrary("qti_performance"); + isLoaded=true; + } + return; + } +*/ + +/** @hide */ + public int perfLockAcquire(int duration, int... list) { + int ret = -1; + try { + Object retVal = mAcquireFunc.invoke(mPerf, duration, list); + ret = (int)retVal; + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return ret; + } + +/** @hide */ + public int perfLockRelease() { + int ret = -1; + try { + Object retVal = mReleaseFunc.invoke(mPerf); + ret = (int)retVal; + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return ret; + } +/** @hide */ + public int perfLockAcquireTouch(MotionEvent ev, DisplayMetrics metrics, + int duration, int... list) { + int ret = -1; + try { + Object retVal = mAcquireTouchFunc.invoke(mPerf, ev, metrics, duration, list); + ret = (int)retVal; + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return ret; + } + +}; diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java index 50569d7e8f72..ba5d39e722eb 100644 --- a/core/java/android/widget/OverScroller.java +++ b/core/java/android/widget/OverScroller.java @@ -22,6 +22,7 @@ import android.util.Log; import android.view.ViewConfiguration; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import android.util.BoostFramework; /** * This class encapsulates scrolling with the ability to overshoot the bounds @@ -599,6 +600,18 @@ public class OverScroller { private static final int CUBIC = 1; private static final int BALLISTIC = 2; + /* + * Perf boost related variables + * Enabled/Disabled using config_enableCpuBoostForOverScrollerFling + * true value turns it on, by default will be turned off + */ + private BoostFramework mPerf = null; + private boolean mIsPerfLockAcquired = false; + private boolean mIsPerfBoostEnabled = false; + private int fBoostTimeOut = 0; + private int flingBoostTimeOut = 0; + private int fBoostParamVal[]; + static { float x_min = 0.0f; float y_min = 0.0f; @@ -643,6 +656,19 @@ public class OverScroller { * 39.37f // inch/meter * ppi * 0.84f; // look and feel tuning + + mIsPerfBoostEnabled = context.getResources().getBoolean( + com.android.internal.R.bool.config_enableCpuBoostForOverScrollerFling); + if (mIsPerfBoostEnabled) { + fBoostTimeOut = context.getResources().getInteger( + com.android.internal.R.integer.flingboost_timeout_param); + fBoostParamVal = context.getResources().getIntArray( + com.android.internal.R.array.flingboost_param_value); + } + + if (mPerf == null && mIsPerfBoostEnabled) { + mPerf = new BoostFramework(); + } } void updateScroll(float q) { @@ -690,6 +716,11 @@ public class OverScroller { } void finish() { + if (mIsPerfLockAcquired && mPerf != null) { + mPerf.perfLockRelease(); + mIsPerfLockAcquired = false; + } + mCurrentPosition = mFinal; // Not reset since WebView relies on this value for fast fling. // TODO: restore when WebView uses the fast fling implemented in this class. @@ -749,6 +780,11 @@ public class OverScroller { mStartTime = AnimationUtils.currentAnimationTimeMillis(); mCurrentPosition = mStart = start; + if (mIsPerfLockAcquired && mPerf != null) { + mPerf.perfLockRelease(); + mIsPerfLockAcquired = false; + } + if (start > max || start < min) { startAfterEdge(start, min, max, velocity); return; @@ -913,6 +949,18 @@ public class OverScroller { return false; } + if (mPerf != null && !mIsPerfLockAcquired) { + mIsPerfLockAcquired = true; + if (0 == fBoostTimeOut) { + //config value is not defined + flingBoostTimeOut = mDuration; + } else { + //config value is present + flingBoostTimeOut = fBoostTimeOut; + } + mPerf.perfLockAcquire(flingBoostTimeOut, fBoostParamVal); + } + double distance = 0.0; switch (mState) { case SPLINE: { diff --git a/core/java/android/widget/Scroller.java b/core/java/android/widget/Scroller.java index 357c9c36936b..d0ba9e68a63f 100644 --- a/core/java/android/widget/Scroller.java +++ b/core/java/android/widget/Scroller.java @@ -22,6 +22,7 @@ import android.os.Build; import android.view.ViewConfiguration; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import android.util.BoostFramework; /** @@ -108,6 +109,17 @@ public class Scroller { private float mDeceleration; private final float mPpi; + /* + * Perf boost related variables + * Enabled/Disabled using config_enableCpuBoostForScroller + * true value turns it on, by default will be turned off + */ + private BoostFramework mPerf = null; + boolean bIsPerfBoostEnabled = false; + private int sBoostTimeOut = 0; + private int scrollBoostTimeOut = 0; + private int sBoostParamVal[]; + // A context-specific coefficient adjusted to physical values. private float mPhysicalCoeff; @@ -167,6 +179,7 @@ public class Scroller { * not to support progressive "flywheel" behavior in flinging. */ public Scroller(Context context, Interpolator interpolator, boolean flywheel) { + boolean bIsPerfBoostEnabled = false; mFinished = true; if (interpolator == null) { mInterpolator = new ViscousFluidInterpolator(); @@ -178,6 +191,18 @@ public class Scroller { mFlywheel = flywheel; mPhysicalCoeff = computeDeceleration(0.84f); // look and feel tuning + bIsPerfBoostEnabled = context.getResources().getBoolean( + com.android.internal.R.bool.config_enableCpuBoostForScroller); + if (bIsPerfBoostEnabled) { + sBoostTimeOut = context.getResources().getInteger( + com.android.internal.R.integer.scrollboost_timeout_param); + sBoostParamVal = context.getResources().getIntArray( + com.android.internal.R.array.scrollboost_param_value); + } + if (mPerf == null && bIsPerfBoostEnabled) { + mPerf = new BoostFramework(); + } + } /** @@ -395,6 +420,17 @@ public class Scroller { mDeltaX = dx; mDeltaY = dy; mDurationReciprocal = 1.0f / (float) mDuration; + + if ((mPerf != null) && (duration != 0)) { + if (0 == sBoostTimeOut) { + //config value is not defined + scrollBoostTimeOut = mDuration; + } else { + //config value is present + scrollBoostTimeOut = sBoostTimeOut; + } + mPerf.perfLockAcquire(scrollBoostTimeOut, sBoostParamVal); + } } /** diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 0d9fdd7c4188..fee426d40874 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2482,6 +2482,42 @@ + + false + 0 + + + + false + 0 + + + + false + 0 + + + + false + 0 + + + + false + 0 + + + + + + + + 0 + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index e4aa10361e87..7a6a19f791f0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -41,6 +41,7 @@ import com.android.systemui.doze.DozeLog; import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.HeadsUpManager; +import android.util.BoostFramework; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -88,6 +89,12 @@ public abstract class PanelView extends FrameLayout { private FlingAnimationUtils mFlingAnimationUtils; private FalsingManager mFalsingManager; + /** + * For PanelView fling perflock call + */ + private BoostFramework mPerf = null; + private int mBoostParamVal[]; + /** * Whether an instant expand request is currently pending and we are just waiting for layout. */ @@ -187,6 +194,14 @@ public abstract class PanelView extends FrameLayout { mFlingAnimationUtils = new FlingAnimationUtils(context, 0.6f); mBounceInterpolator = new BounceInterpolator(); mFalsingManager = FalsingManager.getInstance(context); + + boolean lIsPerfBoostEnabled = context.getResources().getBoolean( + com.android.internal.R.bool.config_enableCpuBoostForPanelViewFling); + if (lIsPerfBoostEnabled) { + mBoostParamVal = context.getResources().getIntArray( + com.android.internal.R.array.panelview_flingboost_param_value); + mPerf = new BoostFramework(); + } } protected void loadDimens() { @@ -667,16 +682,25 @@ public abstract class PanelView extends FrameLayout { / collapseSpeedUpFactor)); } } + if (mPerf != null) { + mPerf.perfLockAcquire(0, mBoostParamVal); + } animator.addListener(new AnimatorListenerAdapter() { private boolean mCancelled; @Override public void onAnimationCancel(Animator animation) { + if (mPerf != null) { + mPerf.perfLockRelease(); + } mCancelled = true; } @Override public void onAnimationEnd(Animator animation) { + if (mPerf != null) { + mPerf.perfLockRelease(); + } if (clearAllExpandHack && !mCancelled) { setExpandedHeightInternal(getMaxPanelHeight()); } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index f85af7e62c10..58290e705cef 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -120,7 +120,7 @@ import android.util.Log; import android.util.Slog; import android.view.Display; import com.android.internal.app.ActivityTrigger; - +import android.util.BoostFramework; import com.android.internal.app.IVoiceInteractor; import com.android.internal.content.ReferrerIntent; @@ -237,6 +237,10 @@ final class ActivityStack { final WindowManagerService mWindowManager; private final RecentTasks mRecentTasks; + public BoostFramework mPerf = null; + public boolean mIsAnimationBoostEnabled = false; + public int aBoostTimeOut = 0; + public int aBoostParamVal[]; /** * The back history of all previous (and possibly still * running) activities. It contains #TaskRecord objects. @@ -451,6 +455,14 @@ final class ActivityStack { mRecentTasks = recentTasks; mTaskPositioner = mStackId == FREEFORM_WORKSPACE_STACK_ID ? new LaunchingTaskPositioner() : null; + mIsAnimationBoostEnabled = mService.mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enablePerfBoostForAnimation); + if (mIsAnimationBoostEnabled) { + aBoostTimeOut = mService.mContext.getResources().getInteger( + com.android.internal.R.integer.animationboost_timeout_param); + aBoostParamVal = mService.mContext.getResources().getIntArray( + com.android.internal.R.array.animationboost_param_value); + } } void attachDisplay(ActivityStackSupervisor.ActivityDisplay activityDisplay, boolean onTop) { @@ -2347,6 +2359,9 @@ final class ActivityStack { // that the previous one will be hidden soon. This way it can know // to ignore it when computing the desired screen orientation. boolean anim = true; + if (mIsAnimationBoostEnabled == true && mPerf == null) { + mPerf = new BoostFramework(); + } if (prev != null) { if (prev.finishing) { if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, @@ -2358,6 +2373,9 @@ final class ActivityStack { mWindowManager.prepareAppTransition(prev.task == next.task ? TRANSIT_ACTIVITY_CLOSE : TRANSIT_TASK_CLOSE, false); + if(prev.task != next.task && mPerf != null) { + mPerf.perfLockAcquire(aBoostTimeOut, aBoostParamVal); + } } mWindowManager.setAppVisibility(prev.appToken, false); } else { @@ -2372,6 +2390,9 @@ final class ActivityStack { : next.mLaunchTaskBehind ? TRANSIT_TASK_OPEN_BEHIND : TRANSIT_TASK_OPEN, false); + if(prev.task != next.task && mPerf != null) { + mPerf.perfLockAcquire(aBoostTimeOut, aBoostParamVal); + } } } } else { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 36207c48794f..0f59fafdfa81 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -84,6 +84,7 @@ import android.view.Display; import android.view.DisplayInfo; import android.view.InputEvent; import android.view.Surface; +import android.util.BoostFramework; import com.android.internal.content.ReferrerIntent; import com.android.internal.os.TransferPipe; @@ -205,6 +206,14 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int RESUME_TOP_ACTIVITY_MSG = FIRST_SUPERVISOR_STACK_MSG + 2; static final int SLEEP_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 3; static final int LAUNCH_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 4; + public BoostFramework mPerfBoost = null; + public BoostFramework mPerfPack = null; + public boolean mIsPerfBoostEnabled = false; + public boolean mIsperfDisablepackingEnable = false; + public int lBoostTimeOut = 0; + public int lDisPackTimeOut = 0; + public int lBoostCpuParamVal[]; + public int lBoostPackParamVal[]; static final int HANDLE_DISPLAY_ADDED = FIRST_SUPERVISOR_STACK_MSG + 5; static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; @@ -487,6 +496,25 @@ public final class ActivityStackSupervisor implements DisplayListener { mHandler = new ActivityStackSupervisorHandler(mService.mHandler.getLooper()); mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext); mResizeDockedStackTimeout = new ResizeDockedStackTimeout(service, this, mHandler); + /* Is perf lock for cpu-boost enabled during App 1st launch */ + mIsPerfBoostEnabled = mService.mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableCpuBoostForAppLaunch); + mIsperfDisablepackingEnable = mService.mContext.getResources().getBoolean( + com.android.internal.R.bool.config_disablePacking); + + if(mIsPerfBoostEnabled) { + lBoostTimeOut = mService.mContext.getResources().getInteger( + com.android.internal.R.integer.launchboost_timeout_param); + lBoostCpuParamVal = mService.mContext.getResources().getIntArray( + com.android.internal.R.array.launchboost_param_value); + } + + if(mIsperfDisablepackingEnable) { + lDisPackTimeOut = mService.mContext.getResources().getInteger( + com.android.internal.R.integer.disablepacking_timeout_param); + lBoostPackParamVal = mService.mContext.getResources().getIntArray( + com.android.internal.R.array.launchboost_packing_param_value); + } } void setRecentTasks(RecentTasks recentTasks) { @@ -1840,6 +1868,14 @@ public final class ActivityStackSupervisor implements DisplayListener { void findTaskToMoveToFrontLocked(TaskRecord task, int flags, ActivityOptions options, String reason, boolean forceNonResizeable) { + + ActivityRecord top_activity; + top_activity = task.stack.topRunningActivityLocked(); + /* App is launching from recent apps and it's a new process */ + if(top_activity != null && top_activity.state == ActivityState.DESTROYED) { + acquireAppLaunchPerfLock(); + } + if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { mUserLeaving = true; } @@ -2608,6 +2644,23 @@ public final class ActivityStackSupervisor implements DisplayListener { resumeFocusedStackTopActivityLocked(); } + void acquireAppLaunchPerfLock() { + /* Acquire perf lock during new app launch */ + if (mIsperfDisablepackingEnable == true && mPerfPack == null) { + mPerfPack = new BoostFramework(); + } + if (mPerfPack != null) { + mPerfPack.perfLockAcquire(lDisPackTimeOut, lBoostPackParamVal); + } + + if (mIsPerfBoostEnabled == true && mPerfBoost == null) { + mPerfBoost = new BoostFramework(); + } + if (mPerfBoost != null) { + mPerfBoost.perfLockAcquire(lBoostTimeOut, lBoostCpuParamVal); + } + } + ActivityRecord findTaskLocked(ActivityRecord r) { mTmpFindTaskResult.r = null; mTmpFindTaskResult.matchedByRootAffinity = false; @@ -2631,10 +2684,20 @@ public final class ActivityStackSupervisor implements DisplayListener { // there is a better match in another stack. We eventually return the match based // on root affinity if we don't find a better match. if (mTmpFindTaskResult.r != null && !mTmpFindTaskResult.matchedByRootAffinity) { + if(mTmpFindTaskResult.r.state == ActivityState.DESTROYED ) { + /*It's a new app launch */ + acquireAppLaunchPerfLock(); + } return mTmpFindTaskResult.r; } } } + /* Acquire perf lock during new app launch */ + if (mTmpFindTaskResult.r == null) + acquireAppLaunchPerfLock(); + else if (mTmpFindTaskResult.r.state == ActivityState.DESTROYED) + acquireAppLaunchPerfLock(); + if (DEBUG_TASKS && mTmpFindTaskResult.r == null) Slog.d(TAG_TASKS, "No task found"); return mTmpFindTaskResult.r; } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 4cb27f477427..fd1898e63594 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -145,7 +145,7 @@ final class ProcessList { // we have no limit on the number of service, visible, foreground, or other such // processes and the number of those processes does not count against the cached // process limit. - static final int MAX_CACHED_APPS = 32; + static final int MAX_CACHED_APPS = SystemProperties.getInt("ro.sys.fw.bg_apps_limit",32); static final boolean USE_TRIM_SETTINGS = SystemProperties.getBoolean("ro.sys.fw.use_trim_settings",true); -- GitLab From 911884e18f8e7ec76bf9db5ea9a91e6f0d65ba6b Mon Sep 17 00:00:00 2001 From: Omprakash Dhyade Date: Mon, 28 Mar 2016 18:12:05 -0700 Subject: [PATCH 098/185] Perf: Adding hooks for IO prefetcher into framework Adding function call to start the io prefetcher during application launch. Change-Id: I6268538e3d0ee7632c6e01dc14732bb7914f337b --- core/java/android/util/BoostFramework.java | 36 +++++++++++++++++++ .../server/am/ActivityManagerService.java | 10 ++++++ .../server/am/ActivityStackSupervisor.java | 27 +++++++++----- 3 files changed, 65 insertions(+), 8 deletions(-) diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java index badbda5ff496..e71f04e0285a 100644 --- a/core/java/android/util/BoostFramework.java +++ b/core/java/android/util/BoostFramework.java @@ -49,6 +49,8 @@ public class BoostFramework { private static Method mAcquireFunc = null; private static Method mReleaseFunc = null; private static Method mAcquireTouchFunc = null; + private static Method mIOPStart = null; + private static Method mIOPStop = null; private static Constructor mConstructor = null; /** @hide */ @@ -79,6 +81,14 @@ public class BoostFramework { mAcquireTouchFunc = perfClass.getDeclaredMethod("perfLockAcquireTouch", argClasses); Log.v(TAG,"mAcquireTouchFunc method = " + mAcquireTouchFunc); + argClasses = new Class[] {int.class, String.class}; + mIOPStart = perfClass.getDeclaredMethod("perfIOPrefetchStart", argClasses); + Log.v(TAG,"mIOPStart method = " + mIOPStart); + + argClasses = new Class[] {}; + mIOPStop = perfClass.getDeclaredMethod("perfIOPrefetchStop", argClasses); + Log.v(TAG,"mIOPStop method = " + mIOPStop); + mIsLoaded = true; } catch(Exception e) { @@ -145,4 +155,30 @@ public class BoostFramework { return ret; } +/** @hide */ + public int perfIOPrefetchStart(int pid, String pkg_name) + { + int ret = -1; + try { + Object retVal = mIOPStart.invoke(mPerf,pid,pkg_name); + ret = (int)retVal; + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return ret; + } + +/** @hide */ + public int perfIOPrefetchStop() + { + int ret = -1; + try { + Object retVal = mIOPStop.invoke(mPerf); + ret = (int)retVal; + } catch(Exception e) { + Log.e(TAG,"Exception " + e); + } + return ret; + } + }; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 76a52c216358..4683c7ae2024 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -216,6 +216,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.TimeUtils; import android.util.Xml; +import android.util.BoostFramework; import android.view.Display; import android.view.Gravity; import android.view.LayoutInflater; @@ -3834,6 +3835,15 @@ public final class ActivityManagerService extends ActivityManagerNative buf.append(hostingNameStr); } Slog.i(TAG, buf.toString()); + + if(hostingType.equals("activity")) { + BoostFramework perf = new BoostFramework(); + + if (perf != null) { + perf.perfIOPrefetchStart(startResult.pid,app.processName); + } + } + app.setPid(startResult.pid); app.usingWrapper = startResult.usingWrapper; app.removed = false; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 0f59fafdfa81..30ea8df5bd21 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -206,14 +206,17 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int RESUME_TOP_ACTIVITY_MSG = FIRST_SUPERVISOR_STACK_MSG + 2; static final int SLEEP_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 3; static final int LAUNCH_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 4; + public BoostFramework mPerfBoost = null; public BoostFramework mPerfPack = null; + public BoostFramework mPerfIop = null; public boolean mIsPerfBoostEnabled = false; public boolean mIsperfDisablepackingEnable = false; public int lBoostTimeOut = 0; public int lDisPackTimeOut = 0; public int lBoostCpuParamVal[]; public int lBoostPackParamVal[]; + static final int HANDLE_DISPLAY_ADDED = FIRST_SUPERVISOR_STACK_MSG + 5; static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; @@ -1873,7 +1876,7 @@ public final class ActivityStackSupervisor implements DisplayListener { top_activity = task.stack.topRunningActivityLocked(); /* App is launching from recent apps and it's a new process */ if(top_activity != null && top_activity.state == ActivityState.DESTROYED) { - acquireAppLaunchPerfLock(); + acquireAppLaunchPerfLock(top_activity.packageName); } if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { @@ -2644,7 +2647,7 @@ public final class ActivityStackSupervisor implements DisplayListener { resumeFocusedStackTopActivityLocked(); } - void acquireAppLaunchPerfLock() { + void acquireAppLaunchPerfLock(String packageName) { /* Acquire perf lock during new app launch */ if (mIsperfDisablepackingEnable == true && mPerfPack == null) { mPerfPack = new BoostFramework(); @@ -2659,6 +2662,14 @@ public final class ActivityStackSupervisor implements DisplayListener { if (mPerfBoost != null) { mPerfBoost.perfLockAcquire(lBoostTimeOut, lBoostCpuParamVal); } + + // Start IOP + if (mPerfIop == null) { + mPerfIop = new BoostFramework(); + } + if (mPerfIop != null) { + mPerfIop.perfIOPrefetchStart(-1,packageName); + } } ActivityRecord findTaskLocked(ActivityRecord r) { @@ -2686,17 +2697,17 @@ public final class ActivityStackSupervisor implements DisplayListener { if (mTmpFindTaskResult.r != null && !mTmpFindTaskResult.matchedByRootAffinity) { if(mTmpFindTaskResult.r.state == ActivityState.DESTROYED ) { /*It's a new app launch */ - acquireAppLaunchPerfLock(); + acquireAppLaunchPerfLock(r.packageName); } return mTmpFindTaskResult.r; } } } - /* Acquire perf lock during new app launch */ - if (mTmpFindTaskResult.r == null) - acquireAppLaunchPerfLock(); - else if (mTmpFindTaskResult.r.state == ActivityState.DESTROYED) - acquireAppLaunchPerfLock(); + + /* Acquire perf lock *only* during new app launch */ + if (mTmpFindTaskResult.r == null || mTmpFindTaskResult.r.state == ActivityState.DESTROYED) { + acquireAppLaunchPerfLock(r.packageName); + } if (DEBUG_TASKS && mTmpFindTaskResult.r == null) Slog.d(TAG_TASKS, "No task found"); return mTmpFindTaskResult.r; -- GitLab From 7d2b34aca13467144c4d4f2bd782f9f30901cf39 Mon Sep 17 00:00:00 2001 From: Yujing Gu Date: Tue, 12 Apr 2016 13:56:52 +0800 Subject: [PATCH 099/185] Optimize SIM phonebook feature with new batch APIs 1. Declare new RIL request and response for loading and updating SIM contacts. 2. Add config to control the SIM phonebook feature Change-Id: Iee95f44a4e458cef6b99de29e17899a39973dc47 --- core/res/res/values/config.xml | 2 ++ core/res/res/values/symbols.xml | 2 ++ .../java/com/android/internal/telephony/RILConstants.java | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index fee426d40874..3acc6a440249 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2528,4 +2528,6 @@ + + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index aca6b0939217..d638046777ef 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2655,4 +2655,6 @@ + + diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 47f2aea39aa5..d06df49754b6 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -415,6 +415,8 @@ cat include/telephony/ril.h | \ int RIL_REQUEST_GET_ACTIVITY_INFO = 135; int RIL_REQUEST_SIM_GET_ATR = 136; int RIL_REQUEST_CAF_SIM_OPEN_CHANNEL_WITH_P2 = 137; + int RIL_REQUEST_GET_ADN_RECORD = 138; + int RIL_REQUEST_UPDATE_ADN_RECORD = 139; int RIL_RESPONSE_ACKNOWLEDGEMENT = 800; @@ -465,4 +467,6 @@ cat include/telephony/ril.h | \ int RIL_UNSOL_ON_SS = 1043; int RIL_UNSOL_STK_CC_ALPHA_NOTIFY = 1044; int RIL_UNSOL_LCEDATA_RECV = 1045; + int RIL_UNSOL_RESPONSE_ADN_INIT_DONE = 1046; + int RIL_UNSOL_RESPONSE_ADN_RECORDS = 1047; } -- GitLab From 91338fb35fcc9a155345d284bc24fad86f4d33a8 Mon Sep 17 00:00:00 2001 From: Dilip Gudlur Date: Tue, 26 Jan 2016 17:07:17 -0800 Subject: [PATCH 100/185] frameworks: Add custom boost for scroll/fling Change adds custom scroll/fling boost for specific applications, gets enabled only when system property (persist.debugboost.enabled) is defined Change-Id: I75141636bbe1a58b9f5cc948d7e16e588c4e6b98 --- core/java/android/app/Activity.java | 9 ++- core/java/android/util/BoostFramework.java | 68 ++++++++++++++++++++++ core/res/res/values/config.xml | 6 ++ core/res/res/values/symbols.xml | 6 ++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 612837e835c5..65aec72b1cd0 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -3074,7 +3074,14 @@ public class Activity extends ContextThemeWrapper } } } - if (mDragBoostPossible == 1) { + + Context context = getApplicationContext(); + if (mPerf == null){ + mPerf = new BoostFramework(); + } + boolean override = mPerf.boostOverride(context, ev, getResources().getDisplayMetrics()); + + if (mDragBoostPossible == 1 && override != true) { if (mPerf == null){ mPerf = new BoostFramework(); } diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java index e71f04e0285a..856f42539b63 100644 --- a/core/java/android/util/BoostFramework.java +++ b/core/java/android/util/BoostFramework.java @@ -36,6 +36,8 @@ import java.lang.reflect.Method; import java.lang.System; import android.view.MotionEvent; import android.util.DisplayMetrics; +import android.os.SystemProperties; +import android.content.Context; /** @hide */ public class BoostFramework { @@ -52,6 +54,11 @@ public class BoostFramework { private static Method mIOPStart = null; private static Method mIOPStop = null; private static Constructor mConstructor = null; + private static int mLockDuration = -1; + private static int mParamVal[]; + private static String mBoostActivityList[]; + private static long mStartTime; + private static final int mDebugBoost = getDebugBoostProperty(); /** @hide */ private Object mPerf = null; @@ -142,6 +149,67 @@ public class BoostFramework { } return ret; } + +/** @hide Reads system property + * @return 1 if property is set + */ + public static int getDebugBoostProperty() { + return SystemProperties.getInt("persist.debugboost.enable", 0); + } + +/** @hide Acquires debug boost perflock + * @param ev Touch Screen event + */ + public void enableDebugBoost(Context context, MotionEvent ev, DisplayMetrics metrics) { + + final int NANO_TO_MILLI = 1000000; + long elapsedMillis; + boolean mDebugBoostPossible = false; + + /* extract the XML params */ + if (mLockDuration == -1 || mParamVal == null || mBoostActivityList == null) { + mLockDuration = context.getResources().getInteger( + com.android.internal.R.integer.debugBoost_timeout); + mParamVal = context.getResources().getIntArray( + com.android.internal.R.array.debugBoost_param_value); + mBoostActivityList = context.getResources().getStringArray( + com.android.internal.R.array.debugBoost_activityList); + } + + String currentActivity = context.getPackageName(); + + /* search for the current activity in list */ + for (String match : mBoostActivityList) { + if (currentActivity.indexOf(match) != -1) { + /* break if found */ + mDebugBoostPossible = true; + break; + } + } + + elapsedMillis = (System.nanoTime() - mStartTime)/NANO_TO_MILLI; + + /* elapsed should be atleast greater than lock duration */ + if (mDebugBoostPossible == true && elapsedMillis > mLockDuration) { + perfLockAcquireTouch(ev, metrics, mLockDuration, mParamVal); + mStartTime = System.nanoTime(); + Log.i(TAG, "dBoost: activity = " + currentActivity + " " + "elapsed = " + elapsedMillis); + } + } + +/** @hide sets debug boost if property is set + */ + public boolean boostOverride(Context context, MotionEvent ev, DisplayMetrics metrics) { + /* Enable debug boost if property is set and + * current actiivity is present in list + */ + if (mDebugBoost == 1) { + enableDebugBoost(context, ev, metrics); + return true; + } + return false; + } + /** @hide */ public int perfLockAcquireTouch(MotionEvent ev, DisplayMetrics metrics, int duration, int... list) { diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 3acc6a440249..b0685c01afe7 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2515,6 +2515,12 @@ 0 + + false + + 0 + + false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d638046777ef..e2a36d473896 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2651,6 +2651,12 @@ + + + + + + -- GitLab From a8337f1d5b630ca0ff4b85ccecc508524e17bb42 Mon Sep 17 00:00:00 2001 From: William Clark Date: Fri, 21 Aug 2015 17:44:46 -0700 Subject: [PATCH 101/185] SEEMP: add framework instrumentation - Instrument framework files to log events of interest for QSSP. - Fix the String out of boundary CRs-Fixed: 1020829 Change-Id: Iab970a78e48a504a9eff066cb3c0abe83a62513a --- .../java/android/accounts/AccountManager.java | 26 + core/java/android/app/Instrumentation.java | 7 + .../android/bluetooth/BluetoothAdapter.java | 10 + .../java/android/content/ContentResolver.java | 3 + core/java/android/hardware/Camera.java | 5 + .../android/hardware/SystemSensorManager.java | 2 + core/java/android/provider/Browser.java | 6 + .../android/provider/CalendarContract.java | 8 + .../android/provider/ContactsContract.java | 7 + core/java/android/provider/Settings.java | 2 + .../java/android/speech/SpeechRecognizer.java | 1 + core/java/android/util/SeempLog.java | 754 ++++++++++++++++++ core/java/android/view/View.java | 4 + core/java/android/view/WindowManagerImpl.java | 2 + core/java/android/webkit/WebChromeClient.java | 4 +- core/jni/Android.mk | 1 + core/jni/AndroidRuntime.cpp | 2 + core/jni/android_util_SeempLog.cpp | 210 +++++ include/SeempLog.h | 51 ++ .../android/location/LocationManager.java | 17 + media/java/android/media/AudioRecord.java | 2 + .../accounts/AccountManagerService.java | 8 + .../server/am/ActivityManagerService.java | 12 + .../com/android/server/am/ProcessRecord.java | 24 + .../server/pm/PackageManagerService.java | 1 + .../android/telephony/TelephonyManager.java | 6 + .../internal/telephony/CallerInfo.java | 2 + .../android/view/WindowManagerImpl.java | 2 + wifi/java/android/net/wifi/WifiManager.java | 1 + 29 files changed, 1179 insertions(+), 1 deletion(-) mode change 100755 => 100644 core/java/android/provider/Settings.java create mode 100644 core/java/android/util/SeempLog.java create mode 100644 core/jni/android_util_SeempLog.cpp create mode 100644 include/SeempLog.h diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 7465ed92e469..e0f07962ea37 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -349,6 +349,7 @@ public class AccountManager { * @return The account's password, null if none or if the account doesn't exist */ public String getPassword(final Account account) { + android.util.SeempLog.record(22); if (account == null) throw new IllegalArgumentException("account is null"); try { return mService.getPassword(account); @@ -376,6 +377,7 @@ public class AccountManager { * @return The user data, null if the account or key doesn't exist */ public String getUserData(final Account account, final String key) { + android.util.SeempLog.record(23); if (account == null) throw new IllegalArgumentException("account is null"); if (key == null) throw new IllegalArgumentException("key is null"); try { @@ -584,6 +586,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.getAuthTokenLabel(mResponse, accountType, authTokenType); } @@ -630,6 +633,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.hasFeatures(mResponse, account, features, mContext.getOpPackageName()); } @Override @@ -684,6 +688,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.getAccountsByFeatures(mResponse, type, features, mContext.getOpPackageName()); } @@ -728,6 +733,7 @@ public class AccountManager { * already exists, the account is null, or another error occurs. */ public boolean addAccountExplicitly(Account account, String password, Bundle userdata) { + android.util.SeempLog.record(24); if (account == null) throw new IllegalArgumentException("account is null"); try { return mService.addAccountExplicitly(account, password, userdata); @@ -797,6 +803,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.renameAccount(mResponse, account, newName); } @Override @@ -856,10 +863,12 @@ public class AccountManager { @Deprecated public AccountManagerFuture removeAccount(final Account account, AccountManagerCallback callback, Handler handler) { + android.util.SeempLog.record(25); if (account == null) throw new IllegalArgumentException("account is null"); return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.removeAccount(mResponse, account, false); } @Override @@ -915,10 +924,12 @@ public class AccountManager { */ public AccountManagerFuture removeAccount(final Account account, final Activity activity, AccountManagerCallback callback, Handler handler) { + android.util.SeempLog.record(28); if (account == null) throw new IllegalArgumentException("account is null"); return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(34); mService.removeAccount(mResponse, account, activity != null); } }.start(); @@ -940,6 +951,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.removeAccountAsUser(mResponse, account, false, userHandle.getIdentifier()); } @Override @@ -966,6 +978,7 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(34); mService.removeAccountAsUser(mResponse, account, activity != null, userHandle.getIdentifier()); } @@ -1079,6 +1092,7 @@ public class AccountManager { * @param password The password to set, null to clear the password */ public void setPassword(final Account account, final String password) { + android.util.SeempLog.record(26); if (account == null) throw new IllegalArgumentException("account is null"); try { mService.setPassword(account, password); @@ -1107,6 +1121,7 @@ public class AccountManager { * @param account The account whose password to clear */ public void clearPassword(final Account account) { + android.util.SeempLog.record(27); if (account == null) throw new IllegalArgumentException("account is null"); try { mService.clearPassword(account); @@ -1134,6 +1149,7 @@ public class AccountManager { * @param value String value to set, {@code null} to clear this user data key */ public void setUserData(final Account account, final String key, final String value) { + android.util.SeempLog.record(28); if (account == null) throw new IllegalArgumentException("account is null"); if (key == null) throw new IllegalArgumentException("key is null"); try { @@ -1284,6 +1300,7 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.getAuthToken(mResponse, account, authTokenType, false /* notifyOnAuthFailure */, true /* expectActivityLaunch */, optionsIn); @@ -1453,6 +1470,7 @@ public class AccountManager { return new AmsTask(null, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.getAuthToken(mResponse, account, authTokenType, notifyAuthFailure, false /* expectActivityLaunch */, optionsIn); } @@ -1513,6 +1531,7 @@ public class AccountManager { final String authTokenType, final String[] requiredFeatures, final Bundle addAccountOptions, final Activity activity, AccountManagerCallback callback, Handler handler) { + android.util.SeempLog.record(29); if (accountType == null) throw new IllegalArgumentException("accountType is null"); final Bundle optionsIn = new Bundle(); if (addAccountOptions != null) { @@ -1523,6 +1542,7 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.addAccount(mResponse, accountType, authTokenType, requiredFeatures, activity != null, optionsIn); } @@ -1548,6 +1568,7 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.addAccountAsUser(mResponse, accountType, authTokenType, requiredFeatures, activity != null, optionsIn, userHandle.getIdentifier()); } @@ -1597,6 +1618,7 @@ public class AccountManager { return new Future2Task(handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(34); mService.copyAccountToUser( mResponse, account, fromUser.getIdentifier(), toUser.getIdentifier()); } @@ -1723,6 +1745,7 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.confirmCredentialsAsUser(mResponse, account, options, activity != null, userId); } @@ -1836,10 +1859,12 @@ public class AccountManager { public AccountManagerFuture editProperties(final String accountType, final Activity activity, final AccountManagerCallback callback, final Handler handler) { + android.util.SeempLog.record(30); if (accountType == null) throw new IllegalArgumentException("accountType is null"); return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); mService.editProperties(mResponse, accountType, activity != null); } }.start(); @@ -2227,6 +2252,7 @@ public class AccountManager { @Override public void doWork() throws RemoteException { + android.util.SeempLog.record(31); getAccountsByTypeAndFeatures(mAccountType, mFeatures, new AccountManagerCallback() { @Override diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 95ea2a561bbe..5c2aa37df1bc 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -385,6 +385,7 @@ public class Instrumentation { * @see Context#startActivity */ public Activity startActivitySync(Intent intent) { + android.util.SeempLog.record_str(376, intent.toString()); validateNotAppThread(); synchronized (mSync) { @@ -1492,6 +1493,7 @@ public class Instrumentation { public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { + android.util.SeempLog.record_str(377, intent.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; Uri referrer = target != null ? target.onProvideReferrer() : null; if (referrer != null) { @@ -1552,6 +1554,7 @@ public class Instrumentation { public void execStartActivitiesAsUser(Context who, IBinder contextThread, IBinder token, Activity target, Intent[] intents, Bundle options, int userId) { + android.util.SeempLog.record_str(378, intents.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1615,6 +1618,7 @@ public class Instrumentation { public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, String target, Intent intent, int requestCode, Bundle options) { + android.util.SeempLog.record_str(377, intent.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1675,6 +1679,7 @@ public class Instrumentation { public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options, UserHandle user) { + android.util.SeempLog.record_str(377, intent.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1714,6 +1719,7 @@ public class Instrumentation { Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options, boolean ignoreTargetSecurity, int userId) { + android.util.SeempLog.record_str(379, intent.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1752,6 +1758,7 @@ public class Instrumentation { public void execStartActivityFromAppTask( Context who, IBinder contextThread, IAppTask appTask, Intent intent, Bundle options) { + android.util.SeempLog.record_str(380, intent.toString()); IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index f812ea0ef4df..17e00d1be2cf 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -545,6 +545,7 @@ public final class BluetoothAdapter { * @throws IllegalArgumentException if address is invalid */ public BluetoothDevice getRemoteDevice(String address) { + android.util.SeempLog.record(62); return new BluetoothDevice(address); } @@ -560,6 +561,7 @@ public final class BluetoothAdapter { * @throws IllegalArgumentException if address is invalid */ public BluetoothDevice getRemoteDevice(byte[] address) { + android.util.SeempLog.record(62); if (address == null || address.length != 6) { throw new IllegalArgumentException("Bluetooth address must have 6 bytes"); } @@ -799,6 +801,7 @@ public final class BluetoothAdapter { public int getState() { int state = BluetoothAdapter.STATE_OFF; + android.util.SeempLog.record(63); try { mServiceLock.readLock().lock(); if (mService != null) { @@ -897,6 +900,7 @@ public final class BluetoothAdapter { */ @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) public boolean enable() { + android.util.SeempLog.record(56); if (isEnabled() == true) { if (DBG) Log.d(TAG, "enable(): BT is already enabled..!"); return true; @@ -933,6 +937,7 @@ public final class BluetoothAdapter { */ @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) public boolean disable() { + android.util.SeempLog.record(57); try { return mManagerService.disable(true); } catch (RemoteException e) {Log.e(TAG, "", e);} @@ -950,6 +955,7 @@ public final class BluetoothAdapter { * @hide */ public boolean disable(boolean persist) { + android.util.SeempLog.record(57); try { return mManagerService.disable(persist); @@ -1221,6 +1227,7 @@ public final class BluetoothAdapter { */ @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) public boolean startDiscovery() { + android.util.SeempLog.record(58); if (getState() != STATE_ON) return false; try { mServiceLock.readLock().lock(); @@ -1479,6 +1486,7 @@ public final class BluetoothAdapter { */ @RequiresPermission(Manifest.permission.BLUETOOTH) public Set getBondedDevices() { + android.util.SeempLog.record(61); if (getState() != STATE_ON) { return toDeviceSet(new BluetoothDevice[0]); } @@ -1537,6 +1545,7 @@ public final class BluetoothAdapter { */ @RequiresPermission(Manifest.permission.BLUETOOTH) public int getProfileConnectionState(int profile) { + android.util.SeempLog.record(64); if (getState() != STATE_ON) return BluetoothProfile.STATE_DISCONNECTED; try { mServiceLock.readLock().lock(); @@ -1660,6 +1669,7 @@ public final class BluetoothAdapter { @RequiresPermission(Manifest.permission.BLUETOOTH) public BluetoothServerSocket listenUsingInsecureRfcommWithServiceRecord(String name, UUID uuid) throws IOException { + android.util.SeempLog.record(59); return createNewRfcommSocketAndRecord(name, uuid, false, false); } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index c8d89204d8d4..f1f71950e332 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -469,6 +469,7 @@ public abstract class ContentResolver { public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { + android.util.SeempLog.record_uri(13, uri); return query(uri, projection, selection, selectionArgs, sortOrder, null); } @@ -510,6 +511,7 @@ public abstract class ContentResolver { @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder, @Nullable CancellationSignal cancellationSignal) { + android.util.SeempLog.record_uri(13, uri); Preconditions.checkNotNull(uri, "uri"); IContentProvider unstableProvider = acquireUnstableProvider(uri); if (unstableProvider == null) { @@ -1264,6 +1266,7 @@ public abstract class ContentResolver { */ public final @Nullable Uri insert(@RequiresPermission.Write @NonNull Uri url, @Nullable ContentValues values) { + android.util.SeempLog.record_uri(37, url); Preconditions.checkNotNull(url, "url"); IContentProvider provider = acquireProvider(url); if (provider == null) { diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index ae171f754a68..b44c10ffa3fc 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -796,6 +796,7 @@ public class Camera { * @see android.media.MediaActionSound */ public final void setPreviewCallback(PreviewCallback cb) { + android.util.SeempLog.record(66); mPreviewCallback = cb; mOneShot = false; mWithBuffer = false; @@ -822,6 +823,7 @@ public class Camera { * @see android.media.MediaActionSound */ public final void setOneShotPreviewCallback(PreviewCallback cb) { + android.util.SeempLog.record(68); mPreviewCallback = cb; mOneShot = true; mWithBuffer = false; @@ -860,6 +862,7 @@ public class Camera { * @see android.media.MediaActionSound */ public final void setPreviewCallbackWithBuffer(PreviewCallback cb) { + android.util.SeempLog.record(67); mPreviewCallback = cb; mOneShot = false; mWithBuffer = true; @@ -1422,6 +1425,7 @@ public class Camera { */ public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg) { + android.util.SeempLog.record(65); takePicture(shutter, raw, null, jpeg); } private native final void native_takePicture(int msgType); @@ -1457,6 +1461,7 @@ public class Camera { */ public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback postview, PictureCallback jpeg) { + android.util.SeempLog.record(65); mShutterCallback = shutter; mRawImageCallback = raw; mPostviewCallback = postview; diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 259ca032918b..69f7b84d0da5 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -130,6 +130,7 @@ public class SystemSensorManager extends SensorManager { @Override protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor, int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags) { + android.util.SeempLog.record_sensor_rate(381, sensor, delayUs); if (listener == null || sensor == null) { Log.e(TAG, "sensor or listener is null"); return false; @@ -171,6 +172,7 @@ public class SystemSensorManager extends SensorManager { /** @hide */ @Override protected void unregisterListenerImpl(SensorEventListener listener, Sensor sensor) { + android.util.SeempLog.record_sensor(382, sensor); // Trigger Sensors should use the cancelTriggerSensor call. if (sensor != null && sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) { return; diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java index 7d05522cf5ce..299a95c8e9e3 100644 --- a/core/java/android/provider/Browser.java +++ b/core/java/android/provider/Browser.java @@ -244,6 +244,7 @@ public class Browser { */ public static final Cursor getAllBookmarks(ContentResolver cr) throws IllegalStateException { + android.util.SeempLog.record(32); return new MatrixCursor(new String[]{Bookmarks.URL}, 0); } @@ -256,6 +257,7 @@ public class Browser { */ public static final Cursor getAllVisitedUrls(ContentResolver cr) throws IllegalStateException { + android.util.SeempLog.record(33); return new MatrixCursor(new String[]{Combined.URL}, 0); } @@ -264,6 +266,7 @@ public class Browser { } private static final Cursor getVisitedLike(ContentResolver cr, String url) { + android.util.SeempLog.record(34); boolean secure = false; String compareString = url; if (compareString.startsWith("http://")) { @@ -324,6 +327,7 @@ public class Browser { */ @Deprecated public static final String[] getVisitedHistory(ContentResolver cr) { + android.util.SeempLog.record(35); return new String[0]; } @@ -359,6 +363,7 @@ public class Browser { * @removed */ public static final void clearHistory(ContentResolver cr) { + android.util.SeempLog.record(37); } @@ -420,6 +425,7 @@ public class Browser { */ public static final void requestAllIcons(ContentResolver cr, String where, WebIconDatabase.IconListener listener) { + android.util.SeempLog.record(36); // Do nothing: this is no longer used. } diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java index aa22041d2777..2ede026b586c 100644 --- a/core/java/android/provider/CalendarContract.java +++ b/core/java/android/provider/CalendarContract.java @@ -871,6 +871,7 @@ public final class CalendarContract { * @return A Cursor containing all attendees for the event */ public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { + android.util.SeempLog.record(54); String[] attArgs = {Long.toString(eventId)}; return cr.query(CONTENT_URI, projection, ATTENDEES_WHERE, attArgs /* selection args */, null /* sort order */); @@ -1750,6 +1751,7 @@ public final class CalendarContract { */ public static final Cursor query(ContentResolver cr, String[] projection, long begin, long end) { + android.util.SeempLog.record(54); Uri.Builder builder = CONTENT_URI.buildUpon(); ContentUris.appendId(builder, begin); ContentUris.appendId(builder, end); @@ -1779,6 +1781,7 @@ public final class CalendarContract { */ public static final Cursor query(ContentResolver cr, String[] projection, long begin, long end, String searchQuery) { + android.util.SeempLog.record(54); Uri.Builder builder = CONTENT_SEARCH_URI.buildUpon(); ContentUris.appendId(builder, begin); ContentUris.appendId(builder, end); @@ -2029,6 +2032,7 @@ public final class CalendarContract { */ public static final Cursor query(ContentResolver cr, int startDay, int numDays, String[] projection) { + android.util.SeempLog.record(54); if (numDays < 1) { return null; } @@ -2112,6 +2116,7 @@ public final class CalendarContract { * @return A Cursor containing all reminders for the event */ public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { + android.util.SeempLog.record(54); String[] remArgs = {Long.toString(eventId)}; return cr.query(CONTENT_URI, projection, REMINDERS_WHERE, remArgs /*selection args*/, null /* sort order */); @@ -2262,6 +2267,7 @@ public final class CalendarContract { */ public static final Uri insert(ContentResolver cr, long eventId, long begin, long end, long alarmTime, int minutes) { + android.util.SeempLog.record(51); ContentValues values = new ContentValues(); values.put(CalendarAlerts.EVENT_ID, eventId); values.put(CalendarAlerts.BEGIN, begin); @@ -2289,6 +2295,7 @@ public final class CalendarContract { * @hide */ public static final long findNextAlarmTime(ContentResolver cr, long millis) { + android.util.SeempLog.record(53); String selection = ALARM_TIME + ">=" + millis; // TODO: construct an explicit SQL query so that we can add // "LIMIT 1" to the end and get just one result. @@ -2412,6 +2419,7 @@ public final class CalendarContract { */ public static final boolean alarmExists(ContentResolver cr, long eventId, long begin, long alarmTime) { + android.util.SeempLog.record(52); // TODO: construct an explicit SQL query so that we can add // "LIMIT 1" to the end and get just one result. String[] projection = new String[] { ALARM_TIME }; diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index c70304e140cf..52b00e91f977 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -1576,6 +1576,7 @@ public final class ContactsContract { * {@link #CONTENT_LOOKUP_URI} to attempt refreshing. */ public static Uri getLookupUri(ContentResolver resolver, Uri contactUri) { + android.util.SeempLog.record(86); final Cursor c = resolver.query(contactUri, new String[] { Contacts.LOOKUP_KEY, Contacts._ID }, null, null, null); @@ -1603,6 +1604,7 @@ public final class ContactsContract { * provided parameters. */ public static Uri getLookupUri(long contactId, String lookupKey) { + android.util.SeempLog.record(86); if (TextUtils.isEmpty(lookupKey)) { return null; } @@ -1616,6 +1618,7 @@ public final class ContactsContract { * Returns null if the contact cannot be found. */ public static Uri lookupContact(ContentResolver resolver, Uri lookupUri) { + android.util.SeempLog.record(87); if (lookupUri == null) { return null; } @@ -2086,6 +2089,7 @@ public final class ContactsContract { */ public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri contactUri, boolean preferHighres) { + android.util.SeempLog.record(88); if (preferHighres) { final Uri displayPhotoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.DISPLAY_PHOTO); @@ -2134,6 +2138,7 @@ public final class ContactsContract { * of the thumbnail the high-res picture is preferred */ public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri contactUri) { + android.util.SeempLog.record(88); return openContactPhotoInputStream(cr, contactUri, false); } } @@ -2831,6 +2836,7 @@ public final class ContactsContract { * entry of the given {@link RawContacts} entry. */ public static Uri getContactLookupUri(ContentResolver resolver, Uri rawContactUri) { + android.util.SeempLog.record(89); // TODO: use a lighter query by joining rawcontacts with contacts in provider final Uri dataUri = Uri.withAppendedPath(rawContactUri, Data.CONTENT_DIRECTORY); final Cursor cursor = resolver.query(dataUri, new String[] { @@ -4777,6 +4783,7 @@ public final class ContactsContract { *

*/ public static Uri getContactLookupUri(ContentResolver resolver, Uri dataUri) { + android.util.SeempLog.record(89); final Cursor cursor = resolver.query(dataUri, new String[] { RawContacts.CONTACT_ID, Contacts.LOOKUP_KEY }, null, null, null); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java old mode 100755 new mode 100644 index 9f7806a809a3..5db65d3e682b --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1898,6 +1898,7 @@ public final class Settings { /** @hide */ public static String getStringForUser(ContentResolver resolver, String name, int userHandle) { + android.util.SeempLog.record(android.util.SeempLog.getSeempGetApiIdFromValue(name)); if (MOVED_TO_SECURE.contains(name)) { Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" + " to android.provider.Settings.Secure, returning read-only value."); @@ -1925,6 +1926,7 @@ public final class Settings { /** @hide */ public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userHandle) { + android.util.SeempLog.record(android.util.SeempLog.getSeempPutApiIdFromValue(name)); if (MOVED_TO_SECURE.contains(name)) { Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" + " to android.provider.Settings.Secure, value is unchanged."); diff --git a/core/java/android/speech/SpeechRecognizer.java b/core/java/android/speech/SpeechRecognizer.java index 88e2edeee552..3eb24e499a9d 100644 --- a/core/java/android/speech/SpeechRecognizer.java +++ b/core/java/android/speech/SpeechRecognizer.java @@ -260,6 +260,7 @@ public class SpeechRecognizer { * not set explicitly, default values will be used by the recognizer. */ public void startListening(final Intent recognizerIntent) { + android.util.SeempLog.record(72); if (recognizerIntent == null) { throw new IllegalArgumentException("intent must not be null"); } diff --git a/core/java/android/util/SeempLog.java b/core/java/android/util/SeempLog.java new file mode 100644 index 000000000000..3764882644d8 --- /dev/null +++ b/core/java/android/util/SeempLog.java @@ -0,0 +1,754 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package android.util; + +import com.android.internal.os.RuntimeInit; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.net.UnknownHostException; +import java.util.Hashtable; +import java.util.Map; +import java.util.List; +import java.util.Iterator; +import android.util.Log; +import android.provider.Settings; + +/** + * SeempLog + * + * @hide + */ +public final class SeempLog { + private SeempLog() { + } + + /** + * Send a log message to the seemp log. + * @param api The api triggering this message. + */ + public static int record(int api) { + return seemp_println_native(api, ""); + } + + /** + * Send a log message to the seemp log. + * @param api The api triggering this message. + * @param msg The message you would like logged. + */ + public static int record_str(int api, String msg) { + if ( msg != null ) { + return seemp_println_native(api, msg); + } + else { + return seemp_println_native(api, ""); + } + } + + public static int record_sensor(int api, + android.hardware.Sensor sensor) { + if ( sensor != null ) { + return seemp_println_native(api, "sensor="+sensor.getType()); + } + else { + return seemp_println_native(api, "sensor=-1"); + } + } + + public static int record_sensor_rate(int api, + android.hardware.Sensor sensor, int rate) { + if ( sensor != null ) { + return seemp_println_native(api, + "sensor="+sensor.getType() + ",rate="+rate); + } + else { + return seemp_println_native(api, "sensor=-1,rate=" + rate); + } + } + + public static int record_uri(int api, android.net.Uri uri) { + if ( uri != null ) { + return seemp_println_native(api, "uri, " + uri.toString()); + } + else { + return seemp_println_native(api, "uri, null" ); + } + } + + public static int record_vg_layout(int api, + android.view.ViewGroup.LayoutParams params) { + try { + android.view.WindowManager.LayoutParams p = + (android.view.WindowManager.LayoutParams) params; + if ( p != null ) { + return seemp_println_native(api, + "window_type=" + p.type + ",window_flag=" + p.flags); + } + else { + return seemp_println_native(api, ""); + } + } catch (ClassCastException cce) { + return seemp_println_native(api, ""); + } + } + + /** @hide */ public static native int seemp_println_native(int api, String msg); + + public static final int SEEMP_API_android_provider_Settings__get_ANDROID_ID_ = 7; + public static final int SEEMP_API_android_provider_Settings__get_ACCELEROMETER_ROTATION_ = 96; + public static final int SEEMP_API_android_provider_Settings__get_USER_ROTATION_ = 97; + public static final int SEEMP_API_android_provider_Settings__get_ADB_ENABLED_ = 98; + public static final int SEEMP_API_android_provider_Settings__get_DEBUG_APP_ = 99; + public static final int SEEMP_API_android_provider_Settings__get_WAIT_FOR_DEBUGGER_ = 100; + public static final int SEEMP_API_android_provider_Settings__get_AIRPLANE_MODE_ON_ = 101; + public static final int SEEMP_API_android_provider_Settings__get_AIRPLANE_MODE_RADIOS_ = 102; + public static final int SEEMP_API_android_provider_Settings__get_ALARM_ALERT_ = 103; + public static final int SEEMP_API_android_provider_Settings__get_NEXT_ALARM_FORMATTED_ = 104; + public static final int SEEMP_API_android_provider_Settings__get_ALWAYS_FINISH_ACTIVITIES_ = 105; + public static final int SEEMP_API_android_provider_Settings__get_LOGGING_ID_ = 106; + public static final int SEEMP_API_android_provider_Settings__get_ANIMATOR_DURATION_SCALE_ = 107; + public static final int SEEMP_API_android_provider_Settings__get_WINDOW_ANIMATION_SCALE_ = 108; + public static final int SEEMP_API_android_provider_Settings__get_FONT_SCALE_ = 109; + public static final int SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_ = 110; + public static final int SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_MODE_ = 111; + public static final int SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_MODE_AUTOMATIC_ = 112; + public static final int SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_MODE_MANUAL_ = 113; + public static final int SEEMP_API_android_provider_Settings__get_SCREEN_OFF_TIMEOUT_ = 114; + public static final int SEEMP_API_android_provider_Settings__get_DIM_SCREEN_ = 115; + public static final int SEEMP_API_android_provider_Settings__get_TRANSITION_ANIMATION_SCALE_ = 116; + public static final int SEEMP_API_android_provider_Settings__get_STAY_ON_WHILE_PLUGGED_IN_ = 117; + public static final int SEEMP_API_android_provider_Settings__get_WALLPAPER_ACTIVITY_ = 118; + public static final int SEEMP_API_android_provider_Settings__get_SHOW_PROCESSES_ = 119; + public static final int SEEMP_API_android_provider_Settings__get_SHOW_WEB_SUGGESTIONS_ = 120; + public static final int SEEMP_API_android_provider_Settings__get_SHOW_GTALK_SERVICE_STATUS_ = 121; + public static final int SEEMP_API_android_provider_Settings__get_USE_GOOGLE_MAIL_ = 122; + public static final int SEEMP_API_android_provider_Settings__get_AUTO_TIME_ = 123; + public static final int SEEMP_API_android_provider_Settings__get_AUTO_TIME_ZONE_ = 124; + public static final int SEEMP_API_android_provider_Settings__get_DATE_FORMAT_ = 125; + public static final int SEEMP_API_android_provider_Settings__get_TIME_12_24_ = 126; + public static final int SEEMP_API_android_provider_Settings__get_BLUETOOTH_DISCOVERABILITY_ = 127; + public static final int SEEMP_API_android_provider_Settings__get_BLUETOOTH_DISCOVERABILITY_TIMEOUT_ = 128; + public static final int SEEMP_API_android_provider_Settings__get_BLUETOOTH_ON_ = 129; + public static final int SEEMP_API_android_provider_Settings__get_DEVICE_PROVISIONED_ = 130; + public static final int SEEMP_API_android_provider_Settings__get_SETUP_WIZARD_HAS_RUN_ = 131; + public static final int SEEMP_API_android_provider_Settings__get_DTMF_TONE_WHEN_DIALING_ = 132; + public static final int SEEMP_API_android_provider_Settings__get_END_BUTTON_BEHAVIOR_ = 133; + public static final int SEEMP_API_android_provider_Settings__get_RINGTONE_ = 134; + public static final int SEEMP_API_android_provider_Settings__get_MODE_RINGER_ = 135; + public static final int SEEMP_API_android_provider_Settings__get_INSTALL_NON_MARKET_APPS_ = 136; + public static final int SEEMP_API_android_provider_Settings__get_LOCATION_PROVIDERS_ALLOWED_ = 137; + public static final int SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_ENABLED_ = 138; + public static final int SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED_ = 139; + public static final int SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_VISIBLE_ = 140; + public static final int SEEMP_API_android_provider_Settings__get_NETWORK_PREFERENCE_ = 141; + public static final int SEEMP_API_android_provider_Settings__get_DATA_ROAMING_ = 142; + public static final int SEEMP_API_android_provider_Settings__get_HTTP_PROXY_ = 143; + public static final int SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_ENABLED_ = 144; + public static final int SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_LAST_UPDATE_ = 145; + public static final int SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_REDIRECT_URL_ = 146; + public static final int SEEMP_API_android_provider_Settings__get_RADIO_BLUETOOTH_ = 147; + public static final int SEEMP_API_android_provider_Settings__get_RADIO_CELL_ = 148; + public static final int SEEMP_API_android_provider_Settings__get_RADIO_NFC_ = 149; + public static final int SEEMP_API_android_provider_Settings__get_RADIO_WIFI_ = 150; + public static final int SEEMP_API_android_provider_Settings__get_SYS_PROP_SETTING_VERSION_ = 151; + public static final int SEEMP_API_android_provider_Settings__get_SETTINGS_CLASSNAME_ = 152; + public static final int SEEMP_API_android_provider_Settings__get_TEXT_AUTO_CAPS_ = 153; + public static final int SEEMP_API_android_provider_Settings__get_TEXT_AUTO_PUNCTUATE_ = 154; + public static final int SEEMP_API_android_provider_Settings__get_TEXT_AUTO_REPLACE_ = 155; + public static final int SEEMP_API_android_provider_Settings__get_TEXT_SHOW_PASSWORD_ = 156; + public static final int SEEMP_API_android_provider_Settings__get_USB_MASS_STORAGE_ENABLED_ = 157; + public static final int SEEMP_API_android_provider_Settings__get_VIBRATE_ON_ = 158; + public static final int SEEMP_API_android_provider_Settings__get_HAPTIC_FEEDBACK_ENABLED_ = 159; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_ALARM_ = 160; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_BLUETOOTH_SCO_ = 161; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_MUSIC_ = 162; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_NOTIFICATION_ = 163; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_RING_ = 164; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_SYSTEM_ = 165; + public static final int SEEMP_API_android_provider_Settings__get_VOLUME_VOICE_ = 166; + public static final int SEEMP_API_android_provider_Settings__get_SOUND_EFFECTS_ENABLED_ = 167; + public static final int SEEMP_API_android_provider_Settings__get_MODE_RINGER_STREAMS_AFFECTED_ = 168; + public static final int SEEMP_API_android_provider_Settings__get_MUTE_STREAMS_AFFECTED_ = 169; + public static final int SEEMP_API_android_provider_Settings__get_NOTIFICATION_SOUND_ = 170; + public static final int SEEMP_API_android_provider_Settings__get_APPEND_FOR_LAST_AUDIBLE_ = 171; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_MAX_DHCP_RETRY_COUNT_ = 172; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS_ = 173; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON_ = 174; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY_ = 175; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_NUM_OPEN_NETWORKS_KEPT_ = 176; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_ON_ = 177; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_SLEEP_POLICY_ = 178; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_SLEEP_POLICY_DEFAULT_ = 179; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_SLEEP_POLICY_NEVER_ = 180; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED_ = 181; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_STATIC_DNS1_ = 182; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_STATIC_DNS2_ = 183; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_STATIC_GATEWAY_ = 184; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_STATIC_IP_ = 185; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_STATIC_NETMASK_ = 186; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_USE_STATIC_IP_ = 187; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE_ = 188; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_AP_COUNT_ = 189; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS_ = 190; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED_ = 191; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS_ = 192; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT_ = 193; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_MAX_AP_CHECKS_ = 194; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_ON_ = 195; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_COUNT_ = 196; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_DELAY_MS_ = 197; + public static final int SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_TIMEOUT_MS_ = 198; + public static final int SEEMP_API_android_provider_Settings__put_ACCELEROMETER_ROTATION_ = 199; + public static final int SEEMP_API_android_provider_Settings__put_USER_ROTATION_ = 200; + public static final int SEEMP_API_android_provider_Settings__put_ADB_ENABLED_ = 201; + public static final int SEEMP_API_android_provider_Settings__put_DEBUG_APP_ = 202; + public static final int SEEMP_API_android_provider_Settings__put_WAIT_FOR_DEBUGGER_ = 203; + public static final int SEEMP_API_android_provider_Settings__put_AIRPLANE_MODE_ON_ = 204; + public static final int SEEMP_API_android_provider_Settings__put_AIRPLANE_MODE_RADIOS_ = 205; + public static final int SEEMP_API_android_provider_Settings__put_ALARM_ALERT_ = 206; + public static final int SEEMP_API_android_provider_Settings__put_NEXT_ALARM_FORMATTED_ = 207; + public static final int SEEMP_API_android_provider_Settings__put_ALWAYS_FINISH_ACTIVITIES_ = 208; + public static final int SEEMP_API_android_provider_Settings__put_ANDROID_ID_ = 209; + public static final int SEEMP_API_android_provider_Settings__put_LOGGING_ID_ = 210; + public static final int SEEMP_API_android_provider_Settings__put_ANIMATOR_DURATION_SCALE_ = 211; + public static final int SEEMP_API_android_provider_Settings__put_WINDOW_ANIMATION_SCALE_ = 212; + public static final int SEEMP_API_android_provider_Settings__put_FONT_SCALE_ = 213; + public static final int SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_ = 214; + public static final int SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_MODE_ = 215; + public static final int SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_MODE_AUTOMATIC_ = 216; + public static final int SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_MODE_MANUAL_ = 217; + public static final int SEEMP_API_android_provider_Settings__put_SCREEN_OFF_TIMEOUT_ = 218; + public static final int SEEMP_API_android_provider_Settings__put_DIM_SCREEN_ = 219; + public static final int SEEMP_API_android_provider_Settings__put_TRANSITION_ANIMATION_SCALE_ = 220; + public static final int SEEMP_API_android_provider_Settings__put_STAY_ON_WHILE_PLUGGED_IN_ = 221; + public static final int SEEMP_API_android_provider_Settings__put_WALLPAPER_ACTIVITY_ = 222; + public static final int SEEMP_API_android_provider_Settings__put_SHOW_PROCESSES_ = 223; + public static final int SEEMP_API_android_provider_Settings__put_SHOW_WEB_SUGGESTIONS_ = 224; + public static final int SEEMP_API_android_provider_Settings__put_SHOW_GTALK_SERVICE_STATUS_ = 225; + public static final int SEEMP_API_android_provider_Settings__put_USE_GOOGLE_MAIL_ = 226; + public static final int SEEMP_API_android_provider_Settings__put_AUTO_TIME_ = 227; + public static final int SEEMP_API_android_provider_Settings__put_AUTO_TIME_ZONE_ = 228; + public static final int SEEMP_API_android_provider_Settings__put_DATE_FORMAT_ = 229; + public static final int SEEMP_API_android_provider_Settings__put_TIME_12_24_ = 230; + public static final int SEEMP_API_android_provider_Settings__put_BLUETOOTH_DISCOVERABILITY_ = 231; + public static final int SEEMP_API_android_provider_Settings__put_BLUETOOTH_DISCOVERABILITY_TIMEOUT_ = 232; + public static final int SEEMP_API_android_provider_Settings__put_BLUETOOTH_ON_ = 233; + public static final int SEEMP_API_android_provider_Settings__put_DEVICE_PROVISIONED_ = 234; + public static final int SEEMP_API_android_provider_Settings__put_SETUP_WIZARD_HAS_RUN_ = 235; + public static final int SEEMP_API_android_provider_Settings__put_DTMF_TONE_WHEN_DIALING_ = 236; + public static final int SEEMP_API_android_provider_Settings__put_END_BUTTON_BEHAVIOR_ = 237; + public static final int SEEMP_API_android_provider_Settings__put_RINGTONE_ = 238; + public static final int SEEMP_API_android_provider_Settings__put_MODE_RINGER_ = 239; + public static final int SEEMP_API_android_provider_Settings__put_INSTALL_NON_MARKET_APPS_ = 240; + public static final int SEEMP_API_android_provider_Settings__put_LOCATION_PROVIDERS_ALLOWED_ = 241; + public static final int SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_ENABLED_ = 242; + public static final int SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED_ = 243; + public static final int SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_VISIBLE_ = 244; + public static final int SEEMP_API_android_provider_Settings__put_NETWORK_PREFERENCE_ = 245; + public static final int SEEMP_API_android_provider_Settings__put_DATA_ROAMING_ = 246; + public static final int SEEMP_API_android_provider_Settings__put_HTTP_PROXY_ = 247; + public static final int SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_ENABLED_ = 248; + public static final int SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_LAST_UPDATE_ = 249; + public static final int SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_REDIRECT_URL_ = 250; + public static final int SEEMP_API_android_provider_Settings__put_RADIO_BLUETOOTH_ = 251; + public static final int SEEMP_API_android_provider_Settings__put_RADIO_CELL_ = 252; + public static final int SEEMP_API_android_provider_Settings__put_RADIO_NFC_ = 253; + public static final int SEEMP_API_android_provider_Settings__put_RADIO_WIFI_ = 254; + public static final int SEEMP_API_android_provider_Settings__put_SYS_PROP_SETTING_VERSION_ = 255; + public static final int SEEMP_API_android_provider_Settings__put_SETTINGS_CLASSNAME_ = 256; + public static final int SEEMP_API_android_provider_Settings__put_TEXT_AUTO_CAPS_ = 257; + public static final int SEEMP_API_android_provider_Settings__put_TEXT_AUTO_PUNCTUATE_ = 258; + public static final int SEEMP_API_android_provider_Settings__put_TEXT_AUTO_REPLACE_ = 259; + public static final int SEEMP_API_android_provider_Settings__put_TEXT_SHOW_PASSWORD_ = 260; + public static final int SEEMP_API_android_provider_Settings__put_USB_MASS_STORAGE_ENABLED_ = 261; + public static final int SEEMP_API_android_provider_Settings__put_VIBRATE_ON_ = 262; + public static final int SEEMP_API_android_provider_Settings__put_HAPTIC_FEEDBACK_ENABLED_ = 263; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_ALARM_ = 264; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_BLUETOOTH_SCO_ = 265; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_MUSIC_ = 266; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_NOTIFICATION_ = 267; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_RING_ = 268; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_SYSTEM_ = 269; + public static final int SEEMP_API_android_provider_Settings__put_VOLUME_VOICE_ = 270; + public static final int SEEMP_API_android_provider_Settings__put_SOUND_EFFECTS_ENABLED_ = 271; + public static final int SEEMP_API_android_provider_Settings__put_MODE_RINGER_STREAMS_AFFECTED_ = 272; + public static final int SEEMP_API_android_provider_Settings__put_MUTE_STREAMS_AFFECTED_ = 273; + public static final int SEEMP_API_android_provider_Settings__put_NOTIFICATION_SOUND_ = 274; + public static final int SEEMP_API_android_provider_Settings__put_APPEND_FOR_LAST_AUDIBLE_ = 275; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_MAX_DHCP_RETRY_COUNT_ = 276; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS_ = 277; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON_ = 278; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY_ = 279; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_NUM_OPEN_NETWORKS_KEPT_ = 280; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_ON_ = 281; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_SLEEP_POLICY_ = 282; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_SLEEP_POLICY_DEFAULT_ = 283; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_SLEEP_POLICY_NEVER_ = 284; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED_ = 285; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_STATIC_DNS1_ = 286; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_STATIC_DNS2_ = 287; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_STATIC_GATEWAY_ = 288; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_STATIC_IP_ = 289; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_STATIC_NETMASK_ = 290; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_USE_STATIC_IP_ = 291; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE_ = 292; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_AP_COUNT_ = 293; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS_ = 294; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED_ = 295; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS_ = 296; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT_ = 297; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_MAX_AP_CHECKS_ = 298; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_ON_ = 299; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_COUNT_ = 300; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_DELAY_MS_ = 301; + public static final int SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_TIMEOUT_MS_ = 302; + + private final static java.util.Map value_to_get_map; + static { + value_to_get_map = new java.util.HashMap( 198 ); + value_to_get_map.put(Settings.System.NOTIFICATION_SOUND, + SEEMP_API_android_provider_Settings__get_NOTIFICATION_SOUND_); + value_to_get_map.put(Settings.System.DTMF_TONE_WHEN_DIALING, + SEEMP_API_android_provider_Settings__get_DTMF_TONE_WHEN_DIALING_); + value_to_get_map.put(Settings.System.LOCK_PATTERN_ENABLED, + SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_ENABLED_); + value_to_get_map.put(Settings.System.WIFI_MAX_DHCP_RETRY_COUNT, + SEEMP_API_android_provider_Settings__get_WIFI_MAX_DHCP_RETRY_COUNT_); + value_to_get_map.put(Settings.System.AUTO_TIME, + SEEMP_API_android_provider_Settings__get_AUTO_TIME_); + value_to_get_map.put(Settings.System.SETUP_WIZARD_HAS_RUN, + SEEMP_API_android_provider_Settings__get_SETUP_WIZARD_HAS_RUN_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS_); + value_to_get_map.put(Settings.System.LOCATION_PROVIDERS_ALLOWED, + SEEMP_API_android_provider_Settings__get_LOCATION_PROVIDERS_ALLOWED_); + value_to_get_map.put(Settings.System.ALARM_ALERT, + SEEMP_API_android_provider_Settings__get_ALARM_ALERT_); + value_to_get_map.put(Settings.System.VIBRATE_ON, + SEEMP_API_android_provider_Settings__get_VIBRATE_ON_); + value_to_get_map.put(Settings.System.USB_MASS_STORAGE_ENABLED, + SEEMP_API_android_provider_Settings__get_USB_MASS_STORAGE_ENABLED_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_PING_DELAY_MS, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_DELAY_MS_); + value_to_get_map.put(Settings.System.FONT_SCALE, + SEEMP_API_android_provider_Settings__get_FONT_SCALE_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_AP_COUNT, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_AP_COUNT_); + value_to_get_map.put(Settings.System.ALWAYS_FINISH_ACTIVITIES, + SEEMP_API_android_provider_Settings__get_ALWAYS_FINISH_ACTIVITIES_); + value_to_get_map.put(Settings.System.ACCELEROMETER_ROTATION, + SEEMP_API_android_provider_Settings__get_ACCELEROMETER_ROTATION_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_PING_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_TIMEOUT_MS_); + value_to_get_map.put(Settings.System.VOLUME_NOTIFICATION, + SEEMP_API_android_provider_Settings__get_VOLUME_NOTIFICATION_); + value_to_get_map.put(Settings.System.AIRPLANE_MODE_ON, + SEEMP_API_android_provider_Settings__get_AIRPLANE_MODE_ON_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS_); + value_to_get_map.put(Settings.System.WIFI_STATIC_IP, + SEEMP_API_android_provider_Settings__get_WIFI_STATIC_IP_); + value_to_get_map.put(Settings.System.RADIO_BLUETOOTH, + SEEMP_API_android_provider_Settings__get_RADIO_BLUETOOTH_); + value_to_get_map.put(Settings.System.BLUETOOTH_DISCOVERABILITY_TIMEOUT, + SEEMP_API_android_provider_Settings__get_BLUETOOTH_DISCOVERABILITY_TIMEOUT_); + value_to_get_map.put(Settings.System.VOLUME_RING, + SEEMP_API_android_provider_Settings__get_VOLUME_RING_); + value_to_get_map.put(Settings.System.MODE_RINGER_STREAMS_AFFECTED, + SEEMP_API_android_provider_Settings__get_MODE_RINGER_STREAMS_AFFECTED_); + value_to_get_map.put(Settings.System.VOLUME_SYSTEM, + SEEMP_API_android_provider_Settings__get_VOLUME_SYSTEM_); + value_to_get_map.put(Settings.System.SCREEN_OFF_TIMEOUT, + SEEMP_API_android_provider_Settings__get_SCREEN_OFF_TIMEOUT_); + value_to_get_map.put(Settings.System.RADIO_WIFI, + SEEMP_API_android_provider_Settings__get_RADIO_WIFI_); + value_to_get_map.put(Settings.System.AUTO_TIME_ZONE, + SEEMP_API_android_provider_Settings__get_AUTO_TIME_ZONE_); + value_to_get_map.put(Settings.System.TEXT_AUTO_CAPS, + SEEMP_API_android_provider_Settings__get_TEXT_AUTO_CAPS_); + value_to_get_map.put(Settings.System.WALLPAPER_ACTIVITY, + SEEMP_API_android_provider_Settings__get_WALLPAPER_ACTIVITY_); + value_to_get_map.put(Settings.System.ANIMATOR_DURATION_SCALE, + SEEMP_API_android_provider_Settings__get_ANIMATOR_DURATION_SCALE_); + value_to_get_map.put(Settings.System.WIFI_NUM_OPEN_NETWORKS_KEPT, + SEEMP_API_android_provider_Settings__get_WIFI_NUM_OPEN_NETWORKS_KEPT_); + value_to_get_map.put(Settings.System.LOCK_PATTERN_VISIBLE, + SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_VISIBLE_); + value_to_get_map.put(Settings.System.VOLUME_VOICE, + SEEMP_API_android_provider_Settings__get_VOLUME_VOICE_); + value_to_get_map.put(Settings.System.DEBUG_APP, + SEEMP_API_android_provider_Settings__get_DEBUG_APP_); + value_to_get_map.put(Settings.System.WIFI_ON, + SEEMP_API_android_provider_Settings__get_WIFI_ON_); + value_to_get_map.put(Settings.System.TEXT_SHOW_PASSWORD, + SEEMP_API_android_provider_Settings__get_TEXT_SHOW_PASSWORD_); + value_to_get_map.put(Settings.System.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, + SEEMP_API_android_provider_Settings__get_WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY_); + value_to_get_map.put(Settings.System.WIFI_SLEEP_POLICY, + SEEMP_API_android_provider_Settings__get_WIFI_SLEEP_POLICY_); + value_to_get_map.put(Settings.System.VOLUME_MUSIC, + SEEMP_API_android_provider_Settings__get_VOLUME_MUSIC_); + value_to_get_map.put(Settings.System.PARENTAL_CONTROL_LAST_UPDATE, + SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_LAST_UPDATE_); + value_to_get_map.put(Settings.System.DEVICE_PROVISIONED, + SEEMP_API_android_provider_Settings__get_DEVICE_PROVISIONED_); + value_to_get_map.put(Settings.System.HTTP_PROXY, + SEEMP_API_android_provider_Settings__get_HTTP_PROXY_); + value_to_get_map.put(Settings.System.ANDROID_ID, + SEEMP_API_android_provider_Settings__get_ANDROID_ID_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_MAX_AP_CHECKS, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_MAX_AP_CHECKS_); + value_to_get_map.put(Settings.System.END_BUTTON_BEHAVIOR, + SEEMP_API_android_provider_Settings__get_END_BUTTON_BEHAVIOR_); + value_to_get_map.put(Settings.System.NEXT_ALARM_FORMATTED, + SEEMP_API_android_provider_Settings__get_NEXT_ALARM_FORMATTED_); + value_to_get_map.put(Settings.System.RADIO_CELL, + SEEMP_API_android_provider_Settings__get_RADIO_CELL_); + value_to_get_map.put(Settings.System.PARENTAL_CONTROL_ENABLED, + SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_ENABLED_); + value_to_get_map.put(Settings.System.BLUETOOTH_ON, + SEEMP_API_android_provider_Settings__get_BLUETOOTH_ON_); + value_to_get_map.put(Settings.System.WINDOW_ANIMATION_SCALE, + SEEMP_API_android_provider_Settings__get_WINDOW_ANIMATION_SCALE_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED_); + value_to_get_map.put(Settings.System.BLUETOOTH_DISCOVERABILITY, + SEEMP_API_android_provider_Settings__get_BLUETOOTH_DISCOVERABILITY_); + value_to_get_map.put(Settings.System.WIFI_STATIC_DNS1, + SEEMP_API_android_provider_Settings__get_WIFI_STATIC_DNS1_); + value_to_get_map.put(Settings.System.WIFI_STATIC_DNS2, + SEEMP_API_android_provider_Settings__get_WIFI_STATIC_DNS2_); + value_to_get_map.put(Settings.System.HAPTIC_FEEDBACK_ENABLED, + SEEMP_API_android_provider_Settings__get_HAPTIC_FEEDBACK_ENABLED_); + value_to_get_map.put(Settings.System.SHOW_WEB_SUGGESTIONS, + SEEMP_API_android_provider_Settings__get_SHOW_WEB_SUGGESTIONS_); + value_to_get_map.put(Settings.System.PARENTAL_CONTROL_REDIRECT_URL, + SEEMP_API_android_provider_Settings__get_PARENTAL_CONTROL_REDIRECT_URL_); + value_to_get_map.put(Settings.System.DATE_FORMAT, + SEEMP_API_android_provider_Settings__get_DATE_FORMAT_); + value_to_get_map.put(Settings.System.RADIO_NFC, + SEEMP_API_android_provider_Settings__get_RADIO_NFC_); + value_to_get_map.put(Settings.System.AIRPLANE_MODE_RADIOS, + SEEMP_API_android_provider_Settings__get_AIRPLANE_MODE_RADIOS_); + value_to_get_map.put(Settings.System.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, + SEEMP_API_android_provider_Settings__get_LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED_); + value_to_get_map.put(Settings.System.TIME_12_24, + SEEMP_API_android_provider_Settings__get_TIME_12_24_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT_); + value_to_get_map.put(Settings.System.VOLUME_BLUETOOTH_SCO, + SEEMP_API_android_provider_Settings__get_VOLUME_BLUETOOTH_SCO_); + value_to_get_map.put(Settings.System.USER_ROTATION, + SEEMP_API_android_provider_Settings__get_USER_ROTATION_); + value_to_get_map.put(Settings.System.WIFI_STATIC_GATEWAY, + SEEMP_API_android_provider_Settings__get_WIFI_STATIC_GATEWAY_); + value_to_get_map.put(Settings.System.STAY_ON_WHILE_PLUGGED_IN, + SEEMP_API_android_provider_Settings__get_STAY_ON_WHILE_PLUGGED_IN_); + value_to_get_map.put(Settings.System.SOUND_EFFECTS_ENABLED, + SEEMP_API_android_provider_Settings__get_SOUND_EFFECTS_ENABLED_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_PING_COUNT, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_PING_COUNT_); + value_to_get_map.put(Settings.System.DATA_ROAMING, + SEEMP_API_android_provider_Settings__get_DATA_ROAMING_); + value_to_get_map.put(Settings.System.SETTINGS_CLASSNAME, + SEEMP_API_android_provider_Settings__get_SETTINGS_CLASSNAME_); + value_to_get_map.put(Settings.System.TRANSITION_ANIMATION_SCALE, + SEEMP_API_android_provider_Settings__get_TRANSITION_ANIMATION_SCALE_); + value_to_get_map.put(Settings.System.WAIT_FOR_DEBUGGER, + SEEMP_API_android_provider_Settings__get_WAIT_FOR_DEBUGGER_); + value_to_get_map.put(Settings.System.INSTALL_NON_MARKET_APPS, + SEEMP_API_android_provider_Settings__get_INSTALL_NON_MARKET_APPS_); + value_to_get_map.put(Settings.System.ADB_ENABLED, + SEEMP_API_android_provider_Settings__get_ADB_ENABLED_); + value_to_get_map.put(Settings.System.WIFI_USE_STATIC_IP, + SEEMP_API_android_provider_Settings__get_WIFI_USE_STATIC_IP_); + value_to_get_map.put(Settings.System.DIM_SCREEN, + SEEMP_API_android_provider_Settings__get_DIM_SCREEN_); + value_to_get_map.put(Settings.System.VOLUME_ALARM, + SEEMP_API_android_provider_Settings__get_VOLUME_ALARM_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_ON, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_ON_); + value_to_get_map.put(Settings.System.WIFI_STATIC_NETMASK, + SEEMP_API_android_provider_Settings__get_WIFI_STATIC_NETMASK_); + value_to_get_map.put(Settings.System.NETWORK_PREFERENCE, + SEEMP_API_android_provider_Settings__get_NETWORK_PREFERENCE_); + value_to_get_map.put(Settings.System.SHOW_PROCESSES, + SEEMP_API_android_provider_Settings__get_SHOW_PROCESSES_); + value_to_get_map.put(Settings.System.TEXT_AUTO_REPLACE, + SEEMP_API_android_provider_Settings__get_TEXT_AUTO_REPLACE_); + value_to_get_map.put(Settings.System.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, + SEEMP_API_android_provider_Settings__get_WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON_); + value_to_get_map.put(Settings.System.APPEND_FOR_LAST_AUDIBLE, + SEEMP_API_android_provider_Settings__get_APPEND_FOR_LAST_AUDIBLE_); + value_to_get_map.put(Settings.System.SHOW_GTALK_SERVICE_STATUS, + SEEMP_API_android_provider_Settings__get_SHOW_GTALK_SERVICE_STATUS_); + value_to_get_map.put(Settings.System.SCREEN_BRIGHTNESS, + SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_); + value_to_get_map.put(Settings.System.USE_GOOGLE_MAIL, + SEEMP_API_android_provider_Settings__get_USE_GOOGLE_MAIL_); + value_to_get_map.put(Settings.System.RINGTONE, + SEEMP_API_android_provider_Settings__get_RINGTONE_); + value_to_get_map.put(Settings.System.LOGGING_ID, + SEEMP_API_android_provider_Settings__get_LOGGING_ID_); + value_to_get_map.put(Settings.System.MODE_RINGER, + SEEMP_API_android_provider_Settings__get_MODE_RINGER_); + value_to_get_map.put(Settings.System.MUTE_STREAMS_AFFECTED, + SEEMP_API_android_provider_Settings__get_MUTE_STREAMS_AFFECTED_); + value_to_get_map.put(Settings.System.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, + SEEMP_API_android_provider_Settings__get_WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE_); + value_to_get_map.put(Settings.System.TEXT_AUTO_PUNCTUATE, + SEEMP_API_android_provider_Settings__get_TEXT_AUTO_PUNCTUATE_); + value_to_get_map.put(Settings.System.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__get_WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS_); + value_to_get_map.put(Settings.System.SCREEN_BRIGHTNESS_MODE, + SEEMP_API_android_provider_Settings__get_SCREEN_BRIGHTNESS_MODE_); + } + + public static int getSeempGetApiIdFromValue( String v ) + { + Integer result = value_to_get_map.get( v ); + if (result == null) + { + result = -1; + } + return result; + } + + private final static java.util.Map value_to_put_map; + static { + value_to_put_map = new java.util.HashMap( 198 ); + value_to_put_map.put(Settings.System.NOTIFICATION_SOUND, + SEEMP_API_android_provider_Settings__put_NOTIFICATION_SOUND_); + value_to_put_map.put(Settings.System.DTMF_TONE_WHEN_DIALING, + SEEMP_API_android_provider_Settings__put_DTMF_TONE_WHEN_DIALING_); + value_to_put_map.put(Settings.System.LOCK_PATTERN_ENABLED, + SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_ENABLED_); + value_to_put_map.put(Settings.System.WIFI_MAX_DHCP_RETRY_COUNT, + SEEMP_API_android_provider_Settings__put_WIFI_MAX_DHCP_RETRY_COUNT_); + value_to_put_map.put(Settings.System.AUTO_TIME, + SEEMP_API_android_provider_Settings__put_AUTO_TIME_); + value_to_put_map.put(Settings.System.SETUP_WIZARD_HAS_RUN, + SEEMP_API_android_provider_Settings__put_SETUP_WIZARD_HAS_RUN_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS_); + value_to_put_map.put(Settings.System.LOCATION_PROVIDERS_ALLOWED, + SEEMP_API_android_provider_Settings__put_LOCATION_PROVIDERS_ALLOWED_); + value_to_put_map.put(Settings.System.ALARM_ALERT, + SEEMP_API_android_provider_Settings__put_ALARM_ALERT_); + value_to_put_map.put(Settings.System.VIBRATE_ON, + SEEMP_API_android_provider_Settings__put_VIBRATE_ON_); + value_to_put_map.put(Settings.System.USB_MASS_STORAGE_ENABLED, + SEEMP_API_android_provider_Settings__put_USB_MASS_STORAGE_ENABLED_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_PING_DELAY_MS, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_DELAY_MS_); + value_to_put_map.put(Settings.System.FONT_SCALE, + SEEMP_API_android_provider_Settings__put_FONT_SCALE_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_AP_COUNT, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_AP_COUNT_); + value_to_put_map.put(Settings.System.ALWAYS_FINISH_ACTIVITIES, + SEEMP_API_android_provider_Settings__put_ALWAYS_FINISH_ACTIVITIES_); + value_to_put_map.put(Settings.System.ACCELEROMETER_ROTATION, + SEEMP_API_android_provider_Settings__put_ACCELEROMETER_ROTATION_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_PING_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_TIMEOUT_MS_); + value_to_put_map.put(Settings.System.VOLUME_NOTIFICATION, + SEEMP_API_android_provider_Settings__put_VOLUME_NOTIFICATION_); + value_to_put_map.put(Settings.System.AIRPLANE_MODE_ON, + SEEMP_API_android_provider_Settings__put_AIRPLANE_MODE_ON_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS_); + value_to_put_map.put(Settings.System.WIFI_STATIC_IP, + SEEMP_API_android_provider_Settings__put_WIFI_STATIC_IP_); + value_to_put_map.put(Settings.System.RADIO_BLUETOOTH, + SEEMP_API_android_provider_Settings__put_RADIO_BLUETOOTH_); + value_to_put_map.put(Settings.System.BLUETOOTH_DISCOVERABILITY_TIMEOUT, + SEEMP_API_android_provider_Settings__put_BLUETOOTH_DISCOVERABILITY_TIMEOUT_); + value_to_put_map.put(Settings.System.VOLUME_RING, + SEEMP_API_android_provider_Settings__put_VOLUME_RING_); + value_to_put_map.put(Settings.System.MODE_RINGER_STREAMS_AFFECTED, + SEEMP_API_android_provider_Settings__put_MODE_RINGER_STREAMS_AFFECTED_); + value_to_put_map.put(Settings.System.VOLUME_SYSTEM, + SEEMP_API_android_provider_Settings__put_VOLUME_SYSTEM_); + value_to_put_map.put(Settings.System.SCREEN_OFF_TIMEOUT, + SEEMP_API_android_provider_Settings__put_SCREEN_OFF_TIMEOUT_); + value_to_put_map.put(Settings.System.RADIO_WIFI, + SEEMP_API_android_provider_Settings__put_RADIO_WIFI_); + value_to_put_map.put(Settings.System.AUTO_TIME_ZONE, + SEEMP_API_android_provider_Settings__put_AUTO_TIME_ZONE_); + value_to_put_map.put(Settings.System.TEXT_AUTO_CAPS, + SEEMP_API_android_provider_Settings__put_TEXT_AUTO_CAPS_); + value_to_put_map.put(Settings.System.WALLPAPER_ACTIVITY, + SEEMP_API_android_provider_Settings__put_WALLPAPER_ACTIVITY_); + value_to_put_map.put(Settings.System.ANIMATOR_DURATION_SCALE, + SEEMP_API_android_provider_Settings__put_ANIMATOR_DURATION_SCALE_); + value_to_put_map.put(Settings.System.WIFI_NUM_OPEN_NETWORKS_KEPT, + SEEMP_API_android_provider_Settings__put_WIFI_NUM_OPEN_NETWORKS_KEPT_); + value_to_put_map.put(Settings.System.LOCK_PATTERN_VISIBLE, + SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_VISIBLE_); + value_to_put_map.put(Settings.System.VOLUME_VOICE, + SEEMP_API_android_provider_Settings__put_VOLUME_VOICE_); + value_to_put_map.put(Settings.System.DEBUG_APP, + SEEMP_API_android_provider_Settings__put_DEBUG_APP_); + value_to_put_map.put(Settings.System.WIFI_ON, + SEEMP_API_android_provider_Settings__put_WIFI_ON_); + value_to_put_map.put(Settings.System.TEXT_SHOW_PASSWORD, + SEEMP_API_android_provider_Settings__put_TEXT_SHOW_PASSWORD_); + value_to_put_map.put(Settings.System.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, + SEEMP_API_android_provider_Settings__put_WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY_); + value_to_put_map.put(Settings.System.WIFI_SLEEP_POLICY, + SEEMP_API_android_provider_Settings__put_WIFI_SLEEP_POLICY_); + value_to_put_map.put(Settings.System.VOLUME_MUSIC, + SEEMP_API_android_provider_Settings__put_VOLUME_MUSIC_); + value_to_put_map.put(Settings.System.PARENTAL_CONTROL_LAST_UPDATE, + SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_LAST_UPDATE_); + value_to_put_map.put(Settings.System.DEVICE_PROVISIONED, + SEEMP_API_android_provider_Settings__put_DEVICE_PROVISIONED_); + value_to_put_map.put(Settings.System.HTTP_PROXY, + SEEMP_API_android_provider_Settings__put_HTTP_PROXY_); + value_to_put_map.put(Settings.System.ANDROID_ID, + SEEMP_API_android_provider_Settings__put_ANDROID_ID_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_MAX_AP_CHECKS, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_MAX_AP_CHECKS_); + value_to_put_map.put(Settings.System.END_BUTTON_BEHAVIOR, + SEEMP_API_android_provider_Settings__put_END_BUTTON_BEHAVIOR_); + value_to_put_map.put(Settings.System.NEXT_ALARM_FORMATTED, + SEEMP_API_android_provider_Settings__put_NEXT_ALARM_FORMATTED_); + value_to_put_map.put(Settings.System.RADIO_CELL, + SEEMP_API_android_provider_Settings__put_RADIO_CELL_); + value_to_put_map.put(Settings.System.PARENTAL_CONTROL_ENABLED, + SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_ENABLED_); + value_to_put_map.put(Settings.System.BLUETOOTH_ON, + SEEMP_API_android_provider_Settings__put_BLUETOOTH_ON_); + value_to_put_map.put(Settings.System.WINDOW_ANIMATION_SCALE, + SEEMP_API_android_provider_Settings__put_WINDOW_ANIMATION_SCALE_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED_); + value_to_put_map.put(Settings.System.BLUETOOTH_DISCOVERABILITY, + SEEMP_API_android_provider_Settings__put_BLUETOOTH_DISCOVERABILITY_); + value_to_put_map.put(Settings.System.WIFI_STATIC_DNS1, + SEEMP_API_android_provider_Settings__put_WIFI_STATIC_DNS1_); + value_to_put_map.put(Settings.System.WIFI_STATIC_DNS2, + SEEMP_API_android_provider_Settings__put_WIFI_STATIC_DNS2_); + value_to_put_map.put(Settings.System.HAPTIC_FEEDBACK_ENABLED, + SEEMP_API_android_provider_Settings__put_HAPTIC_FEEDBACK_ENABLED_); + value_to_put_map.put(Settings.System.SHOW_WEB_SUGGESTIONS, + SEEMP_API_android_provider_Settings__put_SHOW_WEB_SUGGESTIONS_); + value_to_put_map.put(Settings.System.PARENTAL_CONTROL_REDIRECT_URL, + SEEMP_API_android_provider_Settings__put_PARENTAL_CONTROL_REDIRECT_URL_); + value_to_put_map.put(Settings.System.DATE_FORMAT, + SEEMP_API_android_provider_Settings__put_DATE_FORMAT_); + value_to_put_map.put(Settings.System.RADIO_NFC, + SEEMP_API_android_provider_Settings__put_RADIO_NFC_); + value_to_put_map.put(Settings.System.AIRPLANE_MODE_RADIOS, + SEEMP_API_android_provider_Settings__put_AIRPLANE_MODE_RADIOS_); + value_to_put_map.put(Settings.System.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, + SEEMP_API_android_provider_Settings__put_LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED_); + value_to_put_map.put(Settings.System.TIME_12_24, + SEEMP_API_android_provider_Settings__put_TIME_12_24_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT_); + value_to_put_map.put(Settings.System.VOLUME_BLUETOOTH_SCO, + SEEMP_API_android_provider_Settings__put_VOLUME_BLUETOOTH_SCO_); + value_to_put_map.put(Settings.System.USER_ROTATION, + SEEMP_API_android_provider_Settings__put_USER_ROTATION_); + value_to_put_map.put(Settings.System.WIFI_STATIC_GATEWAY, + SEEMP_API_android_provider_Settings__put_WIFI_STATIC_GATEWAY_); + value_to_put_map.put(Settings.System.STAY_ON_WHILE_PLUGGED_IN, + SEEMP_API_android_provider_Settings__put_STAY_ON_WHILE_PLUGGED_IN_); + value_to_put_map.put(Settings.System.SOUND_EFFECTS_ENABLED, + SEEMP_API_android_provider_Settings__put_SOUND_EFFECTS_ENABLED_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_PING_COUNT, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_PING_COUNT_); + value_to_put_map.put(Settings.System.DATA_ROAMING, + SEEMP_API_android_provider_Settings__put_DATA_ROAMING_); + value_to_put_map.put(Settings.System.SETTINGS_CLASSNAME, + SEEMP_API_android_provider_Settings__put_SETTINGS_CLASSNAME_); + value_to_put_map.put(Settings.System.TRANSITION_ANIMATION_SCALE, + SEEMP_API_android_provider_Settings__put_TRANSITION_ANIMATION_SCALE_); + value_to_put_map.put(Settings.System.WAIT_FOR_DEBUGGER, + SEEMP_API_android_provider_Settings__put_WAIT_FOR_DEBUGGER_); + value_to_put_map.put(Settings.System.INSTALL_NON_MARKET_APPS, + SEEMP_API_android_provider_Settings__put_INSTALL_NON_MARKET_APPS_); + value_to_put_map.put(Settings.System.ADB_ENABLED, + SEEMP_API_android_provider_Settings__put_ADB_ENABLED_); + value_to_put_map.put(Settings.System.WIFI_USE_STATIC_IP, + SEEMP_API_android_provider_Settings__put_WIFI_USE_STATIC_IP_); + value_to_put_map.put(Settings.System.DIM_SCREEN, + SEEMP_API_android_provider_Settings__put_DIM_SCREEN_); + value_to_put_map.put(Settings.System.VOLUME_ALARM, + SEEMP_API_android_provider_Settings__put_VOLUME_ALARM_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_ON, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_ON_); + value_to_put_map.put(Settings.System.WIFI_STATIC_NETMASK, + SEEMP_API_android_provider_Settings__put_WIFI_STATIC_NETMASK_); + value_to_put_map.put(Settings.System.NETWORK_PREFERENCE, + SEEMP_API_android_provider_Settings__put_NETWORK_PREFERENCE_); + value_to_put_map.put(Settings.System.SHOW_PROCESSES, + SEEMP_API_android_provider_Settings__put_SHOW_PROCESSES_); + value_to_put_map.put(Settings.System.TEXT_AUTO_REPLACE, + SEEMP_API_android_provider_Settings__put_TEXT_AUTO_REPLACE_); + value_to_put_map.put(Settings.System.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, + SEEMP_API_android_provider_Settings__put_WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON_); + value_to_put_map.put(Settings.System.APPEND_FOR_LAST_AUDIBLE, + SEEMP_API_android_provider_Settings__put_APPEND_FOR_LAST_AUDIBLE_); + value_to_put_map.put(Settings.System.SHOW_GTALK_SERVICE_STATUS, + SEEMP_API_android_provider_Settings__put_SHOW_GTALK_SERVICE_STATUS_); + value_to_put_map.put(Settings.System.SCREEN_BRIGHTNESS, + SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_); + value_to_put_map.put(Settings.System.USE_GOOGLE_MAIL, + SEEMP_API_android_provider_Settings__put_USE_GOOGLE_MAIL_); + value_to_put_map.put(Settings.System.RINGTONE, + SEEMP_API_android_provider_Settings__put_RINGTONE_); + value_to_put_map.put(Settings.System.LOGGING_ID, + SEEMP_API_android_provider_Settings__put_LOGGING_ID_); + value_to_put_map.put(Settings.System.MODE_RINGER, + SEEMP_API_android_provider_Settings__put_MODE_RINGER_); + value_to_put_map.put(Settings.System.MUTE_STREAMS_AFFECTED, + SEEMP_API_android_provider_Settings__put_MUTE_STREAMS_AFFECTED_); + value_to_put_map.put(Settings.System.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, + SEEMP_API_android_provider_Settings__put_WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE_); + value_to_put_map.put(Settings.System.TEXT_AUTO_PUNCTUATE, + SEEMP_API_android_provider_Settings__put_TEXT_AUTO_PUNCTUATE_); + value_to_put_map.put(Settings.System.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS, + SEEMP_API_android_provider_Settings__put_WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS_); + value_to_put_map.put(Settings.System.SCREEN_BRIGHTNESS_MODE, + SEEMP_API_android_provider_Settings__put_SCREEN_BRIGHTNESS_MODE_); + } + + public static int getSeempPutApiIdFromValue( String v ) + { + Integer result = value_to_put_map.get( v ); + if (result == null) + { + result = -1; + } + return result; + } +} diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index ec18f2055f11..f0b42abec457 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -9920,6 +9920,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final int actionMasked = event.getActionMasked(); if (actionMasked == MotionEvent.ACTION_DOWN) { + android.util.SeempLog.record(3); // Defensive cleanup for new gesture stopNestedScroll(); } @@ -10516,6 +10517,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param event the KeyEvent object that defines the button action */ public boolean onKeyDown(int keyCode, KeyEvent event) { + android.util.SeempLog.record(4); if (KeyEvent.isConfirmKey(keyCode)) { if ((mViewFlags & ENABLED_MASK) == DISABLED) { return true; @@ -10564,6 +10566,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param event The KeyEvent object that defines the button action. */ public boolean onKeyUp(int keyCode, KeyEvent event) { + android.util.SeempLog.record(5); if (KeyEvent.isConfirmKey(keyCode)) { if ((mViewFlags & ENABLED_MASK) == DISABLED) { return true; @@ -11073,6 +11076,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @return True if the event was handled, false otherwise. */ public boolean onTouchEvent(MotionEvent event) { + android.util.SeempLog.record(3); final float x = event.getX(); final float y = event.getY(); final int viewFlags = mViewFlags; diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index dd4e09685362..c07c87cea7fc 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -89,12 +89,14 @@ public final class WindowManagerImpl implements WindowManager { @Override public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { + android.util.SeempLog.record_vg_layout(383,params); applyDefaultToken(params); mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow); } @Override public void updateViewLayout(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { + android.util.SeempLog.record_vg_layout(384,params); applyDefaultToken(params); mGlobal.updateViewLayout(view, params); } diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java index 2d3b6abbd08a..1849dac2d7ab 100644 --- a/core/java/android/webkit/WebChromeClient.java +++ b/core/java/android/webkit/WebChromeClient.java @@ -297,7 +297,9 @@ public class WebChromeClient { * origin. */ public void onGeolocationPermissionsShowPrompt(String origin, - GeolocationPermissions.Callback callback) {} + GeolocationPermissions.Callback callback) { + android.util.SeempLog.record(54); + } /** * Notify the host application that a request for Geolocation permissions, diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 5455205655a3..ee3d14c2607c 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -29,6 +29,7 @@ LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES LOCAL_CFLAGS += -DU_USING_ICU_NAMESPACE=0 LOCAL_SRC_FILES:= \ + android_util_SeempLog.cpp \ AndroidRuntime.cpp \ com_android_internal_content_NativeLibraryHelper.cpp \ com_google_android_gles_jni_EGLImpl.cpp \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 64e634168fa0..5eae338f4ed6 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -104,6 +104,7 @@ extern int register_android_media_JetPlayer(JNIEnv *env); extern int register_android_media_ToneGenerator(JNIEnv *env); namespace android { +extern int register_android_util_SeempLog(JNIEnv* env); /* * JNI-based registration functions. Note these are properly contained in @@ -1261,6 +1262,7 @@ static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env } static const RegJNIRec gRegJNI[] = { + REG_JNI(register_android_util_SeempLog), REG_JNI(register_com_android_internal_os_RuntimeInit), REG_JNI(register_android_os_SystemClock), REG_JNI(register_android_util_EventLog), diff --git a/core/jni/android_util_SeempLog.cpp b/core/jni/android_util_SeempLog.cpp new file mode 100644 index 000000000000..734490a03957 --- /dev/null +++ b/core/jni/android_util_SeempLog.cpp @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * Not a Contribution. + * + * Copyright (C) 2007-2014 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef __BIONIC__ +#include +#endif +#include + +#include "jni.h" +#include "JNIHelp.h" +#include "utils/misc.h" +#include "android_runtime/AndroidRuntime.h" + +#define LOG_BUF_SIZE 1024 +#define SEEMP_SOCK_NAME "/dev/socket/seempdw" +#ifndef __unused +#define __unused __attribute__((__unused__)) +#endif + +static int __write_to_log_init(struct iovec *vec, size_t nr); +static int (*write_to_log)(struct iovec *vec, size_t nr) = __write_to_log_init; +static int logd_fd = -1; + +/* give up, resources too limited */ +static int __write_to_log_null(struct iovec *vec __unused, + size_t nr __unused) +{ + return -1; +} + +/* log_init_lock assumed */ +static int __write_to_log_initialize() +{ + int i, ret = 0; + if (logd_fd >= 0) { + i = logd_fd; + logd_fd = -1; + close(i); + } + + i = socket(PF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); + if (i < 0) { + ret = -errno; + write_to_log = __write_to_log_null; + } else if (fcntl(i, F_SETFL, O_NONBLOCK) < 0) { + ret = -errno; + close(i); + i = -1; + write_to_log = __write_to_log_null; + } else { + struct sockaddr_un un; + memset(&un, 0, sizeof(struct sockaddr_un)); + un.sun_family = AF_UNIX; + strlcpy(un.sun_path, SEEMP_SOCK_NAME, sizeof(un.sun_path)); + if (connect(i, (struct sockaddr *)&un, sizeof(struct sockaddr_un)) < 0) { + ret = -errno; + close(i); + i = -1; + } + } + logd_fd = i; + return ret; +} + +static int __write_to_log_socket(struct iovec *vec, size_t nr) +{ + ssize_t ret; + if (logd_fd < 0) { + return -EBADF; + } + + /* + * The write below could be lost, but will never block. + * + * ENOTCONN occurs if logd dies. + * EAGAIN occurs if logd is overloaded. + */ + ret = writev(logd_fd, vec, nr); + if (ret < 0) { + ret = -errno; + if (ret == -ENOTCONN) { + ret = __write_to_log_initialize(); + if (ret < 0) { + return ret; + } + + ret = writev(logd_fd, vec, nr); + if (ret < 0) { + ret = -errno; + } + } + } + + return ret; +} + +static int __write_to_log_init(struct iovec *vec, size_t nr) +{ + if (write_to_log == __write_to_log_init) { + int ret; + + ret = __write_to_log_initialize(); + if (ret < 0) { + return ret; + } + + write_to_log = __write_to_log_socket; + } + return write_to_log(vec, nr); +} + +int __android_seemp_socket_write(int len, const char *msg) +{ + struct iovec vec; + vec.iov_base = (void *) msg; + vec.iov_len = len; + + return write_to_log(&vec, 1); +} + +namespace android { + +/* + * In class android.util.Log: + * public static native int println_native(int buffer, int priority, String tag, String msg) + */ +static jint android_util_SeempLog_println_native(JNIEnv* env, jobject clazz, + jint api, jstring msgObj) +{ + if (msgObj == NULL) { + jniThrowNullPointerException(env, "seemp_println needs a message"); + return -1; + } + + int apiId = (int)api; + int apiIdLen = sizeof(apiId); + int utf8MsgLen = env->GetStringUTFLength(msgObj); + int len = apiIdLen + 1 + utf8MsgLen + 1; + char *msg = (char*)malloc(len); + if ( NULL == msg ) + { + return -1; + } + char *params = msg + apiIdLen + 1; // api_id + encoding byte + params + + *((int*)msg) = apiId; // copy api id + // // skip encoding byte + env->GetStringUTFRegion(msgObj, 0, env->GetStringLength(msgObj), params); // copy message + msg[len - 1] = 0; // copy terminating zero + + int res = __android_seemp_socket_write(len, msg); // send message + + free(msg); + + return res; +} + +/* + * JNI registration. + */ +static JNINativeMethod gMethods[] = { + /* name, signature, funcPtr */ + { "seemp_println_native", "(ILjava/lang/String;)I", + (void*) android_util_SeempLog_println_native }, +}; + +int register_android_util_SeempLog(JNIEnv* env) +{ + jclass clazz = env->FindClass("android/util/SeempLog"); + if (clazz == NULL) { + return -1; + } + + return AndroidRuntime::registerNativeMethods(env, "android/util/SeempLog", gMethods, + NELEM(gMethods)); +} + +}; // namespace android diff --git a/include/SeempLog.h b/include/SeempLog.h new file mode 100644 index 000000000000..30ae338b7e3c --- /dev/null +++ b/include/SeempLog.h @@ -0,0 +1,51 @@ +/* + +Copyright (c) 2015, The Linux Foundation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include + +#define SEEMPLOG_RECORD(api, params) \ + static bool shouldTryLoad = true; \ + static void (*seemp_log_record_func)(int type, const char* msg) = NULL; \ + \ + if (shouldTryLoad) { \ + shouldTryLoad = false; \ + void* libhandle = dlopen("libSeemplog.so", RTLD_NOW); \ + if (libhandle != NULL) { \ + *(void**)(&seemp_log_record_func) = \ + dlsym(libhandle, "seemp_log_record"); \ + } \ + } \ + if (seemp_log_record_func) \ + seemp_log_record_func(api, params); + + + diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 2b3ed8748a20..eae966405deb 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -463,6 +463,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) { + android.util.SeempLog.record(47); checkProvider(provider); checkListener(listener); @@ -495,6 +496,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener, Looper looper) { + android.util.SeempLog.record(47); checkProvider(provider); checkListener(listener); @@ -528,6 +530,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper) { + android.util.SeempLog.record(47); checkCriteria(criteria); checkListener(listener); @@ -556,6 +559,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent) { + android.util.SeempLog.record(47); checkProvider(provider); checkPendingIntent(intent); @@ -658,6 +662,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria, PendingIntent intent) { + android.util.SeempLog.record(47); checkCriteria(criteria); checkPendingIntent(intent); @@ -687,6 +692,7 @@ public class LocationManager { */ @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestSingleUpdate(String provider, LocationListener listener, Looper looper) { + android.util.SeempLog.record(64); checkProvider(provider); checkListener(listener); @@ -717,6 +723,7 @@ public class LocationManager { */ @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestSingleUpdate(Criteria criteria, LocationListener listener, Looper looper) { + android.util.SeempLog.record(64); checkCriteria(criteria); checkListener(listener); @@ -740,6 +747,7 @@ public class LocationManager { */ @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestSingleUpdate(String provider, PendingIntent intent) { + android.util.SeempLog.record(64); checkProvider(provider); checkPendingIntent(intent); @@ -764,6 +772,7 @@ public class LocationManager { */ @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void requestSingleUpdate(Criteria criteria, PendingIntent intent) { + android.util.SeempLog.record(64); checkCriteria(criteria); checkPendingIntent(intent); @@ -832,6 +841,7 @@ public class LocationManager { @SystemApi public void requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper) { + android.util.SeempLog.record(47); checkListener(listener); requestLocationUpdates(request, listener, looper, null); } @@ -859,6 +869,7 @@ public class LocationManager { */ @SystemApi public void requestLocationUpdates(LocationRequest request, PendingIntent intent) { + android.util.SeempLog.record(47); checkPendingIntent(intent); requestLocationUpdates(request, null, null, intent); } @@ -877,6 +888,7 @@ public class LocationManager { private void requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper, PendingIntent intent) { + android.util.SeempLog.record(47); String packageName = mContext.getPackageName(); @@ -985,6 +997,7 @@ public class LocationManager { @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public void addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent) { + android.util.SeempLog.record(45); checkPendingIntent(intent); if (expiration < 0) expiration = Long.MAX_VALUE; @@ -1196,6 +1209,7 @@ public class LocationManager { */ @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public Location getLastKnownLocation(String provider) { + android.util.SeempLog.record(46); checkProvider(provider); String packageName = mContext.getPackageName(); LocationRequest request = LocationRequest.createFromDeprecatedProvider( @@ -1665,6 +1679,7 @@ public class LocationManager { @Deprecated @RequiresPermission(ACCESS_FINE_LOCATION) public boolean addGpsStatusListener(GpsStatus.Listener listener) { + android.util.SeempLog.record(43); boolean result; if (mGpsStatusListeners.get(listener) != null) { @@ -1840,6 +1855,7 @@ public class LocationManager { @Deprecated @RequiresPermission(ACCESS_FINE_LOCATION) public boolean addNmeaListener(GpsStatus.NmeaListener listener) { + android.util.SeempLog.record(44); boolean result; if (mGpsNmeaListeners.get(listener) != null) { @@ -2222,6 +2238,7 @@ public class LocationManager { * @return true if the command succeeds. */ public boolean sendExtraCommand(String provider, String command, Bundle extras) { + android.util.SeempLog.record(48); try { return mService.sendExtraCommand(provider, command, extras); } catch (RemoteException e) { diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java index 76776d46d368..435629631694 100644 --- a/media/java/android/media/AudioRecord.java +++ b/media/java/android/media/AudioRecord.java @@ -981,6 +981,7 @@ public class AudioRecord implements AudioRouting */ public void startRecording() throws IllegalStateException { + android.util.SeempLog.record(70); if (mState != STATE_INITIALIZED) { throw new IllegalStateException("startRecording() called on an " + "uninitialized AudioRecord."); @@ -1004,6 +1005,7 @@ public class AudioRecord implements AudioRouting */ public void startRecording(MediaSyncEvent syncEvent) throws IllegalStateException { + android.util.SeempLog.record(70); if (mState != STATE_INITIALIZED) { throw new IllegalStateException("startRecording() called on an " + "uninitialized AudioRecord."); diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index f7bd04b08ede..5dfbf8f0900b 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -775,6 +775,7 @@ public class AccountManagerService @Override public String getPassword(Account account) { + android.util.SeempLog.record(14); int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "getPassword: " + account @@ -869,6 +870,7 @@ public class AccountManagerService @Override public String getUserData(Account account, String key) { + android.util.SeempLog.record(15); final int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { String msg = String.format("getUserData( account: %s, key: %s, callerUid: %s, pid: %s", @@ -1485,6 +1487,7 @@ public class AccountManagerService @Override public void removeAccount(IAccountManagerResponse response, Account account, boolean expectActivityLaunch) { + android.util.SeempLog.record(17); removeAccountAsUser( response, account, @@ -1893,6 +1896,7 @@ public class AccountManagerService @Override public void setPassword(Account account, String password) { + android.util.SeempLog.record(18); final int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "setAuthToken: " + account @@ -1957,6 +1961,7 @@ public class AccountManagerService @Override public void clearPassword(Account account) { + android.util.SeempLog.record(19); final int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "clearPassword: " + account @@ -1983,6 +1988,7 @@ public class AccountManagerService @Override public void setUserData(Account account, String key, String value) { + android.util.SeempLog.record(20); final int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "setUserData: " + account @@ -2452,6 +2458,7 @@ public class AccountManagerService public void addAccount(final IAccountManagerResponse response, final String accountType, final String authTokenType, final String[] requiredFeatures, final boolean expectActivityLaunch, final Bundle optionsIn) { + android.util.SeempLog.record(16); Bundle.setDefusable(optionsIn, true); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "addAccount: accountType " + accountType @@ -3221,6 +3228,7 @@ public class AccountManagerService @Override public void editProperties(IAccountManagerResponse response, final String accountType, final boolean expectActivityLaunch) { + android.util.SeempLog.record(21); final int callingUid = Binder.getCallingUid(); if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "editProperties: accountType " + accountType diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 4683c7ae2024..0759b4bd4c84 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -20198,6 +20198,18 @@ public final class ActivityManagerService extends ActivityManagerNative boolean success = true; if (app.curRawAdj != app.setRawAdj) { + String seempStr = "app_uid=" + app.uid + + ",app_pid=" + app.pid + ",oom_adj=" + app.curAdj + + ",setAdj=" + app.setAdj + ",hasShownUi=" + (app.hasShownUi ? 1 : 0) + + ",cached=" + (app.cached ? 1 : 0) + + ",fA=" + (app.foregroundActivities ? 1 : 0) + + ",fS=" + (app.foregroundServices ? 1 : 0) + + ",systemNoUi=" + (app.systemNoUi ? 1 : 0) + + ",curSchedGroup=" + app.curSchedGroup + + ",curProcState=" + app.curProcState + ",setProcState=" + app.setProcState + + ",killed=" + (app.killed ? 1 : 0) + ",killedByAm=" + (app.killedByAm ? 1 : 0) + + ",debugging=" + (app.debugging ? 1 : 0); + android.util.SeempLog.record_str(385, seempStr); app.setRawAdj = app.curRawAdj; } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index 8911a3e94979..c70bf021bc01 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -457,6 +457,18 @@ final class ProcessRecord { } public void makeActive(IApplicationThread _thread, ProcessStatsService tracker) { + String seempStr = "app_uid=" + uid + + ",app_pid=" + pid + ",oom_adj=" + curAdj + + ",setAdj=" + setAdj + ",hasShownUi=" + (hasShownUi ? 1 : 0) + + ",cached=" + (cached ? 1 : 0) + + ",fA=" + (foregroundActivities ? 1 : 0) + + ",fS=" + (foregroundServices ? 1 : 0) + + ",systemNoUi=" + (systemNoUi ? 1 : 0) + + ",curSchedGroup=" + curSchedGroup + + ",curProcState=" + curProcState + ",setProcState=" + setProcState + + ",killed=" + (killed ? 1 : 0) + ",killedByAm=" + (killedByAm ? 1 : 0) + + ",debugging=" + (debugging ? 1 : 0); + android.util.SeempLog.record_str(386, seempStr); if (thread == null) { final ProcessState origBase = baseProcessTracker; if (origBase != null) { @@ -483,6 +495,18 @@ final class ProcessRecord { } public void makeInactive(ProcessStatsService tracker) { + String seempStr = "app_uid=" + uid + + ",app_pid=" + pid + ",oom_adj=" + curAdj + + ",setAdj=" + setAdj + ",hasShownUi=" + (hasShownUi ? 1 : 0) + + ",cached=" + (cached ? 1 : 0) + + ",fA=" + (foregroundActivities ? 1 : 0) + + ",fS=" + (foregroundServices ? 1 : 0) + + ",systemNoUi=" + (systemNoUi ? 1 : 0) + + ",curSchedGroup=" + curSchedGroup + + ",curProcState=" + curProcState + ",setProcState=" + setProcState + + ",killed=" + (killed ? 1 : 0) + ",killedByAm=" + (killedByAm ? 1 : 0) + + ",debugging=" + (debugging ? 1 : 0); + android.util.SeempLog.record_str(387, seempStr); thread = null; final ProcessState origBase = baseProcessTracker; if (origBase != null) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7975dcac29b3..9fe7b59a1595 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -11556,6 +11556,7 @@ public class PackageManagerService extends IPackageManager.Stub { @Override public void installPackageAsUser(String originPath, IPackageInstallObserver2 observer, int installFlags, String installerPackageName, int userId) { + android.util.SeempLog.record(90); mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null); final int callingUid = Binder.getCallingUid(); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index e2b5b98664ca..975f6f29065b 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -819,6 +819,7 @@ public class TelephonyManager { * @param slotId of which deviceID is returned */ public String getDeviceId(int slotId) { + android.util.SeempLog.record_str(8, ""+slotId); // FIXME this assumes phoneId == slotId try { IPhoneSubInfo info = getSubscriberInfo(); @@ -914,6 +915,7 @@ public class TelephonyManager { * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION}. */ public CellLocation getCellLocation() { + android.util.SeempLog.record(49); try { ITelephony telephony = getITelephony(); if (telephony == null) { @@ -1011,6 +1013,7 @@ public class TelephonyManager { */ @Deprecated public List getNeighboringCellInfo() { + android.util.SeempLog.record(50); try { ITelephony telephony = getITelephony(); if (telephony == null) @@ -2014,6 +2017,7 @@ public class TelephonyManager { * @hide */ public String getSimSerialNumber(int subId) { + android.util.SeempLog.record_str(388, ""+subId); try { IPhoneSubInfo info = getSubscriberInfo(); if (info == null) @@ -2103,6 +2107,7 @@ public class TelephonyManager { * @hide */ public String getSubscriberId(int subId) { + android.util.SeempLog.record_str(389, ""+subId); try { IPhoneSubInfo info = getSubscriberInfo(); if (info == null) @@ -2191,6 +2196,7 @@ public class TelephonyManager { * @hide */ public String getLine1Number(int subId) { + android.util.SeempLog.record_str(9, ""+subId); String number = null; try { ITelephony telephony = getITelephony(); diff --git a/telephony/java/com/android/internal/telephony/CallerInfo.java b/telephony/java/com/android/internal/telephony/CallerInfo.java index 5f3f773b062c..73140073bbb2 100644 --- a/telephony/java/com/android/internal/telephony/CallerInfo.java +++ b/telephony/java/com/android/internal/telephony/CallerInfo.java @@ -171,6 +171,7 @@ public class CallerInfo { * number. The returned CallerInfo is null if no number is supplied. */ public static CallerInfo getCallerInfo(Context context, Uri contactRef, Cursor cursor) { + android.util.SeempLog.record_uri(12, contactRef); CallerInfo info = new CallerInfo(); info.photoResource = 0; info.phoneLabel = null; @@ -343,6 +344,7 @@ public class CallerInfo { * with all relevant fields empty or null. */ public static CallerInfo getCallerInfo(Context context, String number, int subId) { + android.util.SeempLog.record_str(12, "number="+number+",subId="+subId); if (TextUtils.isEmpty(number)) { return null; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java index 30317012fb52..82c45ad65ba7 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java @@ -45,6 +45,7 @@ public class WindowManagerImpl implements WindowManager { @Override public void addView(View arg0, android.view.ViewGroup.LayoutParams arg1) { + android.util.SeempLog.record_vg(383, arg1); // pass } @@ -55,6 +56,7 @@ public class WindowManagerImpl implements WindowManager { @Override public void updateViewLayout(View arg0, android.view.ViewGroup.LayoutParams arg1) { + android.util.SeempLog.record_vg(384, arg1); // pass } diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index d2aad487d710..d02fcd82a3ce 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -1307,6 +1307,7 @@ public class WifiManager { * returned. */ public List getScanResults() { + android.util.SeempLog.record(55); try { return mService.getScanResults(mContext.getOpPackageName()); } catch (RemoteException e) { -- GitLab From 43674ec6fad04725057875bb16dd4cdeeda39742 Mon Sep 17 00:00:00 2001 From: Shammi Khattar Date: Wed, 30 Mar 2016 15:46:11 -0700 Subject: [PATCH 102/185] Make data call errors configurable. Retry requirements of carriers for ACTIVATION_REJECT_GGSN and PROTOCOL_ERRORS may be different and should be made configurable. CRs-Fixed: 1017540 Change-Id: Id49121c9eafc32384559c7ea1bf0edf8357d0d87 --- .../android/telephony/CarrierConfigManager.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index a5ee24249e81..79eb2f27577b 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -724,6 +724,18 @@ public class CarrierConfigManager { /** @hide */ public static final int CDMA_ROAMING_MODE_ANY = 2; + /** + * Key that determines if ACTIVATE_REJECT_GGSN is to be treated as a permanent error. + * @hide + */ + public static final String KEY_REJECT_GGSN_PERM_FAILURE = "reject_ggsn_perm_failure"; + + /** + * Key that determines if PROTOCOL_ERRORS is treated as permanent error. + * @hide + */ + public static final String KEY_PROTOCOL_ERRORS_PERM_FAILURE = "protocol_errors_perm_failure"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -826,6 +838,8 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CONFIG_WIFI_DISABLE_IN_ECBM, false); sDefaults.putBoolean(KEY_CARRIER_NAME_OVERRIDE_BOOL, false); sDefaults.putString(KEY_CARRIER_NAME_STRING, ""); + sDefaults.putBoolean(KEY_REJECT_GGSN_PERM_FAILURE,true); + sDefaults.putBoolean(KEY_PROTOCOL_ERRORS_PERM_FAILURE,true); // MMS defaults sDefaults.putBoolean(KEY_MMS_ALIAS_ENABLED_BOOL, false); -- GitLab From 0534d81cca347c61bd8fc882f65d2a3807c72a18 Mon Sep 17 00:00:00 2001 From: mqi Date: Fri, 13 May 2016 16:17:14 +0800 Subject: [PATCH 103/185] SystemUI: Customize StatusBar for China carriers 1. Show carrier label in notification panel. 2. Support monitor locale change and display for radio tech. 3. Update Chinese roaming string. 4. Show wifi activity in status bar. 5. Show indicator for Wifi on but not connected. 6. Show rsrp level for LTE. 7. Redesign the scheme of selecting icons on signal cluster. Customized SigalClusterView and MobileSignalController to adapt requirement from China carriers. The customization is controller by config values defined in overlayed config.xml. 8. Add customized China carriers resoure files CRs-Fixed: 916021 Change-Id: Id71a0c98f1a65f31d9a81ddba61d78570e7a96ba --- core/java/android/util/NativeTextHelper.java | 92 ++ core/res/res/values-zh-rCN/strings.xml | 6 + core/res/res/values-zh-rHK/strings.xml | 6 + core/res/res/values/config.xml | 42 + core/res/res/values/strings.xml | 4 + core/res/res/values/symbols.xml | 13 + .../src/com/android/keyguard/CarrierText.java | 57 + .../android/keyguard/KeyguardConstants.java | 4 +- .../keyguard/KeyguardUpdateMonitor.java | 18 + .../stat_sys_data_connected_1x.png | Bin 0 -> 615 bytes .../stat_sys_data_connected_3g.png | Bin 0 -> 643 bytes .../stat_sys_data_connected_4g.png | Bin 0 -> 629 bytes .../stat_sys_data_connected_e.png | Bin 0 -> 497 bytes .../stat_sys_data_connected_g.png | Bin 0 -> 546 bytes .../stat_sys_data_connected_h.png | Bin 0 -> 496 bytes .../stat_sys_data_connected_hp.png | Bin 0 -> 1260 bytes .../stat_sys_data_fully_connected_hp.png | Bin 0 -> 1250 bytes .../drawable-hdpi/stat_sys_data_idle_1x.png | Bin 0 -> 1699 bytes .../drawable-hdpi/stat_sys_data_idle_3g.png | Bin 0 -> 1732 bytes .../drawable-hdpi/stat_sys_data_idle_4g.png | Bin 0 -> 1698 bytes .../drawable-hdpi/stat_sys_data_idle_e.png | Bin 0 -> 1581 bytes .../drawable-hdpi/stat_sys_data_idle_g.png | Bin 0 -> 1599 bytes .../drawable-hdpi/stat_sys_data_idle_h.png | Bin 0 -> 1557 bytes .../res/drawable-hdpi/stat_sys_data_in_1x.png | Bin 0 -> 1804 bytes .../res/drawable-hdpi/stat_sys_data_in_3g.png | Bin 0 -> 1861 bytes .../res/drawable-hdpi/stat_sys_data_in_4g.png | Bin 0 -> 1793 bytes .../res/drawable-hdpi/stat_sys_data_in_e.png | Bin 0 -> 1752 bytes .../res/drawable-hdpi/stat_sys_data_in_g.png | Bin 0 -> 1760 bytes .../res/drawable-hdpi/stat_sys_data_in_h.png | Bin 0 -> 1742 bytes .../stat_sys_data_inandout_4g.png | Bin 0 -> 1817 bytes .../stat_sys_data_inandout_e.png | Bin 0 -> 1863 bytes .../stat_sys_data_inandout_h.png | Bin 0 -> 1858 bytes .../drawable-hdpi/stat_sys_data_inout_1x.png | Bin 0 -> 1901 bytes .../drawable-hdpi/stat_sys_data_inout_3g.png | Bin 0 -> 1911 bytes .../drawable-hdpi/stat_sys_data_inout_g.png | Bin 0 -> 1874 bytes .../drawable-hdpi/stat_sys_data_out_1x.png | Bin 0 -> 1786 bytes .../drawable-hdpi/stat_sys_data_out_3g.png | Bin 0 -> 1891 bytes .../drawable-hdpi/stat_sys_data_out_4g.png | Bin 0 -> 1796 bytes .../res/drawable-hdpi/stat_sys_data_out_e.png | Bin 0 -> 1772 bytes .../res/drawable-hdpi/stat_sys_data_out_g.png | Bin 0 -> 1781 bytes .../res/drawable-hdpi/stat_sys_data_out_h.png | Bin 0 -> 1758 bytes .../drawable-hdpi/stat_sys_no_sim1_new.png | Bin 0 -> 491 bytes .../drawable-hdpi/stat_sys_no_sim2_new.png | Bin 0 -> 510 bytes .../res/drawable-hdpi/stat_sys_no_sim_1.png | Bin 0 -> 1142 bytes .../stat_sys_r_signal_0_fully_sim1_3g.png | Bin 0 -> 3470 bytes .../stat_sys_r_signal_0_fully_sim1_4g.png | Bin 0 -> 1418 bytes .../stat_sys_r_signal_0_fully_sim1_g.png | Bin 0 -> 3183 bytes .../stat_sys_r_signal_0_fully_sim1_h.png | Bin 0 -> 3004 bytes .../stat_sys_r_signal_0_fully_sim1_hp.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_0_fully_sim2_3g.png | Bin 0 -> 3469 bytes .../stat_sys_r_signal_0_fully_sim2_4g.png | Bin 0 -> 1423 bytes .../stat_sys_r_signal_0_fully_sim2_g.png | Bin 0 -> 3181 bytes .../stat_sys_r_signal_0_fully_sim2_h.png | Bin 0 -> 3009 bytes .../stat_sys_r_signal_0_fully_sim2_hp.png | Bin 0 -> 1157 bytes .../stat_sys_r_signal_0_sim1_3g.png | Bin 0 -> 3470 bytes .../stat_sys_r_signal_0_sim1_4g.png | Bin 0 -> 1418 bytes .../stat_sys_r_signal_0_sim1_g.png | Bin 0 -> 3183 bytes .../stat_sys_r_signal_0_sim1_h.png | Bin 0 -> 3004 bytes .../stat_sys_r_signal_0_sim1_hp.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_0_sim2_3g.png | Bin 0 -> 3469 bytes .../stat_sys_r_signal_0_sim2_4g.png | Bin 0 -> 1423 bytes .../stat_sys_r_signal_0_sim2_g.png | Bin 0 -> 3181 bytes .../stat_sys_r_signal_0_sim2_h.png | Bin 0 -> 3009 bytes .../stat_sys_r_signal_0_sim2_hp.png | Bin 0 -> 1157 bytes .../stat_sys_r_signal_1_fully_sim1_3g.png | Bin 0 -> 3481 bytes .../stat_sys_r_signal_1_fully_sim1_4g.png | Bin 0 -> 1441 bytes .../stat_sys_r_signal_1_fully_sim1_g.png | Bin 0 -> 3196 bytes .../stat_sys_r_signal_1_fully_sim1_h.png | Bin 0 -> 3038 bytes .../stat_sys_r_signal_1_fully_sim1_hp.png | Bin 0 -> 1190 bytes .../stat_sys_r_signal_1_fully_sim2_3g.png | Bin 0 -> 3482 bytes .../stat_sys_r_signal_1_fully_sim2_4g.png | Bin 0 -> 1447 bytes .../stat_sys_r_signal_1_fully_sim2_g.png | Bin 0 -> 3195 bytes .../stat_sys_r_signal_1_fully_sim2_h.png | Bin 0 -> 3042 bytes .../stat_sys_r_signal_1_fully_sim2_hp.png | Bin 0 -> 1192 bytes .../stat_sys_r_signal_1_sim1_3g.png | Bin 0 -> 3475 bytes .../stat_sys_r_signal_1_sim1_4g.png | Bin 0 -> 1429 bytes .../stat_sys_r_signal_1_sim1_g.png | Bin 0 -> 3187 bytes .../stat_sys_r_signal_1_sim1_h.png | Bin 0 -> 3025 bytes .../stat_sys_r_signal_1_sim1_hp.png | Bin 0 -> 1177 bytes .../stat_sys_r_signal_1_sim2_3g.png | Bin 0 -> 3473 bytes .../stat_sys_r_signal_1_sim2_4g.png | Bin 0 -> 1437 bytes .../stat_sys_r_signal_1_sim2_g.png | Bin 0 -> 3187 bytes .../stat_sys_r_signal_1_sim2_h.png | Bin 0 -> 3029 bytes .../stat_sys_r_signal_1_sim2_hp.png | Bin 0 -> 1180 bytes .../stat_sys_r_signal_2_fully_sim1_3g.png | Bin 0 -> 3477 bytes .../stat_sys_r_signal_2_fully_sim1_4g.png | Bin 0 -> 1435 bytes .../stat_sys_r_signal_2_fully_sim1_g.png | Bin 0 -> 3194 bytes .../stat_sys_r_signal_2_fully_sim1_h.png | Bin 0 -> 3034 bytes .../stat_sys_r_signal_2_fully_sim1_hp.png | Bin 0 -> 1189 bytes .../stat_sys_r_signal_2_fully_sim2_3g.png | Bin 0 -> 3481 bytes .../stat_sys_r_signal_2_fully_sim2_4g.png | Bin 0 -> 1441 bytes .../stat_sys_r_signal_2_fully_sim2_g.png | Bin 0 -> 3192 bytes .../stat_sys_r_signal_2_fully_sim2_h.png | Bin 0 -> 3038 bytes .../stat_sys_r_signal_2_fully_sim2_hp.png | Bin 0 -> 1190 bytes .../stat_sys_r_signal_2_sim1_3g.png | Bin 0 -> 3469 bytes .../stat_sys_r_signal_2_sim1_4g.png | Bin 0 -> 1426 bytes .../stat_sys_r_signal_2_sim1_g.png | Bin 0 -> 3185 bytes .../stat_sys_r_signal_2_sim1_h.png | Bin 0 -> 3024 bytes .../stat_sys_r_signal_2_sim1_hp.png | Bin 0 -> 1179 bytes .../stat_sys_r_signal_2_sim2_3g.png | Bin 0 -> 3467 bytes .../stat_sys_r_signal_2_sim2_4g.png | Bin 0 -> 1431 bytes .../stat_sys_r_signal_2_sim2_g.png | Bin 0 -> 3184 bytes .../stat_sys_r_signal_2_sim2_h.png | Bin 0 -> 3029 bytes .../stat_sys_r_signal_2_sim2_hp.png | Bin 0 -> 1178 bytes .../stat_sys_r_signal_3_fully_sim1_3g.png | Bin 0 -> 3468 bytes .../stat_sys_r_signal_3_fully_sim1_4g.png | Bin 0 -> 1425 bytes .../stat_sys_r_signal_3_fully_sim1_g.png | Bin 0 -> 3184 bytes .../stat_sys_r_signal_3_fully_sim1_h.png | Bin 0 -> 3026 bytes .../stat_sys_r_signal_3_fully_sim1_hp.png | Bin 0 -> 1176 bytes .../stat_sys_r_signal_3_fully_sim2_3g.png | Bin 0 -> 3469 bytes .../stat_sys_r_signal_3_fully_sim2_4g.png | Bin 0 -> 1425 bytes .../stat_sys_r_signal_3_fully_sim2_g.png | Bin 0 -> 3181 bytes .../stat_sys_r_signal_3_fully_sim2_h.png | Bin 0 -> 3025 bytes .../stat_sys_r_signal_3_fully_sim2_hp.png | Bin 0 -> 1180 bytes .../stat_sys_r_signal_3_sim1_3g.png | Bin 0 -> 3448 bytes .../stat_sys_r_signal_3_sim1_4g.png | Bin 0 -> 1405 bytes .../stat_sys_r_signal_3_sim1_g.png | Bin 0 -> 3170 bytes .../stat_sys_r_signal_3_sim1_h.png | Bin 0 -> 3015 bytes .../stat_sys_r_signal_3_sim1_hp.png | Bin 0 -> 1167 bytes .../stat_sys_r_signal_3_sim2_3g.png | Bin 0 -> 3450 bytes .../stat_sys_r_signal_3_sim2_4g.png | Bin 0 -> 1408 bytes .../stat_sys_r_signal_3_sim2_g.png | Bin 0 -> 3171 bytes .../stat_sys_r_signal_3_sim2_h.png | Bin 0 -> 3019 bytes .../stat_sys_r_signal_3_sim2_hp.png | Bin 0 -> 1170 bytes .../stat_sys_r_signal_4_fully_sim1_3g.png | Bin 0 -> 3453 bytes .../stat_sys_r_signal_4_fully_sim1_4g.png | Bin 0 -> 1420 bytes .../stat_sys_r_signal_4_fully_sim1_g.png | Bin 0 -> 3180 bytes .../stat_sys_r_signal_4_fully_sim1_h.png | Bin 0 -> 2987 bytes .../stat_sys_r_signal_4_fully_sim1_hp.png | Bin 0 -> 1144 bytes .../stat_sys_r_signal_4_fully_sim2_3g.png | Bin 0 -> 3458 bytes .../stat_sys_r_signal_4_fully_sim2_4g.png | Bin 0 -> 1426 bytes .../stat_sys_r_signal_4_fully_sim2_g.png | Bin 0 -> 3181 bytes .../stat_sys_r_signal_4_fully_sim2_h.png | Bin 0 -> 2992 bytes .../stat_sys_r_signal_4_fully_sim2_hp.png | Bin 0 -> 1144 bytes .../stat_sys_r_signal_4_sim1_3g.png | Bin 0 -> 3385 bytes .../stat_sys_r_signal_4_sim1_4g.png | Bin 0 -> 1347 bytes .../stat_sys_r_signal_4_sim1_g.png | Bin 0 -> 3123 bytes .../stat_sys_r_signal_4_sim1_h.png | Bin 0 -> 2984 bytes .../stat_sys_r_signal_4_sim1_hp.png | Bin 0 -> 1142 bytes .../stat_sys_r_signal_4_sim2_3g.png | Bin 0 -> 3383 bytes .../stat_sys_r_signal_4_sim2_4g.png | Bin 0 -> 1348 bytes .../stat_sys_r_signal_4_sim2_g.png | Bin 0 -> 3130 bytes .../stat_sys_r_signal_4_sim2_h.png | Bin 0 -> 2990 bytes .../stat_sys_r_signal_4_sim2_hp.png | Bin 0 -> 1147 bytes .../drawable-hdpi/stat_sys_signal_0_1x.png | Bin 0 -> 3188 bytes .../stat_sys_signal_0_1x_fully.png | Bin 0 -> 3188 bytes .../stat_sys_signal_0_1x_fully_roam.png | Bin 0 -> 3243 bytes .../stat_sys_signal_0_1x_only.png | Bin 0 -> 3483 bytes .../stat_sys_signal_0_1x_only_fully.png | Bin 0 -> 3483 bytes .../stat_sys_signal_0_1x_only_fully_roam.png | Bin 0 -> 3545 bytes .../stat_sys_signal_0_1x_only_roam.png | Bin 0 -> 3545 bytes .../stat_sys_signal_0_1x_roam.png | Bin 0 -> 3243 bytes .../drawable-hdpi/stat_sys_signal_0_2g.png | Bin 0 -> 1445 bytes .../stat_sys_signal_0_2g_default.png | Bin 0 -> 1645 bytes .../stat_sys_signal_0_2g_default_fully.png | Bin 0 -> 1645 bytes ...tat_sys_signal_0_2g_default_fully_roam.png | Bin 0 -> 1703 bytes .../stat_sys_signal_0_2g_default_roam.png | Bin 0 -> 1703 bytes .../stat_sys_signal_0_2g_fully.png | Bin 0 -> 1445 bytes .../drawable-hdpi/stat_sys_signal_0_3g.png | Bin 0 -> 3203 bytes .../stat_sys_signal_0_3g_default.png | Bin 0 -> 3493 bytes .../stat_sys_signal_0_3g_default_fully.png | Bin 0 -> 3493 bytes ...tat_sys_signal_0_3g_default_fully_roam.png | Bin 0 -> 3547 bytes .../stat_sys_signal_0_3g_default_roam.png | Bin 0 -> 3547 bytes .../stat_sys_signal_0_3g_fully.png | Bin 0 -> 3203 bytes .../stat_sys_signal_0_3g_fully_roam.png | Bin 0 -> 3270 bytes .../stat_sys_signal_0_3g_roam.png | Bin 0 -> 3270 bytes .../drawable-hdpi/stat_sys_signal_0_4g.png | Bin 0 -> 1372 bytes .../stat_sys_signal_0_4g_default.png | Bin 0 -> 1630 bytes .../stat_sys_signal_0_4g_default_fully.png | Bin 0 -> 1630 bytes ...tat_sys_signal_0_4g_default_fully_roam.png | Bin 0 -> 3356 bytes .../stat_sys_signal_0_4g_default_roam.png | Bin 0 -> 1497 bytes .../stat_sys_signal_0_4g_fully.png | Bin 0 -> 1372 bytes .../stat_sys_signal_0_default_fully_roam.png | Bin 0 -> 3333 bytes .../stat_sys_signal_0_default_roam.png | Bin 0 -> 3333 bytes .../res/drawable-hdpi/stat_sys_signal_0_e.png | Bin 0 -> 1491 bytes .../stat_sys_signal_0_e_fully.png | Bin 0 -> 1491 bytes .../stat_sys_signal_0_e_fully_roam.png | Bin 0 -> 1566 bytes .../stat_sys_signal_0_e_roam.png | Bin 0 -> 1558 bytes .../stat_sys_signal_0_fully_sim1_3g.png | Bin 0 -> 3484 bytes .../stat_sys_signal_0_fully_sim1_4g.png | Bin 0 -> 1426 bytes .../stat_sys_signal_0_fully_sim1_g.png | Bin 0 -> 3190 bytes .../stat_sys_signal_0_fully_sim1_h.png | Bin 0 -> 3017 bytes .../stat_sys_signal_0_fully_sim1_hp.png | Bin 0 -> 1166 bytes .../stat_sys_signal_0_fully_sim2_3g.png | Bin 0 -> 3488 bytes .../stat_sys_signal_0_fully_sim2_4g.png | Bin 0 -> 1428 bytes .../stat_sys_signal_0_fully_sim2_g.png | Bin 0 -> 3193 bytes .../stat_sys_signal_0_fully_sim2_h.png | Bin 0 -> 3018 bytes .../stat_sys_signal_0_fully_sim2_hp.png | Bin 0 -> 1169 bytes .../res/drawable-hdpi/stat_sys_signal_0_g.png | Bin 0 -> 3440 bytes .../stat_sys_signal_0_g_fully.png | Bin 0 -> 3440 bytes .../stat_sys_signal_0_g_fully_roam.png | Bin 0 -> 3494 bytes .../stat_sys_signal_0_g_roam.png | Bin 0 -> 3494 bytes .../drawable-hdpi/stat_sys_signal_0_gsm.png | Bin 0 -> 1293 bytes .../stat_sys_signal_0_gsm_fully.png | Bin 0 -> 1293 bytes .../stat_sys_signal_0_sim1_3g.png | Bin 0 -> 3484 bytes .../stat_sys_signal_0_sim1_4g.png | Bin 0 -> 1428 bytes .../stat_sys_signal_0_sim1_g.png | Bin 0 -> 3190 bytes .../stat_sys_signal_0_sim1_h.png | Bin 0 -> 3017 bytes .../stat_sys_signal_0_sim1_hp.png | Bin 0 -> 1166 bytes .../stat_sys_signal_0_sim2_3g.png | Bin 0 -> 3488 bytes .../stat_sys_signal_0_sim2_4g.png | Bin 0 -> 1430 bytes .../stat_sys_signal_0_sim2_g.png | Bin 0 -> 3193 bytes .../stat_sys_signal_0_sim2_h.png | Bin 0 -> 3018 bytes .../stat_sys_signal_0_sim2_hp.png | Bin 0 -> 1169 bytes .../res/drawable-hdpi/stat_sys_signal_1.png | Bin 0 -> 680 bytes .../drawable-hdpi/stat_sys_signal_1_1x.png | Bin 0 -> 3226 bytes .../stat_sys_signal_1_1x_fully.png | Bin 0 -> 3259 bytes .../stat_sys_signal_1_1x_fully_roam.png | Bin 0 -> 3309 bytes .../stat_sys_signal_1_1x_only.png | Bin 0 -> 3670 bytes .../stat_sys_signal_1_1x_only_fully.png | Bin 0 -> 3549 bytes .../stat_sys_signal_1_1x_only_fully_roam.png | Bin 0 -> 3623 bytes .../stat_sys_signal_1_1x_only_roam.png | Bin 0 -> 3733 bytes .../stat_sys_signal_1_1x_roam.png | Bin 0 -> 3275 bytes .../drawable-hdpi/stat_sys_signal_1_2g.png | Bin 0 -> 1487 bytes .../stat_sys_signal_1_2g_default.png | Bin 0 -> 1817 bytes .../stat_sys_signal_1_2g_default_fully.png | Bin 0 -> 1717 bytes ...tat_sys_signal_1_2g_default_fully_roam.png | Bin 0 -> 1774 bytes .../stat_sys_signal_1_2g_default_roam.png | Bin 0 -> 1873 bytes .../stat_sys_signal_1_2g_fully.png | Bin 0 -> 1508 bytes .../drawable-hdpi/stat_sys_signal_1_3g.png | Bin 0 -> 3267 bytes .../stat_sys_signal_1_3g_default.png | Bin 0 -> 3695 bytes .../stat_sys_signal_1_3g_default_fully.png | Bin 0 -> 3577 bytes ...tat_sys_signal_1_3g_default_fully_roam.png | Bin 0 -> 3638 bytes .../stat_sys_signal_1_3g_default_roam.png | Bin 0 -> 3747 bytes .../stat_sys_signal_1_3g_fully.png | Bin 0 -> 3261 bytes .../stat_sys_signal_1_3g_fully_roam.png | Bin 0 -> 3327 bytes .../stat_sys_signal_1_3g_roam.png | Bin 0 -> 3328 bytes .../drawable-hdpi/stat_sys_signal_1_4g.png | Bin 0 -> 1415 bytes .../stat_sys_signal_1_4g_default.png | Bin 0 -> 1806 bytes .../stat_sys_signal_1_4g_default_fully.png | Bin 0 -> 1706 bytes ...tat_sys_signal_1_4g_default_fully_roam.png | Bin 0 -> 3420 bytes .../stat_sys_signal_1_4g_default_roam.png | Bin 0 -> 3509 bytes .../stat_sys_signal_1_4g_fully.png | Bin 0 -> 1417 bytes .../stat_sys_signal_1_default_fully_roam.png | Bin 0 -> 3401 bytes .../stat_sys_signal_1_default_roam.png | Bin 0 -> 3495 bytes .../res/drawable-hdpi/stat_sys_signal_1_e.png | Bin 0 -> 1635 bytes .../stat_sys_signal_1_e_fully.png | Bin 0 -> 1556 bytes .../stat_sys_signal_1_e_fully_roam.png | Bin 0 -> 1622 bytes .../stat_sys_signal_1_e_roam.png | Bin 0 -> 1704 bytes .../stat_sys_signal_1_fully_sim1_3g.png | Bin 0 -> 3511 bytes .../stat_sys_signal_1_fully_sim1_4g.png | Bin 0 -> 1464 bytes .../stat_sys_signal_1_fully_sim1_g.png | Bin 0 -> 3220 bytes .../stat_sys_signal_1_fully_sim1_h.png | Bin 0 -> 3051 bytes .../stat_sys_signal_1_fully_sim1_hp.png | Bin 0 -> 1201 bytes .../stat_sys_signal_1_fully_sim2_3g.png | Bin 0 -> 3515 bytes .../stat_sys_signal_1_fully_sim2_4g.png | Bin 0 -> 1464 bytes .../stat_sys_signal_1_fully_sim2_g.png | Bin 0 -> 3223 bytes .../stat_sys_signal_1_fully_sim2_h.png | Bin 0 -> 3052 bytes .../stat_sys_signal_1_fully_sim2_hp.png | Bin 0 -> 1203 bytes .../res/drawable-hdpi/stat_sys_signal_1_g.png | Bin 0 -> 3634 bytes .../stat_sys_signal_1_g_fully.png | Bin 0 -> 3511 bytes .../stat_sys_signal_1_g_fully_roam.png | Bin 0 -> 3564 bytes .../stat_sys_signal_1_g_roam.png | Bin 0 -> 3683 bytes .../drawable-hdpi/stat_sys_signal_1_gsm.png | Bin 0 -> 1336 bytes .../stat_sys_signal_1_gsm_fully.png | Bin 0 -> 1334 bytes .../stat_sys_signal_1_sim1_3g.png | Bin 0 -> 3500 bytes .../stat_sys_signal_1_sim1_4g.png | Bin 0 -> 1452 bytes .../stat_sys_signal_1_sim1_g.png | Bin 0 -> 3209 bytes .../stat_sys_signal_1_sim1_h.png | Bin 0 -> 3040 bytes .../stat_sys_signal_1_sim1_hp.png | Bin 0 -> 1189 bytes .../stat_sys_signal_1_sim2_3g.png | Bin 0 -> 3503 bytes .../stat_sys_signal_1_sim2_4g.png | Bin 0 -> 1453 bytes .../stat_sys_signal_1_sim2_g.png | Bin 0 -> 3211 bytes .../stat_sys_signal_1_sim2_h.png | Bin 0 -> 3039 bytes .../stat_sys_signal_1_sim2_hp.png | Bin 0 -> 1190 bytes .../drawable-hdpi/stat_sys_signal_1x_in.png | Bin 0 -> 1203 bytes .../stat_sys_signal_1x_inout.png | Bin 0 -> 1203 bytes .../drawable-hdpi/stat_sys_signal_1x_no.png | Bin 0 -> 1199 bytes .../drawable-hdpi/stat_sys_signal_1x_out.png | Bin 0 -> 1203 bytes .../res/drawable-hdpi/stat_sys_signal_2.png | Bin 0 -> 728 bytes .../drawable-hdpi/stat_sys_signal_2_1x.png | Bin 0 -> 3252 bytes .../stat_sys_signal_2_1x_fully.png | Bin 0 -> 3298 bytes .../stat_sys_signal_2_1x_fully_roam.png | Bin 0 -> 3351 bytes .../stat_sys_signal_2_1x_only.png | Bin 0 -> 3805 bytes .../stat_sys_signal_2_1x_only_fully.png | Bin 0 -> 3606 bytes .../stat_sys_signal_2_1x_only_fully_roam.png | Bin 0 -> 3668 bytes .../stat_sys_signal_2_1x_only_roam.png | Bin 0 -> 3871 bytes .../stat_sys_signal_2_1x_roam.png | Bin 0 -> 3311 bytes .../drawable-hdpi/stat_sys_signal_2_2g.png | Bin 0 -> 1515 bytes .../stat_sys_signal_2_2g_default.png | Bin 0 -> 1919 bytes .../stat_sys_signal_2_2g_default_fully.png | Bin 0 -> 1765 bytes ...tat_sys_signal_2_2g_default_fully_roam.png | Bin 0 -> 1824 bytes .../stat_sys_signal_2_2g_default_roam.png | Bin 0 -> 1975 bytes .../stat_sys_signal_2_2g_fully.png | Bin 0 -> 1542 bytes .../drawable-hdpi/stat_sys_signal_2_3g.png | Bin 0 -> 3282 bytes .../stat_sys_signal_2_3g_default.png | Bin 0 -> 3826 bytes .../stat_sys_signal_2_3g_default_fully.png | Bin 0 -> 3629 bytes ...tat_sys_signal_2_3g_default_fully_roam.png | Bin 0 -> 3685 bytes .../stat_sys_signal_2_3g_default_roam.png | Bin 0 -> 3884 bytes .../stat_sys_signal_2_3g_fully.png | Bin 0 -> 3303 bytes .../stat_sys_signal_2_3g_fully_roam.png | Bin 0 -> 3365 bytes .../stat_sys_signal_2_3g_roam.png | Bin 0 -> 3342 bytes .../drawable-hdpi/stat_sys_signal_2_4g.png | Bin 0 -> 1459 bytes .../stat_sys_signal_2_4g_default.png | Bin 0 -> 1911 bytes .../stat_sys_signal_2_4g_default_fully.png | Bin 0 -> 1753 bytes ...tat_sys_signal_2_4g_default_fully_roam.png | Bin 0 -> 3482 bytes .../stat_sys_signal_2_4g_default_roam.png | Bin 0 -> 3648 bytes .../stat_sys_signal_2_4g_fully.png | Bin 0 -> 1470 bytes .../stat_sys_signal_2_default_fully_roam.png | Bin 0 -> 3460 bytes .../stat_sys_signal_2_default_roam.png | Bin 0 -> 3634 bytes .../res/drawable-hdpi/stat_sys_signal_2_e.png | Bin 0 -> 1767 bytes .../stat_sys_signal_2_e_fully.png | Bin 0 -> 1605 bytes .../stat_sys_signal_2_e_fully_roam.png | Bin 0 -> 1677 bytes .../stat_sys_signal_2_e_roam.png | Bin 0 -> 1819 bytes .../stat_sys_signal_2_fully_sim1_3g.png | Bin 0 -> 3509 bytes .../stat_sys_signal_2_fully_sim1_4g.png | Bin 0 -> 1457 bytes .../stat_sys_signal_2_fully_sim1_g.png | Bin 0 -> 3217 bytes .../stat_sys_signal_2_fully_sim1_h.png | Bin 0 -> 3048 bytes .../stat_sys_signal_2_fully_sim1_hp.png | Bin 0 -> 1201 bytes .../stat_sys_signal_2_fully_sim2_3g.png | Bin 0 -> 3512 bytes .../stat_sys_signal_2_fully_sim2_4g.png | Bin 0 -> 1459 bytes .../stat_sys_signal_2_fully_sim2_g.png | Bin 0 -> 3220 bytes .../stat_sys_signal_2_fully_sim2_h.png | Bin 0 -> 3049 bytes .../stat_sys_signal_2_fully_sim2_hp.png | Bin 0 -> 1202 bytes .../res/drawable-hdpi/stat_sys_signal_2_g.png | Bin 0 -> 3761 bytes .../stat_sys_signal_2_g_fully.png | Bin 0 -> 3567 bytes .../stat_sys_signal_2_g_fully_roam.png | Bin 0 -> 3617 bytes .../stat_sys_signal_2_g_roam.png | Bin 0 -> 3810 bytes .../drawable-hdpi/stat_sys_signal_2_gsm.png | Bin 0 -> 1366 bytes .../stat_sys_signal_2_gsm_fully.png | Bin 0 -> 1379 bytes .../stat_sys_signal_2_sim1_3g.png | Bin 0 -> 3498 bytes .../stat_sys_signal_2_sim1_4g.png | Bin 0 -> 1445 bytes .../stat_sys_signal_2_sim1_g.png | Bin 0 -> 3208 bytes .../stat_sys_signal_2_sim1_h.png | Bin 0 -> 3040 bytes .../stat_sys_signal_2_sim1_hp.png | Bin 0 -> 1189 bytes .../stat_sys_signal_2_sim2_3g.png | Bin 0 -> 3501 bytes .../stat_sys_signal_2_sim2_4g.png | Bin 0 -> 1448 bytes .../stat_sys_signal_2_sim2_g.png | Bin 0 -> 3210 bytes .../stat_sys_signal_2_sim2_h.png | Bin 0 -> 3041 bytes .../stat_sys_signal_2_sim2_hp.png | Bin 0 -> 1191 bytes .../drawable-hdpi/stat_sys_signal_2g_in.png | Bin 0 -> 1276 bytes .../stat_sys_signal_2g_inout.png | Bin 0 -> 1253 bytes .../drawable-hdpi/stat_sys_signal_2g_no.png | Bin 0 -> 1281 bytes .../drawable-hdpi/stat_sys_signal_2g_out.png | Bin 0 -> 1271 bytes .../res/drawable-hdpi/stat_sys_signal_3.png | Bin 0 -> 777 bytes .../drawable-hdpi/stat_sys_signal_3_1x.png | Bin 0 -> 3285 bytes .../stat_sys_signal_3_1x_fully.png | Bin 0 -> 3325 bytes .../stat_sys_signal_3_1x_fully_roam.png | Bin 0 -> 3380 bytes .../stat_sys_signal_3_1x_only.png | Bin 0 -> 3891 bytes .../stat_sys_signal_3_1x_only_fully.png | Bin 0 -> 3622 bytes .../stat_sys_signal_3_1x_only_fully_roam.png | Bin 0 -> 3686 bytes .../stat_sys_signal_3_1x_only_roam.png | Bin 0 -> 3961 bytes .../stat_sys_signal_3_1x_roam.png | Bin 0 -> 3352 bytes .../drawable-hdpi/stat_sys_signal_3_2g.png | Bin 0 -> 1538 bytes .../stat_sys_signal_3_2g_default.png | Bin 0 -> 1996 bytes .../stat_sys_signal_3_2g_default_fully.png | Bin 0 -> 1782 bytes ...tat_sys_signal_3_2g_default_fully_roam.png | Bin 0 -> 1840 bytes .../stat_sys_signal_3_2g_default_roam.png | Bin 0 -> 2059 bytes .../stat_sys_signal_3_2g_fully.png | Bin 0 -> 1583 bytes .../drawable-hdpi/stat_sys_signal_3_3g.png | Bin 0 -> 3319 bytes .../stat_sys_signal_3_3g_default.png | Bin 0 -> 3910 bytes .../stat_sys_signal_3_3g_default_fully.png | Bin 0 -> 3648 bytes ...tat_sys_signal_3_3g_default_fully_roam.png | Bin 0 -> 3708 bytes .../stat_sys_signal_3_3g_default_roam.png | Bin 0 -> 3975 bytes .../stat_sys_signal_3_3g_fully.png | Bin 0 -> 3339 bytes .../stat_sys_signal_3_3g_fully_roam.png | Bin 0 -> 3401 bytes .../stat_sys_signal_3_3g_roam.png | Bin 0 -> 3372 bytes .../drawable-hdpi/stat_sys_signal_3_4g.png | Bin 0 -> 1477 bytes .../stat_sys_signal_3_4g_default.png | Bin 0 -> 1983 bytes .../stat_sys_signal_3_4g_default_fully.png | Bin 0 -> 1772 bytes ...tat_sys_signal_3_4g_default_fully_roam.png | Bin 0 -> 3497 bytes .../stat_sys_signal_3_4g_default_roam.png | Bin 0 -> 3741 bytes .../stat_sys_signal_3_4g_fully.png | Bin 0 -> 1502 bytes .../stat_sys_signal_3_default_fully_roam.png | Bin 0 -> 3484 bytes .../stat_sys_signal_3_default_roam.png | Bin 0 -> 3726 bytes .../res/drawable-hdpi/stat_sys_signal_3_e.png | Bin 0 -> 1833 bytes .../stat_sys_signal_3_e_fully.png | Bin 0 -> 1626 bytes .../stat_sys_signal_3_e_fully_roam.png | Bin 0 -> 1692 bytes .../stat_sys_signal_3_e_roam.png | Bin 0 -> 1894 bytes .../stat_sys_signal_3_fully_sim1_3g.png | Bin 0 -> 3494 bytes .../stat_sys_signal_3_fully_sim1_4g.png | Bin 0 -> 1444 bytes .../stat_sys_signal_3_fully_sim1_g.png | Bin 0 -> 3199 bytes .../stat_sys_signal_3_fully_sim1_h.png | Bin 0 -> 3035 bytes .../stat_sys_signal_3_fully_sim1_hp.png | Bin 0 -> 1184 bytes .../stat_sys_signal_3_fully_sim2_3g.png | Bin 0 -> 3495 bytes .../stat_sys_signal_3_fully_sim2_4g.png | Bin 0 -> 1447 bytes .../stat_sys_signal_3_fully_sim2_g.png | Bin 0 -> 3199 bytes .../stat_sys_signal_3_fully_sim2_h.png | Bin 0 -> 3034 bytes .../stat_sys_signal_3_fully_sim2_hp.png | Bin 0 -> 1188 bytes .../res/drawable-hdpi/stat_sys_signal_3_g.png | Bin 0 -> 3846 bytes .../stat_sys_signal_3_g_fully.png | Bin 0 -> 3589 bytes .../stat_sys_signal_3_g_fully_roam.png | Bin 0 -> 3644 bytes .../stat_sys_signal_3_g_roam.png | Bin 0 -> 3905 bytes .../drawable-hdpi/stat_sys_signal_3_gsm.png | Bin 0 -> 1394 bytes .../stat_sys_signal_3_gsm_fully.png | Bin 0 -> 1412 bytes .../stat_sys_signal_3_sim1_3g.png | Bin 0 -> 3478 bytes .../stat_sys_signal_3_sim1_4g.png | Bin 0 -> 1428 bytes .../stat_sys_signal_3_sim1_g.png | Bin 0 -> 3188 bytes .../stat_sys_signal_3_sim1_h.png | Bin 0 -> 3025 bytes .../stat_sys_signal_3_sim1_hp.png | Bin 0 -> 1180 bytes .../stat_sys_signal_3_sim2_3g.png | Bin 0 -> 3479 bytes .../stat_sys_signal_3_sim2_4g.png | Bin 0 -> 1433 bytes .../stat_sys_signal_3_sim2_g.png | Bin 0 -> 3192 bytes .../stat_sys_signal_3_sim2_h.png | Bin 0 -> 3025 bytes .../stat_sys_signal_3_sim2_hp.png | Bin 0 -> 1176 bytes .../drawable-hdpi/stat_sys_signal_3g_in.png | Bin 0 -> 1270 bytes .../stat_sys_signal_3g_inout.png | Bin 0 -> 1239 bytes .../drawable-hdpi/stat_sys_signal_3g_no.png | Bin 0 -> 1277 bytes .../drawable-hdpi/stat_sys_signal_3g_out.png | Bin 0 -> 1270 bytes .../res/drawable-hdpi/stat_sys_signal_4.png | Bin 0 -> 806 bytes .../drawable-hdpi/stat_sys_signal_4_1x.png | Bin 0 -> 3307 bytes .../stat_sys_signal_4_1x_fully.png | Bin 0 -> 3328 bytes .../stat_sys_signal_4_1x_fully_roam.png | Bin 0 -> 3382 bytes .../stat_sys_signal_4_1x_only.png | Bin 0 -> 3966 bytes .../stat_sys_signal_4_1x_only_fully.png | Bin 0 -> 3634 bytes .../stat_sys_signal_4_1x_only_fully_roam.png | Bin 0 -> 3705 bytes .../stat_sys_signal_4_1x_only_roam.png | Bin 0 -> 4040 bytes .../stat_sys_signal_4_1x_roam.png | Bin 0 -> 3375 bytes .../drawable-hdpi/stat_sys_signal_4_2g.png | Bin 0 -> 1555 bytes .../stat_sys_signal_4_2g_default.png | Bin 0 -> 2058 bytes .../stat_sys_signal_4_2g_default_fully.png | Bin 0 -> 1794 bytes ...tat_sys_signal_4_2g_default_fully_roam.png | Bin 0 -> 1855 bytes .../stat_sys_signal_4_2g_default_roam.png | Bin 0 -> 2125 bytes .../stat_sys_signal_4_2g_fully.png | Bin 0 -> 1564 bytes .../drawable-hdpi/stat_sys_signal_4_3g.png | Bin 0 -> 3336 bytes .../stat_sys_signal_4_3g_default.png | Bin 0 -> 3993 bytes .../stat_sys_signal_4_3g_default_fully.png | Bin 0 -> 3663 bytes ...tat_sys_signal_4_3g_default_fully_roam.png | Bin 0 -> 3730 bytes .../stat_sys_signal_4_3g_default_roam.png | Bin 0 -> 4062 bytes .../stat_sys_signal_4_3g_fully.png | Bin 0 -> 3335 bytes .../stat_sys_signal_4_3g_fully_roam.png | Bin 0 -> 3397 bytes .../stat_sys_signal_4_3g_roam.png | Bin 0 -> 3376 bytes .../drawable-hdpi/stat_sys_signal_4_4g.png | Bin 0 -> 1493 bytes .../stat_sys_signal_4_4g_default.png | Bin 0 -> 2049 bytes .../stat_sys_signal_4_4g_default_fully.png | Bin 0 -> 1781 bytes ...tat_sys_signal_4_4g_default_fully_roam.png | Bin 0 -> 3511 bytes .../stat_sys_signal_4_4g_default_roam.png | Bin 0 -> 1874 bytes .../stat_sys_signal_4_4g_fully.png | Bin 0 -> 1488 bytes .../stat_sys_signal_4_default_fully_roam.png | Bin 0 -> 3496 bytes .../stat_sys_signal_4_default_roam.png | Bin 0 -> 3693 bytes .../res/drawable-hdpi/stat_sys_signal_4_e.png | Bin 0 -> 1890 bytes .../stat_sys_signal_4_e_fully.png | Bin 0 -> 1632 bytes .../stat_sys_signal_4_e_fully_roam.png | Bin 0 -> 1704 bytes .../stat_sys_signal_4_e_roam.png | Bin 0 -> 1952 bytes .../stat_sys_signal_4_fully_sim1_3g.png | Bin 0 -> 3457 bytes .../stat_sys_signal_4_fully_sim1_4g.png | Bin 0 -> 1412 bytes .../stat_sys_signal_4_fully_sim1_g.png | Bin 0 -> 3166 bytes .../stat_sys_signal_4_fully_sim1_h.png | Bin 0 -> 2995 bytes .../stat_sys_signal_4_fully_sim1_hp.png | Bin 0 -> 1144 bytes .../stat_sys_signal_4_fully_sim2_3g.png | Bin 0 -> 3455 bytes .../stat_sys_signal_4_fully_sim2_4g.png | Bin 0 -> 1415 bytes .../stat_sys_signal_4_fully_sim2_g.png | Bin 0 -> 3171 bytes .../stat_sys_signal_4_fully_sim2_h.png | Bin 0 -> 2998 bytes .../stat_sys_signal_4_fully_sim2_hp.png | Bin 0 -> 1152 bytes .../res/drawable-hdpi/stat_sys_signal_4_g.png | Bin 0 -> 3927 bytes .../stat_sys_signal_4_g_fully.png | Bin 0 -> 3594 bytes .../stat_sys_signal_4_g_fully_roam.png | Bin 0 -> 3664 bytes .../stat_sys_signal_4_g_roam.png | Bin 0 -> 3985 bytes .../drawable-hdpi/stat_sys_signal_4_gsm.png | Bin 0 -> 1410 bytes .../stat_sys_signal_4_gsm_fully.png | Bin 0 -> 1405 bytes .../stat_sys_signal_4_sim1_3g.png | Bin 0 -> 3374 bytes .../stat_sys_signal_4_sim1_4g.png | Bin 0 -> 1381 bytes .../stat_sys_signal_4_sim1_g.png | Bin 0 -> 3127 bytes .../stat_sys_signal_4_sim1_h.png | Bin 0 -> 2993 bytes .../stat_sys_signal_4_sim1_hp.png | Bin 0 -> 1155 bytes .../stat_sys_signal_4_sim2_3g.png | Bin 0 -> 3405 bytes .../stat_sys_signal_4_sim2_4g.png | Bin 0 -> 1377 bytes .../stat_sys_signal_4_sim2_g.png | Bin 0 -> 3134 bytes .../stat_sys_signal_4_sim2_h.png | Bin 0 -> 2996 bytes .../stat_sys_signal_4_sim2_hp.png | Bin 0 -> 1152 bytes .../drawable-hdpi/stat_sys_signal_4g_in.png | Bin 0 -> 1269 bytes .../stat_sys_signal_4g_inout.png | Bin 0 -> 1247 bytes .../drawable-hdpi/stat_sys_signal_4g_no.png | Bin 0 -> 1276 bytes .../drawable-hdpi/stat_sys_signal_4g_out.png | Bin 0 -> 1273 bytes .../drawable-hdpi/stat_sys_signal_e_in.png | Bin 0 -> 1112 bytes .../drawable-hdpi/stat_sys_signal_e_inout.png | Bin 0 -> 1112 bytes .../drawable-hdpi/stat_sys_signal_e_no.png | Bin 0 -> 1109 bytes .../drawable-hdpi/stat_sys_signal_e_out.png | Bin 0 -> 1116 bytes .../drawable-hdpi/stat_sys_signal_g_in.png | Bin 0 -> 1159 bytes .../drawable-hdpi/stat_sys_signal_g_inout.png | Bin 0 -> 1160 bytes .../drawable-hdpi/stat_sys_signal_g_no.png | Bin 0 -> 1154 bytes .../drawable-hdpi/stat_sys_signal_g_out.png | Bin 0 -> 1161 bytes .../drawable-hdpi/stat_sys_signal_h_in.png | Bin 0 -> 1107 bytes .../drawable-hdpi/stat_sys_signal_h_inout.png | Bin 0 -> 1107 bytes .../drawable-hdpi/stat_sys_signal_h_no.png | Bin 0 -> 1104 bytes .../drawable-hdpi/stat_sys_signal_h_out.png | Bin 0 -> 1109 bytes .../drawable-hdpi/stat_sys_signal_hp_in.png | Bin 0 -> 1205 bytes .../stat_sys_signal_hp_inout.png | Bin 0 -> 1184 bytes .../drawable-hdpi/stat_sys_signal_hp_no.png | Bin 0 -> 1197 bytes .../drawable-hdpi/stat_sys_signal_hp_out.png | Bin 0 -> 1194 bytes .../res/drawable-hdpi/stat_sys_signal_in.png | Bin 0 -> 431 bytes .../drawable-hdpi/stat_sys_signal_null_1.png | Bin 0 -> 1650 bytes .../stat_sys_signal_null_sim1.png | Bin 0 -> 522 bytes .../stat_sys_signal_null_sim2.png | Bin 0 -> 551 bytes .../res/drawable-hdpi/stat_sys_signal_out.png | Bin 0 -> 424 bytes .../drawable-hdpi/stat_sys_signal_r_in.png | Bin 0 -> 287 bytes .../drawable-hdpi/stat_sys_signal_r_inout.png | Bin 0 -> 275 bytes .../drawable-hdpi/stat_sys_signal_r_no.png | Bin 0 -> 280 bytes .../drawable-hdpi/stat_sys_signal_r_out.png | Bin 0 -> 289 bytes .../res/drawable-hdpi/stat_sys_wifi_in.png | Bin 0 -> 418 bytes .../res/drawable-hdpi/stat_sys_wifi_inout.png | Bin 0 -> 505 bytes .../res/drawable-hdpi/stat_sys_wifi_out.png | Bin 0 -> 416 bytes .../res/drawable-mdpi/ic_qs_signal_2g.png | Bin 0 -> 1236 bytes .../drawable-mdpi/ic_qs_signal_full_2g.png | Bin 0 -> 1239 bytes .../drawable-mdpi/ic_qs_signal_full_hp.png | Bin 0 -> 1268 bytes .../res/drawable-mdpi/ic_qs_signal_hp.png | Bin 0 -> 1254 bytes .../stat_sys_data_connected_1x.png | Bin 0 -> 490 bytes .../stat_sys_data_connected_3g.png | Bin 0 -> 503 bytes .../stat_sys_data_connected_4g.png | Bin 0 -> 498 bytes .../stat_sys_data_connected_e.png | Bin 0 -> 424 bytes .../stat_sys_data_connected_g.png | Bin 0 -> 461 bytes .../stat_sys_data_connected_h.png | Bin 0 -> 430 bytes .../stat_sys_data_connected_hp.png | Bin 0 -> 1140 bytes .../stat_sys_data_fully_connected_hp.png | Bin 0 -> 1144 bytes .../drawable-mdpi/stat_sys_no_sim1_new.png | Bin 0 -> 350 bytes .../drawable-mdpi/stat_sys_no_sim2_new.png | Bin 0 -> 357 bytes .../res/drawable-mdpi/stat_sys_no_sim_1.png | Bin 0 -> 1034 bytes .../stat_sys_r_signal_0_fully_sim1_3g.png | Bin 0 -> 1131 bytes .../stat_sys_r_signal_0_fully_sim1_4g.png | Bin 0 -> 1674 bytes .../stat_sys_r_signal_0_fully_sim1_g.png | Bin 0 -> 847 bytes .../stat_sys_r_signal_0_fully_sim1_h.png | Bin 0 -> 716 bytes .../stat_sys_r_signal_0_fully_sim1_hp.png | Bin 0 -> 1650 bytes .../stat_sys_r_signal_0_fully_sim2_3g.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_0_fully_sim2_4g.png | Bin 0 -> 1692 bytes .../stat_sys_r_signal_0_fully_sim2_g.png | Bin 0 -> 867 bytes .../stat_sys_r_signal_0_fully_sim2_h.png | Bin 0 -> 737 bytes .../stat_sys_r_signal_0_fully_sim2_hp.png | Bin 0 -> 1658 bytes .../stat_sys_r_signal_0_sim1_3g.png | Bin 0 -> 1131 bytes .../stat_sys_r_signal_0_sim1_4g.png | Bin 0 -> 1674 bytes .../stat_sys_r_signal_0_sim1_g.png | Bin 0 -> 847 bytes .../stat_sys_r_signal_0_sim1_h.png | Bin 0 -> 716 bytes .../stat_sys_r_signal_0_sim1_hp.png | Bin 0 -> 1640 bytes .../stat_sys_r_signal_0_sim2_3g.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_0_sim2_4g.png | Bin 0 -> 1692 bytes .../stat_sys_r_signal_0_sim2_g.png | Bin 0 -> 867 bytes .../stat_sys_r_signal_0_sim2_h.png | Bin 0 -> 737 bytes .../stat_sys_r_signal_0_sim2_hp.png | Bin 0 -> 1658 bytes .../stat_sys_r_signal_1_fully_sim1_3g.png | Bin 0 -> 1150 bytes .../stat_sys_r_signal_1_fully_sim1_4g.png | Bin 0 -> 1686 bytes .../stat_sys_r_signal_1_fully_sim1_g.png | Bin 0 -> 869 bytes .../stat_sys_r_signal_1_fully_sim1_h.png | Bin 0 -> 751 bytes .../stat_sys_r_signal_1_fully_sim1_hp.png | Bin 0 -> 1657 bytes .../stat_sys_r_signal_1_fully_sim2_3g.png | Bin 0 -> 1177 bytes .../stat_sys_r_signal_1_fully_sim2_4g.png | Bin 0 -> 1706 bytes .../stat_sys_r_signal_1_fully_sim2_g.png | Bin 0 -> 893 bytes .../stat_sys_r_signal_1_fully_sim2_h.png | Bin 0 -> 768 bytes .../stat_sys_r_signal_1_fully_sim2_hp.png | Bin 0 -> 1675 bytes .../stat_sys_r_signal_1_sim1_3g.png | Bin 0 -> 1067 bytes .../stat_sys_r_signal_1_sim1_4g.png | Bin 0 -> 1633 bytes .../stat_sys_r_signal_1_sim1_g.png | Bin 0 -> 800 bytes .../stat_sys_r_signal_1_sim1_h.png | Bin 0 -> 683 bytes .../stat_sys_r_signal_1_sim1_hp.png | Bin 0 -> 1606 bytes .../stat_sys_r_signal_1_sim2_3g.png | Bin 0 -> 1103 bytes .../stat_sys_r_signal_1_sim2_4g.png | Bin 0 -> 1652 bytes .../stat_sys_r_signal_1_sim2_g.png | Bin 0 -> 823 bytes .../stat_sys_r_signal_1_sim2_h.png | Bin 0 -> 703 bytes .../stat_sys_r_signal_1_sim2_hp.png | Bin 0 -> 1629 bytes .../stat_sys_r_signal_2_fully_sim1_3g.png | Bin 0 -> 1162 bytes .../stat_sys_r_signal_2_fully_sim1_4g.png | Bin 0 -> 1693 bytes .../stat_sys_r_signal_2_fully_sim1_g.png | Bin 0 -> 876 bytes .../stat_sys_r_signal_2_fully_sim1_h.png | Bin 0 -> 757 bytes .../stat_sys_r_signal_2_fully_sim1_hp.png | Bin 0 -> 1657 bytes .../stat_sys_r_signal_2_fully_sim2_3g.png | Bin 0 -> 1189 bytes .../stat_sys_r_signal_2_fully_sim2_4g.png | Bin 0 -> 1710 bytes .../stat_sys_r_signal_2_fully_sim2_g.png | Bin 0 -> 899 bytes .../stat_sys_r_signal_2_fully_sim2_h.png | Bin 0 -> 773 bytes .../stat_sys_r_signal_2_fully_sim2_hp.png | Bin 0 -> 1677 bytes .../stat_sys_r_signal_2_sim1_3g.png | Bin 0 -> 1007 bytes .../stat_sys_r_signal_2_sim1_4g.png | Bin 0 -> 1594 bytes .../stat_sys_r_signal_2_sim1_g.png | Bin 0 -> 739 bytes .../stat_sys_r_signal_2_sim1_h.png | Bin 0 -> 664 bytes .../stat_sys_r_signal_2_sim1_hp.png | Bin 0 -> 1591 bytes .../stat_sys_r_signal_2_sim2_3g.png | Bin 0 -> 1033 bytes .../stat_sys_r_signal_2_sim2_4g.png | Bin 0 -> 1611 bytes .../stat_sys_r_signal_2_sim2_g.png | Bin 0 -> 764 bytes .../stat_sys_r_signal_2_sim2_h.png | Bin 0 -> 680 bytes .../stat_sys_r_signal_2_sim2_hp.png | Bin 0 -> 1609 bytes .../stat_sys_r_signal_3_fully_sim1_3g.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_3_fully_sim1_4g.png | Bin 0 -> 1695 bytes .../stat_sys_r_signal_3_fully_sim1_g.png | Bin 0 -> 858 bytes .../stat_sys_r_signal_3_fully_sim1_h.png | Bin 0 -> 744 bytes .../stat_sys_r_signal_3_fully_sim1_hp.png | Bin 0 -> 1661 bytes .../stat_sys_r_signal_3_fully_sim2_3g.png | Bin 0 -> 1129 bytes .../stat_sys_r_signal_3_fully_sim2_4g.png | Bin 0 -> 1709 bytes .../stat_sys_r_signal_3_fully_sim2_g.png | Bin 0 -> 881 bytes .../stat_sys_r_signal_3_fully_sim2_h.png | Bin 0 -> 763 bytes .../stat_sys_r_signal_3_fully_sim2_hp.png | Bin 0 -> 1677 bytes .../stat_sys_r_signal_3_sim1_3g.png | Bin 0 -> 941 bytes .../stat_sys_r_signal_3_sim1_4g.png | Bin 0 -> 1551 bytes .../stat_sys_r_signal_3_sim1_g.png | Bin 0 -> 674 bytes .../stat_sys_r_signal_3_sim1_h.png | Bin 0 -> 612 bytes .../stat_sys_r_signal_3_sim1_hp.png | Bin 0 -> 1560 bytes .../stat_sys_r_signal_3_sim2_3g.png | Bin 0 -> 967 bytes .../stat_sys_r_signal_3_sim2_4g.png | Bin 0 -> 1572 bytes .../stat_sys_r_signal_3_sim2_g.png | Bin 0 -> 696 bytes .../stat_sys_r_signal_3_sim2_h.png | Bin 0 -> 631 bytes .../stat_sys_r_signal_3_sim2_hp.png | Bin 0 -> 1582 bytes .../stat_sys_r_signal_4_fully_sim1_3g.png | Bin 0 -> 1134 bytes .../stat_sys_r_signal_4_fully_sim1_4g.png | Bin 0 -> 1700 bytes .../stat_sys_r_signal_4_fully_sim1_g.png | Bin 0 -> 848 bytes .../stat_sys_r_signal_4_fully_sim1_h.png | Bin 0 -> 730 bytes .../stat_sys_r_signal_4_fully_sim1_hp.png | Bin 0 -> 1652 bytes .../stat_sys_r_signal_4_fully_sim2_3g.png | Bin 0 -> 1156 bytes .../stat_sys_r_signal_4_fully_sim2_4g.png | Bin 0 -> 1721 bytes .../stat_sys_r_signal_4_fully_sim2_g.png | Bin 0 -> 867 bytes .../stat_sys_r_signal_4_fully_sim2_h.png | Bin 0 -> 748 bytes .../stat_sys_r_signal_4_fully_sim2_hp.png | Bin 0 -> 1673 bytes .../stat_sys_r_signal_4_sim1_3g.png | Bin 0 -> 862 bytes .../stat_sys_r_signal_4_sim1_4g.png | Bin 0 -> 1506 bytes .../stat_sys_r_signal_4_sim1_g.png | Bin 0 -> 606 bytes .../stat_sys_r_signal_4_sim1_h.png | Bin 0 -> 541 bytes .../stat_sys_r_signal_4_sim1_hp.png | Bin 0 -> 1531 bytes .../stat_sys_r_signal_4_sim2_3g.png | Bin 0 -> 883 bytes .../stat_sys_r_signal_4_sim2_4g.png | Bin 0 -> 1528 bytes .../stat_sys_r_signal_4_sim2_g.png | Bin 0 -> 634 bytes .../stat_sys_r_signal_4_sim2_h.png | Bin 0 -> 563 bytes .../stat_sys_r_signal_4_sim2_hp.png | Bin 0 -> 1555 bytes .../drawable-mdpi/stat_sys_signal_0_3g.png | Bin 0 -> 1260 bytes .../stat_sys_signal_0_3g_default.png | Bin 0 -> 1291 bytes .../stat_sys_signal_0_3g_default_fully.png | Bin 0 -> 1290 bytes ...tat_sys_signal_0_3g_default_fully_roam.png | Bin 0 -> 1327 bytes .../stat_sys_signal_0_3g_default_roam.png | Bin 0 -> 1331 bytes .../stat_sys_signal_0_3g_fully.png | Bin 0 -> 1260 bytes .../drawable-mdpi/stat_sys_signal_0_4g.png | Bin 0 -> 1236 bytes .../stat_sys_signal_0_4g_default.png | Bin 0 -> 1276 bytes .../stat_sys_signal_0_4g_default_fully.png | Bin 0 -> 1274 bytes ...tat_sys_signal_0_4g_default_fully_roam.png | Bin 0 -> 1315 bytes .../stat_sys_signal_0_4g_default_roam.png | Bin 0 -> 1315 bytes .../stat_sys_signal_0_4g_fully.png | Bin 0 -> 1236 bytes .../res/drawable-mdpi/stat_sys_signal_0_e.png | Bin 0 -> 1189 bytes .../stat_sys_signal_0_e_fully.png | Bin 0 -> 1186 bytes .../stat_sys_signal_0_e_fully_roam.png | Bin 0 -> 1227 bytes .../stat_sys_signal_0_e_roam.png | Bin 0 -> 1229 bytes .../stat_sys_signal_0_fully_sim1_3g.png | Bin 0 -> 1161 bytes .../stat_sys_signal_0_fully_sim1_4g.png | Bin 0 -> 1696 bytes .../stat_sys_signal_0_fully_sim1_g.png | Bin 0 -> 866 bytes .../stat_sys_signal_0_fully_sim1_h.png | Bin 0 -> 743 bytes .../stat_sys_signal_0_fully_sim1_hp.png | Bin 0 -> 1659 bytes .../stat_sys_signal_0_fully_sim2_3g.png | Bin 0 -> 1181 bytes .../stat_sys_signal_0_fully_sim2_4g.png | Bin 0 -> 1717 bytes .../stat_sys_signal_0_fully_sim2_g.png | Bin 0 -> 882 bytes .../stat_sys_signal_0_fully_sim2_h.png | Bin 0 -> 760 bytes .../stat_sys_signal_0_fully_sim2_hp.png | Bin 0 -> 1684 bytes .../res/drawable-mdpi/stat_sys_signal_0_g.png | Bin 0 -> 1273 bytes .../stat_sys_signal_0_g_fully.png | Bin 0 -> 1271 bytes .../stat_sys_signal_0_g_fully_roam.png | Bin 0 -> 1307 bytes .../stat_sys_signal_0_g_roam.png | Bin 0 -> 1307 bytes .../drawable-mdpi/stat_sys_signal_0_gsm.png | Bin 0 -> 1193 bytes .../stat_sys_signal_0_gsm_fully.png | Bin 0 -> 1193 bytes .../stat_sys_signal_0_sim1_3g.png | Bin 0 -> 1161 bytes .../stat_sys_signal_0_sim1_4g.png | Bin 0 -> 1696 bytes .../stat_sys_signal_0_sim1_g.png | Bin 0 -> 866 bytes .../stat_sys_signal_0_sim1_h.png | Bin 0 -> 743 bytes .../stat_sys_signal_0_sim1_hp.png | Bin 0 -> 1659 bytes .../stat_sys_signal_0_sim2_3g.png | Bin 0 -> 1181 bytes .../stat_sys_signal_0_sim2_4g.png | Bin 0 -> 1717 bytes .../stat_sys_signal_0_sim2_g.png | Bin 0 -> 882 bytes .../stat_sys_signal_0_sim2_h.png | Bin 0 -> 760 bytes .../stat_sys_signal_0_sim2_hp.png | Bin 0 -> 1684 bytes .../res/drawable-mdpi/stat_sys_signal_1.png | Bin 0 -> 555 bytes .../drawable-mdpi/stat_sys_signal_1_3g.png | Bin 0 -> 1277 bytes .../stat_sys_signal_1_3g_default.png | Bin 0 -> 1337 bytes .../stat_sys_signal_1_3g_default_fully.png | Bin 0 -> 1330 bytes ...tat_sys_signal_1_3g_default_fully_roam.png | Bin 0 -> 1369 bytes .../stat_sys_signal_1_3g_default_roam.png | Bin 0 -> 1373 bytes .../stat_sys_signal_1_3g_fully.png | Bin 0 -> 1278 bytes .../drawable-mdpi/stat_sys_signal_1_4g.png | Bin 0 -> 1253 bytes .../stat_sys_signal_1_4g_default.png | Bin 0 -> 1318 bytes .../stat_sys_signal_1_4g_default_fully.png | Bin 0 -> 1310 bytes ...tat_sys_signal_1_4g_default_fully_roam.png | Bin 0 -> 1350 bytes .../stat_sys_signal_1_4g_default_roam.png | Bin 0 -> 1358 bytes .../stat_sys_signal_1_4g_fully.png | Bin 0 -> 1254 bytes .../res/drawable-mdpi/stat_sys_signal_1_e.png | Bin 0 -> 1230 bytes .../stat_sys_signal_1_e_fully.png | Bin 0 -> 1222 bytes .../stat_sys_signal_1_e_fully_roam.png | Bin 0 -> 1263 bytes .../stat_sys_signal_1_e_roam.png | Bin 0 -> 1270 bytes .../stat_sys_signal_1_fully_sim1_3g.png | Bin 0 -> 1179 bytes .../stat_sys_signal_1_fully_sim1_4g.png | Bin 0 -> 1720 bytes .../stat_sys_signal_1_fully_sim1_g.png | Bin 0 -> 899 bytes .../stat_sys_signal_1_fully_sim1_h.png | Bin 0 -> 774 bytes .../stat_sys_signal_1_fully_sim1_hp.png | Bin 0 -> 1678 bytes .../stat_sys_signal_1_fully_sim2_3g.png | Bin 0 -> 1201 bytes .../stat_sys_signal_1_fully_sim2_4g.png | Bin 0 -> 1739 bytes .../stat_sys_signal_1_fully_sim2_g.png | Bin 0 -> 919 bytes .../stat_sys_signal_1_fully_sim2_h.png | Bin 0 -> 791 bytes .../stat_sys_signal_1_fully_sim2_hp.png | Bin 0 -> 1699 bytes .../res/drawable-mdpi/stat_sys_signal_1_g.png | Bin 0 -> 1316 bytes .../stat_sys_signal_1_g_fully.png | Bin 0 -> 1302 bytes .../stat_sys_signal_1_g_fully_roam.png | Bin 0 -> 1337 bytes .../stat_sys_signal_1_g_roam.png | Bin 0 -> 1351 bytes .../drawable-mdpi/stat_sys_signal_1_gsm.png | Bin 0 -> 1210 bytes .../stat_sys_signal_1_gsm_fully.png | Bin 0 -> 1211 bytes .../stat_sys_signal_1_sim1_3g.png | Bin 0 -> 1124 bytes .../stat_sys_signal_1_sim1_4g.png | Bin 0 -> 1671 bytes .../stat_sys_signal_1_sim1_g.png | Bin 0 -> 832 bytes .../stat_sys_signal_1_sim1_h.png | Bin 0 -> 705 bytes .../stat_sys_signal_1_sim1_hp.png | Bin 0 -> 1626 bytes .../stat_sys_signal_1_sim2_3g.png | Bin 0 -> 1148 bytes .../stat_sys_signal_1_sim2_4g.png | Bin 0 -> 1694 bytes .../stat_sys_signal_1_sim2_g.png | Bin 0 -> 850 bytes .../stat_sys_signal_1_sim2_h.png | Bin 0 -> 729 bytes .../stat_sys_signal_1_sim2_hp.png | Bin 0 -> 1650 bytes .../res/drawable-mdpi/stat_sys_signal_2.png | Bin 0 -> 585 bytes .../drawable-mdpi/stat_sys_signal_2_3g.png | Bin 0 -> 1286 bytes .../stat_sys_signal_2_3g_default.png | Bin 0 -> 1345 bytes .../stat_sys_signal_2_3g_default_fully.png | Bin 0 -> 1345 bytes ...tat_sys_signal_2_3g_default_fully_roam.png | Bin 0 -> 1384 bytes .../stat_sys_signal_2_3g_default_roam.png | Bin 0 -> 1384 bytes .../stat_sys_signal_2_3g_fully.png | Bin 0 -> 1289 bytes .../drawable-mdpi/stat_sys_signal_2_4g.png | Bin 0 -> 1262 bytes .../stat_sys_signal_2_4g_default.png | Bin 0 -> 1325 bytes .../stat_sys_signal_2_4g_default_fully.png | Bin 0 -> 1321 bytes ...tat_sys_signal_2_4g_default_fully_roam.png | Bin 0 -> 1363 bytes .../stat_sys_signal_2_4g_default_roam.png | Bin 0 -> 1367 bytes .../stat_sys_signal_2_4g_fully.png | Bin 0 -> 1266 bytes .../res/drawable-mdpi/stat_sys_signal_2_e.png | Bin 0 -> 1239 bytes .../stat_sys_signal_2_e_fully.png | Bin 0 -> 1236 bytes .../stat_sys_signal_2_e_fully_roam.png | Bin 0 -> 1279 bytes .../stat_sys_signal_2_e_roam.png | Bin 0 -> 1283 bytes .../stat_sys_signal_2_fully_sim1_3g.png | Bin 0 -> 1189 bytes .../stat_sys_signal_2_fully_sim1_4g.png | Bin 0 -> 1719 bytes .../stat_sys_signal_2_fully_sim1_g.png | Bin 0 -> 903 bytes .../stat_sys_signal_2_fully_sim1_h.png | Bin 0 -> 781 bytes .../stat_sys_signal_2_fully_sim1_hp.png | Bin 0 -> 1677 bytes .../stat_sys_signal_2_fully_sim2_3g.png | Bin 0 -> 1212 bytes .../stat_sys_signal_2_fully_sim2_4g.png | Bin 0 -> 1738 bytes .../stat_sys_signal_2_fully_sim2_g.png | Bin 0 -> 922 bytes .../stat_sys_signal_2_fully_sim2_h.png | Bin 0 -> 798 bytes .../stat_sys_signal_2_fully_sim2_hp.png | Bin 0 -> 1698 bytes .../res/drawable-mdpi/stat_sys_signal_2_g.png | Bin 0 -> 1322 bytes .../stat_sys_signal_2_g_fully.png | Bin 0 -> 1321 bytes .../stat_sys_signal_2_g_fully_roam.png | Bin 0 -> 1360 bytes .../stat_sys_signal_2_g_roam.png | Bin 0 -> 1361 bytes .../drawable-mdpi/stat_sys_signal_2_gsm.png | Bin 0 -> 1219 bytes .../stat_sys_signal_2_gsm_fully.png | Bin 0 -> 1223 bytes .../stat_sys_signal_2_sim1_3g.png | Bin 0 -> 1074 bytes .../stat_sys_signal_2_sim1_4g.png | Bin 0 -> 1657 bytes .../stat_sys_signal_2_sim1_g.png | Bin 0 -> 805 bytes .../stat_sys_signal_2_sim1_h.png | Bin 0 -> 687 bytes .../stat_sys_signal_2_sim1_hp.png | Bin 0 -> 1613 bytes .../stat_sys_signal_2_sim2_3g.png | Bin 0 -> 1094 bytes .../stat_sys_signal_2_sim2_4g.png | Bin 0 -> 1683 bytes .../stat_sys_signal_2_sim2_g.png | Bin 0 -> 823 bytes .../stat_sys_signal_2_sim2_h.png | Bin 0 -> 707 bytes .../stat_sys_signal_2_sim2_hp.png | Bin 0 -> 1635 bytes .../res/drawable-mdpi/stat_sys_signal_3.png | Bin 0 -> 621 bytes .../drawable-mdpi/stat_sys_signal_3_3g.png | Bin 0 -> 1308 bytes .../stat_sys_signal_3_3g_default.png | Bin 0 -> 1363 bytes .../stat_sys_signal_3_3g_default_fully.png | Bin 0 -> 1369 bytes ...tat_sys_signal_3_3g_default_fully_roam.png | Bin 0 -> 1407 bytes .../stat_sys_signal_3_3g_default_roam.png | Bin 0 -> 1401 bytes .../stat_sys_signal_3_3g_fully.png | Bin 0 -> 1313 bytes .../drawable-mdpi/stat_sys_signal_3_4g.png | Bin 0 -> 1287 bytes .../stat_sys_signal_3_4g_default.png | Bin 0 -> 1342 bytes .../stat_sys_signal_3_4g_default_fully.png | Bin 0 -> 1345 bytes ...tat_sys_signal_3_4g_default_fully_roam.png | Bin 0 -> 1383 bytes .../stat_sys_signal_3_4g_default_roam.png | Bin 0 -> 1381 bytes .../stat_sys_signal_3_4g_fully.png | Bin 0 -> 1293 bytes .../res/drawable-mdpi/stat_sys_signal_3_e.png | Bin 0 -> 1257 bytes .../stat_sys_signal_3_e_fully.png | Bin 0 -> 1260 bytes .../stat_sys_signal_3_e_fully_roam.png | Bin 0 -> 1298 bytes .../stat_sys_signal_3_e_roam.png | Bin 0 -> 1296 bytes .../stat_sys_signal_3_fully_sim1_3g.png | Bin 0 -> 1179 bytes .../stat_sys_signal_3_fully_sim1_4g.png | Bin 0 -> 1719 bytes .../stat_sys_signal_3_fully_sim1_g.png | Bin 0 -> 891 bytes .../stat_sys_signal_3_fully_sim1_h.png | Bin 0 -> 768 bytes .../stat_sys_signal_3_fully_sim1_hp.png | Bin 0 -> 1680 bytes .../stat_sys_signal_3_fully_sim2_3g.png | Bin 0 -> 1202 bytes .../stat_sys_signal_3_fully_sim2_4g.png | Bin 0 -> 1740 bytes .../stat_sys_signal_3_fully_sim2_g.png | Bin 0 -> 910 bytes .../stat_sys_signal_3_fully_sim2_h.png | Bin 0 -> 789 bytes .../stat_sys_signal_3_fully_sim2_hp.png | Bin 0 -> 1702 bytes .../res/drawable-mdpi/stat_sys_signal_3_g.png | Bin 0 -> 1336 bytes .../stat_sys_signal_3_g_fully.png | Bin 0 -> 1346 bytes .../stat_sys_signal_3_g_fully_roam.png | Bin 0 -> 1384 bytes .../stat_sys_signal_3_g_roam.png | Bin 0 -> 1374 bytes .../drawable-mdpi/stat_sys_signal_3_gsm.png | Bin 0 -> 1243 bytes .../stat_sys_signal_3_gsm_fully.png | Bin 0 -> 1246 bytes .../stat_sys_signal_3_sim1_3g.png | Bin 0 -> 1033 bytes .../stat_sys_signal_3_sim1_4g.png | Bin 0 -> 1628 bytes .../stat_sys_signal_3_sim1_g.png | Bin 0 -> 752 bytes .../stat_sys_signal_3_sim1_h.png | Bin 0 -> 634 bytes .../stat_sys_signal_3_sim1_hp.png | Bin 0 -> 1585 bytes .../stat_sys_signal_3_sim2_3g.png | Bin 0 -> 1054 bytes .../stat_sys_signal_3_sim2_4g.png | Bin 0 -> 1647 bytes .../stat_sys_signal_3_sim2_g.png | Bin 0 -> 768 bytes .../stat_sys_signal_3_sim2_h.png | Bin 0 -> 653 bytes .../stat_sys_signal_3_sim2_hp.png | Bin 0 -> 1605 bytes .../res/drawable-mdpi/stat_sys_signal_4.png | Bin 0 -> 633 bytes .../drawable-mdpi/stat_sys_signal_4_3g.png | Bin 0 -> 1270 bytes .../stat_sys_signal_4_3g_default.png | Bin 0 -> 1332 bytes .../stat_sys_signal_4_3g_default_fully.png | Bin 0 -> 1334 bytes ...tat_sys_signal_4_3g_default_fully_roam.png | Bin 0 -> 1369 bytes .../stat_sys_signal_4_3g_default_roam.png | Bin 0 -> 1366 bytes .../stat_sys_signal_4_3g_fully.png | Bin 0 -> 1283 bytes .../drawable-mdpi/stat_sys_signal_4_4g.png | Bin 0 -> 1251 bytes .../stat_sys_signal_4_4g_default.png | Bin 0 -> 1310 bytes .../stat_sys_signal_4_4g_default_fully.png | Bin 0 -> 1312 bytes ...tat_sys_signal_4_4g_default_fully_roam.png | Bin 0 -> 1347 bytes .../stat_sys_signal_4_4g_default_roam.png | Bin 0 -> 1339 bytes .../stat_sys_signal_4_4g_fully.png | Bin 0 -> 1264 bytes .../res/drawable-mdpi/stat_sys_signal_4_e.png | Bin 0 -> 1236 bytes .../stat_sys_signal_4_e_fully.png | Bin 0 -> 1234 bytes .../stat_sys_signal_4_e_fully_roam.png | Bin 0 -> 1268 bytes .../stat_sys_signal_4_e_roam.png | Bin 0 -> 1271 bytes .../stat_sys_signal_4_fully_sim1_3g.png | Bin 0 -> 1166 bytes .../stat_sys_signal_4_fully_sim1_4g.png | Bin 0 -> 1722 bytes .../stat_sys_signal_4_fully_sim1_g.png | Bin 0 -> 877 bytes .../stat_sys_signal_4_fully_sim1_h.png | Bin 0 -> 755 bytes .../stat_sys_signal_4_fully_sim1_hp.png | Bin 0 -> 1667 bytes .../stat_sys_signal_4_fully_sim2_3g.png | Bin 0 -> 1188 bytes .../stat_sys_signal_4_fully_sim2_4g.png | Bin 0 -> 1741 bytes .../stat_sys_signal_4_fully_sim2_g.png | Bin 0 -> 894 bytes .../stat_sys_signal_4_fully_sim2_h.png | Bin 0 -> 771 bytes .../stat_sys_signal_4_fully_sim2_hp.png | Bin 0 -> 1693 bytes .../res/drawable-mdpi/stat_sys_signal_4_g.png | Bin 0 -> 1312 bytes .../stat_sys_signal_4_g_fully.png | Bin 0 -> 1312 bytes .../stat_sys_signal_4_g_fully_roam.png | Bin 0 -> 1346 bytes .../stat_sys_signal_4_g_roam.png | Bin 0 -> 1347 bytes .../drawable-mdpi/stat_sys_signal_4_gsm.png | Bin 0 -> 1211 bytes .../stat_sys_signal_4_gsm_fully.png | Bin 0 -> 1219 bytes .../stat_sys_signal_4_sim1_3g.png | Bin 0 -> 962 bytes .../stat_sys_signal_4_sim1_4g.png | Bin 0 -> 1601 bytes .../stat_sys_signal_4_sim1_g.png | Bin 0 -> 690 bytes .../stat_sys_signal_4_sim1_h.png | Bin 0 -> 563 bytes .../stat_sys_signal_4_sim1_hp.png | Bin 0 -> 1552 bytes .../stat_sys_signal_4_sim2_3g.png | Bin 0 -> 985 bytes .../stat_sys_signal_4_sim2_4g.png | Bin 0 -> 1616 bytes .../stat_sys_signal_4_sim2_g.png | Bin 0 -> 702 bytes .../stat_sys_signal_4_sim2_h.png | Bin 0 -> 593 bytes .../stat_sys_signal_4_sim2_hp.png | Bin 0 -> 1573 bytes .../res/drawable-mdpi/stat_sys_signal_in.png | Bin 0 -> 386 bytes .../drawable-mdpi/stat_sys_signal_inout.png | Bin 0 -> 418 bytes .../drawable-mdpi/stat_sys_signal_null_1.png | Bin 0 -> 1341 bytes .../stat_sys_signal_null_sim1.png | Bin 0 -> 2887 bytes .../stat_sys_signal_null_sim2.png | Bin 0 -> 2897 bytes .../res/drawable-mdpi/stat_sys_signal_out.png | Bin 0 -> 378 bytes .../res/drawable-mdpi/stat_sys_wifi_in.png | Bin 0 -> 396 bytes .../res/drawable-mdpi/stat_sys_wifi_inout.png | Bin 0 -> 445 bytes .../res/drawable-mdpi/stat_sys_wifi_out.png | Bin 0 -> 385 bytes .../stat_sys_data_connected_1x.png | Bin 0 -> 762 bytes .../stat_sys_data_connected_3g.png | Bin 0 -> 778 bytes .../stat_sys_data_connected_4g.png | Bin 0 -> 779 bytes .../stat_sys_data_connected_e.png | Bin 0 -> 554 bytes .../stat_sys_data_connected_g.png | Bin 0 -> 663 bytes .../stat_sys_data_connected_h.png | Bin 0 -> 573 bytes .../stat_sys_data_connected_hp.png | Bin 0 -> 1344 bytes .../stat_sys_data_fully_connected_hp.png | Bin 0 -> 1325 bytes .../stat_sys_r_signal_0_fully_sim1_4g.png | Bin 0 -> 1584 bytes .../stat_sys_r_signal_0_fully_sim2_4g.png | Bin 0 -> 1688 bytes .../stat_sys_r_signal_0_sim1_4g.png | Bin 0 -> 1590 bytes .../stat_sys_r_signal_0_sim2_4g.png | Bin 0 -> 1688 bytes .../stat_sys_r_signal_1_fully_sim1_4g.png | Bin 0 -> 1590 bytes .../stat_sys_r_signal_1_fully_sim2_4g.png | Bin 0 -> 1696 bytes .../stat_sys_r_signal_1_sim1_4g.png | Bin 0 -> 1678 bytes .../stat_sys_r_signal_1_sim2_4g.png | Bin 0 -> 1784 bytes .../stat_sys_r_signal_2_fully_sim1_4g.png | Bin 0 -> 1590 bytes .../stat_sys_r_signal_2_fully_sim2_4g.png | Bin 0 -> 1697 bytes .../stat_sys_r_signal_2_sim1_4g.png | Bin 0 -> 1574 bytes .../stat_sys_r_signal_2_sim2_4g.png | Bin 0 -> 1680 bytes .../stat_sys_r_signal_3_fully_sim1_4g.png | Bin 0 -> 1599 bytes .../stat_sys_r_signal_3_fully_sim2_4g.png | Bin 0 -> 1700 bytes .../stat_sys_r_signal_3_sim1_4g.png | Bin 0 -> 1577 bytes .../stat_sys_r_signal_3_sim2_4g.png | Bin 0 -> 1682 bytes .../stat_sys_r_signal_4_fully_sim1_4g.png | Bin 0 -> 1590 bytes .../stat_sys_r_signal_4_fully_sim2_4g.png | Bin 0 -> 1688 bytes .../stat_sys_r_signal_4_sim1_4g.png | Bin 0 -> 1543 bytes .../stat_sys_r_signal_4_sim2_4g.png | Bin 0 -> 1645 bytes .../drawable-xhdpi/stat_sys_signal_0_3g.png | Bin 0 -> 1459 bytes .../stat_sys_signal_0_3g_default.png | Bin 0 -> 1648 bytes .../stat_sys_signal_0_3g_default_fully.png | Bin 0 -> 1648 bytes ...tat_sys_signal_0_3g_default_fully_roam.png | Bin 0 -> 1760 bytes .../stat_sys_signal_0_3g_default_roam.png | Bin 0 -> 1760 bytes .../stat_sys_signal_0_3g_fully.png | Bin 0 -> 1459 bytes .../drawable-xhdpi/stat_sys_signal_0_4g.png | Bin 0 -> 1432 bytes .../stat_sys_signal_0_4g_default.png | Bin 0 -> 1589 bytes .../stat_sys_signal_0_4g_default_fully.png | Bin 0 -> 1589 bytes ...tat_sys_signal_0_4g_default_fully_roam.png | Bin 0 -> 1719 bytes .../stat_sys_signal_0_4g_default_roam.png | Bin 0 -> 1719 bytes .../stat_sys_signal_0_4g_fully.png | Bin 0 -> 1432 bytes .../drawable-xhdpi/stat_sys_signal_0_e.png | Bin 0 -> 1370 bytes .../stat_sys_signal_0_e_fully.png | Bin 0 -> 1370 bytes .../stat_sys_signal_0_e_fully_roam.png | Bin 0 -> 1509 bytes .../stat_sys_signal_0_e_roam.png | Bin 0 -> 1509 bytes .../stat_sys_signal_0_fully_sim1_4g.png | Bin 0 -> 1685 bytes .../stat_sys_signal_0_fully_sim2_4g.png | Bin 0 -> 1755 bytes .../drawable-xhdpi/stat_sys_signal_0_g.png | Bin 0 -> 1534 bytes .../stat_sys_signal_0_g_fully.png | Bin 0 -> 1534 bytes .../stat_sys_signal_0_g_fully_roam.png | Bin 0 -> 1646 bytes .../stat_sys_signal_0_g_roam.png | Bin 0 -> 1646 bytes .../drawable-xhdpi/stat_sys_signal_0_gsm.png | Bin 0 -> 1360 bytes .../stat_sys_signal_0_gsm_fully.png | Bin 0 -> 1360 bytes .../stat_sys_signal_0_sim1_4g.png | Bin 0 -> 1678 bytes .../stat_sys_signal_0_sim2_4g.png | Bin 0 -> 1755 bytes .../res/drawable-xhdpi/stat_sys_signal_1.png | Bin 0 -> 816 bytes .../drawable-xhdpi/stat_sys_signal_1_3g.png | Bin 0 -> 1505 bytes .../stat_sys_signal_1_3g_default.png | Bin 0 -> 1723 bytes .../stat_sys_signal_1_3g_default_fully.png | Bin 0 -> 1738 bytes ...tat_sys_signal_1_3g_default_fully_roam.png | Bin 0 -> 1850 bytes .../stat_sys_signal_1_3g_default_roam.png | Bin 0 -> 1838 bytes .../stat_sys_signal_1_3g_fully.png | Bin 0 -> 1515 bytes .../drawable-xhdpi/stat_sys_signal_1_4g.png | Bin 0 -> 1481 bytes .../stat_sys_signal_1_4g_default.png | Bin 0 -> 1671 bytes .../stat_sys_signal_1_4g_default_fully.png | Bin 0 -> 1683 bytes ...tat_sys_signal_1_4g_default_fully_roam.png | Bin 0 -> 1803 bytes .../stat_sys_signal_1_4g_default_roam.png | Bin 0 -> 1796 bytes .../stat_sys_signal_1_4g_fully.png | Bin 0 -> 1489 bytes .../drawable-xhdpi/stat_sys_signal_1_e.png | Bin 0 -> 1435 bytes .../stat_sys_signal_1_e_fully.png | Bin 0 -> 1438 bytes .../stat_sys_signal_1_e_fully_roam.png | Bin 0 -> 1585 bytes .../stat_sys_signal_1_e_roam.png | Bin 0 -> 1580 bytes .../stat_sys_signal_1_fully_sim1_4g.png | Bin 0 -> 1693 bytes .../stat_sys_signal_1_fully_sim2_4g.png | Bin 0 -> 1769 bytes .../drawable-xhdpi/stat_sys_signal_1_g.png | Bin 0 -> 1609 bytes .../stat_sys_signal_1_g_fully.png | Bin 0 -> 1622 bytes .../stat_sys_signal_1_g_fully_roam.png | Bin 0 -> 1730 bytes .../stat_sys_signal_1_g_roam.png | Bin 0 -> 1719 bytes .../drawable-xhdpi/stat_sys_signal_1_gsm.png | Bin 0 -> 1404 bytes .../stat_sys_signal_1_gsm_fully.png | Bin 0 -> 1411 bytes .../stat_sys_signal_1_sim1_4g.png | Bin 0 -> 1678 bytes .../stat_sys_signal_1_sim2_4g.png | Bin 0 -> 1750 bytes .../res/drawable-xhdpi/stat_sys_signal_2.png | Bin 0 -> 873 bytes .../drawable-xhdpi/stat_sys_signal_2_3g.png | Bin 0 -> 1535 bytes .../stat_sys_signal_2_3g_default.png | Bin 0 -> 1765 bytes .../stat_sys_signal_2_3g_default_fully.png | Bin 0 -> 1783 bytes ...tat_sys_signal_2_3g_default_fully_roam.png | Bin 0 -> 1897 bytes .../stat_sys_signal_2_3g_default_roam.png | Bin 0 -> 1881 bytes .../stat_sys_signal_2_3g_fully.png | Bin 0 -> 1552 bytes .../drawable-xhdpi/stat_sys_signal_2_4g.png | Bin 0 -> 1513 bytes .../stat_sys_signal_2_4g_default.png | Bin 0 -> 1714 bytes .../stat_sys_signal_2_4g_default_fully.png | Bin 0 -> 1729 bytes ...tat_sys_signal_2_4g_default_fully_roam.png | Bin 0 -> 1853 bytes .../stat_sys_signal_2_4g_default_roam.png | Bin 0 -> 1837 bytes .../stat_sys_signal_2_4g_fully.png | Bin 0 -> 1527 bytes .../drawable-xhdpi/stat_sys_signal_2_e.png | Bin 0 -> 1478 bytes .../stat_sys_signal_2_e_fully.png | Bin 0 -> 1483 bytes .../stat_sys_signal_2_e_fully_roam.png | Bin 0 -> 1633 bytes .../stat_sys_signal_2_e_roam.png | Bin 0 -> 1628 bytes .../stat_sys_signal_2_fully_sim1_4g.png | Bin 0 -> 1685 bytes .../stat_sys_signal_2_fully_sim2_4g.png | Bin 0 -> 1763 bytes .../drawable-xhdpi/stat_sys_signal_2_g.png | Bin 0 -> 1663 bytes .../stat_sys_signal_2_g_fully.png | Bin 0 -> 1671 bytes .../stat_sys_signal_2_g_fully_roam.png | Bin 0 -> 1788 bytes .../stat_sys_signal_2_g_roam.png | Bin 0 -> 1771 bytes .../drawable-xhdpi/stat_sys_signal_2_gsm.png | Bin 0 -> 1434 bytes .../stat_sys_signal_2_gsm_fully.png | Bin 0 -> 1442 bytes .../stat_sys_signal_2_sim1_4g.png | Bin 0 -> 1668 bytes .../stat_sys_signal_2_sim2_4g.png | Bin 0 -> 1753 bytes .../res/drawable-xhdpi/stat_sys_signal_3.png | Bin 0 -> 922 bytes .../drawable-xhdpi/stat_sys_signal_3_3g.png | Bin 0 -> 1561 bytes .../stat_sys_signal_3_3g_default.png | Bin 0 -> 1792 bytes .../stat_sys_signal_3_3g_default_fully.png | Bin 0 -> 1812 bytes ...tat_sys_signal_3_3g_default_fully_roam.png | Bin 0 -> 1932 bytes .../stat_sys_signal_3_3g_default_roam.png | Bin 0 -> 1912 bytes .../stat_sys_signal_3_3g_fully.png | Bin 0 -> 1580 bytes .../drawable-xhdpi/stat_sys_signal_3_4g.png | Bin 0 -> 1536 bytes .../stat_sys_signal_3_4g_default.png | Bin 0 -> 1739 bytes .../stat_sys_signal_3_4g_default_fully.png | Bin 0 -> 1759 bytes ...tat_sys_signal_3_4g_default_fully_roam.png | Bin 0 -> 1883 bytes .../stat_sys_signal_3_4g_default_roam.png | Bin 0 -> 1862 bytes .../stat_sys_signal_3_4g_fully.png | Bin 0 -> 1551 bytes .../drawable-xhdpi/stat_sys_signal_3_e.png | Bin 0 -> 1499 bytes .../stat_sys_signal_3_e_fully.png | Bin 0 -> 1509 bytes .../stat_sys_signal_3_e_fully_roam.png | Bin 0 -> 1650 bytes .../stat_sys_signal_3_e_roam.png | Bin 0 -> 1643 bytes .../stat_sys_signal_3_fully_sim1_4g.png | Bin 0 -> 1693 bytes .../stat_sys_signal_3_fully_sim2_4g.png | Bin 0 -> 1763 bytes .../drawable-xhdpi/stat_sys_signal_3_g.png | Bin 0 -> 1682 bytes .../stat_sys_signal_3_g_fully.png | Bin 0 -> 1693 bytes .../stat_sys_signal_3_g_fully_roam.png | Bin 0 -> 1809 bytes .../stat_sys_signal_3_g_roam.png | Bin 0 -> 1794 bytes .../drawable-xhdpi/stat_sys_signal_3_gsm.png | Bin 0 -> 1454 bytes .../stat_sys_signal_3_gsm_fully.png | Bin 0 -> 1466 bytes .../stat_sys_signal_3_sim1_4g.png | Bin 0 -> 1671 bytes .../stat_sys_signal_3_sim2_4g.png | Bin 0 -> 1745 bytes .../res/drawable-xhdpi/stat_sys_signal_4.png | Bin 0 -> 964 bytes .../drawable-xhdpi/stat_sys_signal_4_3g.png | Bin 0 -> 1501 bytes .../stat_sys_signal_4_3g_default.png | Bin 0 -> 1869 bytes .../stat_sys_signal_4_3g_default_fully.png | Bin 0 -> 1736 bytes ...tat_sys_signal_4_3g_default_fully_roam.png | Bin 0 -> 1835 bytes .../stat_sys_signal_4_3g_default_roam.png | Bin 0 -> 1972 bytes .../stat_sys_signal_4_3g_fully.png | Bin 0 -> 1505 bytes .../drawable-xhdpi/stat_sys_signal_4_4g.png | Bin 0 -> 1481 bytes .../stat_sys_signal_4_4g_default.png | Bin 0 -> 1681 bytes .../stat_sys_signal_4_4g_default_fully.png | Bin 0 -> 1685 bytes ...tat_sys_signal_4_4g_default_fully_roam.png | Bin 0 -> 1787 bytes .../stat_sys_signal_4_4g_default_roam.png | Bin 0 -> 1779 bytes .../stat_sys_signal_4_4g_fully.png | Bin 0 -> 1486 bytes .../drawable-xhdpi/stat_sys_signal_4_e.png | Bin 0 -> 1455 bytes .../stat_sys_signal_4_e_fully.png | Bin 0 -> 1449 bytes .../stat_sys_signal_4_e_fully_roam.png | Bin 0 -> 1569 bytes .../stat_sys_signal_4_e_roam.png | Bin 0 -> 1569 bytes .../stat_sys_signal_4_fully_sim1_4g.png | Bin 0 -> 1686 bytes .../stat_sys_signal_4_fully_sim2_4g.png | Bin 0 -> 1755 bytes .../drawable-xhdpi/stat_sys_signal_4_g.png | Bin 0 -> 1630 bytes .../stat_sys_signal_4_g_fully.png | Bin 0 -> 1619 bytes .../stat_sys_signal_4_g_fully_roam.png | Bin 0 -> 1719 bytes .../stat_sys_signal_4_g_roam.png | Bin 0 -> 1720 bytes .../drawable-xhdpi/stat_sys_signal_4_gsm.png | Bin 0 -> 1405 bytes .../stat_sys_signal_4_gsm_fully.png | Bin 0 -> 1403 bytes .../stat_sys_signal_4_sim1_4g.png | Bin 0 -> 1635 bytes .../stat_sys_signal_4_sim2_4g.png | Bin 0 -> 1658 bytes .../res/drawable-xhdpi/stat_sys_signal_in.png | Bin 0 -> 463 bytes .../drawable-xhdpi/stat_sys_signal_inout.png | Bin 0 -> 571 bytes .../drawable-xhdpi/stat_sys_signal_out.png | Bin 0 -> 453 bytes .../res/drawable-xhdpi/stat_sys_wifi_in.png | Bin 0 -> 479 bytes .../drawable-xhdpi/stat_sys_wifi_inout.png | Bin 0 -> 583 bytes .../res/drawable-xhdpi/stat_sys_wifi_out.png | Bin 0 -> 446 bytes .../stat_sys_signal_in_auto_mirrored.xml | 32 + .../stat_sys_signal_inout_auto_mirrored.xml | 32 + .../stat_sys_signal_out_auto_mirrored.xml | 32 + .../res/layout/mobile_signal_group.xml | 83 +- .../res/layout/signal_cluster_view.xml | 7 + .../res/layout/status_bar_expanded.xml | 14 + .../SystemUI/res/values-zh-rCN/strings.xml | 2 +- .../SystemUI/res/values-zh-rTW/strings.xml | 2 +- packages/SystemUI/res/values/arrays.xml | 1092 +++++++++++++++++ packages/SystemUI/res/values/config.xml | 29 + .../systemui/qs/tiles/CellularTile.java | 5 +- .../systemui/statusbar/SignalClusterView.java | 127 +- .../statusbar/phone/NavigationBarView.java | 2 + .../statusbar/phone/PhoneStatusBar.java | 37 + .../statusbar/policy/CallbackHandler.java | 13 +- .../policy/MobileSignalController.java | 355 +++++- .../statusbar/policy/NetworkController.java | 6 +- .../policy/NetworkControllerImpl.java | 17 + .../policy/SignalCallbackAdapter.java | 5 +- .../statusbar/policy/TelephonyIcons.java | 421 +++++++ .../policy/WifiSignalController.java | 5 +- .../statusbar/policy/CallbackHandlerTest.java | 10 +- .../policy/NetworkControllerBaseTest.java | 8 + 1021 files changed, 2531 insertions(+), 47 deletions(-) create mode 100644 core/java/android/util/NativeTextHelper.java mode change 100644 => 100755 core/res/res/values-zh-rCN/strings.xml mode change 100644 => 100755 core/res/res/values-zh-rHK/strings.xml mode change 100644 => 100755 core/res/res/values/config.xml mode change 100644 => 100755 core/res/res/values/strings.xml mode change 100644 => 100755 core/res/res/values/symbols.xml mode change 100644 => 100755 packages/Keyguard/src/com/android/keyguard/CarrierText.java mode change 100644 => 100755 packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java mode change 100644 => 100755 packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_hp.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_e.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim1_new.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim2_new.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim_1.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_gsm.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_gsm.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_out.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_gsm.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_out.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_gsm.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_in.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_inout.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_no.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_out.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_default_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e_fully.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g_fully_roam.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g_roam.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_in.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_inout.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_no.png create mode 100755 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hp_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hp_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hp_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_hp_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_1.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim1.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim2.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_no.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_out.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png create mode 100644 packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png create mode 100644 packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/ic_qs_signal_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim1_new.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim2_new.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim_1.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_roam.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_gsm.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_roam.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_gsm.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_roam.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_gsm.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e_roam.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_roam.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_hp.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_roam.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_gsm.png create mode 100755 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_3g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_g.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_h.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_hp.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_1.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_sim1.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_sim2.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png create mode 100644 packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_hp.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_hp.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_fully_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_roam.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e_roam.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_gsm.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e_roam.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_gsm.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_roam.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_gsm.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e_roam.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully_sim2_4g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g_fully.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g_fully_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g_roam.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_gsm.png create mode 100755 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_gsm_fully.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_sim1_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_sim2_4g.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png create mode 100644 packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png create mode 100644 packages/SystemUI/res/drawable/stat_sys_signal_in_auto_mirrored.xml create mode 100644 packages/SystemUI/res/drawable/stat_sys_signal_inout_auto_mirrored.xml create mode 100644 packages/SystemUI/res/drawable/stat_sys_signal_out_auto_mirrored.xml mode change 100644 => 100755 packages/SystemUI/res/layout/signal_cluster_view.xml mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java diff --git a/core/java/android/util/NativeTextHelper.java b/core/java/android/util/NativeTextHelper.java new file mode 100644 index 000000000000..87b60a727a07 --- /dev/null +++ b/core/java/android/util/NativeTextHelper.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package android.util; + +import android.content.Context; + +/** + *@hide + */ +public class NativeTextHelper { + + /** + * parse the string to current language. + * + * @param context base context of the application + * @param originalString original string + * @param defPackage the target package where the local language strings + * defined + * @param originNamesId the id of the original string array. + * @param localNamesId the id of the local string keys. + * @return local language string + */ + private static final String getLocalString(Context context, String originalString, + String defPackage, int originNamesId, int localNamesId) { + String[] origNames = context.getResources().getStringArray(originNamesId); + String[] localNames = context.getResources().getStringArray(localNamesId); + for (int i = 0; i < origNames.length; i++) { + if (origNames[i].equalsIgnoreCase(originalString)) { + return context.getString(context.getResources().getIdentifier(localNames[i], + "string", defPackage)); + } + } + return originalString; + } + + /** + * parse the string to current language string in public resources. + * + * @param context base context of the application + * @param originalString original string + * @param originNamesId the id of the original string array. + * @param localNamesId the id of the local string keys. + * @return local language string + */ + public static final String getLocalString(Context context, String originalString, + int originNamesId, int localNamesId) { + return getLocalString(context, originalString, "android", originNamesId, localNamesId); + } + + /** + * parse the string to current language string in current resources. + * + * @param context base context of the application + * @param originalString original string + * @param originNamesId the id of the original string array. + * @param localNamesId the id of the local string keys. + * @return local language string + */ + public static final String getInternalLocalString(Context context, String originalString, + int originNamesId, + int localNamesId) { + return getLocalString(context, originalString, context.getPackageName(), originNamesId, + localNamesId); + } + +} diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml old mode 100644 new mode 100755 index 18b39c151328..9cdbaea781fa --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1629,6 +1629,7 @@ 已选择 %1$d 已选择 %1$d + "这些通知的重要程度由您来设置。" "这条通知涉及特定的人,因此被归为重要通知。" "允许%1$s使用 %2$s 创建新用户吗?" @@ -1658,4 +1659,9 @@ "恢复出厂设置即可正常使用此设备,不受任何限制" "触摸即可了解详情。" "已停用的%1$s" + + + 中国移动 + 中国联通 + 中国电信 diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml old mode 100644 new mode 100755 index 6c896b2534ef..778a37fd5062 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -1625,6 +1625,7 @@ 已選取 %1$d 個項目 已選取 %1$d 個項目 + "您可以設定這些通知的重要性。" "列為重要的原因:涉及的人。" "要允許 %1$s 使用 %2$s 建立新使用者嗎?" @@ -1654,4 +1655,9 @@ "將此裝置回復至原廠設定後,使用將不受限制" "輕觸以瞭解詳情。" "「%1$s」已停用" + + + 中國移動 + 中國聯通 + 中國電信 diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml old mode 100644 new mode 100755 index b0685c01afe7..8733541704f4 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2536,4 +2536,46 @@ true + + CHINA\u0020\u0020MOBILE + CMCC + CHN-UNICOM + China Mobile + China Unicom + China Telecom + 中国移动 + 中国联通 + 中国电信 + 中國移動 + 中國聯通 + 中國電信 + Searching for Service + + + + China_Mobile + China_Mobile + China_Unicom + China_Mobile + China_Unicom + China_Telecom + China_Mobile + China_Unicom + China_Telecom + China_Mobile + China_Unicom + China_Telecom + roamingTextSearching + + + + false + + + false + + + 2G + 3G + 4G diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml old mode 100644 new mode 100755 index b27f0663ade2..61bb31d7cb8a --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4390,4 +4390,8 @@ Disabled %1$s + + China Mobile + China Unicom + China Telecom diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml old mode 100644 new mode 100755 index e2a36d473896..0578801a9c19 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2663,4 +2663,17 @@ + + + + + + + + + + + + + diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java old mode 100644 new mode 100755 index ae5687ba424f..f027014f69ba --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -28,6 +28,7 @@ import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.method.SingleLineTransformationMethod; import android.util.AttributeSet; @@ -153,15 +154,59 @@ public class CarrierText extends TextView { protected void updateCarrierText() { boolean allSimsMissing = true; boolean anySimReadyAndInService = false; + boolean showLocale = getContext().getResources().getBoolean( + com.android.internal.R.bool.config_monitor_locale_change); + boolean showRat = getContext().getResources().getBoolean( + com.android.internal.R.bool.config_display_rat); CharSequence displayText = null; List subs = mKeyguardUpdateMonitor.getSubscriptionInfo(false); final int N = subs.size(); if (DEBUG) Log.d(TAG, "updateCarrierText(): " + N); for (int i = 0; i < N; i++) { + CharSequence networkClass = ""; int subId = subs.get(i).getSubscriptionId(); State simState = mKeyguardUpdateMonitor.getSimState(subId); + if (showRat) { + ServiceState ss = mKeyguardUpdateMonitor.mServiceStates.get(subId); + if (ss != null && (ss.getDataRegState() == ServiceState.STATE_IN_SERVICE + || ss.getVoiceRegState() == ServiceState.STATE_IN_SERVICE)) { + int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; + if (ss.getRilDataRadioTechnology() != + ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) { + networkType = ss.getDataNetworkType(); + } else if (ss.getRilVoiceRadioTechnology() != + ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) { + networkType = ss.getVoiceNetworkType(); + } + networkClass = networkClassToString(TelephonyManager + .getNetworkClass(networkType)); + } + } CharSequence carrierName = subs.get(i).getCarrierName(); + if (showLocale || showRat) { + String[] names = carrierName.toString().split(mSeparator.toString(), 2); + StringBuilder newCarrierName = new StringBuilder(); + for (int j = 0; j < names.length; j++) { + if (showLocale) { + names[j] = android.util.NativeTextHelper.getLocalString(getContext(), + names[j], com.android.internal.R.array.origin_carrier_names, + com.android.internal.R.array.locale_carrier_names); + } + if (!TextUtils.isEmpty(names[j])) { + if (!TextUtils.isEmpty(networkClass) && showRat) { + names[j] = new StringBuilder().append(names[j]).append(" ") + .append(networkClass).toString(); + } + if (j > 0 && names[j].equals(names[j-1])) { + continue; + } + if (j > 0) newCarrierName.append(mSeparator); + newCarrierName.append(names[j]); + } + } + carrierName = newCarrierName.toString(); + } CharSequence carrierTextForSimState = getCarrierTextForSimState(simState, carrierName); if (DEBUG) { Log.d(TAG, "Handling (subId=" + subId + "): " + simState + " " + carrierName); @@ -444,4 +489,16 @@ public class CarrierText extends TextView { return source; } } + + private String networkClassToString (int networkClass) { + final int[] classIds = { 0, // TelephonyManager.NETWORK_CLASS_UNKNOWN + com.android.internal.R.string.config_rat_2g, + com.android.internal.R.string.config_rat_3g, + com.android.internal.R.string.config_rat_4g }; + String classString = null; + if (networkClass < classIds.length) { + classString = getContext().getResources().getString(classIds[networkClass]); + } + return (classString == null) ? "" : classString; + } } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java old mode 100644 new mode 100755 index 39271224d943..8125afd6d46c --- a/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java @@ -25,7 +25,7 @@ public class KeyguardConstants { * Turns on debugging information for the whole Keyguard. This is very verbose and should only * be used temporarily for debugging. */ - public static final boolean DEBUG = false; - public static final boolean DEBUG_SIM_STATES = false; + public static final boolean DEBUG = true; + public static final boolean DEBUG_SIM_STATES = true; public static final boolean DEBUG_FP_WAKELOCK = true; } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java old mode 100644 new mode 100755 index f1a8b56499e3..ecaac028d4b9 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -137,6 +137,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_SERVICE_STATE_CHANGE = 330; private static final int MSG_SCREEN_TURNED_ON = 331; private static final int MSG_SCREEN_TURNED_OFF = 332; + private static final int MSG_LOCALE_CHANGED = 500; /** Fingerprint state: Not listening to fingerprint. */ private static final int FINGERPRINT_STATE_STOPPED = 0; @@ -276,6 +277,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { break; case MSG_SCREEN_TURNED_OFF: handleScreenTurnedOff(); + case MSG_LOCALE_CHANGED: + handleLocaleChanged(); break; } } @@ -669,6 +672,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } mHandler.sendMessage( mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState)); + } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) { + mHandler.sendEmptyMessage(MSG_LOCALE_CHANGED); } } }; @@ -1004,6 +1009,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + filter.addAction(Intent.ACTION_LOCALE_CHANGED); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); filter.addAction(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); @@ -1343,6 +1349,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } + /** + * Handle {@link #MSG_LOCALE_CHANGED} + */ + private void handleLocaleChanged() { + for (int j = 0; j < mCallbacks.size(); j++) { + KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get(); + if (cb != null) { + cb.onRefreshCarrierInfo(); + } + } + } + /** * Handle {@link #MSG_SERVICE_STATE_CHANGE} */ 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 new file mode 100755 index 0000000000000000000000000000000000000000..551c67258e3acf5c3a2718401f5440f8b0edabca GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jjpkup6f57UrvLc#wCMcb!gIZ54G{vH)_XX(h@CXvrEu=P$?|QQO$tJH z-TRiR)r1C{y*=Q5xZ>%BT?#=CeM{47zu)rim(i|%tr>RKBJ=#U<~db)*H>igs+yZ^ zOgOctHhzLwf9>l-*5Yj{D=a@9NoL*dV=Asig83!WW(5asf7P_!xY5>Up`S#U5`PYwj0^PHbBy%D(R7!Ij?4b>HvpeEh>|_m_9C`V=M# z<$W&p{p@jKkG|eTclrPF|Cmfp$J=dgniIglz#v-U8d2h0l$uzQnV+W+l9`*zV5o0s ztZ!)e@8Y_01_lOIkb;!Nl2of?kg8M$BLhQ2T?0#9L(>pLLn}iwD^HVa@DsgM@i%oB3U|^5|*$|wcR#Ki=l*-_klAn~S;FejGTAp8&U98|7Y+AVW Su^9sc1B0ilpUXO@geCy!vGGL! literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..aee2cf25e9432c4f1cc4b10827a862dd1aa3a7e5 GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj6^_VNB+ z&ll}#Qx-M(Jz}@8coCp|MT;X(Pbp%<;u3N5?c#+RRy#bnV~;p;$+89(1ROkga4DaX zl$J!Gz9QC23|%56_e*M$-EhOkb48S#RBX zz`j7D>>jIW{@o9Lp2u4xtGC*ktykr$)ZdZQKih5VoRS-ozQOOLCak!bzR+Ulns<|S zDf-K7^nSLBar>EDnY&pk1`}~N|Y9W`S1(Ev-WnP<4&9|zZp5h(-EB-6{<8wK8 zzkF8y#lXNITH+c};#`!PSdy8arx22vo62CQZ)mJ zR0bmhLqlByOI<_L5JN*NLo+KQ6I}yyD+2?2hWnN%8glbfGSez?Yw(LrZ)IR$kOA2c woS#-wo>-L1;Fyx1l&avCS(I9yUzA;};2dmPxb?9a0|Nttr>mdKI;Vst06?evvH$=8 literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..28bdabb4191161c591b3ad4c3d76caab098c2ed9 GIT binary patch literal 629 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj!RiFDUCa4kcE0{e}Qz6*$TfpD^tS;^LRi(M^ zOZEy(eRR(AX0B}6!KrJPO;|N?MX2D<_~dU}*Z=q4&!~SXvDo*Db~OV7gJ_9sM2T}z zYGO%dex5=|W^O8jp}wK9zMsHO+yR~ ztqjeqj7)S5%&iOz>>2J`qG-s?PsvQH#I3Kfnz#MFT;rsTZ$PN7_NG{IEGl9etX%_%h^$&{p0<2 z-Y&r_Uf8m16w%q!&}uGV)5uZw&N3(X*6m1+dk58~Dr6{jbg9hve(jlR#7nm;TJgpP zA3mn1&6u!-nwvygU3#AQBpLS-4xjOHS6w01sy)o&HnD5FNA0M3iyTt|c8tNKY>KdAc7#dm`npqi{=o*+?85r0z+_yy0kei>9nO2EggI{cVD=5H0 yHU#IVm6RtIr7}3CAV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jjs;BIeZ^7@Z+4u#zaT(Ot-j@n`HT}eDq>4{*03FwPuOr{%EwcougaGGwq`RoT#tw4$L-iV+x8*Wl znUtv>cUsN7MECZAmA3lJcrv(lvb;-TH4oeBT6#ZvaYE4vHs41+w`Wb%dhD^e=6Q=c z@9bk&C#|0JfU~63U{&_%zHM*zK3O?QXV1=~O@hb2ZFS}RC25_~KF!CvJn_tj@I_2J z#PrtQHcc0M7`a?TjhkKXti+_PcPbrX*(R&@%l-eh`|)hsC2@{+x4#~r_2ugI{}AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj0{enK5zU}qCLSI~mL1TEZk#<;dp{PoA%&F@5;-w&TTxxzh~;3 zy=zvVW#rB9S`%QcQIxAV+d}i`s^^`p0lAV36iuV_;y&{%bGDz`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzv9K^QF>y62=9ZF3nBND}m`vLFhHbsTY(KK*3?5={L4@3kDcBWVz_MXhHF)CTJvIiO7HlGhO(_=w0^)ar&)Q{Wp?!hDV_tiKj!uO z#2(@o{F|tqIPsL~2CvzheH(p+=7n~ydHmJ>m?O{(l(jMDrZ6$pCf!Lg5%VsIhTO1WFrR~yk z{sC)d?hC1X3vFe>Z&cK-yUiL=xRoXPfoZ}1$+CL)ZgAQLR5SJbi|X;Xew%A{!-kK1 z;hQ|156x+uXP#~}Vd0CA;@rF4UpexQ%u(OKzf0-wMaduEw?{3TdjG9kjA5OF+sapK rllR+PeR%3nqy=~SLmind`iyK0VUyxGAV36iuV_;y&{%bGDz`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzc6K#1GBR~@b#!tv zG;}p`GIKF=v2e6>HZZerayD{;>2=9ZF3nBND}m`vf$KFhz^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#OkHv6)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI(>Y5Huzz`z*h>EaktaqG=gU4Lgok+$o6$BsMr79JIuus}drMWg9J!m^*t zDiv4i4vPrYF);Cp6>vNYkPzuf5I^Kz6h6=SobRl(rn}WAg)XW2-J+Wx#GjIr<<4Bw!~%}=AH9;4x7v&8=3oWRrO~Y*M*1J=D0uRy1n3jOK!x+oZ>}{ z(OPj{Gr4}n8#M5rpLR$(L{;m}CfB{Mdev`yTYB)^`A=NZy-mD}g1+V`RXym{ul#%G z(5H|75$)@4Wl6nTsP{%nu4K*Xx04qwT({x?(-rrpOb_1#e>L5?L@MF6sHoV*$e(s| zn(l06vDzi^J^bX9Awn!fmPh zV{WdSmdGpjFz)$@#Tz*<7p(q%M<6Xc;)aCrw&aWE|I~LziTgif7Mi#6>c%hif95VK k5a~MmdKI;Vst02X?_&;S4c literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..818e29230fc3b5ede6e6a8bab18462cce7a0c062 GIT binary patch literal 1699 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDqy+1S~{ z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIf2!y;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-X*1nY{x3Sn^s#wBUf07Op!?b zz<;hb{oR`DhdV_yqmw>bysP>5WAFFc?<}2>EAMc>esXJqVNZObMBYJe|HQw7^No*f zQQ!#LZPxzbf@0fA@78-3Puv!NjE|V>r_Q_jW{#Xo;FQYuUV%J^FFa5*UEgj{b4H-Q zy14PE@ws#7g#4Et-?c87r{(vOu+_D%zE&MKc$=i~#IUh(`E!eQml@~c8BVQ=`&=5d z{3fk3PtZTCC;6w6ftz>(e81o~w(9aTx4& zidmVHv*5zd_of?~8b0~%YY=>5+UAigq}7CDyrzATw8cpdkQH^ML za&YGJgXULH1bsLCvdM*HI^>>TT>X=P$^Ug%rNbtyU`E%NxHrnVJx8QKb z9dFIH*M9%c?3uZBW!v=BMAzKj*&x zt!?l=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1rc0S-M#mIvW|7Sr{5x8X8!-nV6Zm8o3%88Jn5F%)qAC(agfg(bC!3 z$;HIL(9p%r(#_ez+1$<4%)r&r*xA_)rq?sCxFj(zITdDaW@d^NRId|Wy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzoCJJxv7hxg^@AD-;Qo>E*2I>F6Ndljs~XA#!67VDddEizMX=NJ}7Y@B^H=akc%6L z2~O9bG;XJW$ULceDYi;QO7?coR1~8a7?{3zx;TbZ+|+wwA>Lngu=$|)cyFxdMKl`~+QQGMKcS)&N-+w>8u>MdD z=k->BHMid$vj}sxFv&jQu^*|O_*h2kc0V`tcdH8 zFXGfy_=PVlIQjT$*42sz+xYnZL5#KcW;+`jhhLWXd+XNm>IDzG706gX{>hX)=9_JH-7+$^TQn78uO!^sC6%9- zcjxWbs{Z50j=kHF_tDsgwPD{oXB8j8P25s_Z7Z1^j|J6p`?kE03~F!bIkLE+dzOjo zBsWfHCY@u;A60+mav8eE4fmxrbHE4LAR(rKv%!XLHW!ZqRy>x?#(5;gbJg z(AJ&Er^W6*u`_AojvjtirqVwf_trku;7{Fs_u4N;%_{LqiK3_Td%kllRa9}~SfyBg zf<0=(tFOPd=*_)&=g5(+eS!Og?5nI?*M{wGtu>onySl}eR-(_*F zzc4{abMgIUW`&EFq$+><`6qnGo5B@w$BpB*wuofC+0|O^=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1U_GSr{5xT9_JJIyxCTn>ah0IvN?m%)qAC(bB}y!qmdq z*u=!t(9qSu(#gcg$;{Ez+|ty=$j!_Jrq?sCxFj(zITdDaW@d^NRId|Wy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*AqTrjDoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzpI6_rGcB7kugqxL-eMQ6K48$3O4$n#DSDpU_wDIZXhN&U4zoNodP2Bq~@jADitZ& z+nrw2_?v-&>5`|5V@SoVH(`6bgB=C#f3M6?U~}OV6H}bH#A9-T!ql~9Vop-bO&zUD zjzK@emwe#*-z1jxb2jZW*9zwe?Q6rbzuGsr?b*oqhH1t5g!L?rAC7H% zTg@QV@pUfqjo$sscxLMctasGf_kOhj&-*639_!rg(Yopn1?CF66h2}2wd7*P9*e?L zd*j~oJ1@VylSSe97t8h6Uu*8X_qI&AkMCMfy%?*-<%^Z`mM1yn27F(-_HLg0y4U+w zUCr`OJ;la(?re%trexc~hy;c8WonZvc_!97S@~Q}shoZO`FwAg;D*fOAzDur1gs*a zwPv$xJT1DZBi79?bNnY)*_kKaD?_SS%({(SbCue+F{A`OQaI;e-E;i$>BA2{r0Pwt z4$~0X*L?Q)p~-xL7nTak2!u1tN=Xlxm;BRtlJ3d2k`oJesfc@OCqCz>>~ml|DV5^d z&f@i?@0Y^tvvtmOZi_GaZVA_#+W%qhi|@a;ue$n5FkGl>@$Q7pH#KyG-t0d%^JbHL z_0E`ANe2$Rey$_Neb?>B-njLp)`|>VOp6}Gq$J+>80~EC63j4rXJKqkT8uOg+xCaI zl@FHG7ag48>}kaOYE`#(MzV>GIAaUT8-a`j;h8a2whgEGXZ*_Ada34PvqJ-$$!F^= zpKqlY?K~)Hw7^~TGV{(W^Y-U=>#s{PnSVa?&CO&!Q-$`mX`63`X36S!Db4khZ%k%l zZrNTK{^Vsz6}#!0{r$GAg3MZvCUrM#<5<+KA@nor_m=QBi4Fa_vx1o3n@xDz{>0pm z_pXS|iR%p;Jee7H?&}C(l6%iMG1=9X_tAUB?GxD8)~zebN}Sg#KZ9GbJ3P7D#E`(wT7pw KpUXO@geCxOgLwY{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_e.png new file mode 100644 index 0000000000000000000000000000000000000000..016b30b079acc6fbbed7da2324bb87cc389f4078 GIT binary patch literal 1581 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDqz(!|i! z$<@it5X5$LG;}dHaC9{?Fg9~FcZKQo%quQQ%u7y%*_)Y}Vr6XT;%aPRiC?dkb5Uwy zNq$jCetr%t1q5W|m*f{`)1QjwCq9kZB5Gy?-utfz}(NX4x;)AsfYIf@)ePmAR9RXH{z zVn(*Yw{0cMcOGktQRWO03kwpks{YTQmGz%dm@B!qtmK)_7DdG^>5d$U`RD&i-EaOr zEz#(-XVKJqD*BTvjo+KU&t_k8E$Ys*fJf7g%YLY5m=<%YZvTI_WsE1f4<-~8as=G! z?cHGFYv06i|GRk5DH*P6b%VK|BQKoZt2o<0rclPdh5NkYf0^r%(>gV}if+z!Hn1{I zw8?pKP_caX-MJgu4kyZmt-o&VIqAsG@Q5ivD^(7hIQLr8N7?=3h1soZ>(+OT-j*=O??IB(zVws>Lg0wso~z7v}_ z6>`e;cy36qo2+2Knvf>mYO5pshVks1RIdfupDdCi0;fuL>{|Tz@p5}rouy2sS3KXz zTuw5ZZEIK@&Jr@`umT6G*qqet+23>B7JdJ!=q%cN$e?EZ6c%U6!@s;VOIbggww`jR zRW8`epb+wfU9wHVd(r_`?V5cOZ9l5^{);^6D_7{FHaXoaMLs}!XX8|n)mOb7W@JCV z%C?HXGC^|2r%#_gUDtf6%yre+MbdZuTmSPds>hV4Jdw-aeW2x}62Ix;58M|vxMZvi z`>kc}c~`Eb_hrei8>0KTCD!JvicdfNblJ|xw=9AnXYB>MA{7yM`<*pmA zT+;)MPDh_VHJQ`*|1sx88K0lMB_&PUW<`nrTXyH~_MhyH^(+z$#@n^0l)pJv4=TVt MUHx3vIVCg!0AO84ga7~l literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_idle_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ec672eb118e554d831d3c4785d9670f4831e3d9c GIT binary patch literal 1599 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wES3$N29~atmgeS;Zibf5E>22Ny(#2`nZBKZjXo%GASD)

_oo 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..07ea499fb741cd9e72dc4e2f402305f688c27c32 GIT binary patch literal 1861 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1rc0S-M#mIvW|7Sr{5x8X8!-nV6Zm8o3%88Jn5F%)qAC%+1Kv&C%7+ z$;HIL(9p%r(#_ez+1$<4%)r&r*xA_)rq?sCxFj(zITdDaW@d^NRIdSEy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzoD^(xv7hxg^@AD-;Qo>E*2I>F6Ndljs~XA#!67VDddEizMX=NJ}7Y@B^H=akc%6L z2~O9bG;XJW$ULceDYi;QO7?c%pDNxmFff;Tx;TbZ+Qxu`pc)_RI{A zC_V`uwYCSb!iq(gR-1pdulV@vXoc}aX_czu-HL{eh96Hj^1rw!VW=3S!JDvs?b5q5 zKkmJ0UK+8TUD)r{f#kIEvVE2BXTRUun7#IehFD{aX5c;$+TOxxopy zHr{K{O!$%8R^^u!AE$y@{{g?oua}LPOb^xxRJ@-seVSOl^LL3iudZA<+RxJ9 zz?`z&cVc^AoZJZq*2|bnjpb4=pQSzF>9J z)eL6cO9!mx@*Q@4TUO1{a6c!nZf4s{hG$I%Jdv_GYZTe6d*65R6(<~G+?{zaXY+!u zRkcfF^x`LZrA-a;X$nl?xaQsvmvw@h+kc(I_iJ|N&%~Td+>!9S>0g3h=GPN48h_-r z-roG7jyYp} zyu4DA-j`%@Ualu>K|N!_rH^OaG}g3>87%nns`%42F~f*?Lt1DCr{nJy?D#Q4|8Kn7DuwL?ADthFwN~6|E3?T zZSsqE91K~L{7$Y*HRP?l%#;Q4OxDerQ_nvSf9pBh_rdD9dry^WMa!--;e9RJ^h-8XW{oH9kVsoxg2Yrrn%~4XPL3{@p{S3OED4aazYjc{NUNTP&#Yz z%?)v_0o%^(2+`UXrZvr9ca5R!eKq%W8%*C`$h;zb%>4;JBkT5aoBu}CGX!zZWDMU} zd_?=y@?6HLtTun@Dz?qud|dOwfwwE1`HN)>eIog%9`>EWqWrkid!FUF2)?P(o96mN uuL!=k@kl+d)mOit|KHz<=lBuaz{qg7<-&xMVHI(pip|s2&t;ucLK6U}Alk?P literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..879c703f7b1f931614cfd0998a7a0248f28ebe13 GIT binary patch literal 1793 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1U_GSr{5xT9_JJIyxCTn>ah0IvN?m%)qAC(bB}y!qn2h z*u=!t(9qSu(#gcg$;{Ez+|ty=$j!_Jrq?sCxFj(zITdDaW@d^NM6ZP#UcFY%MX8A; z`9&f5`8lu@5Rj2yl3$#WU!dR|Y@*fg=4z-;L0;uunK>rL3%Y+*-{`Df3mZR5=JHgMs0vYYUSnXTyJ>bNRxxvEcL z0{mhJn;+b4-u_Qecgh``6$&c0OB5;uby&EZxXswTXDv(oywUn~_2KG|J9*`nY`6N5 zylJ!X{-1l#_X@jC+;wVVK)B61#f9^>@7TXzKE8-$2?uir%QN9~k{(Yk)%DMtn83xs z@NmDtqkF7P-YRwn|6F}?_wL=<2Dyy$)~sFoGbK%E0;A4EuaN8NNnw?i8nb85UhzOy z<ArPq*3=xFspoOA`t@U%9vFk8^iCS^m`n8@<2JHfx;2bP>2t@0jpy>V->x^v%g@(u z++S8>9cJboH;YztV z0TO0~)2C0jRXN1G;83Ex@AAuq`|sCt*}YwG(xCqJ*Q)aga+9sJxoTf@dL?MAoOR7W z!#v@M@ys)`9~S($^!=~=lpD^cP6u>Ps4h7n+Uv|6^qcR}QvMqcT*N{}ik9wZ%9)s^ z8nUrJcu|{klXLaXs3~F|p;}YlOYHSqUd+##z4exQg`e~H%7FFPqc@8s_b|=B#d3U3 z>)-7+jdZO~9zEL1%Vx^({?DH|!WE3#%*~A~94amk@^9WN*>f|fb-_x{8)wv1)hBn> zmKPL!n80Kp%J|SiLRV_3V2jzNMJ%SP9^Q9qP)yR>AHeL|s+07BWwR%D5Q_WHXjh9Xf z8+sLbnHDOgIoerTR<;=L`7e;oDmXjG<>whYy9Ihms{1TNPV`SY;e5EoO-Ezm4mTMo zkN?MFnUj6QS*^Zl@+1YOAKGlGQuIS4MEa@5z27q=YD(LSdHzHTy!DGR5;gd|uPUfe zV^*{A^T~-WvC?Wi+96FBI<`#M-1T-g>&c)0|9_AY_$QRWkaJ_^P64Zhhd`B*r>mdK II;Vst0K=cCxBvhE literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..e39767a6dad1ea5df1635066fadd6dd7bfbba68e GIT binary patch literal 1752 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDqz(!|Kj z$<@it5X5$LG;}dHaC9{?Fg9~FcZKQo%quQQ%u7y%*_)Y}Vg=P}idV0db5UwyNq$jC zetr%t1q5W|m*f{`)1QjwCq-PyBlxeN@<9G)(YAr-gYOgoz`>?m>|J#BmR>RvZN-YqW` zHY^wTkj#tFLZn+P7mz1@E(2x7LSf9a>|oAkGlvQDGk} zV6o6OPODr&V_UAUf$#lC#+x^9SCf72D&l_R`ya*vJ^Sy5evitozrS}c_uaLrZ86>{ zT5XZO`?qbkPuZL3el;3l_xOZ>9xxj+u zHV;{9JXzL@vwdgW*2SsUxa?$3V&X&YWzEfE8p}V2t^Qh7Rb|Dt-G=3d?fK7PhC7`@ zb+;{4JbZYvgd_W6a}9Hk>8Uf~6I)9RS5Dq?X>r93#|XA`>F=R$zX=>Vd(41K2*O7L2j-qwum`D{keAS+HN%;rqJ6>8rqXnl?!6yTWS=3$9BJ7t9{YjYw4xNXA2hi zG}hd&KO)iEY|^szxWwm#cS!=13f1@-4K+Jo@3Q}}fWwLVsBd%c+xAO7KOEC5&u854 zPs+*3IWv1gp~JeLY+)f~q6WcQ=YL(;sQ)SOK!k32S>633e;ItYngqU+oN>ckf^EbBVl{m3{QCGnJzfaUef@f*_ zq&!QM3YaRMX*T=$mQBgaytlMX=sA7($c1Z0f0j5uKAhpPMLPMdYJOVNO%b+$U;lr9 ekYM=FWx&AITIQB9`=KGIuJLsBb6Mw<&;$VV-Ifvn literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..47c1fca332372074967abcd7b30d334d39f0adc4 GIT binary patch literal 1760 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wESB$=J!o z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIf8$y;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-5r49o(aE{-7;x86+K+b!%Uav)u8_MGaECN~cq z($idXRWD(o(l)Nf0#~lzAunB6q&J?eUodw8hq{;IP>k((&~TjGmptW>sQQCcIvS_OBMfZ>1U4$RlRh!+|K=-psskZ`^y| z<(GG^nR2etV68~-tsT6H*(_&NYHnn0jZ@xpF(anEIOF;2uU4~4<(@QMTh+5w{`!8- ztZSWn0`v4V<~`r|vgDOt=Kb&a+=}zOR0ETn9~DHL|NY+N@x)1=&SjWnMe}Z*d}5B< zqFHT+A4Xqz#h6o@WR}gxpLwmnPg(DW+MD}ZJ@qbe@acTdD zuL)MOWDjn$I`clDNjl+HO5oZs`v9wm`%hj(9rTWKxUkG&_xaWvEH@WEnRg@WV~`YA zRYmV7ZTE|(BkG&3=|B84M=Qm}bFJ7^xpFU_#PqpFo7Xw|9`jqNDs|Xsf#K#5t@@3> z4H%-1zEpBlSoP-izkjaF3(qWiadR7M;5IdBVfN<7Dm?2I7d~EcO^5eT;L4C^vzlAE zI94~x)Y$KE`+Uo=^2rV*#;?=9*q!k>_SpL!ORMF+(|S#MZ`+wp-7#Goqu0)LmetX| z?(Xf~B|^OEf`=Ijb{%ovf8X5T%kq$}rA&vy84I@?U48Il>+QGq4n5&*QZQ-V^G10q zLz|@j)%EovdGn55{y590c8M5MuC@GZGuHhFVdQ&MBb@0I_zYNdN!< literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..ac80dceeca9f84bee619d3c3eaab3ef420fe8d60 GIT binary patch literal 1742 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..0ef47018993e97e143e6d965e05556038381d51b GIT binary patch literal 1863 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wEF;(ACJ; z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRId?Uy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-DS{(uVa7iW?u$+rl=jL$*q^X4f>n1*fKHJwM?{7&$3|}@%RRSm z-`&0UuH^kU`*!-6RVPh!y72Jc*>i8s<=?CReDC(sAg`h+y%Ux5>g^|7e_dMa!yD); z^;a?dde&Cv$L(JQox;PzeIrf^n2ITIelyxGY5457bP@Bib*B}aZy2|@Y6v|)bGAys z(C#|>ECcZrmK2HSA{q>wg&SKB2`qWf`8iEC^=lRLPo|zKKJf74$B)vgal5YP{XSASS3T&&Zr$};*O@d`Ki594rQagrqI%@n zvuBbs-Y-%;sTBDtdqqoQ+I7nVR*CH@o=%4rJl0t8dRO|@v_hHNakrJ@cKhB^xF91C zz5Af5@szg{^F=W4+u^5DU(fVlb`(1QSWqtImszQq)+o9gPH>pt*u+wA2%3^Iov;a^V5WbEO)6c9dFqB!a*yOFv1_s%rGyY&XEuPyI7 zqtE2_a@`80C;4J`T9Q1xdpkcDMzCCY=_=KGY{kSfo%ceE6*}%8U3elh`qa;pEo$|P w6bHtr>mdKI;Vst0AGUErvLx| literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..ed02984ef85c950a733aaabd4c070e58bf8dc28d GIT binary patch literal 1858 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDq;#KqFg z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIe#sy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-1{xb+Q?M-4-QE5wCICaK^6(OS6y1FdN za+ZISeQ#O*?&y)Xml!$ys;qw3e6Nn*|NUGDhvT^-gQ8=P-?N)k@16J0&-9?;mY@9z z<-6~8e*YRb^}^bRrOIbD6d^Q|FU? zA_4519akxc?rd{#7KoSA^GFo(sC`@&G-b6br^WTGt?#y5zxCf5#oHV*-76qV!B?}m zX#c0SJ*ws_W-_iZnSFNmvdlG=>)drt-+B;ZBf&FAcFT&389L{$rNuuGwAr$KdpYN_ zfGQ#VNms8piCoK?yFXdt*sTlSJ!Os``CfZ^o3`|}+<3RtK#{5Jea-&5_J!hl@4$k+1vk@GvjSi*i&0kaU*+z_MsSs z)ml$Ix)~hW9z-3|y4lIL|JUEMr!rCu4_Ejw@`yg1&dAg8nyV$#ed3)fUfkkNCQe5x z6jb+j%Q-BHn|ew$(cqiQuI_~IhYbGc^v+~Zx%Bo%>D_*V_$iLhCLQR!bbvojtovw( zVY2L`O-u>5rCvT>)9SMNu0`Iz9PkT^3BCFtHNCsw(J$| z^3|CB51j)_-lAR)p#MB=qf3msTOrLD`y7Bp6gbWOL=@)RW^Xb zb*0HQbtbmdKI;Vst0Av=z<^TWy literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f88091b59ffa5b50fccb9b3dd191101b8529c429 GIT binary patch literal 1901 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDq&$<5Wp z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIf8$y;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-I|QnznJB_&sD zvbLRVdj7`6((-6rgn;LfbEYmkFPcm-lvv!kDJaq5z?=UZmx>k_B4nY$hdTeuODe*n`3e*!9K5N~73Zm#Ghv&hYS=c1G7HIq z=gN~}?yW-BLJbl_% z_s&YKoa**x$^uP?ojY_}?>vu-(cHkb=IOQ6nN#Nc-E#Ay>&4o(LKm+>p|E?OuBtOv zZh0X#)0R8CJji6yl1ooJavv@_yiY1fj`NP6&5V`zqTOQp71E5IKD=JDuH^8BZ$h7> ze*b=ZsjTcmhwHZ+;>&fLdHxH)5p7 zVE-x2lbY#WY=uQ7M}MwL$*RiU+4rLS$%d=Fx!dIgy;dhjOjc?7w=C#j?II_U_c0=^ z#W$>T4oU7N0|7C$V+?s-CnYmm#+84dVyi4T094m-9u=Fb8p| z-+cUaE>lCd+wAj^(|8xokWY)WYPlB8@}u?HR)_3!SHz?)S%!YFR_N4RE9!lzMRV=i zNuDL=f<7||XCKIUR#AH-Z9{`9N2Ez^aJ*}CbkdHtuX0uMO&F(cUZIe=J$Gu8@4Ewc z1s9YiToqL)+hihr@E7y_vekLEOcD3;YFa;eMX{ZH$KY$z6+q&gID06}BhOggv i{{OH2!O!qdEP67Po5ycZ1?cJO=d#Wzp$PyWPwR*P literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inout_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..95bb3cd92510176e8beb5ff0bb4d566ca4924f92 GIT binary patch literal 1911 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 Hl+XkK_5;$? literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..0ee5b08ed66098342239e1ad7fff7de5b995c235 GIT binary patch literal 1786 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..ddf88bedb964135e532186c00b1261a08e3180b1 GIT binary patch literal 1796 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1U_GSr{5xT9_JJIyxCTn>ah0IvN?m%)qAC(bB}#*}~M) z*u=!t(9qSu(#gcg$;{Ez+|ty=$j!_Jrq?sCxFj(zITdDaW@d^NRIdeIy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*AqTrjDoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzpI6_rGcB7kugqxL-eMQ6K48$3O4$n#DSDpU_wDIZXhN&U4zoNodP2Bq~@jADitZ& z+s*r5d4qw0*~HVuF{I+wn=so9kwAgE{O@m{@xSAcIll0Y=)*^?2Lw4JEOahqWfpRX znTat9ZV7#}R`iHg>M9YWT^qHt_r{zmxuQvYB@Ke+D0oCT0d3*6a1c+QIz(g|*4a$);V4 zs{cIRx^*iH(~oU8bL>uO*|Nwoc_gfT7^APFvxZ^$e8!LkPLs-ui;Mj$bt(b^Ok}t| zdMSHqh(A4Zrf0?V*Zc>X*H7>}@p1amqet5}Je#!qhPT|_E$_cp**lz?_BHeCne*q5 zGgR!qo40@7+_|+etFHz;lvusQB`-g}|MGFW+#=O3)lIVl?<<}>&>$6T%QR=fJ%%4W ze8$&AKF&C0sG$0CmXdbBu~k=JnLkM{FaNH_q^GM}+wxOn$#J8QqtiahHz~IrUf7T& zB%xwa-^)|bz`0?XSL2SBT`}+DWu^g}5f8U?El|h4}qbWJ=@u_uERa-9D%JWJ8 ztI;vNlf5-+yXL1qYDK*7_XL?RAMq96dO2pHY1$bcgYQd^$M&7P6S$Rmy8MN&3LHWE z&a^r-2u-RKzJB)Jy?gg~^A=vbWZrOMsiv*gehyuetHl)+8f(7SgvfO5<`#Dp+~vu2 zDr9BIttS4DZ2XTc;Ln8+wkA+by3I7t16PqIV0S!s#ny`PH&iPaVS71@aJi< z=#q}=3zcUOEbr&pH*6=NP9j`$_sNqY7Khu5~AFz=$x~SzW zz1?D)T%G#koHH7iUd_4R+Y))YKJZPr-bR-b|NpoDXLz8`$i`qWw_DnSVNoxrUh;JH Kb6Mw<&;$TDk*RwC literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..df6e1952b1caeab5680b8b74368acdb85fb2adb5 GIT binary patch literal 1772 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wEF)z}&*o z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIepoy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-yPMCN6VibsH=v){%qe)`YR*wTgD_`9x>xi=M zi#`7B?5ONe>UvDVuYr_W>hUVFcEz0#3Nk6(W4C!9~WmpJxTT(Bq7FVaSC?wmRA4*yY@f8PFd%BAYS zIhAv6Y};E`=y=ZIHJjsyjIe|b^;gR-XPPt3>JXNCwIyop@w<87l^Hs3`IMEHw-)gQ zWt&K`8@0(y4tp|Fy-DBZu|lB6H^scQVcASCz9ty_I4sri*fQr+N^$XLhxMtPds%kd zF!HdLWb`hO`daljSZ{ju;t%Hz&hCBt_U-#Dt(9jL^$c%sik={)J@5Hc$9E5HEhh#s z{LPv5jPK9>hROB&wr>6EeBS$3-u9>U6T35OBD#Fi+T?ynNX2WObdX@Olze&C@tVou zuQpy>=9Af2qnNZtz+8NW9m%uBIl&OY3k*Q|ZRn zeUF*i<4#s|_vp%GXHJeu6JlZi(r3uUe~Ix$?Xd{?H2>EVYqSi)7+zSM^RE%eniQeo zC#1t^p~P+eFnndmH%ZxJfjx&0AO3y)tF!EhsW%$jJl9`Wevp=9BklB4XFY?ggxA+E zUvikQr+yE+Z|$QQzb?Fsi+hTkKun~~DJD@j^+=7~ehsF&yTmo8pN@ZNuwt?F!$TJ@ zUYx7)eR4zH9_?8fk=G1%avq)XOi0-0wDZtv literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..4a2f867ece4f1034da24a8a3a7c157cb37a2a79d GIT binary patch literal 1781 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wES0z|6$e z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIdwOy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-+xa`jXyRX&%}$ zgqHZNS+VMfLxAM21znf;M6HE{JY;u$=3n%W;fTD0PD)}|$dVG>q{Q_aCLx)Zo}BZw zxV@)5efztw>&{+aRFtXRSbMIvuI_#H`GsDZMU&4en&0_Xcc}C3-PmeB-Gtz<`ja=i zySt}zCa0WXI;ZN8aYE&iiPNg%k`1e?-GzBg>t65N)ptQ{Hj@ZL<=-5Z4-B<;C%^WP zeZ69xn$FpCXKmMqXjvak5}X^t;u95ixlqTX@PB-U^i<7kasUO>Nw%?XtIRAXw=F^hb?=HLb z{%&0P!yi9(@E-OPVEKMrRm5tM&E%5>tZfmAUuK({?OT6}W?-@%4pO~q{< zE0$c8jgF12oqzs$ywS0a#}*zpN@L42lan8J>#FXyXwkg({`+i!yViEkMc;ki{p+~K z$~&h{onoJGNn7EqufM+av5FMs^d=H1N93qD)^k>X)fl>8O!BIzRhZh?!_ zA5)3)Y3CQlFRaj6=;F0BXmUX5+qp@TTW?Kz?s{O~$3@34&Z;e3Y2vhSs{JA5$L#Bx z&hHR;x?M^AudvY43W=8rb;nf%+d|nnKL`pv@QTn#Ntsi|c3o)Kqzh9Fi%Pz%UUGeA zsLPU4uF02;dN1rrh?c%S(`(0{r=gA;=jsMs@;;idpPT8&|NkHEtN&3x!0^j&W#h4h R6Fz||B2QO8mvv4FO#mp4y5Il+ literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..2b4628fcf78b941b265b7c91aad8cb4119a9d018 GIT binary patch literal 1758 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU{K>=V_;x7V!eAc0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1G}x*3@on^?HO%)qAC*wDq;#KqFp z$<@it(9p%r($Ue-#oWNr)yTlu%+=f#rq?sCxFj(zITdDaW@d^NRIdwOy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*As^FWLoS6sWgQ5o<_Es*bMVV!(DQ-pixeDO$waUa| zzk#8JfuW(fiGex9-{7?}AyT^vIyZoQdyw)?V!$bs}rUy^U{*!oD! zHN#(z>z>QBduxYBcj)>wi#@4%Mv>a-1yV+) z`i;|9U43;qYVWt5F?!tUu`HU3YhP+fX(bdUCqM37m(G`ST5W02%A*qXnX?}2-I=}R z_FLWKg?6iw8WvnI;cd;h`s(TNnLf`F9$BbxFfp}zw*}h7#K-SfeaGBUHP3y@l9@Vj z;tgs178m0fTMCYGKJWR#u=Q={#PjR-t_#sJm*@#yq|=aNAW_p$xj8_?=2Y6|_QX$( znafgh1&#i(-d_0rcX=2qo6#b^19R-VT=s3Uo_p@@!-5}d4J_u9|NgDrDA{Ndz4n@* z+02tRvk!H0G8eO&bQ~z#e6xn%uGVh$*=JiA?fV|6e&4ozd;g=YYZmC~$jE&V(D3Y(`fTam)dgq6PwwBn`?uco z(|a4fb|y;jmzS08J1WidwrqEnZjqt3utoc+OYUbIl^gW$s-(#mO*%Tec~z#bm)O+Q zpjA6R?c>T4Nxj;%pm$}LU_;H`xc{D-s(B3Ui6t!lfkhzNLzSk}_d=5Ba?ss@`cF<>of;T4oUzem!eC1pi(9I`q5TIh# zUvedkaUP$Aa?!@H)wN8wJKYw4kDOMU)_+ypaN**aE5rn+e5~-%xS+vh&}*jia`ObX zFNbHfUOoBai5VYP$z1(Q{r`*<+%q3Eb|s|!c*C-s_fa1a8 z+V$yXg5-tnD8=yhx5f>dQyo%`=KC#ody_2BcYE8_(rI7z_OZ7vRCAczu<^Bb^Q2$5 pC(c{@S%2yO|NQ?MALKK#F*wKcg|(mI{tK#cJYD@<);T3K0RR(mp;Q0> literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim1_new.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim1_new.png new file mode 100644 index 0000000000000000000000000000000000000000..16f8254aec38c7afde233c23c9bc5af36d25e821 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V36iuV_;xN5}TjRz`(f4)5S5w_Fv?0qV!=5A@ZLwD=xvc(aC;^9G`^v!*DXS$pJyv#S*bW&T<#OB+5(b~Iv zju$-mxaIA}=Rbd)(D(HF_PF8d>Th3uf88_Re*g2Af*l?|I1kO|m-OPDnJCKlP=fD4 zN2inYY;)${7rtK&P+g+PXjt`k?qSW}_s>2nb(C}4FSV+{a$B;#%>j!whuN-duH-W_ z3p!Q73h{~aSjRa3FSp;|Cbs$?>-q)1e@khJ_~hUIxo2j|&RO{yvvXDE>$}wb zXAA8BPu@lii`946+?Bh$dR0nPou+n6EKucQ&XH%QTDM!sUioY7BWn`>A z%TcsZ@A82+yKMGW|MJ#X?5i>jVYlD$z4`b3z3+>U7rGqz%ks{j{p!?}Rwo#;3wV|n zaH#w6>^jK%dINJ{#(K3Cl0pLQ%D-&%9?qG|-@sWhgORgp6=zmUWmzKso&zE|hr}Xo z&bh?vdszC$>buIa+`E}sS#B_JOV4k~zL9?V^z|T~uMb!y4_yc{dzShzHz)3FXn0h$ zpqth&@duJ@2Mc9W;7Q~!elN+FQ)$j4+L@t(^5FN7#Ik6+T+$$Kg#%9LAZ{kk9S^Xvm=&x*@T zO>J{pXc@YGx?Ik-j*{Z!t2!PNQ}rbI%DK&=w}>p0;MrN-p8Ps7f4#G&$dn7;Gb^fbYRzbeYWOVhr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1 z)zQG*(9qS$(!$)*!o<+P$i>yn)!4)orq?sCxFj(zITdDaW@d^NRIepoy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*Arl1j?nU|7ZUaSd<9&p%Oxuh0lmZhe+73JqDfWy}+ z6N~-M&V>98(VId}nCaUo*yw{22U22z2?e>hftcWQ4NBv73W&^;nwMg$RHS5Y_uG8R z9|i`7Wu7jMAr-fh{`~)M&uq$&?Bm0;QLUCaDPG}TyUvb^k4Xk+U7D80IP8(^n7hH# zXyOazIcM1JE}Vb8PGEMQL&E20 tXSWmzDle?!oi_c2*x#Njt1=mxco+)I)p+|uHnxLG0#8>zmvv4FO#m2ga)tl^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..453cffb3ea7e558901d3e29f1e1f6f412dc1c427 GIT binary patch literal 3470 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 E0C<@XOaK4? literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..a43d8830f3684f0e9c40e5677444d88c69e78440 GIT binary patch literal 3183 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 YPoKX)By7WF1_lNOPgg&ebxsLQ0Guc9jQ{`u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2c611e9da0dfa00a11f67b64aa79a235899a29 GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..badc93d0241563800f8cfa76d7a1a465802cbdd1 GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzax*b?GBq=Gb#yi~ zG;}p`GH^C_b1`#sbTe~xGBz`V>2=9ZF3nBND}m`vLFhHZsTY(KK*3?+kG3d1)Rj?&zxat zk2v1)&2@Fqm;9d%94;k7r;X>#IUdq{#v=Q6P@;Wy($ZBAvg4y(TPv-)$ggPAYZ#uR z@Nk2IPhUmx*Ul-$?_?Ps7|EPB+Oa6fwf4=!+dG-Q21Fh>a!gMv`;@5^>+hBw-~T19 z-FsE6n`?e!Y5qooU@O)nU)=n;Tdj z-CeiYOJU#AP1|yo%r?F$E!Pm4vsuFY$ZR$n^CPq6+U^L5r*%dsP3uri`rFCt-8$ub mE&r4K3wfLcS8vKYx!~#Q=d#Wzp$PzqG>!%U literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..af716004b0b327c238a2d032f648c54a172b2d7e GIT binary patch literal 3469 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 NgQu&X%Q~loCIHOeeGdQt literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..24be33636680b5ce45b9b0ed65c39373fed1796f GIT binary patch literal 1423 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWM*n=U}WNCY+>PM zXy|HUVd`S)WM*J);B4S(W@>5#)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^tR>(#XKT#O&$f7*cWTP58y!Lk0r9f&WgkZD72)Ad%TjLzZExUx1m0Aa_dh zB~BqVjk^jt4Es4A-n!&!E4!_*N7(7Kr~i$8EI)s~yJy)`ELX9?V*&T$tq0697Pg9= zKXH~n;Y>%qmVt1E!fWlujSh()|F627HmmfioL`R7%r%D%biT{T^dI+~r1G~o<#~sO zsplu&W7dr!3-krJZMdEYd@K%3W4mPb@ABoxH5=}~um9h$ao(S|689uI_hi(>x_l9S z7F?0e^4iuU?@C7IwBp#5-vXMMolPYz$232l?AUjRQN-?BT>05$0qv7sToQQ5@MqPR z@2+gu^*{TTv6*gfy3(Vq@kug9_&vNGkFW*)GPI=x_Ng7jjsqk6ukLcYspzjj%{6*+s#X-4TQ z*~vng;fjy!SWmX;C`(Mbd^RxqmSguxg}ud7o>_Nn%VnAQ{7k_v$6Q|X)f_?gY?o|1 zeh6LD&$881dh&SJ3hTE{frrCI7iwkR(JB^PI9oM(yF+5=8J;XpLFpRvubt`1=bWBI zx717wt<755lHGAD__5Lzmz0gR2k%-nm`yR$bn=}nJNb6luj^UYEPL0lJ@$Xq*9Ye< z?>Ob;dqqY^pTDZC9o?Jv?)LFlA^WS(-aBcQY|q5Q@VfoRtNI?#>!2di)78&qol`;+ E0L4`Wp#T5? literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5bb799fdabbfa63e90db6a47248f5ac3a6863e GIT binary patch literal 3181 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..cee81b37c0bf722208ace1d9b872dbd23f697661 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzvUD~uGBq)Cb#yi~ zG;}p`axyY?b9S__aB?y+adLBl>2=9ZF3nBND}m`vLFhHdsTY(KK*3?F!Z)RTPZB`I)sDAb>!+b%vB~RkUvX*s;9M^w1W@#<$ za9>&QeK8AbExUh*gNu6SmIFsCJET;$ZT=c}>W%u+`1^5d^rRkJ+!F}=xvBWw!maxr z9GuMC`5@`*YaW4>nX}?}8Rk5HtT0)dLp$P_+`YXmo1<7aei8q|qaAujPU7e5d#ZVB z_ev+P+nN~o%rxN3!fQg|w!LfeHz>M3+IwKprNu(pJ6o~?x%Qu7%R6!Hp_2Qfy;j=Z zk2Xq3wQr4lRPANI{;H`Euk oo4WJ0!$0X$CL$4AA8Q_9xXaXDXDofv1XM71y85}Sb4q9e05~F!bpQYW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..453cffb3ea7e558901d3e29f1e1f6f412dc1c427 GIT binary patch literal 3470 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 Ib4q9e0EkNuGynhq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..a43d8830f3684f0e9c40e5677444d88c69e78440 GIT binary patch literal 3183 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 YPoKX)By7WF1_lNOPgg&ebxsLQ0Guc9jQ{`u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2c611e9da0dfa00a11f67b64aa79a235899a29 GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..8f536d9b81adf905f36f2a69f4833fed161863e3 GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeG;nq?GjKF?b#yi~ zG;}qxFm`paFfnm7Gq!YcGBYrQ>2=9ZF3nBND}m`vLFhHYsTY(KK*3?XL1H%tb7srr_TW@9t@--{)v|V5N{YKsay<>?S;a?4+fu9%RQyy|z|bb&+4urq?h$ zN8#ZH1)si(;;)@kir>jHJTQ_uZ?t1kl56dohqre!eGP~_aO9YtR`w}VDc0XDJHG!* zT)X$GSU1=F#@P5QzQU`;sRt*`Z>l(*bn%esw^K*BB%j4hIizpg%sSJ$XR5=V+c!6` zJi5DXvzNlYrJJ_pESYV5Q(CSeGH0`d`H|UdHs(iW%eCDR5KrrjP@2}En)J7m*SmGf n`C9%b`xo*!3$EU_mqmi%w{Kg`?7)txpmM>})z4*}Q$iB}o@I>r literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..af716004b0b327c238a2d032f648c54a172b2d7e GIT binary patch literal 3469 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 NgQu&X%Q~loCIHOeeGdQt literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..222a65ff1bdcfd9550c76d44e28295a8a4a0f98a GIT binary patch literal 1423 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_0_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..42c2b3c1fa2af6baa52c1e3158689fd780888d16 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPea5i+cFmp3>b#yi~ zG;}qxFfwv2=9ZF3nBND}m`vLFhHYsTY(KK*3?$WBaJ~IvYvhbQvxNYy6{0)k(kM@kxbqRoH~tP)eZGU o?WXR0?eI_fl!-{h*2kI$816E)*BMKnGyxS1p00i_>zopr0P`A+hyVZp literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..6a34d7c0d516938897c030732979cd4ecbafe550 GIT binary patch literal 3481 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc30ee90cc92e89908cfdcee20b5b4f2f7d5073 GIT binary patch literal 1441 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWNPSWU}@}RY+>PM zXy|I<=w#&VX6EAPW@KpKYT;r5)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&#MK#hZbFNz~KDF{I+wn~2!FCI^8u-uGYGX5F~%mKU(6(R_t1!%ADny^g9e z4bmC@4D%M4`Tn}1_Txf%t?9A1lXzaH+-ZI4&U)K(-v(>tmi*`9lF#p~aL{QqTQi+0 zdvRM*)*rRHpLS~`H}F{q&K@ zH?fWGlm5gmUvhZkr%7T9>#o`Ac7_Yjo;knPE2KCF50D-^y7{aE9w;V*IBt4n0zu}QXNjfbup1iVPy5S-Kd>&WGa zhgwfmr_XbP0l+XkKPaGE~ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6ff777ab28ef1128521e33d834ac7e51396b7a GIT binary patch literal 3196 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..477dd57aa48560c798a2a9a55c8904802dd44f0b GIT binary patch literal 3038 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 bW(Ez%vc;hm6P7bDFfe$!`njxgN@xNAmC&Y{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..94dfff0c827e51327cc25b2aadc68b71d519c055 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeFt;!@cXKvyb#yi~ zG;}qxG%_%8GB&j^bv1NzH8wJY>2=9ZF3nBND}m`vLFhHasTY(KK*3?EaktaqG>@SiU9$p5tpXP1H__eqsCZYGK6(m9_$n_^%vt z2m4*-a+}&M2xdDpLulJK)>8|b<9Gkx#^7=#d3D-~Ij>hZ9fPsz1V5@xy_%x@cFxCp8<=OM=88qHZPxDVZ(iOpUoB~; z1<%e+B{#zyUe>f7opp4BgxKMvV)FVdQ&MBb@0DS_Ok^lez literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..d1bfb5e167e69e8575426b767209199268bb05a8 GIT binary patch literal 3482 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 a&k)CQzBi+HZUh4Z1B0ilpUXO@geCyk^B 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..ab40c2f2d87d96cf31f249c38fa88f92b2c4079e GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeFmQ5padNeEb#yi~ zG;}qxu(WWsbTV=^b9AvZakVsu>2=9ZF3nBND}m`vLFjeFsTY(KK*3??5WlL$JB>-`R;Ba|pUj7|zd14sTx>{H3prPM<-msdtFBLaYN7V{)W1_jOS>Ld zbazbb`D}Av-P7p!JaK8BgHxY&iz;-r2)yTGNIRc=pxc|`>VJ@& zwzAMWLFIPs?22iryG?w>V-G8xHoNf3SJc<$Q)b%VCSEnQcicKz)nQ5QahI;RYyR0R z6|pdC@8sUj->)LW)Z&&MD2$luyXV}QRhuW4`Ry@()0l4hO)NV9khGuQ;pv_8mnUtt z>8nV4xoU00rK3FEw%v(_I&DXb_@5J+8-4kH>{rxxZo9fwj){jM X=~?wM)sUCMpt8f$)z4*}Q$iB}vrL?_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f9adf5e46790d5ed5bfb842171fcba2501ff134d GIT binary patch literal 3475 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 TwQdmu0|SGntDnm{r-UW|MO1ss literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..74c614ccf5e0bcfefff162aa5b5d160ca36ce9de GIT binary patch literal 1429 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 MPgg&ebxsLQ0Eyn0$p8QV literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..3130da3c994b6a1cd8c7b4f17fa591075d79b10b GIT binary patch literal 1177 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|cXT!}Gjnxzb#yi~ zG;}p`G`2KxF>*FGvM_QpHa9bc>2=9ZF3nBND}m`vLFjeCsTY(KK*3?zlIn9sn#$m{9i7*cWTO{61VlYv0V*<;rF7vvutui$x@{EOwBj7349${NFo zI~s!$R|?&l+j1c2#-TSQ8O#C~{S0|e^!ctic*Lgoy=tO;aZ&He2iftSlVSu6-#yxv z``N_T|AphhgHC5eKDE6OK3W=EFT@}d|9dZ=o^s?d3FnIP@J^=yF^f;f6s8=l?X^1e zOYNS?S<};-KHo~2_(AH&OJ`nR8@|ZMgzn=$chWbVC_1;(sIZl5_naw*?6sSlPUW%* z3G;u;)-e2-@H|pTIDXL@Rqo993$hRMPGH^Z+p|gMeNLI*`-rKjP9m=C(Q8sxrfWue zO`Ejz!~8XiH1cfLt$KCvdeffXgXu6{1- HoD!M<^~sc# literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..70b639a7fb091916aff3b40fdb046f15753f38fd GIT binary patch literal 3473 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 P0|SGntDnm{r-UW|g9Ue2 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..8a267f0112286108e98689460013a5b9c14c60f2 GIT binary patch literal 1437 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWb9(-Y-wgPM zXy|HUY3XckX=&zYVs38Y>SFE$)9aF-T$-DjR|3}9J=+-@<#X&zK>3U0R;aspI-S*3G;QYU`r~&^PGw>_Pm8+xna|HxaLDqt_y4SU7p^G1 zAZpIRJL>;Jg7!zdTAGAT4{7<8`o2UZ@a)@A1+fapY{M-gIm%ZSMcfThzL?_rSxIn} zQ<(Zwp#yARZ#B5w3hCJ4>v&1=GzZ(065%Ve$}S`&dAw&?`jcxni35UqO zu*s$yt(>-~wQtU2j*N^xaoymi<59DsXe0aV*DJHW7i=$E!0Vdp`B?2l--+DUt4{J= z&|UpC>(BBi{(qM3p+Vo5iNsgGUYR^Um literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed531067348eccf4558e9b7fc3661c0a4dc4e45 GIT binary patch literal 3187 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 ZV6?uwWv1Yaa0Uhj22WQ%mvv4FO#qMn>Ae5| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_1_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..7f919e952c6cdc5e6c545141222790c2108b1002 GIT binary patch literal 3029 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..046714bdd11d918c14cd6fdafb92e45418b1c9ca GIT binary patch literal 1435 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWNc<+?Brr;Y+>PM zXy|Iga3$)9aF-T$-DjR|3}9J=+-@<)X&zK>3U0Sp;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z}(o+YbOH(6Thd6V@SoVHxaRZha3dnP1<*wSK(l|bACcKbDo0S0zrQT^9jqu zU+^9g-ZICbr_+Dd6!!ZMrwUxlHR_$5xc%-eRxP8G)8C!DuO zP77l`dhLhrw@Ue!L@_wIumEbo-?P{G|b@pdH3?;J^SO<*UKGzyRW z9nG9vmoJjvly{^v{Njs}56Q@SRy{R+_k)!_Oq`kQYn78u+f?zhPncElz4mzyOXUo~ zxndPJn0D*@@#W+zPMh^cq9~7T;mfcUC-hy)wLjL#9AsM*xsvzrg_Ta%Tz6VD z?sa~%Ql)-6>&p%6_bhQ;5ntx-{pf1UJeH(J_a)s6mnKLq5X zCwMb(U&)Sr^wNs8W44Z0YKml|yPvt^+DukmwYCp_0W;PgxV=kmiNz_FtvWN-$Z*t( zdz2q|9DLz=mhD67-vZO+f@*(-|0%lvc+smR!Jd4xr^KDy7bY=(%b)5^m8LzSRg!m@ zZqNU9(xKoU*q|_eh4IRZIHDI|p)d9i_YcbbC@CC)?%DHHqZ+ zjeLIXvdg9|b6@y*6$VH93)}qm`xbAt?M{wfP TDMl(CR9t$x`njxgN@xNA215<4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..83305772e3bcc924824947c1d03d7bd343d18fe8 GIT binary patch literal 3194 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2F9hHE{-7;x8BS!^giq$a=cz$ zveoIjl9uS498nq38n)na+?ttR3)aPr{ zmdJ*-#HeW}*X&#`cHZzS*Wachu7i^+*j~+gef0jsXxGV8SyzV5PfD*lKkc2n!t1!` zj`-#Esp301cCO1==b9n5Df{%6p5+tY>TBQh_pUL1$l2PdfBodWs7K*PJ7G&{I@rJkyYtzO}ufHd6%rHaH^HL i-c|9Cl_&o3Fx*rrV>r*0xQ&5YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs21Zs-7srr_TW@Cg@--OPuz#!9`6BB`golTx}n3YVVVbZ2R%l{>qdj7fsphxwb;Q_on|t1-+lJa$9jNLg*Y ziFU8uo!x6)>_Wt%ejEsIE|QJ7XTHK%QPE{y>P;n<2w~x_+I2cFN+xseDJkgo)$9NeS{{LrY$kfj| V9i+(Y$iTqB;OXk;vd$@?2>|A8o%{d* literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..acf7cfe57ec80c4bd72ea452b2775bfb889750d2 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|b2T?KFmo|?b#yi~ zG;}qxbhR*cG2=9ZF3nBND}m`vLFl!>sTY(KK*3?p;Yh)nR5whoM3 zwJwnFP3)1SQ*NtxK3kU(siGe-p(yd-I~Cb|5h_C`pDjO zI=7Y1<(}9eA$B+^f@gKD+P8zQU!PW%7)zeE`?j}7v+kzEhkEBc=eDP}-ZAkoxKGME UW0X*P4^(h?y85}Sb4q9e0MH|tt^fc4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f84cd0a40b03f40d6f5dfbf41e851bac6b175869 GIT binary patch literal 3481 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..55f57d6fa88a726d3ee06cb87abdb90e625574a0 GIT binary patch literal 1441 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWaMVzW?|xDY+>PM zXy|I<=xA*2Z02U*Wb9(>V&q~B)9aF-T$-DjR|3}9J=+-`BgX&zK>3U0SJ8UAqRnXllGnFRX7;#oS#t5oTnhSK+s>oe8MvE z7raM=x6EGYp9h5i1+sRGw>jil8NZ@W8 zS{U=uYdh4cf7-2)+}O)X&ELt|>s6XrGHOcNc#4~Xs%^EmK0H7<>HN$H#2%a2#q?~VI!)3DL++ik5K=?VqY zle3iYpm4;bEO2D;WLkVzouXl_R_5t9taQ5O zy3?X@uk)LgO7+uOUly#`v&3~pe3`%Z!%$6sri}-bFCD!Qw1FqEJLz|u)JL_`x1WnH z)JiFJ(qq&KSYO(?{I!@;-X?{Y6H-~^Ebp>xT_(C^hQuLj$HaY1`LC-cNcQza318Wi zu&GGlORU0O#(sat{o$`U@84+u@lx^X^7^Ct{I+_}=9aBGkvRF1_RaUA$JBNI&s(#m zqtJ2dk^=6W`d7mK?pfkWmt9YUNUXlqbR}_9+)=ZnEgZ6kH%H_pY}>Yg*LAtru~i=f z{i4--_+xgXGqE4>*uE{}nu3Wp!a(>_Bztj74e@7f=+jD-iq4R&~`NxkM-;AG< b&&bBWeQI5S`WK$PphDBr)z4*}Q$iB}MBNs} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..0f67463aea94cc9e7433a9ffbb8011e9ffe111d6 GIT binary patch literal 3192 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f7bfe98fd045c7b9f94f77ce11a6d57dbe9b0b3b GIT binary patch literal 3469 zcmeAS@N?(olHy`uVBq!ia0y~yVDM#NV36iuV_;ygyvG#9z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4Ky-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++CTJho3?8Dv*~h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJf0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@40-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1Je#q7srr_TW@AMW(zxt9Iv0P zwAO&2bbZ4wf7e+k8^d@s^Z$hVJYg` z6(G>sBz{=!^+I8p`1G=}&9l{x*+`tIHqJNte1CiXz4~k2k7w*m5x$?apYsm;I)_qBT6l5cki|q1H21fOT1TQn8J2svA<$p_TISn=UL{J zvn@#J*kGFYdbLMX(8QffzU-6OzD&vMx@v;_l>Oe^&K@0x zXuyTt~b6v9!NjiTfs5M=Ubr2+by@> zCQP{;Y=7|67jZ$+$LFGrZeHKy7Ip3DDWgZvMW%(uP0I8BR;hGWwY>G-OaX(!rnMhd zoMpZhI`RB32Mg7UCSjVr4}=-~Lm%#1aMRhj*Hm}YYFUPji{EIPT=H4(Apc{T#F1{p z>j9OEUhZ+0uU_)9VQOQrgZIVt|DC)fKeycrW0^Y1q)VpwJWqz6TfjUK_dnAej1Aio z!Y0*i*8+Ecbt4!`?YVv{fGP4AJZ-VBDS47hRH1G zO!Dk%=d%}m4foA1*cAPHk;biy)+KkZJwLm@TCTp(nmt$V<&*CWQt>-X_TAsOn1O+T N!PC{xWt~$(69CRMc>DkW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..2135915a2d4fbb084d69fd66fa6f935521bb4db9 GIT binary patch literal 1426 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 aBg2-K(zMVj<5UI)1_n=8KbLh*2~7aAclD0| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..30fc05b20695a6cbed54e0adb322c1ab8077ca61 GIT binary patch literal 3024 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs28Q3BE{-7;x86iJ@--OpgZyK|mj08%Hs234b|)RKYP_Lvg;y-sTRrp8hQ!lvwq0frn0SNx!j5^tyk~6m z=CgYHh22}Eq1Q2^f6x2h*^$%Kzbtr=Ab3phf1K^2J+F6#Gc_z0a7r=MyZ-W;jAh%0 zck6^&FGNN>WR~YWResQfXNIxj+S1t2tCnmVWrR;Tztg$#V-n|2ooPDX4}48|5&7NB z_1FrV^qi(;neU$2F!z6cF)>Ik$L3h^xAf|7v-ug{Z&-cqU+kJ};ZIR(vW2})TXgy+ zO}?R0#ycg*eDe0(-w%##xwci(_-7E$w=efCbRS22WMN?V|DTz`=0L@*k`Dc23=9km Mp00i_>zopr0NDkk$p8QV literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..aed81791eee42765a6f83575b7ac62613b5eb197 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|Gj=wyFm^U|b#yi~ zG;}p`bTl$|H8eAIHa0YKbTx2+>2=9ZF3nBND}m`vLFhHZsTY(KK*3?v!7`ZfatBfqDMV@SoVH#2?tnhXS5WsM8ZbADl~FywRIF+=X4DYsaT2xqc~ zidjI`!Bg?~Rd{(?Gk;puYPPzhux~aFJ6C$;gweSR>8UB!&PiWW4_@E4NMn~l@r@s$ zp?4oy*nMPUo5Pck^Pu!)cZ+La4U>TE>&J4Fy}7+#Z{~mhPHO`HOxM0G7rV~{mHJ90 zfI*~@n+$^DuWneyqkOU>yGM+(kXrhVd3ep3|a72J2`Uec4C zQ%bt0H?`k7zrBBH^SLGkiy1WsX1#F!CGPtn={3{LtxOSDw7La9`le6I7CdgkqH};r z=K#~1uaUEsm0vyo`A=qWc>cGQrK|3TyZ^}V$mED9zU|$>$iNv~b5CTUxCyAZ@O1Ta JS?83{1OS-Elu`fy literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..617af25ae1a1cc6342b030cf6682798695532928 GIT binary patch literal 3467 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 S+Zh-b7(8A5T-G@yGywpVXs8DO literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_2_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..e76c53f7a368abbaa916b761a297c5c4a80fad82 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|b+NECHnwncb#yi~ zG;}p`a2=9ZF3nBND}m`vf$Oz2z^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#EL?Hw)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI&u5a4@{fq{|F)5S5Q;?|p)fqYE{JZ-v}HP2b9nD<-b z<+tzUn9VxYi=LlkQ?rQPGoNwMl2xn9*%{iuNt}En)nfW0ndAIBr_I~A4qegbkQ58w zVQO&cda3K4b+5hWJzu^w@#2Z>1232SQkvHi5_vy?+5L!fqwBiWLgJSut&H08YM46lCHK6p7VX&tDv N@O1TaS?83{1OVvnocRC% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7bc97f16285781b38c391451465e456f667ac1 GIT binary patch literal 3468 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 L`njxgN@xNAcTjbi literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..97120a9efe77e22adb0f69756b0d10c1807ea425 GIT binary patch literal 1425 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWawz(Xy|5WY+>PM zXy|I<}9J=oNjS-!)YE=ZwhX=7~s^aZ>M0R4~kf%h=vITxwwIt;4}$JpLPm}grAz1 zVyjf7WN+u;EvU`Fz{Kk5;uunK>rF(g-ysKqca!#==FMnY-*)dn5p$k`+yX&=1@j5V zxWBMH;*9cBICezc_rbyP3e}d<*=LTO+;BJVC6nmPC*I}hx0c;Mr*Cj>XR>2WquQF~ zOx(-c9!cGqTwB9_t>*?ClXD~YqWK(OSku_vFJFGP=!@Su^Bhl!w&3ffPtC1opG}i< zofz&?*3uDl(!=gRm8Jl91ykdJtqxpr`k#z03m7ZzudSL>9=7`Gdv1yB)az}}X3jeh z+qbr}W8Z-~hVx$>?mNA1=JNI3dH(Yn_IamNf+l>sXr;F8%;N6_493#;_r0IftH^J> zD7m*?cEjpJ_oqEDNZ)pnPw}~$z%0kku0LKS+quq%E1pq(xV-$Ere1Ez`S6OP`lb2{ zEu|O4$Q-<f1jG{H`TXIwTd?tqwKj=nEE}YJ9rr@7Hs^xa(;!{reeiS zu`M~R8&|1%$g17ez3H?@Y@u_7*lFG~*Z8(9{Bh+_gsI)B%-2g!mR+1unrB<8;(fdG z<&r5^wtl^GaI<{M|JbYB;@02a;P`Il(*M2ZA3vJ;M)0Y710zGZ)wB=W4sZMbDkME! L{an^LB{Ts5ZI}+C literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1c0618d68dfe3b37a2bcc5885335e78905a358 GIT binary patch literal 3184 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 a8Q9Jx8a|!;#+iYEfx*+&&t;ucLK6T=;qs6G literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..2992e5c4156f52c6c6629a1fab221f18be16e5c4 GIT binary patch literal 3026 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 J%Q~loCIGJ&ZH@o{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..f3419fd7b89cb26d68b92278a54ce696f63fc7d4 GIT binary patch literal 1425 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..cda6d0a06818ce540daa98f6e5825f68ecc5cd9f GIT binary patch literal 3025 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 Mp00i_>zopr0A}Ez-L1 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 Kb6Mw<&;$TP_Uc~% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3f81c016454444e42fe934cc84f47ad3520a54 GIT binary patch literal 3015 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c6c32031dc955f286218bb237d2d712cc12900 GIT binary patch literal 1408 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 KpUXO@geCwRTkSId literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..65c0e2da46ec5a3d0df8d3f2f0ce016909022e7c GIT binary patch literal 3019 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 E08ILzf&c&j literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_3_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..bdf6790e11c5652676ac08b56398021baeac8b14 GIT binary patch literal 1170 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|F>`jaFmf|-b#yi~ zG;}qxFf}!{G&MJJwQw>pad9(%>2=9ZF3nBND}m`vLFhHbsTY(KK*3?iyY`=N-3rF4OgU9Pc#IsBU zraQRFHlNIx%o@ifyJuUzGJ~M(k&3o!KP9pc^n8B3_lYHc`aQdOr=M@xq@&*v@nuKu z?b$)EdZhi$3_6Q{wo58#&06-8jlp7X|4ftX8j*`7zJGYN@ZGfl2&RpZ~nr8l2<&&P%f8&y*93maZ03PO*5hOyt@bw__*7 z(*G>|+3_PT?688;zUWQYuC1|@zjShD$ThYTO`WpkCW8LEHaT_g*s^efY6@qh)3ga& zZC9^)m6yEsYw^1C62)6&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4Ky-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++CTJho3?8Dv*~h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJf0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@40-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1Jepm7srr_TW@CiXJ2uUI97i% zkGm^%;qpUDQBfC9pXzcIm?Bp7(YWFh_m?2SDepF3a1FT7w7p4wf%^JI8#KON30_#S z;=e{~Q-n^{MWIKD>4`PglTWG?3SX;LnDBk>p2;)S-~Xvpa};sqdDy<{s6D$5V|Zhg z&mX%DtTt>`ZJ(?@aO`-v;&|Bi=m+a|l{?n`J@9Dy)37zU?7I(adG>3=jgB-X=Vf=< z!-8uX*d3xb>od(h;Bt(=n&S>jnN8>9B{$z#T=JW+`9?=mm*U~D7X6T!CaaB#!)`9D z$a77dlIMNs-pU^biedwAE=@jkVVRSn@!Q@P6&yMdZTDn8a7kROkxhuZThE@Q^o(i4 z>x|1H9|C{WF+G+v);;^dXG$h-;&$DZuN+z2@xi;-OD5H+zWAZu{N6{7^O5t6^G*uZ zyWVxgvrm(Cd3i&-DrM!F?y4g<)qb0-UcRp>Rr9>E_CM2QvfCz`+&^}Wx7h!tz>~j@ zt0W)ib62lcNLnNj|1NTN>z3>!JMP9X&rK@@Tm{;fo!X$f@ot9Xw}_<Q?JmHyufSEO|ChA#7E@}KhOmwv#+L&r$tM%J<@m zYsS;O=g1yueQ;vq<8n==={>ikT`p~F-OCf>zk*{)kCo98pQRTzFTK2F(w1pA+~zE* zHuxDZ`^oH6_d=eUNq)WcVPE^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc=w@bU;N;|FY+>PM zXy|HUVQgw*VQgq&W@_wgVrpap)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z@0;G(|HC4CI(Lz$B>F!Zz6pC4mpUt6G%u*DtO5!6tTnb8{0JL0_KklZZ?f~ z7&^pX@U{qVnd2ZV{Mc#orUL%LrAK-$Kgs@NQdL9C*1FsoBaKCZ_oFJ!gFh7 zj)++_{nOa6#Y-c!Ir~t%ee<~`Hyjc)E=>4S+_=vnp`iX}?q-SoqMv#8KY7==x2xZ* zaBu9~PkyQotCO8VrcHRl;S$ay+$i~_m~nnewE7u^b3tkw*KR6Jsb;!vxN*V}-7k`F z824Rn-tYM(XnLXdfmXY~3EMi~d2KXUY+k|W$ant4cHe8Rm2ED|XYoXLtUhJ0pV(q> zdiEQE^t`@HB|#-m*iV+PJW(Td$VN%#dP|A<#Pe&M&pndZrh7EH>vMKy-{Eab<|e35 zk`?+Jcfk30?~%hE3oofFccto@`ih^cdEfPDjanza&WSapJjS_~8Y<@bYIf>OzA*LP zI)AszT*}9spMUjak5jz8Oma%#3AU|Qa>C5K?lZnrGqP*7zx?9n63(X^^^Wa*=}_3l zo$Hi&s$%)m`;&WjEfjwoe(>Uve^>l%gm3N;+^N5IegD@*VmI5jKHF6TAa{Zr{q>6uT+)t-HVE$y1Mylmve|WmUy> zK4`HIgOu`4=}7y>MT%hs`~>fA3a_DT-G@y GGywo9JQ-gA literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..0eae5efc86894a6860a0acf04bb50f2c6bbe4ed1 GIT binary patch literal 3180 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..e7894dc632ade35cd179e0448fecb56a683bc836 GIT binary patch literal 2987 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..0d55f93cbfc2cc89fdb75fd589713397d81569d0 GIT binary patch literal 1144 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|c6Bs$b#yd$b#yi~ zG;}p`GBdMuwKQ{bGd8v`u`qIm>2=9ZF3nBND}m`vLFl!>sTY(KK*3?9|bf{gr&# zEKNK2eZqz{(bjs?vyXMm6mO94DYiQzRe4VMmk#%J&Y9UhtoGNfWM;SDjCp0Z?fTlg z@6VmqYHpc)yduCTX3?%6%B#4Js%jsOS(tW8Rik^#o{b!-UsVdrFLZQn&liqAs@C25 z{lXM|(}YK*Cr>HmehOCa-X9YjzN~XX;@M?Wo}K9tOwp6{@Y!?Ynq$(VrQahrPkm@F zf9WRUDX#^k0k@BC@wLfL&75szmvv4FO#lk3i!1;D literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..a21eb1d7b803da70ad6f6634f254ae284172a357 GIT binary patch literal 3458 zcmeAS@N?(olHy`uVBq!ia0y~yVDM#NV36iuV_;ygyvG#9z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4Ky-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++CTJho3?8Dv*~h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJf0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@40-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1Jhbh7srr_TW@CiXA3(@9IKza zjPyMwp{3*e{gdAg6UlgOpZG>FId2u&uZ`BAGg#g;ML0IP9FpQ z2Xe7)jQFxBHIjekfgfdQ>Hk$`t3GRNtxf+ncW&jkxs}gnh9*iFxfo56eOi1#s6cjw z+Yfn$+XsRdq^?}g|+z+))Ls9tDp{ zOE$U8@?j}j@LKMFX~IqCDV=|9()yRLb6(dK_2zPlzj1Tw%J)YP?C#C%f2*pSnZA13 z*5w%icmF9o?fF;Ux;K_#(xEu_9I;Dz9ba`Aq*yzb?bB$|xKi4p+xgb*@TTKhESGe? z-Bmg}?Hu!i*FGC$C>DTV3!I6I@u;na%c?(-pBw$T>8+Md}R zxkn^#u}|*rb=|k_t#0i5NrCw~@2efZd@N^;*gR#wUeULlmyPSY)*fN5b#*+og6-|) z*vU(*4}5Q_wRyF8S?^qqSzG$o#51IVR_@~18zNKF}e9K%=XxaY9$;0 zpTjj@*Pm^X{<<~uclh!CuYR_gqiqSVpnN?$!%FiN$synDo-!~nFnGH9xvX^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcXkq5;>T2j{Y+>PM zXy|I_bXl~$aWNc{&)9aF-T$-DjR|3}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z`U(%`T_<9CN@tO$B>F!Zz6pC4mpUt6G%u*DtO5!6tTnb8{0JL0_KklZZ?f~ z7&^pX@U{qVnd2ZV{Mc#orUL%LrAKF=9@A~;|K;L%OLdq2+oN)O4>EV?>`}gN7Ab$&Sk3Bc#f^itp+9abIe(sh zQ_cFwoY~14Rnj3(*fZY-J*-rBekj4sTmB zH);7KS)spj0trV&g%Z3MUQ*ZXddh3+D|+tln=YmB%PKB99_zpI*v_4{`%appk>Y8U zlBJhH$?O*&HP=1QvW@JT&|7Hu za*MJnpLkS@8Rz4<)9U@hLXJ2D>!w!B+H3z+_`HjexYGZnU%zgQyV6n{k-hG>df?s{ z24P!SH@clHGtX3>vf`B9;`Eg<4|3inNPjBV?FoInc*eG}Svk{vB7a{CcH2~BZ8&#I z)240n4%yybQEs=gHo*3u+Oy3iKda~2roF6x{CCF=_2>nEI1Cs%&vq3s|2$|0DkVK# L{an^LB{Ts5rj-w` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..cd37c329283952536ad91da42ae7852aabd2c13f GIT binary patch literal 3181 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 Vxcb%lB?AKkgQu&X%Q~loCIFFZ?MeUu literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..1d77c307aa651b71387790f6e8323ac83dca9f60 GIT binary patch literal 2992 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 WsV8RM7GhvvVDNPHb6Mw<&;$SvTaJbR literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..73c369ff46a463012130d66d2f718e247bfbfbf4 GIT binary patch literal 1142 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|GI29@Gc`7Ib#yi~ zG;}p`ay2t?F>^6Bb+IsXaWr;>>2=9ZF3nBND}m`vLFhHdsTY(KK*3?7w(o1opyM&zwIuYWSH# z4QI`;X;w|!$7qyu(_Fqou$K`;Yr)=JpSCZ3%}I(;HH97l)#>{^H0P)?YpJF zKj)n1|La7Rq4|Rr-Pby=Dvf48c%ovYn&t6_>tM8d$ZD>8uO2Cee3)zT+Uw+AUr zEIGHxX_?~3i=uxzqPnAc6nPIu7KqJZO+Oe}e5ktq{B6ypd#_47+^={^;G9(Nat3Aw Xp;vR#>P4-BK_!8wtDnm{r-UW|T}_8D literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..06416c3a309eea9ca59790a206e2947fb1f91f35 GIT binary patch literal 3383 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 Sqc#Hr1B0ilpUXO@geCy#jLyXX literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..e4441e38caad0e9bf8c5160297dcda7c4586a269 GIT binary patch literal 2990 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_r_signal_4_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..8503fbfa901c4e1ec3a8c4f3050acd0807553930 GIT binary patch literal 1147 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|bTqecHFmUcb#yi~ zG;}p`G%|5^HZ*W{H8nPHb8>Wr>2=9ZF3nBND}m`vLFl!_sTY(KK*3?G!Lpb1-Dzwaq88#Q?StoMJ!T8!-Rrd+(1llngpd!I|W3-Pt8lQ zRVq@lx6?{&6lP#xc<<@r7*cWTP2_2=!wLd#TK@g-=c@W}Y0}|oPW(YWoA#}p%cwZ} z=$gKFJ3JMX%$?eGcTDrRth6;hPsTSU@Q2^SIn`~oYqtLWZPzqcv|2!jZSJLTqsJM? z8x90>D1B_0-G*uIOlZ!>J5?AOEZI&+>dy(?EBW26?yQwMa2QGeUsCs zPT}*eFI7-e@r$Dn%9_lK9M#`~L5}Q|$lDQ=}%X dxmdwzz|i0{KVwS||1wZ<;OXk;vd$@?2>|?2iWUF> literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..e75b98f3a1fc85965d60f9457f3307a71d980a79 GIT binary patch literal 3188 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIz**oCSxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRDTvHNMxpmBI!{uXknQzZ1M{ure+2ho;*`TBE?3^C= zBq8QW^3!6|%Jb~g{ylXGovGd`a4ocS@!dRo2Awm4H^d6KLR_B+&EP*EaEPy9-KyUQ zc6a=_@t^HY+3u5@IIl1=$~77lu+Cv*eQ@&JTG8&K|9BFr53p|FesFNl+ZtAHhm?ZO zEVdB#cMZ`B{8#>Qi91;^oNJu4N=ZqjSZV*a26wYPRctpmWr;QL6-=+Ga9W`gVA`L% z%<)q0*HcSYsj@w|x-F35mqUSgKlABUfxbrZ2lo#9uJV-gym#yU^|=~dZfY)pQ-mib ze}22_zW4UxkQ}K4%d&HC*6hf=>Jy$580zo(geAiB-S_mi#vL=36(3`qc6Pe$f~2^f zhGna+xu`JLvLC4x0}=cNpXk zXbUiJ>^S1EW>ulkZ{56|49)qE_WyfzhdFYaA5TNhuBDf~LXDL^UCY|aX3Y3+`aU*> ZPU)!&d0&>lWME)m@O1TaS?83{1ON-J=8ymY literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..e75b98f3a1fc85965d60f9457f3307a71d980a79 GIT binary patch literal 3188 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 ZPU)!&d0&>lWME)m@O1TaS?83{1ON-J=8ymY literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..5b074682bab83d16f384f037114d49c50afb7b22 GIT binary patch literal 3243 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIz**oCSxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRD5gDJ@3Z*@A{2xrtJ=VB9YV1 za!q4&Kd`Q&hV>u+0$0Y02SOQ<)lnOGAB2Q%Z;TeKH2TM3A;IIcm05f+n#>LRlrzs_}IiFt!J}urY5b>+K??5?d=#8`FMrO zO(ABFzo8O$F6cZ%=HbQCGu{~csB9MqHw8K;^!&>)& zF6Q#&K+SHM{As6t#@yFwnCo$C+0TNzn`ZvXjtlK~c_Q#b;9URn9_G$pCb6G|5-!`6 z^5)DuE^{I9YK)84fxX}38f+iz?$DVPI`8b6mLAU_yN?enGS4f$bh2cLdRta~`a#x# z{0Hm>>~|Pc1G+por>u%<+voXrn^?jZk3Z}8?|RXwGgC-;!7MMU>=jwAF8{t&?Y+2~ f;l7p}8^eUU73Fffr)M!RFfe$!`njxgN@xNAkPiUn literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only.png new file mode 100644 index 0000000000000000000000000000000000000000..b93b0a02528efe7ab884af0ae696120399b07dbb GIT binary patch literal 3483 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 bIflp^Ts@zYC9N447#KWV{an^LB{Ts5gQI`Y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..b93b0a02528efe7ab884af0ae696120399b07dbb GIT binary patch literal 3483 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 bIflp^Ts@zYC9N447#KWV{an^LB{Ts5gQI`Y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_1x_only_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..5103f77214884dd3f2569b545c61917bf9b7badf GIT binary patch literal 3545 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..79aabb75cfa843de4fe3c96729b82e523fdd1a82 GIT binary patch literal 1445 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2)+QFmy9_s$>T zS6trg;%cjfXIpG|{H|g4{FU!dXz#qXh-JE2<<6q({qgtjCRWTd7hk?OXyuy5%)NK> z?w@!c(sRH}FzZ5Nq6F`e3I?Ve_J=&{-YVBI=mp3#fBXGc$w|~mk$u;xr$x5ce6Dq^ zxw&HJf0oCv=#0-`LF49n0TJ4$bvb-Q>J+vtIL5u zFXVsOxVEz_a=$KP752pRcn>S1(^=JmsRu4QsHSeSNS02VP!L_eWyV?)(KR>f&StZG zIal7j)^r(*_h)C8oYZN796Fp2#BRP4UvctF)2iM7&OF$_aJ#1}V`q%t;i<}Vt}RTB z<=$Q#q$f0idqTTc#m|PF?i#C~T?sXoD$9}6U;Qw3`K!ZB^;-fJw4S%V_tYrQ*;TAm zED<%YC&%*Bwt3bJsuH{}1eTw#xXHSx-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|HnwmvH*v9awRCee zG;}p`G%_@_baF8@GO{psvv75V>2=9ZF3nBND}m`vLFjeFsTY(KK*3?wWdSN?vl34!!V3(@R#Q z$m6Z2B75lLYe9G3e_wl@b0^D@d&={Yn~#+GZ!S~%lj zdu`5-__x3B=%4UQi(^;XF8F?OOls8HMVHebxTKD4G|iq^^3|AdYlTg@?_vC}C>v{=)lr!uZ1-DbZgf0JdWZNln@qH0g{ zk`7H*DD?T6YgYgovd|r%d?zWU&~)CnyxanEw6(;!u+gB@TQa_te*RhE_)u? z?0H$;dFoY_#-olP-zU!`ucfu={MwSD=oJ!j+hFcp-MiV> zL;~I_cHDImxxd;s`|_NvGZ}-mO()MjYwqePbNUZQVR!bfW0T5yBjosI+bHau@p9g4 z?+a%{&9cIIw_bbM&b4;ylp{|R_gyM0D%+&K^YsDlJh9ii!)tEtX^*|Ur!wC9_R+n& ztQPED658t=U&B`OJiaVGY}qPr=9PETCjaaC7Ih%4hSBfivV&K`N;5O!_I)t;@4Wxf e;#9eM76}HeIhx;m-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|a&$H^GchuEwRCee zG;}p`axyY?H8VAHGBdNZbg?vt>2=9ZF3nBND}m`vLFl!>sTY(KK*3?ot4D85o!zdb&7ngg$lRUbcp#q@2}EqCKs2z?gxCY z&G`}k_V*qA6MkuN>`L1O-%pN7jas{?^WO{~HEoXc${FQWbNAFJUMu-(elGva;yDtA zd;Qeri&@u))^tqKI{Esa(2--SIp#BVI^~EKYkKrl#&x9I?APRPvh1`?Sp85`?TKE} z;p=(nKF%|>mq+%OKI9N!@Jd)|W=7n;4+j68_di;k dDp$`U!Jsuq^P7*nr8lSo@O1TaS?83{1OUpFbX5QV literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..3cf236d8b463446c3e7368532fad48089e9921e3 GIT binary patch literal 1703 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|bTu2=9ZF3nBND}m`vLFhHcsTY(KK*3?Tpp;E{0A>jcL% zGi$Lhvq+Z!fkfRL7FXpJz1l8+Sf8oSPPA0GD z`Pn_6-yN?suA7#6??2D|?|Ze}WR8D!ZxWV!?f?7lKJf}~0~1RJr81En8hr^TPy9S{ zN_xg>ZuJ!>Dm_*g%w+0sFnw^_i8HH6LU7SH>2G`m)AuDLvaCJfYH<4i?*q;c-b?Rv zuZk!zk*aNr3|z-}A$mF#IcN8?tSaR~KR9F_|KI<^MO0{2;Ng^*?VM3hRD#-DWrC`sq*yq*)xu{! z3f@wE>GsQ#E!Q}Aava%~aDKC+)A^0FwcNSBL^Kyp6gVy8@`mfA>$=Bf_E{ecJM(V& zGAaq}Z9m|9ZO)7NpKaDJVN+CJUA9Wsa%QG%-Tk(`?nSMcq2J#M$@CvLU7DJ?_@c*K zX~X5Ib&r27@aaeu6imvRYcW5~dc9U-x5)e3svWJb4dypkT@G&7XY7<)&;8MEy?6P# z1M1t(cI@mkP%P)<-uJEin92GrZ%k(YPfMC^RLHVqiLku~@5-OGLK9z4Iu|4-y<#>JJobNIVWXVXxg&Qaqgo%v*RX(O#1GSlMrlrS!dET zfpnFhV%>2Gyl$!Ud0c~ppX%r>%y?e9vFpj7EgM>HEcs?xu(s#UejZ)p*E+wBOcHPo zS!5P4_wJ^7rrBIBZy7u8Hi_QtK2>t=>188f* zGGaUZixyT@YWx)n+2<2|IrLdU|H^i@W!Hp+Ci~VbeY51vlZGcxc%QL~bDzDby=%?6 z#QkU1pUaLfFT5SfK4ton6@@Fh&o{iUN#%cYLZmd)FKheFCHAXpmdKI;Vst0IV331^@s6 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_2g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..9550ab5ad4bd72d00c6624081f65738ec5c344f7 GIT binary patch literal 1703 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..bb68877e28e52baa7881c8f556b67fad940a4f12 GIT binary patch literal 3493 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_3g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..bd76da867e3d5b0110e7514f69387eaa759ffd8e GIT binary patch literal 3270 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..f572200aa565bdbf59809f34d17134c9c48e8755 GIT binary patch literal 1630 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeFf%eTGBz=GGH^67 zG;}p~a&)$IGIMrzGjnscG;wr+>2=9ZF3nBND}m`vLFhHXsTY(KK*3?t_ZArc0hKjv*Dd&P=!O7Iu_4R-SgNbua&{WscO=_ZWDW_Ey%F&kg?{NJC$vBNup(eOkt43)*zmTH&hRC<`nGwBKt=0oc`Nxb4uAdVzUwQ7CB3XyLMf;q0Bt(2=Q`0QSKVE#wk^4fx*8Gq{KOw{7xh8h! z%C~E6<2Yq`^7+4l3p>qK7HDhpES+Nhe@6@F9m|p*N!#-$|K7PSks@`HsNA2}F z#a2f&8O^-r<(_#s&-=)4&hkY%*DVF^TgpC?oBLYuTI*NY;<;=x#eZUSJ&#!4-`(qX zen-sr?T?)_uBvF2tiG3@o%QBrqQI*oD=yfzt}AF#>0Z};>~i&9`QXjwsjE0zYqnW8 zW`7U3?;zWvZMCA6FF$l&-rT&d!;3FWIvMco;jP%l$B*WR+p@0O7IQt+oO}5mmA7-= zey%!I__Js3Q9Y$e)43Ok&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4Ky-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++CTJho3?8Dv*~h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJf0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@40-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1CzU_i(^Q|tuxbYyG0xY+UC!i z=@Y0IDA4O-a>3K)-~k6m$2}f5M0tF#95~_O5+LBnEbKTz_=-!b?K}A&!X`H_9N3?r z^yA>0eQe>%xz@JoIsDaAc`m>CX7f4hYP79dr|aP}V)v456!gjnT}24a`a{ z%q(x1&oP{4?|E>>_>)vbv{eE_`x2%Z%>51B2evO|YAbL^O*4LAR&f1#*HT8eQ=tyb zF|6~L_BTxlep>OM#Og1{9G+=*4C1eLy=$3#rK~P9jkmz>(rG>O6DuEt*T1$tQ2C(B zYo{3B3`X^a?+5hOJ4$mI^!eMGhFjcGOc1{D{`>zAA(D+@cMdbGJJKL{N9G21j+a$Z znz6BVu>HB2j}F)U)!w`KqQ;k9mI0ns>~lV`X}+wSJ?A59#CIu~iDW8_U^5Cv@;g3Vy%YqntXWnIcXBlI(_Tc}vmyZH= z9_ToJz&Q8m<`+#|{_byU4Mk!M4oN*&vm`wFyxGyX>!m5uE(bZ*l|1cZ&Oe*8y}aP! z^jkX;wc0wbb?`GuA8360N-xZ?x{LX1l=8jD1;>BwS;yKr_4KSqCpvDcRVcqKd0l#Y z<+M$+bQ<>U{8`5|k9qoD$5pP`s^L=(_*`OsuxyD+%=IT8zLR5oFIC;;HQuei^5etx z|NnCFToZ{aW;Cm7s(i?=9lf4=xl>luku^8{uN+u){cgGaCh?6%h5=c3-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeaJDowF*P!Eadvhx zG;}q#FfuZAvT$}ZFm^R`HnT8+>2=9ZF3nBND}m`vLFhHZsTY(KK*3?mUG;8B*JP%tTf-`S(EiAr`zo6^t=lfHSgpb=KUwGGyZ32j zY2Q;sTo=Vn4!UORZa4q`Og^6(LDRTfn*tVbo@r^;NSb@Wf_H^l^W-@bxp(YrW0opl z%2b_Zw1xew!+Ks;lZOe4i@ve$=ga*xBTHg|=uUxkEV@qZ7nV;f68sghAwtLQK(B=J z_X{OzlRH}%pF22J{($fum1E}~?P@&FvF}50zC-YZP1;3Le2cd5IhzM?zjvG|wjj5k zv)a!vM!$r;^y7DXn}zNR_}(R^aGNb)b)T4}Zn0$Bd@dHQ82fKCAK87|e`)sVr)T2a z3ltBmd+5H?fob9g6T7#PR!?nbl$$2~;#D#`U66RGaP~1dn}iFsyEPb`F5YgPR&hS? zzqifly>A@1OkOiLYxUfaDp|Yr2lEZ*7_U9{|I*4N<03cZWd|3pnB_0Zo_eqEOZil> zIfX5PcUZ)1*00l5-hKUO?9HIg1+3x)Pudn}>)bdcx@J;Pwz!YRCBwTN)eE9m?7p^d z^Wqn_N8P@ZDCZ^bIJhKkx#OD?mA)IVc9aUnBwaMT`#Q_@?A5G244n<7whjc^=>@zWgmlgO|#|0 zqfB>Sp9wx#8g*mMz5FX1bl&ea-?vHI+Q@7|_8j?X>+TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBv2t`ZGIh3ab8#{-G&D4H zHFk1!G_`a#v2-$UH85~x8sy79kd=snYDj|ZbE;YHF1%~_ z#PP}US=r)8lM2;@I=5&~<=R=x$-}t5VSBKn*w^xRabo&$1-n+fyj1gO&(Uz+trjch zG7v2;NJSgbu$|8MYK?ieRUqg>*pbk$L*A4b3ii`T1 z7k6}>`u(taarU)6-=CfRxAnT+^EIF6Za&X`fP-h6hjE~31J6n)Il%|b$B!I)_(ad4 zkxQk3L4ad(iem9!Wk!Y{bv8EIN(b2YF)&tK=H_5H;5++(flT{<{#Q;jV;CD+7!Q<8 zwD9I=5Mgkr>T_Dg;NZsCFn5MpFv9{ChJ@3}Nsk!z`d_XqfwBW;G*2^b|!= z#sw1@6ogYdTo^K}8P=Q+>vCm?Fklc#^FCt9a6^~Dz%x9}gJHvVh6CpWxHmCy@Guwz zcC>0Tuv9Z7oKRM-U}%}iAma8Z+~%Y9I)Ud}3=9=BH`(k|v2<;W=Flx<4-eOq(>UiT zt}SAg$dowCLGMuIOi80g6aELE&oD47m?$dvp!xIPigSGH&Yd&s+r}5K`)WVif2E|P z$N!$5UtQq9!0@o7?&3ck{moJh)@%*A{}!pfW66l)UQqhIJ8cuc!&Zg`FK>l^E&zp% z>%s{;Z{B?RRlW2-<2z;T_B?5z@zUB44-!AAH1T$!Q7D1{P2AF|M&KP-501b zG^BY>Dr8`Yb5YR?IknmTI0plR%YsI&4UW=Z4oc`8V3Rq>dgmbbp9HfOCzT_IoCKV> zQW|865;WH|Icc<=-5{%#pnt_d*5p87M%&~9KD|SsJNRr1_<|f5@}6kwVHngEq7dpK`^mP5$+A7hZP!HW z6AVU8f7K9uu`$EwcDcc^ih0ian&fve* zZ|8j6;J^zBcH<*C271R1J8iVk;hda&dZW@Bp4G>sHiWHV-re~%`TWLm7NJJh1Ds|o zksF(=e;xy-EZV5c3t~7at_ZGEXfX2@bn&d9yDJuk2%7ds zIjvo|EogmU`wC%`(pi>go5ei6m#$qj^|Dlkc*gh4^)E_x3ErJ5=QsUA_@&b?-Cs<9 z!ThD1hqq0%`FKaVhU9Dsc8PS!a*6dbe3nUG?v^|rVqk9gddBma{4?`IBeb?@)rd|! z#WmGys@ha(E&Y&{tCp?0w~9OTbLi=i{*`gTwd>qMje{SrK;JbSaI zOl$Xyzp}f#ZC9;aXz6V1WgNaa=<}2`d-lgO3V+Ng@#B21v3&aHx~_X7?=>H3N-s0< z*=d*>lf7!%^l1^RJyr*OP-5vS6kdq6v zwwXtT?KaOj37ey)h50tJ`p0j740Mh??BKjKacbi9hb(`Wtz*ZeXMk;uYYIuF7sXco%v@>=4;N2G%mhy z_=NL=z^51Ox#v$c$iBa(&fnR;F@5WEW&LFRiQ#LnZ`i)HeAV~F_u_Wn?26_;wtH-2 ze$VJ$Wc(TP1KUq*Kka`we_nj+edl`R|0(~g{$FHR-k{2u&fMAP*ci?9`$tuc;{HB+ ztJ|sHHr;&d*t1}#qo`wl)7qw|2iGcQoOm-~t>X9RGtNysm&w-}Q1{~61@^>eiQR|m zc+^|lTf^Jz`wBWDq%ImxH!Z(-$GP~v%P*H{F85}q8~R(W*Yz^hvRkE>Wpm4Xm&q>s zV|r z$7-5`Plunyln;&qS}VkQR6hxqtM+kK9+EwjuB3m_>|)0a=NK(HzfT@ozEzXnOx$By zsdChKsm{}#E$S;L?D66CxjWlxp4hB1g_teF#&s?BP3fuOY5UK1p0b>_dY<;#w`Vq= zx;?>s&incQ-wGWPdN^s@(l+mKUD=3dd)H)HZn7z?yv_AklvTSejBSn0j;?K5xmW#H zzYU+hu5Pbdm2Y-q+`&^#2e&e2zvd3*dfHn1`p)&YvHlVIk@vSI{%V^mZ715t`<-kZ0!@ZJyG z^7iXD*W3Ej&uZM>-Mr0t=i>b~JNBe5KY8w~wSCBvkS`&>Ld@P>y1O;;`j5Pe@1(2u zd^34-^>*~0?|AVz03cM-NkFK?p6J9zb(%{$HXSG((7}`$;?|X zn=VgI|8%}*?$o)pb$UPVB-~!Kt@?TLx%*lC`R{iLlsvrT`oH_R^&abUF`ssneA;yT zsc`s?@LB7v;&We>yt4T>`Lh4<-E(%&TDLPMd*{2Vy<4l(zQ2^7XMXPPm%WuA#r|Kr zI?vMf?%vN;`QMLz|9W5SZe5Z3-*cyT-z-;uw|0;Jp7<{gZyj$s-)+BYAN}vnjrVuz zvksIm_`**h1=JWq1e(mRXX6>KZf4Ysg?e#nhJ4?$)_C67>8)-3(|>cDHs^|y~5IwrU8WQDO|+?TN5Zx5E= zDVKe}_&&e?lNyD3jsF=xH+~Jiu>ALA$;p%dvoO#2{3qF1_cj9qgF>=LkS_y6l_~>6 zLo)-z&;JYz4KEoON(~qoUL`OvSj}Ky5YL|!f7FeEfyuzr#WAGf)|P2|yF?sCTKC_+ zJabXbA_b|=j0JOdG&MFhHD#!r;b>FKN=Q*r(&$*w*r{-WD{B*%_HQ=3CN*KHA6#lp z_Fv8z&WQG|T)x_U#>PqS)~#H%{+;djkX}!w17{+(^|~$ok~QhfnPt(@(IIPAJY{e= zVE2G$gOmrujPz%`1(m83cp8>)&0y+p>^|^)siGyrinBRPcNpJQ#%~o-aS347E#R$S z`*ZG+`&_oZJD@T@8Be(_`Y>zl-h2OygJCTK6Dx;sM#(Q}ZpCe4YG#slSAZ{*!mQ zJFPxh<+~-^E&cKEdis^@yo*8m^DB6Nh$_Z6EdJ-5KFjNBaK|R2>Q*m;1l_uOvgN Y+!ZFFz@_^b7#J8lUHx3vIVCg!0MmXhW&i*H literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..fb6cd9d2fd6b62c4a20463daf772118c58442045 GIT binary patch literal 3333 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 Y+!ZFFz@_^b7#J8lUHx3vIVCg!0MmXhW&i*H literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e.png new file mode 100755 index 0000000000000000000000000000000000000000..651b1ad07875b8257a070ab86dbfe9ca53850853 GIT binary patch literal 1491 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzakMmdb#gUuGO%

2=9ZF3nBND}m`vLFhHasTY(KK*3?E$myv4(q!@foZ<)NGtPhC8n4oF`tH@ZYF?XtaksqV?oWTO zD(EOs@zzYy<#w`2_tE_i4{$nnRV@wrxa2zXSrzsPNrw+8m7b7OR<}^z&XGM+*yKc| zhj!sgX7vMHAEs$KPL`R~lx5#heZcPf$uk^Lr!-sg6ND|8_w`IEpRX{{c+TPWB9}bL z+Utq?r$=fW-}Z!g%C*P`f-fGMY8WYIthGG(-x-s)xOI`hF~36AqhT{;CYI(+ z-!$8mQEACN!wpBX`~K(`>4$SZTgmkE|1D1cdmpT7?z!3|6rI~LtLv1XcDjUN={)wc zHKz@Np1t(2Kh1Z$Gf6q_P>cE5ovsPhu{S3A+N*nh4Di^vhv}(Ak)5_V^PS{Fb?Xu& zr$)`r5o!{4&`gP)mb|C$+D(a2YXhn6?{bpXF4>V4(c)(3WSe`0*(cBH)N2#L-zoF6 zCPuie>3+aBSubOKcktT9b|;#-<@!0|7+%LHteU&=@|s7-Ub3u`ReYylb+R?~O3d`_ zDlE?bbr5z27sJHR&G^;eREa*|qnM^_8hF{$JQ$v3~mP c^$g4mhA$sV{Mn|c11e@cUHx3vIVCg!0MPm-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzF}1KTH8M1FGO%

2=9ZF3nBND}m`vLFhHdsTY(KK*3?TY_W)ZtXRsj0a+Z_(rnTz!64 z7CS{;0t627=`|^Ey;|gS)P8BQ_-f{P*zgHD> z6sUM>rs#4zS)}{u{)Y!Rox7@*27O#|o%yT^`-G&!2b4-r$SJE^C~xP;o+)f{qS8aV za3!<)0j>|zG#w|)%xcQA@2Eat_xv4rj*ZDm}orbaC?zUo@DLy z#QoDFHI8q4!aU_#=W!n?-@7^{{z}$Xp+lKR_W19N$y?mINZ^=XA?wkwnKBbg^QLc_ z?aHXM>;9Q?NSO8ha&X`gRqT z=MkdPqNhJ}UN8%>Rw>%^vwg4lhN~`LE3H;dxuRUOML)jiRPEc+b+u+m|3%YEgpN2a zkV#feJNgLjTe=UZJ$d!q-uvF~nai5=4~X!;lFsbfd&m09)EECRY_C{9{q}kW ZW(LET4<-I=Q`7+!v!1SgF6*2UngH(nC!GKQ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..ac814fdaea4e546217dd1668130677245e28e843 GIT binary patch literal 1566 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzG;uRAHnMbfGO%2=9ZF3nBND}m`vLFjeCsTY(KK*3?x!psviRb(F!XQuD>mT?q0UY@qSTO(7c<%Y(hf|I6k3azb8P90MV z)FW;k5m|Xjr9;4xsoYgcQGqKfnMwU8|0nf~;)34R|4qFQ_^*8Z{l#~NO?jI69ldhq z_-AE1X8*iX{du49>PHrQR=Hj)`<}13npMA?S$J8<_Oofm7aaLbr1=(g*fy(WI((Oy z^Qh;|qS>#l7O;vdtUXf1UE6%mDLs~T%fkywE^pcXs%NwwFS*X(`b4SZ`URygvb#0~ z$+=YO+{oI>chNV(xqiXTqMdU%+|M1HD!)j5M`lm1`cB7rf;La<|FX_%yti8^{egnl zYwZ`}Us}E|(BcZ%rhI1tB)5<3^i$WyRe0=`C4iqL(8J=e7Ya!DgXaG?`hz%vvD758Owqut`sXP zdSCkEkKkXe!igPw=!Hm^G?@qTpH$T=9AE4@d{_?lE zEWhWA$VZALhJ186FHvZJxcB#-a}6hE*RFF_>bW6uP)@8id5@lMR_iYX|8*61On(^9 z7B`lZ%y|}h^!s*Umt5Yz>|gwLED<-oemYw00B2uUNU($*qposRJZB&O|0Va2=9uo= zc;HLr-L!Q-**2floVx7F^lJAK(_{K)qH8Xke(Tr3$gsfYi;uu#ze%7H+tbz0Wt~$(697oB BR8If^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..e8826aa61d53533160140870ac087b28c16c551c GIT binary patch literal 1558 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPeFmiKrb#*dxGO%JT>2=9ZF3nBND}m`vLFhHdsTY(KK*3?R6=}1O2Z5ziggZ^X`o99i4LS z`gzuO&i<*%zgPb(WY)64_5DGso?B*Zz4ia)ffmiHp^Gnel$bE|^RfpXlXKc^vVfh( zuh5lGAnv>Dg{JO+u%w+$`<&J<*u0PFRzZbO%3Gn2%3nH60ty$Hw2UQtP*7!yK$~JzA%`2FTFHL!n(0c@t5A!Et#_p z86{QSbUh{}skd>~vI{)3mY-WNdy^)E)6Lrr(<;wT{9k$glTGypj+v`|*fChIJQ2ig zz4N2hpTCSBjSpL%&Popv&pfiFBlU>Mj;Z&qMW;L7+^+n2U3b&wK7*#&hns$H&t4r; z6?<*!**(uSKWa$1nVr@=75AP=y!hEXr~4Zp7?f}LHZ|(|d{p=< zC1cI)eUlT|%seJ{ypdF{J5b=?Gxvv-Qjg8#Y-JEl8r z_X?W7l+0;+^Jw;M&Q06;b~L@v&7QY$PjvxX?3^;oS3TGFx?kHTAS3@T^Im-8wTP_a z0o!Nt-A^d1*m$F2?&~>U=j_+I-aD&y-8|t9hkn1)kH5L~OwVd>V+ZS+QfvO12a_{q ush`zZyV_g!=2eOR>2*iloBzac8!#0Af4%2QYxr7FN$u(C=d#Wzp$PyE8(6FW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..8276cc945ba7c9ef3812f634fbce340cf8583d4b GIT binary patch literal 3484 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 e!2N%`4AH8O^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW^QicVq#%pWZ`OV zXy|I<=xpHZ=Hg~(Vs2z+;$&(8)9aF-T$-DjR|3}9J=+-@<#X&zK>3U0R;u zWmr2NVp%GEfbE00;+@SUg3Bkrwd(X-@N|j#pT@N|_wQOqduTRGnK6`X+{={H%)RY` z(Q>zk^|2U_9rh2<>SOu`CgVd1%3Pe`){VOV%4kdi+{f7_>gjAxpzlhQhisp zo5ellTw%tFTX`jxd=Za;FN$6Mo*xODZEihI-Amv$BjTFLO;?>?IJz{yN)r^Ru* zScz<>&DnwrSG0WS=&C&Fy5j%sS$rR}65luQd~iEvq@#J|*bzuW+$8uMG z+^=Q(#nRoo^UL8YXp LtDnm{r-UW|?i3gM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..189c78ab08b5d16081226ec339efc1d78726e4bf GIT binary patch literal 3190 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f889b570ec6b4309d09150f967a93fd7034547 GIT binary patch literal 3017 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 E0CAO@Q2+n{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..11e32c07f680de52976f509b5cbf5447bfc34e19 GIT binary patch literal 1166 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|G%<6sFfwy2=9ZF3nBND}m`vf$KFlz^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#%v^Em)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI(ROWsz&z`)4l>EaktaqG>@K)z-L9*4CL0C>p$COImoDQ)i-*!a9?Q0mxXrT>1%7HlH0bv-CN)P zxWc?woms`<9)~jDxt+NJ4Y!Nlv@$iwzkS1Tb<4Ku#0g1HJ60||))|)&)_Q=CQIsog zQ~M;xR-yUNf13JUew-6=Vh?-Afe6X1${!bQHCm(hQTwpdF{`&%j9Q$!F9j8cH>+0Z zADLK@9q(Lptw5zNGQCh`-sDJ2>6gzQZSrRKJg4<-s+R7@FxGh2N50b&Gdovr7MXS^ xD1z&?e^R8@ky}gGH~urfViXdQe%!r*k>O8kN2Tw=gZn@wgr}>Y%Q~loCII$tk39eY literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..15edf6703425cde443e0707afd9f4568907a6910 GIT binary patch literal 3488 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 hQOt4a_I*Z%WpAD)__Ci@N{- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..e17d4580a2ef2f1db990dea62bf1bb0b5439b644 GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..7e43f762194a913dc4b7ca879ab1aed0f58636bb GIT binary patch literal 3018 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs28OSmE{-7;x8BT%OI6skRNZ89ux#r|o|bG*jK2>tpgv#V!|?@QHU~>K7k7QJHk?*gCCg z`}(i_Qd}C6{dRA?RPwt?g~|rW3-9p@uS|`!6IQ&(z;MJ9 zu1=0rTa#7%v_;_hxuh2T$<8ZoH=N>JIO*K98jcOY+ui-AXU15!L>#`xr+Dr5jxrA3 z^L#fLtrJ$Cv^0Nzb?f_wQ~yc#=l)q=#mK<$|35Q>rC)39+g1J*3=9kmp00i_>zopr E0AcT!yZ`_I literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..63fe13d87f03ecbdbedcb8fb4884cc8f424aba35 GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzbuuwFcd~SGb#yi` zG;}p`v~V2=9ZF3nBND}m`vLFjeGsTY(KK*3?@H$Bu!4k=4`1F{I+wo0++M%?dni;fHOvNxwL1!SgWbwqO~r(~BfA0`uewpE)GY!Bj&8U`FB>9faSUEwG$2e--Neb`F=6#{?wqqPud0M9h)(G zm4!fq!k68KN$=LObK(2Hhoh|L=!yy5c36_IO7jX{=bASs`I5(qYbB!F429N&Bfn>|E1mt0_lxw$1I5eiV8=@{YiIE8d-odS`?- yy66acANeIL?cJ(7|F`6cdS_2(!Phy}oCXXb?VWYYqpo}g6%wAVelF{r5}E)2U5y+7 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3145814c2b41864de1f8e2773b7511b7ee4f006a GIT binary patch literal 3440 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..3145814c2b41864de1f8e2773b7511b7ee4f006a GIT binary patch literal 3440 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..106e546b75f90ac037ce2c73ddfcdacceb3431e1 GIT binary patch literal 3494 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 X;qh|qol9BjK?RhjtDnm{r-UW|ZRf}o literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..8276cc945ba7c9ef3812f634fbce340cf8583d4b GIT binary patch literal 3484 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 e!2N%`4AH8O^B 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f889b570ec6b4309d09150f967a93fd7034547 GIT binary patch literal 3017 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 E0CAO@Q2+n{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..abd7f922f1b5a802f1cdc0a732d0d2cf2ebeb97a GIT binary patch literal 1166 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 hQOt4a_I*Z%WpAD)__Ci@N{- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..386a1aceddba49608eaa684ebe8100fda889397e GIT binary patch literal 1430 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@ch&?(A%4WZ`OV zXy|I}9J=+-@3U0TU;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zzprxz@LGEiObW)F{I+woA9@}hYSRI1OH9uJ;AoY@i1FXfE9z*+yx~~LK_{- zH0CNKHeKRPVE)l9@XmGbish4Yd*+&GzMVX;!+z>?>;1+~UXm3F3~wHNmfFD`#gixy zy{BgXoa4uq9gzIc_H}(j@&mVx^WTPxw*5Sm)_gK$6W`$tHQyhUSmjPu>2x~#$5QZA zU`NfN=e7o{ZU-bPxX&0q+7~FsC;uvY)0Dr5AAZ<7QDE<*?TcqvGudT)dnvRq|HiyW zvjo3=Ke5@b#bC?cgPXVJ6mJxCTjj9Ga+(yG!Kx9nO$72{N0uoc7GTmE3vKU~loHXVpF1zPGv`^twAEDSbyI zuff-3k-LXG^f%TAyL!a>oCtk$>w~Fzm+_lo=T&D~axU$dT41;^UVB?siO9O?l6NK; zoAqqvTll;xUwPH7mYSoh^gd`6OHTR}^4fRB$`e6%9^SP&U^K-n(aB!5>`Y$t%dK-G z-<#x}>ir+`a$)`R49<;vHB)o-ZF}9fX_)RRyPCYn?|ZiNzoT*5cB~Q%+Wn93Ro_(5 P29=bau6{1-oD!M<+!Ywa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..36b847ea7362c182cf1f3c5b1b998cb6fc04f914 GIT binary patch literal 3193 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..7e43f762194a913dc4b7ca879ab1aed0f58636bb GIT binary patch literal 3018 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 E0AcT!yZ`_I literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..c9daf031a153eb85d9c3350d06653c392afc4053 GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzadWjaadoqFb#yi` zG;}p`GITU|Gq*5yF>!J=ws3QW>2=9ZF3nBND}m`vLFjeFsTY(KK*3?0`uewpE)GY!Bj&8U`FB>9faSUEwG$2e--Neb`F=6#{?wqqPud0M9h)(G zm4!fq!k68KN$=LObK(2Hhoh|L=!yy5c36_IO7jX{=bASs`I5(qYbB!F429N&Bfn>|E1mt0_lxw$1I5eiV8=@{YiIE8d-odS`?- yy66acANeIL?cJ(7|F`6cdS_2(!Phy}oCXXb?VWYYqpo}g6%wAVelF{r5}E+~K#g+% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png new file mode 100755 index 0000000000000000000000000000000000000000..fd8d2f28dc003e6f56a4dcc47c69b564cc309d60 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CV36iuVPIg;I_xu(fq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcQq2j6WGaAXN)S+n*Nd&JF^tzE5$=9=5oh zZTH=)?1v8-%&+}?@65Un%QP4`npnT`y?BwrvZp+yL`I-smSy(BUjY%|58O0o=xZ3btZMToi+SYxs zc0OMWgfkf(HvD*F*t2dwtClF&hO-t@_WNdT`4(|)#=#?r!BNe2vn<74XZtJ>v^c1? z?&B)9$@4im3hZVv?dEv*R3-R@zMjRiTc@+xG%hvehK1x*anHB+sSaOuR0c?miIf~&0U?L_3Fs3X$u$M*0-GdN4eudDvR!8za=}a|6IG| zXuD5It8w1XRp;)$m;ITz#j9~*)NT#q7k6j;zIrWkebf7x;K!?!mrVCrxvBEc&0Q_U zJCBqE$tv>hu|6EJ;h}BD?H^n%3p1C?EVP_`{NMR<`%ssM9(=BvYlS;M^8DFe@-^UC z%XTn^7FGrZnmHc@Q8eV{r(~v8;?@vh=((1Gfk6gjLvVgt tNqJ&XDuZK6ep0G}TV_#ed45rLv4V53Y2nt#W(*7r44$rjF6*2UngC$?6(Ils literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb12346aad4b4b7c845624b90176cc470b1e61a5 GIT binary patch literal 3226 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 RT?`Bi44$rjF6*2UngFi~;sgKy literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..a69eca45851d9f3c5670c9bc52aa1334cc44b2b8 GIT binary patch literal 3549 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..022ec4a60a17a247309c96e5ad9d3c9a6d8b0758 GIT binary patch literal 3623 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 P7#KWV{an^LB{Ts5T`Ib( literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_only_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbf43224f1287604854359870e6533fb91ff484 GIT binary patch literal 3733 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_1x_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4ce76e1ed3a79790adc7b91b142ecdffb864ca GIT binary patch literal 3275 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 PU|{fc^>bP0l+XkK_NWwp literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..87844527441fe54b092fd4594f5b5aaf1ba049fb GIT binary patch literal 1487 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2McZTWp%quQQ%u7y%*_)Y}Vg=P}iC3?cb5UwyNq$jC zetr%t1q5W|m*f{`&z5e|3e7^$1@Ku(b?CsV`4{V^F#?lKRu6>gb9pn9o-uZ>lkEZI$R2_ zunO&Wh)tYu@a`|(goMIN8-#s&CT`jIuRrGGQPFUL&&rOYS68)|o0OH@3ASntUD9-I zJ!f}{JTIDadBWxYoZI-zS>IlaWD!2@w`KtwF9*-60w2~GrhlAOkMD4Ze3VdNH*R>k zGU)Bq?lAvtR$=y1&4Y*jD6(v`I;~+bjisRb&a3hjryjB@uD@-}yqhiO>g$EA zPKtNlf6rH%ctWx7bke!I=R6Jl9pV~vHTtLTFIvNVw8ipjt7PenRja&Ar1l;@?N_yT z9*@JUvg7^NxLrCT_2ehCzRHN1TRhA8`lmG)rYW!MEN&M&^=4_&&YIbN%k3whe6sRy zOo-c~!h(#T7zx>v*`9rtVTX4fyMCL;qx(}sMZ31owR0&(_m>7~PCJ_xFXB4W*!Qv# zPx6*)-r9u!yj?GI_o5D&g8AWefr?+xsT!lyWJS3F1}(@uVHKQ sBJX89uZ_`y{ZhTh3V2?m{}xPO*e7)MvgoqYWuPL~)78&qol`;+049+mTmS$7 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd678690122528e73325e2366bae20e502a203f GIT binary patch literal 1817 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..48f1af95c79532a8951394c54f8aff48cf2299b5 GIT binary patch literal 1774 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzb8#^;bTM>uwRCea zG;}qxFmQ8pF)}f>aB^{VH8!z;>2=9ZF3nBND}m`vf$KFgz^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#3|(>R)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI(p*tJH1fq^;6)5S5Q;?|k)^V!0VBKPLTZoCwqv?GC|9?i4+a*buaGPrE1Qb*>4%YLgqEcv$ZEEgPXUz3si{1f?UA2d&;$@tt7U zoH+6F69%trrV37;BHmlot`}sUcFYR)d1vuK%Hq)f{|_G@^T=p1?QuJ&k}+YihpbAG z$6L)TfdibgWzxI+H{G3f@8!$Pm8CA{ST~AqNZ;uwqn%`4*ryfnMC!|-mKo0!l7fBC z^;+e9U&Qv__#*3OO^236<>EWenY#ZHubg*0sCmL+ZMgJ^aM!vevuX zN;`J#vQpZzW|oJ_s%O13CSTlNSevS@xXjg~Bl7i$pDQ;1T(xMC$H&@emW>}Q&O|57 zxopfAFQ?K~Gq+><53AC2F1t;UeGyj#-Ja+r9#pL^{^7VZby?*9>%!bR!tD-SRv$&L zPM8s&q*OBZlI6)1Zowxqc}>O#ighfG$gWuwlx@}{w8*Oc=<7w&?k-q3#xRe?=xsa?%^RcDrba^ye4Cgx)N(j%)#I{%3IyuFg^tefRGuBekNDF2nhF#Wt5+o`Nud1QUr+3m6uK1c7KYNTnrIp#~Hvy(|+*R8G>Z+brJ zET1$hv;U`kcJ{t%1+Vn8C2c>KoT-=-rS)P}#2%lCN9sR`C%m>%S61m<^nB5~sF&5J z=kK#Rytp~(?*G3+BK!Kb>{|Wh;k%7;Sudha8yns_Qa)|2*7f;LPokzjpMJ0LPRmZc zmzylwcXNF1{(Ng%?3~_J%+sdVL_D4o@qgQo%KtBpHh5htTFWOsY5blZLRp81F51Nr|}UVNULyqy1!f_?47ga4zKA9(frV|W82gL`XCy-W6u QJD?iK)78&qol`;+0QeQh2mk;8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..d82154934f1d054d87c85d565559a3b7f25a7800 GIT binary patch literal 1873 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzHFGm^H8OH_wRCea zG;}qxG&M4|G&3?ab~JJ{HgmOv>2=9ZF3nBND}m`vLFjeEsTY(KK*3?u&F2% z7u$2?pz4b&M^$&ZCba7*cH~`g+@7%2n?>%{?u3~;9yuP}Tb1n?R`4xno!KkUAx>7=SWePQwY-WvoWZh|MfZtD(DY83 zpw|o87-OD_g&Q3$zai)K{=k8TRi!TH7&hu}sLKps9q0`jIVcg4Ktf z@GO7)%_QrCtg!4xGuDoPFZUSycRus@FLVBL*A;~)OK#7~>Yno^OLkrSfqiL3sh3yX zDR(HStlSxQanqFRuYDu)kIa&*?EQHp(8*`^1cA-hCVqC#e80ZyolDnyYlV*9+X;0{ zxpU^3{Wzpxc<{4}&AHE4=Gy%@@vZ2{H}~-H=@K$BB5&WmO)4t-bm-TwUwn7?H#}6& z%@=v=b$V9X&uBfFw3$1Yg06I44sky9%R+czrB}N7WZ5uzsb06Emo80u@&3K|dFQ1yXCVY{5%Aq2;GRA)$zZT4#DY?D}FHC9XgDt<^+}+FPN=r*usZGAP zZ259mrHLM9rlzsFV%_S~j6&1ecDy(&#yQbNGmCTS=5p2ayga{>l9G;Dvu0`Szn^br zV)BPE?`e@`q0HRkPb-atA6yCgzD#8A;$sW%Kap?q{X9!f({ov7*W0&mv*w>qPx|NX z?S0zzblTF#HJrEB=&#hA)?VH4HNfdw)QrxH-hWbWE2%Y`*M46DejQ?dDOHP1Pk+AumXHOg OlJj)+b6Mw<&;$S?^zRS= literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_2g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..e201a00f7fbb22a6b9ecce3a1dc63e2ab6f1c795 GIT binary patch literal 1508 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2-2)akemZb8&HY zb~ZG0HMTT!v2=2=Ff=qXaB*=qcY*2k%quQQ%u7y%*_)Y}Vg=Rfj90Ifb5UwyNq$jC zetr%t1q5W|m*f{`3Xh!UE9+3uyRlWm`q^{q&ob4V99u1z+a-RO2Z)+P+a$+^31mm_-!dcm zrEtQ@Z?^lK7o@jE---G;J;CpvGRw7p(*q53IUl^*an=6<+wxc^+q^S8eQY;)ck9c} zn3&NbM**`YWiQqDZr@>62ry9ItDUhr(N`5O!>cRgMG KT-G@yGywn=@fp1U literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..368ada3b135d72313bd572e9d068cfab6856792d GIT binary patch literal 3267 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 G&;$Um85Riu literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd8efb16795c26a03064b9aa8b24b04ee92ef85 GIT binary patch literal 3695 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_default_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..daed7823bb8c5c79d1d89dea9f6048a44d4ab410 GIT binary patch literal 3747 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`(#+;1OBOz`!j8!i<;h z*8O2%;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2Ig~~E{-7;x6VxW_ec(xI9h-I z^GT8D<+qYnPyLndRaQGuX!q+ymqfhMA0A`r%DZ*cW8vyN8Lx27R>7CcID~ZH9@{d( zVs=nL;CDSMCAA$L58fP^%NRH#W77KWo#*fE{4A8}lWkvNbMNV2%kOhO&#j)nLQ6kN z$!WLNRIk`QVWF-rQa@|t`u{uLe89kZkHL;1Pi_ITUysp#hVp!w1+09bUmMsy*nZ$F zC|b;rThO4dRQe$Mfwb|nyAlrVmhvkY=QG+fq)&VD0C%~Csul_6e?#nUc6@16c;ma+UkVXp`svGm6ucbvVFoN)8bY$mS6;0VVx z2R3!oWF7b!cG)D=;9<$bIhKb`G4bmZJTyMpQGQN(0soz40aw{R$bQ)QagM%{?)8%U zlhW_}P|Kd-HLHKA&dD@h=NrNu#~(jlcg1hc4+meDeN6jIAIv(HW&A37^S0EYrAIyX zy)n3I)Zxk!`qlT^(gyjjFT;*zv!1fKzQuD=*o}J|m*~eV4L)}4*o>Jo6(^q*=sp@} z^uR9U>iqe2(O1syTCp~|BA405h|N#R;PbTSa_$DdW7e)&vtje*!%v>5+|2oQ?c29+ z!Vh8<)RorH;QJQk`TCvz?57Eb8eVU$5$&@tI#eN(kel24_;GSrc=*lRw_m?`^=j3- zckk+0beQsEpIJ{oDzJk0gK6=<%Nu5FwYgrM$q}YiG4J@VU%Td?etOQ`-QE57@89+B zU%q_F^>|6B^Nv7aRl_jjmYiHmhV4D|m%cH3dwXAbUCPJDXLat}xmWG&?c3Yi+y7fx zS!HpaV=Ic}Gh2P3das{e+?7Xh{(bM{$xab2Rx>lRE@o!t_2yE&+4{>B59~R5 z$@X|Tt9D+{x+k+|&koTN-L-qSwYr*G7B@F{bZu?z;pfkvZ^>#~-E(uZ_bfd%rRRs< z1|RZyGILef>N)e~-Sbirx*D|d%kc{rE>!o;|DsjjEcku(*$1083+-5F^Dd_S%sDp4 z2kedky3S6dnWiGTghut*~BZ{>c*s|*Yb44$rjF6*2UngB{|6+Qp} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..bf644deadb55167ffd7add5891604f0183f28daa GIT binary patch literal 3261 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..a0004f042b750811c8bbcb77c971756210ea6e4a GIT binary patch literal 3327 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIz**oCSxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRD2c@3hZHf z@&7*S>8GFA4D{ZaEAX@Id;ed12LBz_WmAK?58PwuVr^hEYnc7$JC_;b8R_J847^K2 z-1jkW2wEx95V?R&q@mO^R@k1ohQaG)NtNECx$~=8tod~qCNr4Lh%I}^H&1v6PXJ4h zP_^Pu-IG`6R9YTjc<=JaV#DhLHU@b;j+(ANc+S2nXZB&7?I2{qrsJLGSth6;t(W5| z!*Jg9Q7HQ={u$Gxte-aR*mUce<-awo--CWhp48<|a8z;6etYeq)&~O{lc?7%*M5n8 z;H=0x{57kvT_yGFc9&~Mw=LTl!+7BP-^&V{YhYxo)XJ3^q&D6O#ZU5s%Z`qQL_E;ZhjS+8H^JBKq z?1>eDuZ;d=@n^(VY$;n2x8C;mOsTn6HYO{ip5?wdcjV2CqIva8t;qtPU&Maz664JBMJY*Y1XQOw9-UL>34|-j5FV^i7Ifd3uuV!<^N> zF5doIbm;S*w`rRz6CV6_cwPQjyCB8d@7jtThR1@v{$};x%>SQs{T~m**Un8PtYYa( Q3=9kmp00i_>zopr0Qr6~1poj5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_3g_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..eed77ab60a4ba03872da30086b7e22aa2d0f142f GIT binary patch literal 3328 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIz**oCSxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRD$mGZW^Mn#^1tE6`~@v0 zUPqLVmKip6OgeF6&(xDKW-eQHupd6NXM5$(lzsPaY9#X<*W7aLd9R^(lR^b=!J~NT zZ&iDl6GFGeH&_WgDcZT8^)w@Y1Mku+Vjt=mRGA!@*$>#>)aNdfykT-IhFQ&P<;-6^ z3H$HAXE06RDQT$HygQ+mv4X#3^UWONXV&(*oMoaF9BY_wBy4+oM|h7?0c!%khv&Pc zSNNBjmDz=}@_YzWiDM}fzQGdKYpAib_MO#ifk3;ajeKZ|px% zES+~VqQo=k+OL3=yPIl+<~~z>z0)dSeb{R4#TQ?!eE)lUgK=4K__-Z1G7sjN=5;@b zZ!C5Y3~(?v+9tg>+da$+{DB zHtu5Lnc8+;q1*rkH1FK3tt zJuUhfzWVB^5Ur{FCsRH>DX}u0eDVlG#k}^QSGR3A7k`z>Tz(+)LAuNWp~(A@>nCk| z()H-Ho`XbNOCpDX6c1ba(oCgE>hsU*PchZY@A)_-$o`*A@tuF&cYoM2oH)7F`#r;a RK?Vi}22WQ%mvv4FO#m^JFJS-x literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..c7d855e15c6c53987509d073675e64d2352519f4 GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfmtatB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBv9d66Gcq?fF?2F8G&D4H zHFh#{wRAPGaB+5VaWOYAG==GP$xklLP0cHT=}kfCHNvSEloUY0Vdauqlv$RV;#QQO zs{r=0RVGfi7`x##52`l>w_6Nw>eaVXu+axaEK)?ngo0e$KumC&1f@?q1w_J6%}cRW zDpInyyEyshWd;Vu-<~dxAr-gIOx@`16ex0Rw?A{PmP(F55J$HP@0?j(A}vKL95XwY z)E{W`TBFe{wq4*ptB)m~2@HTJ*1SFC@2 z{&Si6KA~3|>$(aoY#5iVEU}vVusT`3@$7-J1*OMs2=1|GU^HXD?S6IIL*4_m*8dr2 zoPS=P==tK<(<0r(^Ov;)m_9l12Z*Id+cxPQ;#*j`PyFDKjmBODd^b4vD=!gWkR3Ih zbJIQM8(Qlno;+2M@hR3lvNh(Q_6tENp`ztaj)%C)ZLV)I`fziR=9yt0yd4l}w=pVu+ez{NmPi8gix~m8o-ptu%TyrCBX;2`; z3a`&=xRsuSoV?xO`71&9+XA7+-wS!I_BXt7;+`6!^_4N*Z@KZy&p)@V4b#>Z;fhL~ zAr~;c%kboWhKtu^bkxr%|Nm+HM1SKs0g?4lQ`S9Mba92E0LPx=j|-~}By?u@EIXLC zd8L_D@3rmWBCXCguNgD5WiP0ezF+&edP38FllY9-<>9>fA2)=(%-VWOXi=Ds*zp$& y+1A?TZQq?8ZT*ySt-}9X`!47IKU!47Wx()Sb({BQ1z{mj(dg;w=d#Wzp$Pz68U|tj literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..42ba3f9b60469822038422ce3ee831aeecd3b858 GIT binary patch literal 1806 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|b#XRuGj_9ZGH^67 zG;}p~GB$E?H8plLb91zGG<7qC>2=9ZF3nBND}m`vLFl!_sTY(KK*3?G!Lpb1-Dzwaq88#Q?StoMJ!T8!-Rrd+(1llngpd!I|W3-Pt8lQ zRVq@lw>w?MV!*(_+~n!v7*cWT%#8EiA%P;t-|zl>WX7c_8%$0bCWe`L^lZ)!OcCJR zb+Pe+udZ8DSgzZmse)G)`SP5w2$Wu)aLi0_#|Qp`i~NR#3k}{KnajNB!R+|;#b53` ztf?nLiD0($fUtXq4PIC(Gz(7%OIg_v*YK{X%$D^@fq>eMu(pq!FEr13o@X$9 z?jzx~;P-;-3z)or{%3cwxMo@NK<3chrkztR|6VG7E-?F3qrqCm3+@*pZ#B26H{6;x znWdcd3uj4Z-_qrLn@lgR{LI0=l2=J)$E(jeN0pV8_gq(;!>U`!;n5&*59hrFNd{v9xu+=$(H3XV0D;Id`sa z#@xB0uV26Bt=oUUiLX%FPt{?1{r2}I;-V`&3w}mbpIW-9-^Fgec#xN&y?y?&%P${= zc6|Hx?Yyq8ZrxSCJ2Ao4eaxRkj-S{mad6cZy$y2LPstqicl)Vy`SRsOF?!u+&-%tM z4A98W%{66bYFvN&_HEOL79G*64I^J2y0w#W+xH)47DAmaj}p#2EfUgJn0>Zu;lhRU zWo2c>86vJUtycGG?}}2eXb#Pvv&HfF)hYUVdR_PK#a+B|<%&S3%bIQ5w#hGW*cc(Q zwac;m%-gJ>^Xq4;B$QYzp1(!M`_0?8rfr84vr|)_dWVN!FU>XFJx|@S{rm0XJ0o9Q zpS7i^Oi6@mrb2dZ?%Uk*^6v^_TwRvQ8&>;==6%*FW?$U-^5UaD?k6lOr7rYHTUlFs zGkoWm^~t$pU5M6At-Tyv=iXQ?4cJ@ek=wa#!cw_O|0|fCtqqSIJN72SgTe~DWM4fTTIXh literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..009fd7d365e33916ed86b3b45a01e922c050d7c0 GIT binary patch literal 1706 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 N22WQ%mvv4FO#trhWWN9a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..3ae325b4330096a82e0831c7ae7977a3298c437e GIT binary patch literal 3509 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..cce1bb4189468046068cc5856b04b8a861fe4b4e GIT binary patch literal 3401 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..41791cb361da5d30e8da604ec8ac70f5f99f318c GIT binary patch literal 3495 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e.png new file mode 100755 index 0000000000000000000000000000000000000000..660842f7d60890adf30ecf135d536e09b963d3c2 GIT binary patch literal 1635 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzc5^jzF>x_)GO%

2=9ZF3nBND}m`vLFhHasTY(KK*3?m}YUXZ|s@d zzHT#P)u9I}aTCA4csGkr>}{PSZ?DiSJm+xJ8N(g3B~E9@`ky@^vt5<@$SJ8dJE!G8Wv2KrhMcuL^>EJx z^%qR`%a)}DbeuFQZ9BMd3nN?mnkXObLK`{py?qBG8NV^sPSF=Qy{dZcYCjXH-r5rV zl1I~;4<>xF7i(2{Ba%O1qqR)m!F6}^UKZ+cHEeie+x+gc^M^)r2K){IZbwYwORNc}p&53Uwd#P@8-+*KBrs*>2mG zU{{tcpGAGXdaZ6VWvY<8b$!P4dWJA9Q6mW+kA(pWYs0dSr)@r2&=hU)RchCd^_9!n zf)mWQdHniow{Xg&tgTtPV%?LyGxE0o-hBDx7R|Cn+ZC>aZNBI_>GabRIcCap{f-;S z^{3y>D?k7IbM4!&Rl5q5PF$wd(qGh``QoitSopT=@mtOKPSNKlBe&ID zKXI>0NezXzD2G$|ycaaT$3_11h_h}!nNrmMKXPXE-6;Ol_=*O*BkjBQ2p-7YHlK-y Y!B<4j^3(jAzd^;mr>mdKI;Vst0QVGm8vp-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzb}}$Bb96CuGO%

2=9ZF3nBND}m`vLFhHYsTY(KK*3?~Ti8+L+#cDD+ZKteN?Iw$vQ(ft%XZ}o@rhMh zDvffsuTOeA?(saRAonV8q1+NtrGE_h{~DV_F3CSw$hJo0mc#8CcfVG@y=}l_y<2*A ziSY-+o1SI&roZ3&GtI3vF~TA**h{v$uW09;nS65$mU3lnjcVj#zTi{Dpj{@o<1n*H z!jmZ}Pn35Z-zjWzLUcmdGa-iV1Ii0#YCBGrnbnqM_v`rqZpp=WIHFEvmgFYLRd8?V znKIwTQ7zq~o&D*IJIp<`9lvd#E}U~?5_>_^@`m#VI<71@)w&?GSmnt&hWJMBPd+=f zGLEDyJ!fpWuA!_ zZr6o9b067?%oZ*3xwbR*lBXV*K;qXpM*k(xZu}SeUNl$noRq=m{bfoA`S+qFYE`pX>Eql*o@ zQ>9ldoAB9X=j;PqO!KCS`gpF~dNNJ1f;XaL<>{=h>xFZDKV-2VyZq{$+BM&<>pa~Z z2Fd@6+2%J?`h7Y0>-{rcMe~_YN(BXfr`-4LGT!dBwCF{#zkRLs_P4z`3K=C57cy6U zz02Mz^LNIq%e}Vy1vT`i#$2o27=AW-{ycuY7YW7Y7t$wX*}PlyY}cMtMGM{AlY3_^ zoac6TtNw3m>H3U{Gd z!E2UWUMH8M``5;{O#j*HyB#gQCrtIU=k5KzAf4+TpZWbexu(-PR=oWEZ{@{#cQXv2U literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..be05ea644bb591e2752df66a5822ab06869812d9 GIT binary patch literal 1622 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzak6kWb~JZ%GO%vam3N>2=9ZF3nBND}m`vLFjeDsTY(KK*3??h zQWV|w_U#2Zep*)<%bGgHxyqm z@pcF{Z?;s{zj#;5Y5`li;@TrZ4#pRFR~Uyl$nyCrW!e2=zmO~^?96PUq<-=10;w-N zud+0^r^pFc&HK(7>nZ(ZXUyy2n~^#Q1pY|Ww8J1{wB>a$%rDt8w5{E!GW zDly5uJ2T<7=f_EDf?lbg=TCmY;&a|bzT&=hxZ&wV*c*fCOm(6{^@V}`(AG zspxY2``_5)>}1F9{-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzF?BI8HZ(GEGO%cHFb7^>2=9ZF3nBND}m`vLFhHbsTY(KK*3?F!XQrRc7Iu_4maZPHWw=ss z%aYA{Db7|O40cbxJ2(Db`MvZq(b(%JSNH}_nK*yrmMvf27bYB1p6a+ULS@RFCbdJ3 zI!WRSU*|N;GqPw+ew&9+Wtm0Fb(xgLPOFs$U-D42a_U_2z!eEPMGJ8J7zL31*+w=77odYL1-hHh9 z%e0HvR!+>4nJ+1`*D-#<<{DnD$4pah>vx;FTgEW_;);FrT)iTMz42Tzf3mJFvsZym z&~piyAn7z#rk!oEZ&JFP_t;Oncl4<1#n%#ZxHg=BF?o+e%wahzlcudvZ!LF)axVx{ z5%Tm-u3u2varbmllu?(HK~mYKzK*+(3swb~B=;`3SR_*ts>ju^;lX#Dznc{DzK<&lm5u-^W$Sip6m3z=iW>`YZ0D%>-Z|qqtBjjfBtC`85ya# zGNdcTXy(heZ{ITa9~VCA&+7Byp{UQ=Ann7q826l79TYeHID@&l`N@C(>~7w;p@+nA^-OaPydfDH=4ot+GCK+Hd~n}hqBXH- zXUxpmvv(Uv@VMRclfBs;S+zIreTdP_D{1NJ_09+LwtK(%G3V-xyBy~}zx52exMRWH zJb(Aafor4I*7372U0-t2@6PG9$Fk1sI6sr)Sdt;{v`>m6T(Y$<0<_%R47+=d{#$*c zYVomdhjV9MpOJbn@4yuKjh@we=jAP#-pI5ll`TbPcEh(F-?NUne>x%Pv;4C0pYvIF tUb|Ik{656|h0*SgsXN2*oBy~B7~9^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4e72bd3c23f4f01381667ccc63056b6ec63f74 GIT binary patch literal 3511 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 E0JQ~=asU7T literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..f4327b89dfdeaff99a521ca20d8f22da04db2499 GIT binary patch literal 1464 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX6j<$>|$(TWZ`OV zXy|HU;bdXqYT|0*Z0PE2;%H(C)9aF-T$-DjR|3}9J=+-@<$X&zK>3U0TUF!Z^EPf4mpUto#2+d=mg&jz6aO!PxIYq+`*u<#vz8$ zBxixOK=_4EPnYjtzQGtOyw$Ad@{_Q2lV4iQ71Md)>o{{nP`eY?pLn3))LMT@E1u$mwX5={E}5gaYRRs<@6MQ2ET_C8xUc2f4Hpz8C z?^Y@lZD0877`7mX@D&a*ld-9@OWZ>8_>oM<@l#LTp* zS%QYIon(%=s0;B+Z_uB#zf0%kw$4u}>;lEX6PC?YRJJe3p3Zds^dke~Ks!#?z%LeZ z{j;@Faz(n8XFP7+<}l0DQ)rWsirgZ}=`})Ge@d1$?U{8$xB0k%OSaq;ksR5OMJLQs zR!nLMIkAiD`|k$URa?!TzdU4_c_mYIQ;T!=MMYl97Q}u24zq@I$V&B8c zFI8U}s~_f9XRO=o{%KpnZoS9#n|>$EXX0TH6gXqG;*9irP+98f>gTe~DWM4f-JBuo literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3b4e528bcdd4766c3c27ed69ac76459ef9aee516 GIT binary patch literal 3220 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 KelF{r5}E*bumaQo literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..939ae38a33518e6aba5949070cfc0cb80a5294df GIT binary patch literal 3051 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs21YSY7srr_TW@A~^EDX=v{^5? zI71`+g7kxH&Kp0dv=wMS^_f4q3`&zWc5t1~ zy|Q3O->I0Zv8{cUtKK_(vat{F+HAFM)vFMZqg_?=crM&nlGZL@d@N!!$AL)#PD1Vs zAC%we?lgUEv61Iy=(!cqtJJ(?QbO6bF=W`I+a*5#exrJ?b^o!J8!0@; ozTCH%_A%fq8w11t|I7>}k1H13b>45zz`(%Z>FVdQ&MBb@08XN-LI3~& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb531ea99777ccee2d9a8bcc2d6408b7eb4ffc1 GIT binary patch literal 1201 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4769a084f4713e049f51f9b1ca1cde65c45679 GIT binary patch literal 1464 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..d05e974e681c6f7684928cabf758341326b7e83b GIT binary patch literal 3634 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 GGywp26o~-< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..49dee6d3953a553911e17d1373775de9a488ea75 GIT binary patch literal 3564 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 Iol`;+0HCy<&;S4c literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_g_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..dab2dc7f3b208f424f89201b334e63bdcbe44c23 GIT binary patch literal 3683 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 L{an^LB{Ts5Tei&o literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..8771fa083f9e648156c9797cbee09f48db2f7359 GIT binary patch literal 3500 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bdad77d8a4412e7675fbcc71a9f0607d975629 GIT binary patch literal 1452 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@_N#=Hg~S|`>>Ski#YU%0()9aF-T$-DjR|3}9J=+-@<&X&zK>3U0TU;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zzpu(!yN_&CIwFy$B>F!Z^AF;9x@Q<4ZL#y5K9X4jRk4UW*V{#Q~d(096KWv zq^I~zFmQay_TenMLS0l>f$Ymg^Zfc=Tj=p_@vl-!KQ4B@eBW*Z#g=fU+>=%|=T)x9 zwH`D{x@>>{)IH^5=93Gbs7lWF`lj-{>#vXh)Te6_mo57B_urZCf8Xq{ZaGC(WRV-#_e`*rUSisaL5wv*CDb#Y|C)CF_NS7Hz%#cAr_|nwkHuiM%gU%`g78 zQhDL|1pWkH@nf@JSo$+uzOmGCvFYZOHyCWDDxKN6SW?Modes-dPm1b2Gu7s}UJTgE z$orV%U7}XWqK_NcKd<^=&gos4voPe1z`HvlPLst?oX}5s;7BG z_1{)YvfS0Jyy2tMI*zlu)HqpLh4?q`nQp?lbzgL_bKKbvDw5uIi#AGlak=qN)hO#R zF!6L!OHywBEBt`zYLuVN+nC9&bIpWKb6Bgq5ek`Q7Lb(0@t&piC)=L4OI|9L%<46~ zHtXCf-i7BKON4Fg8b9vjUTWrfBJ7P%@vP#bvfDn+`mB;7bZlyiuaH&b#&vCsyYN|d73hQ0qW;lMxBjjOiI?@in&JKN}DhKXLuH~%`0DF;ozT$7u! za79+)o1mQjlIV2ZZOyyZoJxOeA6oU{xs0CTvbjMu@0Kn%nRfcA^tSD{-?G1J{V207 n_gTbEu{Tpb=zoj(sCj@P^Xv5;yq+pmpz_nx)z4*}Q$iB}JWd{a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..57038ec38a2fd834823d0a40106b00d4a2fab69e GIT binary patch literal 3209 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..3e27781a359c3172eeb7fba5922a19eb3124fcda GIT binary patch literal 1189 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..e917bfda3b91415455e92442e057b6bdfde2dcf7 GIT binary patch literal 1453 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc=Hh1VWai>#WZ`OV zXy|ISGub<$t1sV;oah2rIcT@nDm!^BC&$!@U3-o{H#J~lbKu*bHAKR)}3r9aE%8|Nl0Hr<@Mk+Dk4bw;tfvCE~HR~M}xIQvPwJ`^k?ylmTq z!xo3CXK=}8+q`+WN9zxN>#_+f&pAa?yJR2Dot=>JN!jSrYLl|XANJ_nF!^XOS!K)Z zxA)u@2i|tkQ7`|n6|xSxp}NFm?ZzWVB<^u?em1STz4Kw< zh6_198!wfFt}qha6qu7Z`mLYqXbug-bqQ`jDBwdByG37!(+LS~*XQjUuC z&Qf}PbXJbWVyzoN`%wamR(5sdXGX9!OPZ z^Pdg~*=nE{l;i(u+qtNm_L9h{=a1E|`f}mCWt5YT_0k`Ay!(yCx{q3KHJ^P}{cY<@ pnXS3cW@K}hdHoQtUiU*NfkDgu<_^*Sl~JGq)YH|^Wt~$(69A1EBH{o5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..99edb6a0fb8732a3094f8b03cc1540495302f0c0 GIT binary patch literal 3211 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..6eaa344719bc2f686b7396819a994d2803d5ec4c GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzGBUJqF*h-Eb#yi` zG;}qxaC9|uGH^3>H8rv@Gcz!P>2=9ZF3nBND}m`vLFhHYsTY(KK*3?DO*hEhK5j9 zkCb$iL79V*^K5~PXZ&`zj+-=em}Qlv-6)kejX3xDb%fBGhad@3F{m2sG4{sd>HH_0NapjokAS!5k7F=C0ND&A0z#5R{?dYWSR2f`4(B)q#DD zi?$wqbRefy+Dz%5$yv?wpATQ!;BkX}+5wl9*OecgydfdaS{EkBuge>&bo(Xq2mXi| z8NpUZcWvg{bA9Usmm|);hcBL(*zqHaHBRY~-o&Rt9_;C>?^^v};hyW9lNuQp$?2jW zue|#FBa3@{Ke@b3y%RNcT9=C1ty!d@cW3>oSI4p)?;Wf4l>V}R;j)E?qHeuo;$eu6 WZ!qm%!fy&HIXqqcT-G@yGywq8ZIvki literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_in.png new file mode 100644 index 0000000000000000000000000000000000000000..6a16578f2bf72b91ca687d2c8d72a9177571488c GIT binary patch literal 1203 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuVPIgmb}c=afq{Xuz$3Dlfq`2Hgc&d0 zt^32kz$}sJ>>Ln~kzbNuoRMFk;OXqFP*9YgmYI{vz)*23IU!-*gBOpUoKiV(ARr(l z=!x7D2}wc8r3dQfHTE{nYy<&C!<{=07%CiSZ)|K-)VJ54$|!1JWKgsF*ntxV4jd?m zyngZM$*GMd2WG_tgd93>prE0#@t}t4R*RX9jSsn*nVqXDJsmljnUi^#nVUU=%D`+! z5WCD{f-y65GB-1`u)k-PDV`^Ypm0M@i!lg@>HYI!21+8)_NGQs=vWt+U*f1_tc15@xWT<-p=7S4SqDlQBWGAns#N?e zE#^IqZ(8)4sx@oZe7~V{bJ@n)Wd8K~XBQs1c=Thd@x;$e)0MA_<@vs2wF$Bbu57JP z|H%2-_wn?H@j45XH#lDi{m>P#>H`16I6={gdlx-i6n{jmQ@S&L;))4VCfle@)z{Un zbz0^V7W-{l%=|swf8<-&cC~s{dF4;NzDi`ptQG%4tXJGyD!6LplAn&R8@{Q`4T;sZ zb=({N%biC|;+oV^iQBVI%r=_6&t!MPzRO9SPgz!5y^fh}aofQiImj8bmejVs^^lmP1jp3=4JSUH-6b2Iv`sNxX@1$#NXN){^Ru-0GpXk{pI@(WBjm@rh}|lyOG0nX=K6bT(yCa~ zo~?1E!LQ}bUYTAsnV&l~TRX@8mge2iE491Ax31s#|DDTh&&}%p=StbX{lL>Z^Y7+; z=RIdsSMB@Rw6xnrY`fmiZ92t2_fAz@?YF)#a(DjTr){~jea!N2W^Ky-&9{2)@ABR6 zEO+bY{BLfyY_F5cv{$REIqLa3`1v`N`F~66F1fz-c3-a&_qV+EobT-D^7mKn2k)zY zlz1q?XJ6CN)I(F!-!2X{E9Gt#~HRsY0u|xPXDg4^6%Q9-)#J|uUF-yy}DwUW^|D?uUB-k(4=FJtKLbeaLg;v z+a*5N=h3$pFP6<05?!ljo^<(*$ih5P$!ZZ+neNGrsao2MuFJoFzQ!MYp3&gMfj{O3 z!XjG9o7X2i+BB(#u$fq}u()z4*}Q$iB} D1*8j? literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1x_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..172379308da5e2d3bee0ad8774d85073e6a682a1 GIT binary patch literal 1203 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 CG6;A8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png new file mode 100755 index 0000000000000000000000000000000000000000..3b4aaa1c67ffd2a98e6082d5fb12a5213d7978c1 GIT binary patch literal 728 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®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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only.png new file mode 100644 index 0000000000000000000000000000000000000000..825eef48e8c2014f95dc431978ed91accf24c069 GIT binary patch literal 3805 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 E0P_1Ru>b%7 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..0696fea9e150b4f95312e89ce573b40fe0455185 GIT binary patch literal 3606 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_1x_only_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..887c6c6e757b995dcd8de0bbea5d173e213f6bbb GIT binary patch literal 3668 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..7f18a2e1ff75115f931a4a4b9e9f2ed5c39027a7 GIT binary patch literal 1515 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2)zSbTYB9FmQ2p zb~ZG0HMTS~adS0wu`n?-HgR=xHHPW+%quQQ%u7y%*_)Y}Vg=D_?uJ*dm2**QVo82c zNPd0}ECmE)krjQe6`gRI7`k=&tlvrRwK`w3}COBP#(zu-hBJ-r?rPwMJDcRd?`MHms zfq_Zd)5S5Q;?|id`@NYGC62%MFXKZvy z*0#{4GPf@OU%-~BTOi7%^qD>O{_%O{asI5EkFxKx`EGaqW$nA)cJEg%%hcK|^0A^u z)F*ps(96DS-z1r$-L2aBLPC9&&$B5U*fwEOL9X~t?j4Q)^b_{R-FG%xAP~~{$!`Ap z#%jfPZwuEq#C@HgVC^A(!E9}+LFJnicJ2$>jgFb?BpW^}-*?u(^SXJ_I_6KMTpMbO zcy6f(FbPMt)U4g;%;K0g_t8ShCsMmz3s2oVZ_89tI8Wph+fwGn1MJhxS=5^&wwGpf zS86*8>D;V4`&}TzcgNA_)qYHA633d3KR)TQ_~PWEoi_Kgw*Ir>Vs2+C$h-H-T;p)+ z^egMTW;&+aytuIAXcG6?w9iHpJ!HzQWM|)gD>p-bb@JjYWyYTjIS#)oei&buQ;eN; zd6miHu;Vhj*2O#lZf~G5^J3?SnI?{V{HSPwprifIwyt#Bown(?Vv~N8#j|clx zv9IoBGae}lb=E8mS}D5z`tK(N7SF2o&b#@x?05e9%vnv@tXu2EOpoklkl(n~HiI+k zbiQ-LuNlEJ#oL?rw<`V<3C&=6ps-c!r|V1q+)v+pgdbdF_#3Gsc6)!rW|{j;JPa2c WZYrJ-{eBHp{Cc|jxvX-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzadLJvGB2=9ZF3nBND}m`vLFjeEsTY(KK*3?F!XTohgVj@NC-lzMRNEjxCO_X@ND!RjC#>U%e<-BV= z6PIdeI&C|VkiB@_R)OvWLC0P}?ox5L?FEq=Zg{TMSS%qJQjo(UeX?Q2k7wrhCl)__ zmYT*RVZ8H0;l178|JJ;>{$BIlPI;==#n4%a5?@TCqN8sgRX)hsZ#t>bp~2@D-z-1A zgro16?2Frf&YftiqCJ_zzsN5@+1*3C*prF*!21J*ew?qKT*z55&EXB(zbSUc=`69Q zZgLbZ5UyZ#**c}Zy2;0{n2-CE;m-IA=JVcF8H=ClG>v3fzLoKZ^bXbH3nw@oug@`V zy<_`8{sFt?|DOK8YdOkFO9OSp7Ehfjdj8k1DxO$ZAHJ1qpE5D7nX`1qqD4(sR#q8_ zi3hVXGZTxF?Nl!29j527!l#@{9aWe0#w!D=)7e!LfDQwo5l|-00o9b?fG}YuBbL+)0lV zi{1A9N#S?XRb7$20&(lEaBwFsm7Dx=b>R_#U)5jP&z?Pd@!~~6Uw{A0=g##lU$Ef7 z%{zDgtlhNflP=ehgs*zH@4R|Ee@VpBptG)KbqX4>N2OkNFS~zOSEzH&ZO%RC=FObh zY3rb^t^IrZk|js%Y;Dha_(k^I&bm@)B`+f!^pB_Y(8}*wr@r^~^aLnPwD@jy!-MH# zS$g_&t|Z3r!d+K(cGgVfKXp2CZ<&V3xe1*cR-DfKzG-T~?YnnP`}_NQZ{CdLVrzbX z`t)gUi?wTBh0a<#v08ERyysCDTsvI0E(p8%JZ$rh9Ufo5ehrC;c;UFzYU$FYs}I!1 zm4Ds&WL|vUQKPkLr_yezY>nBQc=q{@f**5!R|_Z?`EK5%a=fr&>yC$Ct7Lorw=b%g zk^53;(@GuINtYI1`rmp>v{PPd#m;BqNq+?8kCa8+jH_wjwYYuzcK+&BtL7DWech6# zQ1vf+XJ{L&7P$HucUSJo;^Ma*F&SDf3s`1PgPoa>9otw8R7hU`|CSI zKAL15U+N+IRW&@W9Awn#<5ruF#l2kkr=9&$`i&Ti_|^xd+xnS!7?j1%O)ij}^b=Gi Ndb;|#taD0e0stP|AD93D literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_2g_default_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b7c808aabf1bb9d85b51f24bf19afd5f4def6f GIT binary patch literal 1765 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 V`|k6hjtmS844$rjF6*2UngBE^9RL6T literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdff01612cbc389dce368845df201198beb14d8 GIT binary patch literal 3826 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 WWSKE_=5q!H1_n=8KbLh*2~7ZKjT^WC literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b21d388013102b3898b797a133ec7abeefaaaa GIT binary patch literal 3629 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`(#+;1OBOz`!j8!i<;h z*8O2%;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2IdG)7srr_TW6-9@0M{DIc~px zm+HxNYCT6fT$(v0_MDNMBg!Hw*u*(IIH5YhmSbm%BY)HM*dw!9j5-qd$26ajqiVd6&<>0l}(1Q z;J?+=Qg5D14-Iu$vguk<1xpkMyG8*+1@8=-1QvBY<9J4Obv}s$3sJ_s#oHr?`L~zJb$Cf z=(T{ehTUhk)RayJH`8>PJH-cBA7oxP7Y;R;v6<-`qj<h76v)$q(IGo9Xb;)3m6<~*j& z@8s9*nlay|_!OfKo0m?1w))#L>#f(sE+4(-`aqf8++giPMm64`SGTKtvkDznJMJ;= zo0}3jZQa>@v1jJ~{`K4X<-F-3-lBrR>`$kPOq4yb%k|OJ-zS$|S#DQ9L09Me=SM%S z>ua{@{eE`miBxs$-HT_xUsfn%&R{W^%TTu0?Pg#BXTYAzk+t8qzifWr|5zq&t3cU> z)4I#!lvf1GUw^REV#zk|2RE~O56{1Up7F-vt4n`)s_*rG>-8Zz`9^!FXz0->?u0d4 zL*GaJ*O>6S!+ASURb5I zcHNzImux5Y@_yNwxKZH4jOe3M3}sDI%4MgNzF*_A(s%9FqsC9yp1ywe%D;kpR(9#8 z-)#bO($}!_@K$U-HYI)WzVI?ZgT2?BK3==2U%zwKn_5G?jk`8|4nLg`-Zg*jMoov! zH)G_smRim@>S4(o(*EvW<-hN-zwfV*ES9cVq*m5H*M)mY!OdOP8{FP44rN&XYN~(S z{d*SqJuj!H{=D%ndiUzL`^_7e|33a3FTa0h>Ex9wHR}pC22QUJHC6gFegDzV8r$pH a7z8w}SM4#H;LE_kz~JfX=d#Wzp$PzztizuG literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..05068b2938e2dabdd35c18fea3a933e7ac301e25 GIT binary patch literal 3685 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`(#+;1OBOz`!j8!i<;h z*8O2%;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2IdK#E{-7;x6VvIpDi0Ia@;;W zZAtDTUH>fCKaOiP^6u&UQsU4G>ag$N7Bu32VVV(QIv>7k)6OU`|s)3IBjrl5i8c*FC?zw8nX!okmqA8f5h9K(91 zzqPC{nwfhR}q*pdV62X2QIcXssH zTo(49r@4A|XmZvqvC}pu#d;L~uv{{k%eC~|jK#O#s#VV8@0(v$%gZ;%q`*1#tEBIq zHMKLHG7V2wGX^X7M!1~Vq!T&6s@P!jpQGm2Cp)W$YKuA5a*vQKqd^`Xi8 zc1%`YqtSKnbu&(8L=mF*FQT_Fw@}&~k*Lgnr-CL#pHY?#! Qu zlb>Z2PJP~^r~h?66W86vFUuSbox8`Fn^bTzIa`-uN1A8JY_Zp6yO~~C$JdotXwTcT zVAc71@3toD%gczZ`xe!xe=n$s!BgY;e}7ch{CK(H$gET6Vs-a^ zwv^dz{i{3H>rVgx literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_default_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..c352e4fcc28b48bb7423017d276082d01ae3848e GIT binary patch literal 3884 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..4f22987e770f1d95042f1abcfe8fa2480fd31c9d GIT binary patch literal 3303 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 s{Uuwxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H 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 G&;$SyC`R4@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_3g_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1b26f5d266b5dd42dfcc9edff7377a8586b93f GIT binary patch literal 3342 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..2d574bf3031796bbe9dcb53b24d065841f0a8a26 GIT binary patch literal 1459 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 E02D(9>i_@% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..3cb4ee0965124c04b8c6cc8b8c31d1e674737d23 GIT binary patch literal 1753 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|F*G%EbhI#WGH^67 zG;}p~vNSYya&fkFHL^4{b#ZZo>2=9ZF3nBND}m`vLFhHbsTY(KK*3?Ka=93A-e$6`G3`)|?P(U~>?6SQ^1-DZ|6M?x(?hmb;5gC8ZZUoYQoY zxwQFRV_3wA|Mm)pHlBOfRLoJ%c1`Z)zqn%$Wwxq`wg(gX_gcV@@ka5C{@}(PQ{RO?e*E~473(jb z%^Xb)|Mj?EF`8cdsR#`On6sTW@=reKN)?GUlS6pVWiE2L>(orY^j* zRsZB(^F<|mC1-8sdo`U9n!~w}J8hb%+X<5()$NAoznxveXZvIJ;q_&G?H1k)&Y|yo zL#sFZJHIjM<4gngWaFjEGsGTRvFGt7SuJ-I6+N!8Iz;x`_K>YI1yeq;C(ksGXS*8p zuK4==y({OJP8R+UWd2Isd1=_~!A+R2?>isi?R?jH0L_0eTnb?(x!HMQ$*MP1puqu*)vq77|ZHh;J< zP5Pr;echwwJ|>^O-}Y9lgw^ij|IqbCh;*zbKXDk+)^Z6XF&A$(K*V<<-o1y#m z%krhFRZVw;=Y@KEcmHhIEUHi)d2xz+eSJOeJU>32{}TUpt^K&=={(j8e5Y^CDoYaS zaK9K;W;Xl4*|TTkHb#{AwFH;@ul3>g*7V-@{`!@3*V(l9FaP*?TgkqVJ9gVmo~sCP uJ~v&v_WQ&B_=*kxyz7rzM_2w4OklV(&Bl6?xJV7Cvhj5Fb6Mw<&;$VAa=Kms literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..4ea7ff2e20f20302904b64027ad29f8ac078c3b3 GIT binary patch literal 3482 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4Ky-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++CTJho3?8Dv*~h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJf0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@40-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1JhAY7srr_TW6-9_ZAHlIc}ex z=2SaPafaaE109Qc^A~Pi#j!B{h7!~B#@P#eyQ5gvF3RQbV%eFI9N-vGAg{;WwBTPu zOGS%!r$Tjt;w$0H&(3CEl$Bgw>3_KLMdL%m@_T3g-YGu!cV4k;=*=~qCzkDh`1{|h z=OLjkDkjGsY~a=5W7oLAIfreVoB^Y{nbP@&)6skq&Ca2+3M_36-VUkWjE@T%)RjUX z@D-fzvy5h&@nH@-%K?QC0ui09GWy+|-b*jJFEBUz!e=r6{PW<4A*Q!}uIpfNn7_)- zGq_pD)*?H+R@{R9&WfiyIrvsE-94ba;OeslCR_%Y!lgy$HWsiq7ACCU`@jA8X@M1Y zvm_i8IcGF*H{Lz4W0jof#8n+Tw*H%w+R=aGzUf0*35kyESdNNSzl1C@%{#p3UQNji zJ}~2~GgA{`b8>?-MTA|M~NE(e+D< z>sQV-Sy53ga@V@Isaq*TN340>(fs~pDdqd;#!QZyer=QKk!DT{agKGpJ$L_H+V%gN z+o!lt&%7CKoTVy9*wb$D+y9$?%=}Z#GR3~IydK7a9>c`UWkoz1tJeI_Gh%LzcJiuMd0%z}cxTP&c{s=aZus6$L0e_Iq)WACpPRbojP6&yw(30v zRf=DtUcJnTdb%RicTUfq=aR`ywO4fdR(A2CQP}*+;oD@tE_^D#IDWR(xn(v{3}s7u)=r#!gpD)j^|m>Z4>af2 z6{Ib-d1c|ZG-~a;jCuKd;dRp+&z(AY>iOJa@8Ty#miKOK{L1%t)vJyZ>tBeRFWY9% a%+U9NzfhI8SdM{#fx*+&&t;ucLK6U7?|ujX literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..e4e842c4e7f052614ff7842ec9fb3d92d4d89912 GIT binary patch literal 3648 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 E0Pheot^fc4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..a1f78ef27f6e9b18cc25076a3d432da798d7578e GIT binary patch literal 3460 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 CxocAZ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..74d45b6bc0b32d2cabc76b67ab630c318f027026 GIT binary patch literal 3634 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e.png new file mode 100755 index 0000000000000000000000000000000000000000..f314c1508f98e177e70ede55357db87b1663a941 GIT binary patch literal 1767 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzHnnszws5s{GO%

2=9ZF3nBND}m`vLFjeFsTY(KK*3?Q&-9PR1i7*cWT%yfH?Xh)gj_3!OD4gi*bXstS_zkg;*ZSKI6`AOGYCH;4e`UR@d7a}z)rQn; zza<4?SNN|e|ElSB->2=c{yO*07`~*9GxTQqJlk;6<-vume488tf=^yggM^Md$gkRQ&U-|O`GPh{PMwz7bo6({y8;P@A~`An>VYA_+4K6hjE#vSWHYz z%eQZ39x6fwH8pp(?cTk5&HDB2Z_9q4uCZHhrO)rGb84P6pM{kbm)UIIW5SAa-PT~zkK`lZ>HJor>j?M`&x)4 zopR>=eRl#VTzFcY82$YGRCttGdn#kYR-2a9)#a(|p5e3ZX&l?7FBTOQ6&h(ql8REj zht8clH-FzgJL5v_jajx!6?e|qv3>LA;OAw#r_P%M`^!i|?-h8Qea!^g+xCoug}-c^RZ zJEO8vG#c##vv*1GGcj(BSRN*D?sb8MozUsTWg3Rxg#td!PT}9z8`B}NqigGDlW$sY zykBiwaQyMhMe?gJ$V6XX@T9H%!u5(B0a8pi&U^}QU}QKMk}4F;`ui2A>hW~-b6Mw< G&;$U`Rky_e literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..b5cbd0939190d29e17173836372864a334e1ced8 GIT binary patch literal 1605 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOza&vZeGB2=9ZF3nBND}m`vLFjeCsTY(KK*3?2`jJ^wMDa_~*Ck4EA&)#g z#Hs}MymI^yB#Y0fAL(m9k=>DhO}O>TP4g+lk|nM;E*Rgd1bQZFiR%r<)F@!x9RQ%{b%fPHbT zQ$zf8P75i#N|}4C+UDNGCrWo$i5b*fC~CT&lv#D`Yrv>9y@aq{@wAr^z~{3q+jzVqV1P>c;(_bhq5tGlDfN z_@tU*1#!V%B(1n*2~-J>b}-Sugf34gD?QIZ-}1 zhu!7S)LL^rzdIAw>dxK$@y*$YyJz&0gN;{SWn0%gN#?&rsp}P~ytBz^0V}`M=zUu~ zbAoXG^bcWXHiow}kClpVU2!^EsOj>j3a-U#BG#)OslNO5>3kdGmG4$RR$ux|zUA1h z;@?S*LXWtM`|sD9AMa~-_7N{Tc-81pOVX=5CsZ621G*+oDzo14HTmJ|Zzqdqg-ajs zI~!rGY0}!HytRCFeq_z9_?_k3BBLM7xxMano^+)A$65QcOZINnzcs&Xjp?->AGPE? r(~=9P*X??k_$R!e+q`Y(U%>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzF)(*EwsdrMGO%AHE=R^G&D6bG&FOA>2=9ZF3nBND}m`vLFjeCsTY(KK*3?5$bD_m2hBY{6oX@!D@N=1kO%U@<4j}5kBf@>PJ7QUT!YsQ;jdkWQj zj-O3)Hrv9?KY4CSdVS^n%K38*W3QW947kc@Y3z*Us)*gA}aQTAjiF-i~qI|u|S*BltFW4F$+r|^nE#n^E zsv8pEN<2Qu$%{h#lQa`SL@AQ0u z^jRhKhYDV=HNJ3lb(v&-kdj>we9>CsTsHS~WdpsP6o?L_=Wp%_Y9d7Ut&V?6Jq#R~Q%>O}chW zY=Ml+_aHy+O&TJ~%erNh%oHE&2r`N7U62#WI7`u@YQ7j(YgJ&4hH=ww{#fzszCY)` z$DU)>`_^)wKS7<-_Nv#Do)W9Gj8U?3`RpqhDh|8PNj00SCRYAS z>;2xl^Z$yO;!}26PrAM)y1>ZUBfqrb?eE2`#R*O}cdqU|mwj4oeWkuK#5dO7#~nJH*ClqqHh0etP8m>Lr5m5mGjPZfM-j&9Axb`EgB>U=Ziu z`IA>9W%_;bD?DlEXZCp8jT~=*+VuN=UCibo*>|7k?X9>TzirXyiWQ5$=2KVGx0D~%u-$5P;lV^sDkix L^>bP0l+XkKy6S-Z literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..aee5871b60a2e8264de1e190cbcfb753cecdb586 GIT binary patch literal 1819 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzc62neG_Z7bGO%2=9ZF3nBND}m`vLFjeCsTY(KK*3?GqQ{T%0?%bsf2Jxbsi% zdZ*TybD`1xd~M|Ye`U|ko{3%-py9Cfn1RpL?4G{9fAM@X3p~~2`Pv&>qZ5KGL_Xe# zy`pS%@Sc%Ho103<;SascUJn=!dqsR&k$HtX}PBE+?l>hJZJK{>fp^k@6z^v z9aU{o;h*Plv@0c+F50(P>V;fN7OTegicZ_(K^EMv*k8%*-FNJ8Hb+VOHG`x)%LUh8 zxB93tZ;bHSzIE%=gPOvPhc8%pG%c`L>bjM07K?}Kq z`yRen#Cd3??y6S@=gytWZ*gV{Lsv<8`R>%>`oQ?WC-t5_$_En!BBr%Iew?f)*DqdU z7vFp`-2xxJIkQ| zUf+uL9Xe|l@QO`Go%vJ1`Sa%wA3DV3tjB2-XO5wU&ePE8$s{q|kEcFjxK9C`G)mwzaW-=1qS8`iJq&oPtc z;p01WvQ!HXscL%=U~{c-5jeuCyB&XRYmEjN4&1^X**N9<=VAt^V2rZ+`nT- zK&!B@Q(Tsb@1&hOEl)fxDkv#Ak|=pH@oe^{sI?m>PZnP6w_MvUMt6^r$Jy5p{{6F? z?X`4ZE7X7ci=%AVfdUaRS+RTFx>7pz(GepPPG(sK*1`D#_} zt*hdgpsjPS;qIY^r!F_{-TRliF+y%yR;Aj|-jrCe>S%V)ojdoi%92YP zRyBy(>#E9o6-~7deC&8&eaP!6JP-HqwLg~qC{xzeBoW8t^-t}tvz5DDhf4u#etPCx z(Ie(7Z#Cy_-`%-yjYD-#X!j(2o0fe?4!17gOwfHhpMjYn?`rkow)>0@pz6xg)z4*} HQ$iB}(0S7a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca7ff3b76d89fa45a5c2efa558ba64e41fdbf8b GIT binary patch literal 3509 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 E0IUp>4FCWD literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c92698a1e471e550ad37fbe707505d48839 GIT binary patch literal 1457 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`>0)H*YGP<}9J=+-@<)X&zK>3U0Sp;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^!Cjq{hI&r0VJ77*cWTO+>!mAp?>4vx^J^pRm1Q`*792Pr88lBZG@YV+B*h zjstlL^Aa9UmOmYqetCZAf4uPXK+dnKk`OGGgTW4yAa%Z5L-g0l9TZ?y0-C-EGqj=7>(C&^% z@ka)VR$&o081|m{TYAUno=M=m9QmX?rgfRiPn_t#b8G5>Ppd3^e5d$31&Y}Ax-D+w zitXtCTn+HHG+3N=&a2TJ?Y1bB4&NCuLjR4IQ%Orikd|hAcXvb|*lc z^W}t6({tY$i$k(=&s}OQJ{7Qh>j@z~-*azkLS`{(7|QL~-hao2AzNJW&)jR*9CbzJ zhBC+8XS-y&;fKVvbXNmen-IG*lcyhkukxiz>f5>b{nxJQor)_~>v*UW797tfD0+7D zu8)2v&P__4+pB(}!{`Rr-Tl8hmn-iS4!r28v0l3Sl3n!Sl-ZG|TrPTM%$;_$h;#2& z#?%vc&CJEN_OH2pD{GVQmDIQ1{*os@J$2b0{OMF&)xSHN5(6rae}3`yN3i?!KN0^I rIv3CEd-CUg#eKbZC#N~=W07FUJ#rxB#D=XeK!vEMtDnm{r-UW|8%!Vo literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..cf39dd5499d88b42286964f301424dbf5beb5f3e GIT binary patch literal 3217 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2F5*}E{-7;x8BUy?{zppqm?=S*ZGeV+GT12ko|$4u;7lvlKP8r=|8bacpGU z@L<=o80KFLZ!FBO{@pe=XIE%RQY9k?zxAdomt=0`-B^`&$MC}o!R-%Y7O#4>(Prs! zA#u-ZYoxa=`1rl{NX4Z&r+rtrTjmDDHV0kxdoXX86%WrUGsWB6W-rUkb8X~h5)g}M zS>wHxGqg$P@yts*)J#rqFgj9f^)YqMl%(9Km2G=#PJHjZbNo@h@T;{E>bu{2Uv8Uf zn39@w?al%#>r=&M#qvyv*_mo~bN?AzpZ3+bIIZ;0)!Km44p zbyeK0#C+3#+IzNVay6{9te^ZXuZB%VqoDmj_JJAserrO~x3NxX%w8a@6n0!PTJ1pE z?5k(%cjo>s{&~Cq{I<8x5yd!^=u418Xcehvn^y~U|?YIboFyt I=akR{03_D`?EnA( literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a54613fa100d56f9ede591fbb205e3bd270c79 GIT binary patch literal 3048 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..d90ca3560dcb66f4f1abcfe995b96a397f658f51 GIT binary patch literal 3512 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5de5bf1b91b16f40dba74e3c6a5c81b10c1d53 GIT binary patch literal 3220 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 My85}Sb4q9e0BAi3e*gdg literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..f30da37b633015ab6f8b1fccb390ab42d4288990 GIT binary patch literal 3049 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs21XH27srr_TW@Cg@--OTEc#Z`FKh1+jmZxp~K^!Yse10 z#cW4QL!PaAr!~XQU*@>AS7ykS%6ac6t3(EL_cHYMR^987Fg$jToAC^%qKX6uQ&v{; z$+eMJ4l?*9`bs;*+ujy8@H&ujB3t@>h1wq3Lo+_EN5JDvHJ z^to9z91-g8*PK>N*}6HleS-Zlxod~3BKTJ;mvO95I;%f<_bG|zHoql=U#&9yvHbtB le-i&!$uTf6{Qu9)aLFL|{I>W4CI$uu22WQ%mvv4FO#mzLr^5gM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..7af7fe712c14cf6d805ddba3d8740e22e303aa7b GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzG;wh>GIKU_b#yi` zG;}p`axye?c62m!vaoP6v@mjk>2=9ZF3nBND}m`vLFhHdsTY(KK*3?|q zMa+1fIZN)5Mcf8HZblP_{Z`6tb3UJUVfdV5{Y8Z7%9CS(Tb9|#SFI3PqZwFG$#lj! zG?6hvRO5}cj^vD0h0R@^+=|~kC+Xa7Yn@f=AUGrJ<PLU#@1D!2HswAFX=CY55Y%aM-SCIIjwi23Z{6f}ujp?Z->>#Pwfa`W jKj|Pzp*7ncYaU=Y!d!Ua?Rj=1P$}Z+>gTe~DWM4f=kcU< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..54a55c61f6043b55744645d2184b90805f94395f GIT binary patch literal 3761 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 M)78&qol`;+0F#TTUH||9 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..4820651befe12b6460702b7ceeaadfdad355eb18 GIT binary patch literal 3617 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 JWt~$(69CNN@qqvU literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..6c20e8bc2a5f8ce5d714ad9e0be22bb378c414a2 GIT binary patch literal 3498 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fa22ed04121dabedeb7eef5ee0688f0c1298e6 GIT binary patch literal 1445 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX5wV%V(8*zWZ`OV zXy|I}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z+EQx+a3l6CP_~h$B>F!ZzAsI9x@Q%QIHd-&mojzt*q;g3%})O>rDtZ-ov5RflJ;jq_CWnS63l@9Z_37zKHt@0-5$}F=BNkSa&MOuHd?Rop;lJg6fHC)+; z&w4%kY+SLEwKbPFS=M*yx!$W;Ut3q1v)_(L;0-e~s^d zSk5%*&P7VEB&42YJ-=CbwJRWU={yG3rR zZ(keL{dQ6GwVhu>0(ElLx0x?p@^0;NlWC`)s&CtV`|b9#bN+1Xd%j`q>}1vd=Kq2% fy4Pygu}Cl+^gMS#q18qkRB(E_`njxgN@xNA6r>hB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0c5f5abae20deeb78a0993883650494454e7a4 GIT binary patch literal 3208 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0ee243be20cd8857f0375c2abc43826b267cc4 GIT binary patch literal 3040 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs21agA7srr_TW@AK@--_6xJo+j z`p)u}_r+10o{vdiIbwGwJY2T*$jfDJPODf$B(x{b_~9HNZ~U2)Nomt!mh12K2R1(~ z&UtogotDp;jeo_$M2_|r>#^Pa{&%m=X>Rp-JOvR;3R?wSua`b{W;oYlIL(!*L2|Ff znQJm7ViHBG=3LwwQmfQGAyn9cV?}0w;qMEQS47HTr%EmVI`}z z`C{UAGsR0AvS$ZqJ!YAmAe__mwR2gf+^)Ra-%^d2OhBuV7|i e`2U}oVW~#dO{48emlzlr7(8A5T-G@yGywn^bEn7v literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..5a90d1fcd38aea36bf174fc14860a55b18dc78ba GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPebagebbT)Exb#yi` zG;}qxaJF=DGO#o*45>2=9ZF3nBND}m`vf$KFkz^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#j9hW*)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI((X*HRdfq_xd)5S5Q;?|p)-dxQF0&TLKcdMJev3*ODbK4V9&2n8YW=G~) z3)dAAO{Y|{J{Pbx@fmj3o%_=%C}5bhc;)Yr3e1=TJlOx%l*w|z@U4v V?rv75*IH1);pyt<}?lB@s# literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..51074bee3bc58e7f0dde96feffb43fe41fa22653 GIT binary patch literal 3501 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..a3bf393a4e66c362b593676d43629f57f29d27b6 GIT binary patch literal 1448 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..330aa082eaf4c6b6ceed7fffda35e8c9484c6287 GIT binary patch literal 3041 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed316f050a09ddea84f3dbb944f1e522e7142f4f GIT binary patch literal 1191 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKPev@kcbv~)Cgb#yi` zG;}qxFg7r>G_)`=G%|NHH#cyC>2=9ZF3nBND}m`vLFl!>sTY(KK*3?<9LaiiC?QTiz;WIoO=LvoFJd@9V0jw?9=pi$tAHn5}#L zYu>V#kt{hZ1`L01N(N3#y(!D_;K~|hf5ihXIcw`OvmT#tUjD$P>(C@&0l8gV)d!9_ zJiM3q^1zB#X${vst5!u%OP#(oap6Nd2bQ!cRm`q2|6V;#Zj9g3(LSxs?A*3pjDMKL zEUGk04cARoIuyE4XLd-Sh=1+8`xW8k&YOxKS=jjr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*(#6aPrq?AuximL5uLPzy1)e9&C9PD7#IsYT^vIyZaoQc%xf{=Q4xH*H-167U(G`8xDB;V-#H6-%qyHK zoqjW2sdcg}e9moIuI(}R)Ve)4TfB6pubQ|{1zU@?|ibH?-m!okL+6;#A2BeqZ+X>ZR##V$uOS>?)nNW zw-$)=Z2QyO*m$j{uS4tW$!EQScl9)uq{#d#<+wUgC2E#bbVz2K?zbz;raNCz@QqsB z(=nfIY0~mYW!+i4UccK89gVV(-}XqBF{AxX;eWx~_Tu0ESIUGjp8H(G_4Ay?n_Yc< zT}Nx?f3{h^+wp?G=F_)ZMgP^v9>}Yiddf6`@5S-;{mvb7{2Lf9WN-$=F5pw2^>r{ROvfu#lUul9eA|0k5dF!5@)R?xj|&p_por>mdK II;Vst0Eer^M*si- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..3a90366fe4c9f42b4433480bcd4db90c176c46e9 GIT binary patch literal 1253 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuV_;yYxxfAf0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*4f($T;Trq?AuximL5uLPzy1)$o&6x?oc!Kqi@PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-Y%!sN|S+sG1Ak;F{I+wlaPbHM+^jdbOmZM759Ah;*Q~T=ZxX>FViwzTcd7I!${0S;qBW4jb_B=1#4; zD&`uvy2kUivFprLhKm$MjRly$iL4i?ma)0e*!RiuZ{6}8$pT!z$L-k8@3lIt;~V6>G?ed{pCNCymx0)aWRVG6J72IK zU2}hiM8@JLCt5PknB{xDc-Q2dwKVZg`w>5#izlyK5n84i^=9eW6>T3D_}n_^w#c7* z^#>E_6OXPeh{@5owI;N{aCW)M0@*E>e=6VlpZDhf=jR)^3T7?)9OSS*Y1-y%amyX1 z8~xd(z?yZvfpvlUU%gam`MSmSXU<9-EBSonQS#dv lzK@)QUq8#QIX$0=he2U^PuqXi=`5gv$J5o%Wt~$(69AfXz7PNa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_no.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_no.png new file mode 100644 index 0000000000000000000000000000000000000000..49e4f0791f1b253e7984e2fa9141ef1ee58410bb GIT binary patch literal 1281 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuV_;yYxxfAf0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*$o&6x?oc!l_r^PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-fnl!eoY1j#!^og$B>F!PeM-THaiHUHnLq}vMgTI8WHkf%7iHl=IiqVoHP_y zG8|QH5iXCq!S2eg!!JmO~wLWQx3YKNY_< z|K+AdpM~E_HYOS}%e;7Jku51Cr)#Nn%lh@54ylxtVx}Tdu19WgEGzSK>XH2Oh^58F zr)qi1mG#jQ8H!In%vgEaY`)WrtfPuMFI;%*oN#>Fii)fx!^@#3w?$EU zqn&Cb>+;A6I&M6tcC;y-ofTQ%^Xx6d3x``Le{*lG&wo?@t1u$EG`4>8hg#dd#m|ao zEz5HVTyiuyH&Jqn?}aunGAs<4>6o%;={HcJ N>_B$C&^C literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2g_out.png new file mode 100644 index 0000000000000000000000000000000000000000..9e45681b6fd1562232b1c2614b148b27c50fb3ce GIT binary patch literal 1271 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuV_;yYxxfAf0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*ql}l<-W?5>A zTTyOb>umj zgY_)7jD>v)+TUUhuARlOZGxRBo%sQ%U>uK3cY z-=fERPOgaHFq?Cm>!g<)!;X?C5yd%kzI$B_n7&Xi>SxQ-k7YK~WDly`**HOdZwrIa zi+Kl^#2bHd{O;A~U}Y-zV6o6GzZ{QsCNgI%?w<6D_?dNT$>kRJH7P#t<*ckVvK4>H zxLr%TAT@(K+ zI>AT**T9F`CY#+k?ez{hT-vsFdWo6hlAmEdOC9CIA2c literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png new file mode 100755 index 0000000000000000000000000000000000000000..873a317c1631b993718b0bcd98bae6c625b15aa6 GIT binary patch literal 777 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CV36iuVPIg;I_xu(fq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCc#Eo$!V zZz>Jh_(-Lx*+NtAs;;*q`^M&|D?&Z2jxr%KHK8>PRxcDZ?AXLhUp!NYn!uOT)xXT} z@4Lf_YD+RdseU^UsrSA7|Nr9iJHtQ3Z)A2**q|WJXeE@xoG;kb_xp!Ueq<@HaLr*) zo%EYWeNMNTUp`mWqt5Ft!Iskf!qskq%2J_YZ_|4$9k#Tj89FTAwf6qf=GTX&UZ1@v zJtLjd`P6mi-%8Wxga@$%Jba)LyC&h(>+7wJH>3FkL~p8PbT#P59sCm|zJK|mYhk;2 zO!v%j-ZSCvvDe?^SG5=?-Fqi+RYyos{mty9r{z|}`MmvM;$r;g+0qKuCHdcSIKLd4 z%gZzW8CUL}X@}NX+3(zb_=c5G>BYw-A2{Ph&pb}v>z>}b!unxvrpOusx?diQ&`TXRHtZ-+PgDOae? zm)ga4Jow}u&g%1@&&fCnpHRP6npg2)DQMt9Veal1FYHMD4UTbdemeiiAAhJ&Ju~($yatnoSwfTK>5A5_>_3HZ9!x*o=XJfx*+&&t;ucLK6U4WJBu! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d7d75a7e0d25c144ce8e19a3e5ba25049d1758 GIT binary patch literal 3285 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 Y#;sEi8>qT5FfcH9y85}Sb4q9e08P6c6aWAK literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..7b34688067b456436435809de3e1b875469483e4 GIT binary patch literal 3325 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 N22WQ%mvv4FO#qn-DSiL| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..08940ce6ee0acdf4103ec0ec766d1912cfc0a44f GIT binary patch literal 3380 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 TT<8J=0|SGntDnm{r-UW|WlYcW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_only_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5beb47c844ccecccdd021ef4c3cf05c3f4fc8a GIT binary patch literal 3686 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 IIVCg!0B&+!U;qFB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_1x_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..1362fa3d33b0c1baaeaecb3ffb27c4178429da97 GIT binary patch literal 3352 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..53552e4e4da36b7af72053f2673402b2bc74a523 GIT binary patch literal 1538 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2+~(H8*xMH+6A# zb~ZG0HFh#|baXXvGPQIxH*+*KafIph%quQQ%u7y%*_)Y}Vg=P}f>*DVb5UwyNq$jC zetr%t1q5W|m*f{`&%pc-b#fc$J5<}12w|=i)AwoI!ycY;w0l)R^VHf?>~-;ioF^KRY#`a4-$uM}A5bS6C77~E2=b%CwX z(ep*eLyhvI4^$sBPx!uvU1#>$Wv8Eha@G*BDz}>Z%0_@!FicS4#9C#GV3$3K+f|sS zJgDrQ6Z7!Lwa=-|Tn7_AcwYY+Z#O^xCWB#$=`z)4L9du{B&;6WvQ#zOe%~|QOM5@7 z&Q!0RA)&g*k~SW$+WSs|hfQt!i(gy!cdYc>krVQYeZ`5FqKSWJJ>%)F%;H|o*cpdOrLgo7xg9h{jfUGa79D>g!#?H&e>k4o_}6lxBow%>`oK8e)Yu{Gk$&T zTI8`~+JxC|hUsTkZYldM@^IpO%Qid5^TtKDTEw%(Vk3=aHUDo_nPuLi-0&{u8UNDu vTSq?aNpEm(JY2u(>Z{K@1rv{VGcYr_W;_qKOnhqvDwRE5{an^LB{Ts5A(2DN literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e8eb4cb02718bca1ad951467b9630d06f886c4 GIT binary patch literal 1996 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzH8e6aFtv1bwRCef zG;}p`GPE#owJ@?UGH^9_Hg~gx>2=9ZF3nBND}m`vLFjeEsTY(KK*3?ne zvX^+Pm|98jh2E&^%%z4NjsdSbnz{t;MsVrPDpOpPBz?4N!J&y*&e(2$oyT3oZ`@Zk}y!p#jCVN)RUZ}yfxBKDepYP;2eJa*W;$UG)S@b>O z#Dj!0H;iwj+ay+S?n4ZU>u!`tZRZa&6c;v2F9_&0BH&@lW2B zPm?`ni%!{7#$J$~ew_6)*J`6*i?_Tx%a)gs(NR=Xlu=wf+0V~U=Jo5>ufBZw;^XUk z_WAbh+ci&qm7U1rwQpNTujGaG2Hz6D&G>9?V)94j+T8-ijdD#p4Uhk`)KSX6cH@Re zXlQ6ic(^+=Gc#YzeI7o(eNOv+PfESYe6oaZYxdjFszkjT>b-$q|!- zth?_lJJ^(TO0{vH^r!j?7o~|;ZaS^oeCFJ_V|IreuKth|%-*?gpV^(5^UEeaajPuw zY50`RAu{cruHk)iBcn-K3>McFdyhPv8yg#2f8cqM$m^w-nJ>P%XQFJD{>|z@fJL)V z;z7OB@1BJmdi>(WiIU37m1oYMFV_AVo|&1cczRWTgl)6i^K%;}G2HPkeDQM)YiWbW z2C*qh)>E^tUAxBNI-iS+YfVSU)*U-4guf-~hoNPP*W6NdsaX}sy8$4@&BdYc$GgbOuH5NnLFW+ zP<{87!)LxdWYsYcy?b)@sZ*!Kbyn(Rt1V#r-1X<-lxu;>&ChS%^IIamKkz|LPL9BV z+UV%$-=@axUK6i8NnP+~_UiUJKRc$3ogTkE4($+iT$Lq%GC#Kb;#`ZPr$0HLo#gXB q`-8Zg#6HL3h5LjX_$~hlCNP-4_${ybYRYF&{p#uJ=d#Wzp$Py$r#-O% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..42915954b8f2493a5afa97548abaf34f04037bff GIT binary patch literal 1782 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|F?Dt|GITa~wRCea zG;}qxv@|z%aWQgpHF7dFb2TxB>2=9ZF3nBND}m`vLFl!>sTY(KK*3?) zfzJfF3DyeUUMI}u6`F#r+WF2X?g-mp`yopIZ$e&5$`TH~TOFpR?-h#AJ2Xvco~6%l zbwgQsxi^dW-bof#YeVf>gOxj;wjS@7aVaPZ|9|$w^jppOvVm{Dh_yt0*FADEBjj!A zx1UG;zFH~!urt*+J)r93-5(b_iWeSR&zf7^8g%lIcmoID`Cz@S>z17!>&{Cy&MG=z zyi@WmOV=TW1!)&_dJcZM6?J}9k5tV>zvZtTOfQ=Vce)t8V^8#zjz9eO;?_f5XAW$g zm}i+?rY2`U-*{D@Mc>mM(VWdmYJtWco_&WG6qK)bXme0Icx^R9Hrvc4zd5fM$S?L? zTh-!NakjSj{=2j-xBQCUP5FHDSTSFrJcre7&NDIx;=CLxmKbb*S;w6*#lSY4OD1et z<-4#?he8UzFD<&n6hnJ@ z|1{sJo~zzPK|nzN#5Kduid#19P)OKYk-k`WM)}jlEfe%V#P7Lr>hXF8W(M(fISJP- R1dTy8k*BMl%Q~loCIIk#s}leK literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..19c9a3deca3515885d3bb136c4d80623885f3276 GIT binary patch literal 1840 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzb~JM{F?KR>wRCea zG;}p`G&M4FF*9*AGchzaH8VAU>2=9ZF3nBND}m`vLFhHbsTY(KK*3?)OzH=|@#e{MR%g#-oIL_S6Ro9r1JR$5!64Nh+bcUn3sv47;7dl z5Cf|P+y(3#RF=$H8Rs+OY?}K46V7#s4%sR~g(~f*9Ph4ga4ib_U|SHxqOTmWAoM#^ z6vN%TiKkPHw4XS*^>kWtD}U#Cuv}`&KT*fu5~beR>FLXRo+MqLbX;xespSt=F-!Q> zgz$5+dL9n5xWU=w$XJx-{(kL+>93UYb-zg}r#V!K9-nRN_c3u(_9f}=qb_TW_0`^o z`-QY0o2J@2Ip|K@tI{r0hpsGxcWOsk9qwMQ%q*XI;pCfo!6O&_T_$_*eGk4TvYy+> zXs6-oU#qSfyaivsvd~zdd>UeEQWcx6?*CyQkdnT==wma^@oe36b034UPva ze(YjR@@**GHP40nx$>43rP~cW*2mfZe!EWXZRYZmYlG}=|FB$tP;OG^UIEEBM|cDu zD*LWH{Cb9;OUJxo<@UKN<6rp4&ie3ve~{PRXOfm79dZe|(!{nivuNK;p~Q(iZ#jB~T%tvZt+X^Bl< ze;$Zs2l#9Z7UvgQ*>br%fzfl}%nB9Dom2H6o%W9l6BYR{;j=2|>vhM{88VBnzq)eN zNhQ3TJFeWtuTK8mgu|cR?zO}+)oFiO>orru_-@D-&e<&mizK!t&Wj2xst8V*y{jjx zSkFFrmFVoNk=0$-1zJu%niBOU&UZ$Qh%)E%7w;LP7gR^BC^QM|SZv;I_cvfw)}KRr z_+~wSA$%fo(bL#7ruu$S#}8)fIvyzy-0xXtvdUgkY5DfAwl&O8q~0uj8j`1HCz!o| zg`(Hm*RAuPs6M=A!7g6U>oe`@oT42j%qw&*9&h*a-Sy&TT+N+db-$kk)j3Rix+qa% z_o?Nl&n|sx^Y5ORzqmcyvS-U@oPVCIf8x5?U&Rd@b{u$6_wAg^{QViL-6eze9r*v~ erk`9riv&aM&N_CUTmP1V>M&1NKbLh*2~7Z!nc0y5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..6119135f0755c42ff0ed96888b71a757fb9156c1 GIT binary patch literal 2059 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzHgq#FH8n7DwRCea zG;}qxFtRjrc6D}iHZm}EF*Y=T>2=9ZF3nBND}m`vLFhHcsTY(KK*3?F7*cWTOt`N{a=3_{ex+expvPZF!L_~iu^nC~Z-km}6Pyyc z!_e{Nq6>#I%vpB_9{+k^hr|+v6^}cbx)vx!aOuq|Q(Tm!-qp3>(RsHLWl@)-={|Gb zxBPzc?5B{o`lA?&JA110-~GM!^W4vKwWr>`)vfgj7HJi_xF_!Y-Dw9}a;JVca)c%F zg>Z(Eg+#TE^fzAq2s^`qu7p&MyPwtBZ(O+Gz|PJ-WzwWWTa2a|yb)a^R`zcRgRLCD ztgLKcTH3Nl1s0PYY!zs$Z`~{6t>e#DP*XGKPn~^eczAGK-M+oswuK!o5Prk^CTh`~ zD=soS_U-#8H#b`9)8Q;FEvE??pgEa|6jXi%^P)NSC1v^ z{zs#?8#iwdKgRm^@82m?rnr>to*NY%{WffM=;~FgvTUubf3sd*sl+z*I8#OrlAes!S`+zAmx4&(Ys@=EDk3mM0=o$Ihm+M1+L6988!XCMK41^XAQi zZ{NOM|M}CWVfMK z%*jWg%BBamygPjF(5;B(#L3Ri&M6xsUi|oRLyChX&)Ui=sMhZO?=N4zT=^fQC$G%5 zo8`jw=H}*-!a_%5V`HvKhr4b`wS8y$5Lad)v+uX_p5G2mHXN3fX-jskU#~xDtFEqY zjP9gm%a?E6xN+lt6W`xLSA-gl-SJ=c_gu5Iw6xz0_Zg?(^k3SeF8AQwyF4#HzhzUW zidxy&l<4T{W-2QyFFtzo=>2Egvigw0?L`8YcojaG$Ccd<^bZ^tW+Vfka8jo~2FJ`~p;#0#G zFsE~}jPs>moQy5cXP!%E%9$Pb`r5T?EB5W1_j2p{b?f4Cb94VP9FP@wTD@_Z{pr1h zy;_}F4DIv1ZoZhZ=Xk=bua#dId$ymJ_Vx7@)MD!G>$`OBTpzEwNN#cQ=iNq{rr_TvaSuD$a7HtLV#(V`>|Eir%zwj ze%y;ka!sVzckY0*hC)xbmKY|S-~RpEH#a?oHKixc3H>R`GVJ>#ezU%PH*em&6A$j)oA>n3pO~3*<~&(_r7ABkkL_~SnTW;gXCIvl zVP|~T%2Cy4x}Q;ibN$byXZk$OK6<3I@I`P`)GXeat5Q=_*B-EYzDv8gbNa?K5qHKT ziE)m)>F@U~DV}5T=gi~W7yd`3`t>{o;?{|kZNI%X@gKj+(Qy8&*CjX??KWI>{qK75 z^7R*-?|zBM7CZ1m^`Gdb!}D^FbFVPq-9EXzwYBy9%%GXqA{=~=iT*sS`O2-AIqT8h zxf7LnF1o{5=`1c~J z=eFmripYCcv@U+xFIE5W;NkEcF&UhUKW4mbW?*J0vlUskv%+I8sCxEv^>bP0l+XkK D4~$b? literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_2g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..6d08ace1312872138348f1ee285184ad755a4c57 GIT binary patch literal 1583 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfjKQRB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0$*Ra!Fk2dfJ)BK)vrh_&^OdG(9g{U`3vmf;*y|Lgfp6v+nIWGChrManjC7v#}N)@>U zdMTMHRz?2dQ z8nvb^F&2K(ZYfaY%H${fVV;>);i?SHyI-C*=l)%O^vbCg25YXp zi;ZQzeD>SAV(X>41Cu5P-&(ck?9GdpSBjnvVyJi!_(7NR!LJopLp7WeeNTvU&b!T% zU_5tU$&+Vq{{<)Nzm3`XxhVJW)bC9k+bY5xq8dJ5(6y=QOj6ZQJChkWBXIuF`Dfe~ zKb-e7)!m5U#2)2UN6d2Mz1v?^GtCkI;3Kwb^5R!EPl_cX=1s0SEqK1OxINtE_2=tx zXI6{P-y65$EAO9MR)!UOA8u8!nwqkGhQ@u%LeF=BI^Dl@V&fGY_Gxf;OkZ*6OzGWC zi4yN-{QP!o)1tlQTN|Al+5fjG{qA{t!>oj-s7d!3x54Fy*L5!z9m&`%%o1bZyV;a! zdg)%B{QojjQg7y&&2D$zI$`(K2*+nTa&Jt%_iDaYaOl+9B{w40UWqP$#q<28`1Ip_ rw;C&_T>MnEd(Yi(@iJTXGx0E#u)jMTz5Cn*P!aCw>gTe~DWM4ft=e1k literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb640d8c50390922141ea44818ad02d12b8f4b5 GIT binary patch literal 3319 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce09ddf38ad555c42f46a3db31a66c5c163ea85 GIT binary patch literal 3708 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 GGywpTY4@K1 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_default_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0aabfa837e0ace705e625cf0bd72af4201129f GIT binary patch literal 3975 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 Xb#J<^vyL|d0|SGntDnm{r-UW|izQ_o literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_3g_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..fd571a06ecc578f75c5cab6b5f3d7cc1bc47e31e GIT binary patch literal 3339 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIz**oCSxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRDFu8E_tWp&F!rl_0jn^F2+j-tjIjHqW#<5_l z>d~VMS)E@e6`QWKy!^!S$I_T{YHN2rX+FO9`~S~!`+x6ye@}C*=~|Ixne(nieP4F@ zr8z^cE=!r%4(>YvUS}EBGG@$5Y$mWwJ0dl;lqG`A z=SFMbboi)#32ysRd|D6$IkNhzORo~RMNTk3j$v|8k zlsT=Qy$-rIbC!Xb*|eN3g%4hB4d@S7f5UxUK38=0F-L)SLgvgqmdAEXxx?hg6zISx zsj%;U;>MLb3vS%rH(~SDfd25s{Xa#HI>~m=30!XZV9V>D><=a}xTNk?yS3wm=F8K! zqNN?aemcxLKlQ12_rZ07^(%s>e*NusGKf9n)Y_el?kNm5q6a)1yO_5hsSaN<> zdR?p{mbXN>V>Etu1b2+!>w0}K(==tZ5VOtKqecCrE_K*ROU5I((W7cqcDX*26xlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRDnJ0;1pB(q{m~mZ3f!~r zvaHcuTJ*@W!PwZ?Z~?CegJD95lkTJIOu`2ue0_b>=h^Om!}jLOTX)<0cE0!4XfI+p zz+!y+Ty@iPmUUthOihdSPWUnBh|s*!KnG^|B}XdPYJOYte|2clUEa_iVPC$eP2kKp zx1EWHX|n^v3I;ZnvT#2^g*8)*=9}m}-Z`b>f=|@_o8ddYRQ}4G8t;DR^V_R=MXKq+ z`H{YxZR%z-eh+%KRY+Rkz>Fy}#|!t=T5#Msz0X89*0#~(`{9Z2Q;%QbUYEtb>iexb zxA&?zCfli}zP-C9(?p7SL+h4Jhc0?S_(t+=#&_npn*aym@-7#PQzTLQ2sj; zZrs+1alXH~`!j1}_)LeNjQ;E7KRg%S#I2kC+ClTdGv<(>YyHQTt0+cA{3<#VQ=n#S zpSf0l&ITRrts6HMZphfF@i{wJ&|*@SkFU6Tz1qj$fAxlq%ts6+?pGl9uoXg%=Y`eFHYVa4O6`H zgG4zLf}FY=L?)_fDRK&Ubto>pDH?cC(AAYi`ow|`=Dxm$9??J@o-VE%>`xRI^))Z< z=sNZLVfEtdYkR&wJNs|zb-U+lKF{5Jp8Ws^&omF?K+^`El}>Vk51Nl3Iri|0o_w47Ff}1uP5+r<0Q&GX&@|B&gRvyUfrq_s7g?MuzAqilU4Q zCNd}pr*^n7WLPt-IUm;L$`E0|Ad=>N#FF8LE`xz*c$x>phV2Xo&IxdDV&LFmFbM2u z)ns6)W=J@ptX#p+GLu2X?NhkTN9}b2&$SpBDrRo7*{Ndb+8E8DTgV(b`r5dc+8glCUr$_dnaY|NoJ_taQXPX=j9%$m2kv!akQ-J)e!1Ds?(d(mbkq>3_te&X5A~u=%o42|^M9G0i-x(M_?an`VMT3L6A*1=>`SSno?f<$jP-SRH z^PE)3z!2x6q8D;%v;A=n1_qY}janNVrN11M&^f>+bCC7ULGC{ZW-U%CM-Dj&IB}&k z$P^`Lu4!`8Xgj+>Rx3gOii51lfxwKm$pw6RheCJo*%t8sO5~V#P-9OcCyV0=4&g+_ zTOEu^T@lKC9O5%ue<&XGU=iw8Q8?Kl5~$=o(bU5*s4GMv)I;`@Z4r}YdyLzziPk3= zjGF$m?Qu7p(zq$m_6pBd=bbCerCQt;abHL&F`U&ewqW*!qAgOkJ!T7^Us#>Nf2-fl z`MAM>7ZU8oM{*4GjvaQ|XraS7Ir;QPr8PXOk4bF^Tf@A&^K0_?jpZytjjjhc%~;Bv z6cXheJtBM}{BC%xP>@kE5xm7|&dJ;oct~Ao@(S-QYP$q~9+5~gGHj3V&{4i7)Gw?r zP~G8t#9T$F)7eOU=L9CtjY~o<30-o#lozD@QfK9C6Avln$tQ26WN%`(oT8(keWLZr z+$V>h7(bDIqWCGAYi^Q5;gTQ0k2Hc#WqCO= zyKr03`oQ)T!X~A&EYCKJd3rBhyJ+fVsSNRq@0sggl5}CV>u2~Zlf2w5c|63x-0<~`=QH_d=7&aTZPTg|op_3C zs@GJtsnS~dAuCrcTXk<0cj)KP(;@vU|h34*NSV30$x-{_&n;3f#$(n=5n_vw2syl{T6lQQLU-W=)ya z?iqh&cX!*aTDj2D+1SfCd~?v}DQWiXk7pGAm{a1%`CMc9^v`u&_e9=nKGKw4X5zEc zFf}H7)wJo;B365>4qWa2dav2Kx69`)+v~bJ@^>Sj<8d$b7O*#OV)PChojwv-ql8uN!|)=CPQ^DvxuI z^-<}Xv z5v8+j#kL)(o|~RTEsK1&ZBJfnlx5`7h|s9m&2DSwu2sFZd+qM!g3EXMP4-(o?^^od z4Ij6i+_rMN2m;Zq7UV+M{2lz0^;SI4^MihVkQV!lyNlWX=tqec3%-Jbh*eVsdd^Xx-!SKMCz&g@<0yY@Tt&zQ{DoEK?aeBtm3 z=LdmLFWPg@pK6eOe@&ggvwvgy*5}Il$@&w+*IwVSeQEis?}_il?Y`L+&3|n7*v9;x z(Y?s{Gv)`jpV)rd|8V}i_}2T*^~(QK{#X6K$gsRYl`);Uv(d3Jn(6nCsv5=pefCzj zQ@?Gx`PQ*#!A?g}$Nr|ZO-~Q5Rm?c?X2M#<@6TtPn|LmhuQj0V#kC9UiO&+d57+Ui zx3;&2x7qgEsi(EhEH7u@{XcI%w?CTui2HH1_ze9Mu?3Y2&mH>Gx?F6fo{)~! zGzXs!KZ_|J90jyii1ny`5-wNm5k5zqFn$+FyJQ&@SM>#-=Sc3T+R8k-$m+q818`mcT) zK7C!?UbQOU?8dl*ru+QIBlIKhZ%zEwHdoqCw6klS$ZhfI zqV+d4?o>RLZqGlpf99PjTUM?5sLVksqy}NXGYvT1Ec^BVFSMT{| z^5*L8=sn;6+MV2YJCrfh_iEbJ)Zd=JH-EQZ*SYHDk7>ViW7qoS7QQ{se2MulyE5Ol z>pQPpmAzye64ZZ9`?WjYaru4!=Dsi2FOa zA^TGo6M z@Ezf^)?3BrzAAZT^KbHH|Kq#o?4Gr5XH53acU610R;PV`DLv2p+}$sGD?f_;zjk$= zrS09lpR4k}AN~IIzS!NmBK5!LPVc^1uKsTA9{)Y@UmV^#-gLg(e$_tu-<=!p@6=}< zC|~gT;vM(zY^}}b|4sbb&+p9IKePXI8*kg|c@}n-mXGX<{=WRP-1&UUd9``s{}%l_ zy-r+AzwXD?*VoTooN;mC^iR_#@6WAS`uEj=*OKdRA3JnRZr{lYW5c*FVZYxVEWcAO z`+o6#e*Y&m3iTTQGk$LT8hl~-@5z#rC;w+*p7Hrlva#-M1_lO&WRDZxerz4VdNOeKr2ykRf$W}S3& zwB6M9P2XS=*EI2Jz5OlOvzCO({%U@F_x-*--|fEt{`YRm)@iFn_PxKq?b%XzvO&!@&WM$R>sDgtsczpwP%cuj;_9wwRN6!a$eQE z_Mla(cjjKtF7$dZ$$?d3`qu4>E3cgH?Cjjg z=aJ6S6?cHAK%?M&$~=)=_ndRxPt%>UWf@Wzr1Z>Wj);tu)Sc>;Z#2_~BgNm}UwK{a zwJ5z^u5EK46{gpzY|FFAu4LT(+99nm$7-%zu8Gvuq>V33XZtR?m=XUw=7MABo3#nc z-^Ve}Oa88#5cbAaV$0$fz4Em|D{BJ0WVc7@=Fce2(^#r=LDJ%UaYOZ`_|22#t<-mF znfY7p6=l3}>z0(}^wV2gTU+HPPoDg}Ej0VUt|GQ`pXVIqPhr?2a3HktQ^TAL_Sv&% zZ(O=`X+d?hwW+P`Upukxi+S7i*Mv#5neiN6w>9bi#uK>@*a|MGme1Z2x4zu(({sD< zlWT6ovucQN&HZY4^985Dqg$WN6W8`?EUkO@?%ljO%zL^%Rx^b2pWE2h^yeP~0|SGn LtDnm{r-UW|02@bL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..5090082386b290c5de156b22bf9c9752ba22c639 GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfmtatB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBv2r%BG%|E_wRAEtG%z%D zHFh+%bhI>bGjTIEcQi6FF@foI$xklLP0cHT=}kfCb;PL`loUY0Vdauqlv$RV;#QQO zs{r=0RVHq?nBz1Lsy79EaktaqG+!!wjiJk>l^rt&S0GDlD8N5wt-;vC+p*Ok~O1OOCQk zihZqK>%2w3c!*4TXw{tW?ThB`wA<%uVX zx8MHD7Fyl;l%?SMw|oY(*=J4WaMg0NFzIhldl?=ecdMb!A@t4OT8;>-x%cGw+K>0T z9Tw(lwGiu(wZ6!*ovYmAoWaZV3!J^XMT!dIH{_Vj{#3Qs{a`}D%DDB?4mt|bv$cPS z{^GQpafkgC_m-|BX74TH%`BGQ%}Wmnt+kQh;Sq=pQ=1jFoAu{H<7a2sm}jMby8paU zb+Tvs@y92RCmHUH(Yx)w_~O=Y6D#h;yO?YZJD5}Y;?BlvOLJ`#iYixoKmNF5@%{Jv z{g(!E%1`hIb(EX;RC^p>F?^>YR=?v9!>g~uQy%zP1)~4 z3z>V)-ao@ur$*{_+vGp|&%9`@=?*F5{@+goKE(@!Yly6z<(KX>8!-t-k z?w69L$Gvn~xZwHp7u}P*bC<+E+&deZ_;1k1cvJZ_oeo%Qr`qBSUp|+ KT-G@yGywok1t|jn literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..112011bc4cf930613ade18ec3f72a1ffe646f004 GIT binary patch literal 1983 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|b~3XxFgJ8^GH^67 zG;}q#v@mqEFm^F8GIch0ba63<>2=9ZF3nBND}m`vLFjeHsTY(KK*3?}@)7>i>=ed5)tSHt^Ve11eI8ra$KDcLY2A6zJWY|@4K zlbAm?HVUuMYThyBzV(4stF&(1zu*4iMTV00K_Q2HXMNZImFpS2y}Ta0c)=kgB*ZfL zWQxPJKNWX6{>{6mbWi%g#*KzE=FV+>^eD;0+uL~Bv}vm<{s{e5-qk))=E-h0a}yJm zy8ZTFem;3}#KPRX+|u6uzoxnQ_ue?y9l>nXRaFNP3>q$Gu(TgeoTB2XtD{pgXYSm+ zhff=tu(eh*-nf3<{Soh^$&(Y))7>2_LsQn?O4?Ynr03Vy4|gOFtXZSe(c9bF+RCbG zXLoP+)~%r}58P5C#W)3_ z>3!1M%UhQ3cz@|?0S=ZM*?wQDO0@6pz99WV>KYq6yQ7G!g`M5B7`^ZfJ9ko(9uL^q*dF}(BeQJTG8P{`&gyK2o5hONo^R~s zGvx#WNzkAnq?wntMNNWkVb8_d? z4cm|3UEiqIP&M;&*(>ukix)F5TC^x3HI3+xyjr4<9_r%Dx%TKQBIM&isyu zfH!eZZoGcV5Vdm35w*O@0<5g830tEUu2{hl6&2-ESy?&#?c2Ax5lOE)*4RuaC|vQ@ zwN15~PdVz$+m{BbqhDXUc5T6?O_M}YAHRC_>gls*&$L zSa2Vf_?gE0`@_0*>n<=9R8(jrN`6c}Yn+~vQe$sx+p89N#``$)#hC2@#+PpXnAqEC zYsRxqQd9LvS$VnZCnZBeLq<_iQTw2vphtoqdV8KqUg@@$Q{b;{YZ9LErZnjO;@{dQ z#l^)LXWJb)dQ{V5=8DeFPVEh|@ldsK31{>+(?ek!S{yzC**V-n)$ ztW(QU;!oE<)R42FE_LnNwOoE$b}Zk`)YYGxCh}Rk227sLpgQ04`-Ag01P)B(-ZEXq zM4neMwA%CEV?(afodMzD;zwQ{@j2XT6OxqjOIbO;;=~74KJir_w(r;ZlmA=w0K<%} VI|BZ?9&`s)sh+NWF6*2Ung9*{5eEPO literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..34d6635ada86fe79e0b9cc6763c994c85194973a GIT binary patch literal 1772 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzHa0S_G%>PpGO%2=9ZF3nBND}m`vLFl!_sTY(KK*3?G!Lpb1-Dzwaq88#Q?StoMJ!T8!-Rrd+(1llngpd!I|W3-Pt8lQ zRVq@lw+nmLJ%xdRIlUepn#%=A&U_EkH_nM3nh zLN~O(@LVX@6j#LsfOd!f~JmyTD^{@MbqO%PK7OOcUj`IA>zv2YxAqqtu~)I zk+|day|XW>9wdJ|x3~QH zDTv-?wa`<4VWym}87_CYK(C;wLxwS0Rh&?3%T>QP5;c zvVlcI+yU7GQk(w#7oPGY;Q0neOV4*AXKcSz&0|}5=f#VRMwu;w<1Sv!qIV%{J!E7Gm8G ziA{rn!i=6JALO81=QK5_OhjEi1X$y`|PX79RCdgF;J zCUvKud#J8@vM74l%7pn!>BpEIgeFeD$d#e*>i2H>E{%I>D^jYAk2{steJ{>hA^tte zT~OW2aIMRseCx(V2@Y2{t$!Ns*b}Iw`hl^na)o)W#!^pjC*_Q~6(L8xQXiQAzEgJZ zrH@_Z#N?~)Ed{MNy?karUEvwzyjRdQz&#`~G9$izb8F+?bN}vq-+ei(c6n6H56f*Y zv%5mNDpo9-I>)Tzx1zfC<(&p5MVV@Qo_EbZrxwQK1%Nx`0X%>A+ z_7=}Qx%;zB8Rw5R1wDR&|MqqKnsrRNM$Y-FboeRJ&3EQyynSjdIY0W@np=x|r=}KK zRu?)&N(XM^+PXO*o4dDS`)-r3-EC4IcE!c)c^2|p@Wnoj=Nm4hnPjeAb0(1Ml%;HQ z|GmE(Uh~af`E+WY>oWthdC6zbo_%(BdG~}j?ykWdjg5_5l~y;m|0=H7w&~%LjY4J#^CAd K=d#Wzp$P!dJ-a#p literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..7334cb6f067c55396cd6c0ef7d576ca9c7cf6b1e GIT binary patch literal 3497 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∈zT<^n zmnD;3Tx`~wcKI3{DrjJgYD_+GjCtC@&h;mpAG~Q}ZhK&GOydAETcfca?bh4% zxi3ykF|lL3#bDlbyiah&(eDNgA(jaino-&7^B<%gfBx)mKF@rX0@ov5H5O@|-+%6} zKXLp1efe)z?+;zrd+g-1zK^0CnKV{kT2kn3!`So7^hJo#qZ;Si(^+pu3BOADC$4Z{ z1HaW13%;n=LBV@YX*1uMv0d1A_1)9SD-Wg^Rqlv+b-?e>vJG3W9sTyMI62_*&-Fi@ z%tGes@ui3g${gRgIre4J`wNTHKbOTWU%4RNLPu%o|5Z^1jZQOtmff)X|Mgr;&g-w@ z=Bq6?g{n5E7KjDd*xOWPZmPRJ_3D+qhR@cwt(+F9eZQjo{FXO+cTa21pRhARmG53m zcC68(H$D#;CKzt|Ww}VDuUK7isuyR1o_*cLDcfHi?=`$uWiK6arr_1zg?854A3U?! z*fjanu58tHiK)9U-Q&AG``^o(rP*I^dhPD)(yZQgZP$*=bEW?;6uN!*wcAFQqcy(` z7yec=JCGB;>xS`<2Vc!szf7pibe$UA8u3HRR-F66yru7zgUe2Lc0}7>7vNskBp=Hq)$ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..c6e4917bc740476500d303694406dbe27fc1d745 GIT binary patch literal 3741 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..5eaae02615746b9007dd8ab5c515c7d17a4426b2 GIT binary patch literal 1502 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfmtatB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBv2rnVc5!kwG;uO8G&D4H zHFh*MFm`h>Gct5Bc5}8ca)#-3$xklLP0cHT=}kfCHN~kHloUY0Vdauqlv$RV;#QQO zs{r=0RVHq?7~wPzsy79)BXzGZ#V+``0gnv2KmFS^{ks0t8AS#kntq(%bM`CK$>IA=C8@MW0=f4Bd6Ic3e)&yUSTD!*hLl{$K1g(+K7se)be5;ysi3wb>riE~)$ELhR^ zUzPj+7X3qBiTdl}QW>o#JP}BD?7k(HaBCO8Z~2J_iY8I7CmxY1kj#1|t+(XFPy2_< zV@tmOUjKgvhb5D3*T&WdAsV}7UhF7R(B(Ly=kTpi;jduF(}fqgjGi)RT-zX-7I{rw z=gi4%PhR@Fl`mkH{I|K-(5U8b(<8AJk{U@KeZTwN4$I!)+$zDgs^N#-m4|u`GW=8H z8IEvyxUyVc6}tN0&N97+zkYl?d}%$?rGI;zntJyCmp>>P(Zg~?;^NT*d@OFS9TiFi zG;OaniZC9X&Tun&K_63VlwHWlgMa?iq?MO{-=BB3c+b2|AM$@4*FW2n_Ay=InQ9OZ z+dqfo_v+`01j3{kK89=jX5O-b(RCw(&XW1|^?b*!-MTe>#y^|z+tI(LMd$V3w>K&%EHun%?%G+q>%`~B&-vLFRJA?+?~rsS{=y|?VS`ik k2bxPZTs``NLE!+yn+a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..ca4db23989ffbae112bf9905d3ab7aa236f0cb8a GIT binary patch literal 3484 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 b8^Z@>$({RS0uM1TFfe$!`njxgN@xNAjVE~5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..135a41287bc46fdbc93563eefd1c715433dbf621 GIT binary patch literal 3726 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 W9X*R(|L=|iRbHO1elF{r5}E+qL(YW& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..d708edc2a9b19a78489cf0e3bed6cc69ac15a4eb GIT binary patch literal 1626 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|a2=9ZF3nBND}m`vLFhHbsTY(KK*3?71vFV@SoVGvVGD!j2O2=E`R7p1nkDm8-}_1tk{!wd(R6)3v^a zc!*UAp05(v6LNI6i13mG{w9qT3Q8*Jto~i%`dm>y2fAApnFge0?lSCu_wI-P4Bo?= zZoipyqrxcx^NbD?rQ2pksO`lRxtJ6YXzLXogml9#!v>N_q0;r*!$``^WnCEMKwqlh~4|KAod4OQNn={Vw{J zxMz=b1MG_;Hvhpk!PnOuz%>sW^{!|M_1z0vNQ*gKva`u<|jy-pCoeG(o*>7&tG5Roj z%{iSJ#W&N}XQkxK`js=^#k~6b&ST9}gu@&)9Fr7;!!IX*IV4JFE7j+y&( z?Va_c<@bE!4Sl686{UwQPA%zRyOXoq+t{azS-K=U`uRG$`pFkkx3Ww=wO3BMVE)O6 z=Z`=4T$&e}6QTOUZ|U~Zjs1*M9R1$d9*MiZ>10HQ)OVjki6-Me3Xk35I^v=`zDHiY zB)`U|>vL7%$4`Yn7app;wVlIAab9fIr+3rmSUl6yU0?M1W9JK-=d+n^a6H-N;dz|T ztbYBPUY~hicWh>^#bcO%` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..6ffb0328010dc9a1d7026b904309d8eb87a80591 GIT binary patch literal 1692 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e83d4ed6615e8065f311830410495079f8dfa9 GIT binary patch literal 3494 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..e49c37ca41baaec9d16fd9398b257637b0599855 GIT binary patch literal 1444 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..52e9bb855a0d3d98a77926d094a9d4d62bd11cb9 GIT binary patch literal 1184 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ea116cd56f730522913775d4251e3ed0397a40 GIT binary patch literal 1447 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX6)kT=w{|YUt`>V&Z0O;A~}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^v}-o*@GRleDLcV@SoVHxaRZha3dnO>#?Kbb|KC+8)2mziQ*2FVg0w-8gkS4lP3QhZJxl%9YlY5!Ryoc1x2`_zwpo37_SPs}oAbpX zDaSijXlS0yj&SF(Yd-wIXpV8qgTi3_$uitE{A z_89*-|3?pReqQ*_wNhfYhWPOXk0+EW9y$6av~#oL$CIMFW~}hJK2dhzUh6i6y*69K z9lQ@-a@OsdGB@AV!#6M|MTkjk#r0j1wz(lOs+D;@(>PvmEEHRGO~kRAbHS&!6-@3A za)T9xrkFYEnobUtcDm1c$@jw#mT%8pcbNDK8cB+WZnvENWW&jpkO;w3LdUEXt-Ys( z?{Ns`b=@I#d;hP_>8?H8ffrp*nDnHk&VQe{X|7G~q8Cab%hET-9LULal>W3`wC0g@E5kqcE9~{& foeXo>$0ETnQ+4y*J#~CqprX^$)z4*}Q$iB}Y^@W* literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e8737e29357599150887f1a6a506021d875f31 GIT binary patch literal 3199 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..550e4249a0d208f4e3d9e1b615d2c4a15577476b GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g.png new file mode 100644 index 0000000000000000000000000000000000000000..05f62dc521a9916a6bb7d67bfe63e3451fcac1f7 GIT binary patch literal 3846 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb62093db768538dfcdf631adf9dd7a62e8e115 GIT binary patch literal 3644 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_g_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..02e605995094b83e325b2d1813a851b0dec7ffa1 GIT binary patch literal 3905 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 E0F{_V)Bpeg literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_gsm.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..84ae508b22e680d3d93388cf6051489fdba43149 GIT binary patch literal 1394 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 Vv}KvXMg|5322WQ%mvv4FO#oSId3OK+ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..1efc1e64b07f9ce94cff9c839b8266fe35b81597 GIT binary patch literal 1428 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW^Cr>V(jE%WZ`OV zXy|I<=w@MHVQ%8+}9J=+-`BgX&zK>3U0SJF!Zz3+{9x@Qvx_ZU_R?ZV_8ypX_9yC9{x zq-mS5N{)khL%tou$IC%2uRX*It&XmH>k>Gt=#sGIZBCo}cdgm=S`t)q6fQQtZap&1 z^u~_1oNteR|FkkPpE$$o&V-LUT{Jf8RLpz1uIQ-koher;Y~m{BP5)n3W;Hh~P~_*l zq`y3ZOQ%h&X?Z=@MdzV6i_mrag>$(Y!Px`%>hMWvjX` zn)EH?GhUQGi^F(^zE}O^Eh44DODE2CI(t^pG*={2prwuJNK9v**=+qkb00`gdY;S=X^RRiVywlW8I@+Ag|X*C)1xE-lR2V8*&8 zU_CF7@>`uXe6_babkrp#g?I;M-*W8sbf^qoa=^NyOtoFE=@d)Xt+3)vr(XSJU37;z z@%Et`4hyfW;S=1HX**>~mihGk8tdL}++ZYF)SL7A&HYJdvz0XiTtu19#=KVAoimGL zs%o^#@1GKC)+L$3q1_W!OWnRDyG4ObS2Hh4D%{gdW%=5$$+C-ruPyy*GBGFNW8SF~ zvjbO0`)5Y4zdrxQ{rBJRr#|mH{+NB<>DstY^^fgS#W&?{m1ksQC<{5F6dt&U5mZik My85}Sb4q9e0Qt`ii2wiq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..1238d36c40f11e04663928a1835dead58ec3d056 GIT binary patch literal 3188 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..128e994d5b24f490d9646c0e2c1b28b180a403b9 GIT binary patch literal 3025 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 JtaD0e0szPXoUs4^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..d737b59d12f7a85e95e5651a83e306035babd2cf GIT binary patch literal 1180 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|H*qs@G%>Vvb#yi` zG;}qxbTx6ba4|M9b8|H|F)(w3>2=9ZF3nBND}m`vLFjeFsTY(KK*3?<@#In$oN<8ULkC75b8^^^Be^ycasdvb{>zbKdjxwWZgN z=iZL%US#p|#90Qh3G9bDB4e)~R$w@OJ&cu$K`bfV*E?8#^#O&mOO#418i{_kpoMB_ZW|^tWUM6bx9gVyvVy%;6v%J#RIpXEQ zlC?X{i^YU)>mAj6v~TXzA4R;&JG>k3KXARJ`uzW+%dHmL3=syIyEPvLT4%pi(#zD? zz%uQCPy~~yfe2R%k#J;a02@J2AOQsymWOoFW7oM(u JF6*2UngF=#k2nAT literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..596d4c767d3353bd10cf2da1dcb70565bfa95181 GIT binary patch literal 3479 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..10959856c7445bad8bc2a554992d88b94df3232e GIT binary patch literal 1433 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX5?mSVrk}RWZ`OV zXy|HU;bLg%WbA6_Y;Iy}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z3?34SUAJuQD4x zX5}1mFx&kzZ(rZpUPj>qqSE!OE)A_o`xp6#N?hw!lJ0R^yz~9SH zbDdX5(P@u+55I~DFf%!DykHLM*^xcPwUhnp-iTB0>h}M?>Cxf$t#V<6HOrlhZ<&IN z^k4LUw04$xKOtL|Gx5XR-t_Eu#hV!2v^LLN=2qN&Ge+!U^ntxpR;>{0E?a9!fsd4Jt@t;-gA z8_ZmFJlFGbyWR4P5iNb^6K22@v1;iO)7*_mRaWfL41A#LcKhdn#SW=VM{|=cB2&Nq z=?HwcU_)-fn&p96+1koZW^3CgU$Q-Wl=J9TTg6Z{r&Q(J7QeTre7@zulXXH+>Y0@I zP1n0FC#J6P`u5q-t1MudZ-}l_>eU<9)@@|1yfNv~uBC-jQ zP3-+LxoYFAlGlaXu4aAp`+GO<`%9~G3z>T_V%~8d|KIz6%G{G?SNE|FMg{vd$@?2>@#w6XXB@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..fb62ca99f6a8b52fdf705b87a8833ad97c91c8d7 GIT binary patch literal 3192 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..edc3d67d6f15bc518e27577be6d61928c68c0354 GIT binary patch literal 3025 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 L`njxgN@xNAM-QHN literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..7da7832cde779d9e3ed45052ab4f852750f5112d GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|b9FH{G<7j^b#yi` zG;}qxaCLEZGdFQ`voJPxHgPe6>2=9ZF3nBND}m`vLFhHdsTY(KK*3?I!WIe8xP&M=6(6gj*#Pv*2J#aoWyE)t@qxErp2x+ zyDQCkD~#@xar$)}&pJH+)Wen?EPv)R-FxP2W!15XNrAgqJNv$(+}2Go?K^G+oDka7 zqNC`2f{Q;i^zN5knX}q+qpz2W@6BDI_@DP^o71#>8&(O1BH_~6E9dSL0+kh>u6{1- HoD!Mr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*hs(cIF~(8$o&6x?nx!Kqi@PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-j4BYm=FU4W0t3jV@SoVD*}B@eizm4heq{ z*3&;RL4SwWeEkbd#+?)MuQeN}P2cU!IP2n(O-rYSO;cXGHObTS$e~RZ54xmduWSB# zm|Z@$KC!do7D^ z!TZ_o`xCEh%V?B;w_$ytgRI51##(N%uHGx=uRfjspBq*zJA2vBRZ5<#3T3qO#a#Q^0#xUa*ycdnJ0 zQHjEa@r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX**x1?4#o5`& z(9qS`(cIY3!qL>l#KgeN)Y91qrq?AuximL5uLPzy1+Le{0Hql}l<-W?5>A zTTydh0$X?W1!p*1srNAA0#yke}62yW98g*7r@)TAK3j(yG%;-)i5#*r-&m z5I%JaAQ3gSiQha5et>9E#cs7xr}-jntJ<}jbx(7$L?{ipbULJ17k WDRZp)1lpE@iW*N>KbLh*2~7ZK9JM_F literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_no.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3g_no.png new file mode 100755 index 0000000000000000000000000000000000000000..5e6b81797af4ca4a5ff82368cfdd4b0cb513947e GIT binary patch literal 1277 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d6f503168257e5f11997970ed153a5ccbd9408 GIT binary patch literal 3328 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 TM_HeNfq}u()z4*}Q$iB}E6_RE literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..3421cfa75e0fdf5affba4bb513fe50a2267566eb GIT binary patch literal 3382 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 Zk7cHloU^!%85kHCJYD@<);T3K0RWL`R^0#q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a950825e78ee1d19dd33d9e0dd7fb056822dac GIT binary patch literal 3966 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 QU|?YIboFyt=akR{06n;T3;+NC literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2752742d5034eb7280c448b1a51d6ecf1bedfd GIT binary patch literal 3634 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 E0DeOQ(*OVf literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_only_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ab01b5998df30a445a431739d38b2c577a0eb0 GIT binary patch literal 4040 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_1x_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..633e933d328fea44d70d5578bddd0821b464dee0 GIT binary patch literal 3375 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 Uf0Nq6z`(%Z>FVdQ&MBb@0BcZVFaQ7m literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..29d6f9d87807383333430401dc8309846f46d7d0 GIT binary patch literal 1555 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 BQXT*R literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..7f37ccfd2d1a7ae105fcd2387af2c5e5ddca780c GIT binary patch literal 1794 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_2g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..77bf21f65f329bf22ff1302d975c10597b3255f5 GIT binary patch literal 2125 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 RZwjcq_H^}gS?83{1OS9IIM@IH literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..df37519963f44271c6abd01b0bbb55bba0935e39 GIT binary patch literal 3336 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default.png new file mode 100644 index 0000000000000000000000000000000000000000..a203298dd2773b00b8032ca8a2fc90e5f2610701 GIT binary patch literal 3993 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 a%+R)Y(q8dIt!4%W1_n=8KbLh*2~7ZpSN$je literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_default_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..43fe7197fd622c43f272248e36aa77035ece7a64 GIT binary patch literal 4062 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 bKQn`uvC0>tWlo6<3=9mOu6{1-oD!M<6Ba>k literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_3g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..69bc10346f26378e3ffd7fc530323fdae3be9656 GIT binary patch literal 3397 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 Te}Mo40|SGntDnm{r-UW|k$+g@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..a3812250bd4747fe1e3730728579fddeb7a44d7f GIT binary patch literal 1493 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..468c0f768638df1d53cdd2fca3159d4d2b964f5b GIT binary patch literal 1781 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|Hg+*HbuxEyGH^67 zG;}p~GBI;b2hXzbhI>t>2=9ZF3nBND}m`vLFjeHsTY(KK*3?fvg~w7qQarTxst8W?U=@1!E6Pztiw)|ZAJJ~g>v`!s2IF@0)X8(S9&ZY)6b#=}j7PriT0s%!X z1Nr;B*;!eat~Ci>HWcBKtXE2@9E5XO*tlf zGN}_>76%^PJxk($V8k=ulP5eMr|35@3%9qmJ-Kzx`Y?CjCWikFZy2AsNG$Qb`(5tr zPVIBj&xNcH6qf2c@Om3uQ~Ulq`ph$7>lw`@Sq~OGd-5{Wl;yhr=Dp5uJhF?6jYV5z z_Q+WpH{bPF2+6Z{_-DQ{O4>T_*SbM-f^Wmx#~(_X*K&O7D)(|#mAqO^0On5=48xpGp1e$F>*9*d-&mp&yCx#|jBf(>4N zn#N4q=UQv>Uu@Z{$sBBz!L_2l`+Lsvh*LZ<-H)$MU)px!@$<}$KentorS-e{nn-HG z`hLbMXO9Q1+`3+7yTQwdU)SGi?pfd1c<1j9Vt;PZr;K zB~)_W)xxdEr#EKaH7s}%oT|L?%!$ujZ-gYYCoK$qG9@YJLtJyR{F0%2)lHR901=g<EWmQi4!{F7XkD5Of)l9V5Q&Tx>>YAfB`c&d`GcH+e z-r~k-pnkR7zQ$O6${eG*;F-1Qkv)HX9Tfx&j_IY$ynU?GZS%Ty>zJynEO+g@U>*Eo ztzl(4>z%pDI{&3U{{9=JBj%ib^=9;QvuD+uikgwrxVxrxPw72dIipaa)KIioH+9;C z!w((wBi7XY+?<_T%X_fqOWZ=k^i^pe7k95a=@*c+CnW09io0w3-~UgoXOUpoD^@e( TZ2il5po+-T)z4*}Q$iB}$C$hn literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..7332ddf73a64337466bcbce4975d704adad16a24 GIT binary patch literal 3511 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 DP{DwL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..dcce91261c4a350e05684972d9a25d0251dae11a GIT binary patch literal 1874 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_default_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..03ff3b65e186ce808332fbd0f79075b25bd6a9cf GIT binary patch literal 3693 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e.png new file mode 100755 index 0000000000000000000000000000000000000000..7d5bbfd8c5cde0772b0e357c49dcd97728279e14 GIT binary patch literal 1890 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzHE}gJwJ2=9ZF3nBND}m`vLFhHasTY(KK*3?gE7zj#ye=-+E2RfHLb;l{1X)EL??!Ox%_@87)MBQmrPL)aVlN%IL2Kp_mA&Q` zsWNKvCTg`GW=x+seWvmAd)4nGk3Ii<(3$vzszoHKJKRW%Fq&y%YHG^#Pww>j^XnJA z4%uNba|Xkl88aCAk3Wu|KW|>vv}x1k+`W5uzF@}YsI_c?p)RQ%S_dXh6jTt9>Seoi z`?jfux>IFkrFGbc>UqyypE+pN1~OY%S$X|r)6~@5uy^m;Lm#+WTU*!jvK>~R7?|Wc zCy;%{?AhF$oSYl>>{(+Z)%))3Szqp^*>2Aym^>CtndKJ3ux$Bq=j3E%9X-9Gty{O| zU9lBz`qOxIwNijmvX^Wpf63*qU%&cYx~On|?qLDb7AA8$J3bX@b#?VQhaY|@EiFB2 zZesH1((A7uKZR);No=y;?gWA|hdf#g3adBlR~uclb7Mfx!RU;%E30%PyYxxKSz6@EV)2s)4lo=!di3C{S6VW1 za#`VFVJ#<5o?N+S&mM7ebMt=_+KZeYal6PQczSX!P-g5t%4BP6du!1mrR7(%{&om` zZabuv>c{6ZtNYO`{>L-fT9Yh~XNF$db?sW%fo1%;xw%qPgw(q}MNgTb_o?dBhEv^6 z_goLL&S>5otf>EInzu>pzQ|t^&4KhIpxzPPHDYW zQdjrxyzUjNx~i&Mz3Yzj#6IQ@)2Xkmt!0nV5Z8aJCV2AT!i9?a87-`=9tF7Btf>68 zX3d)U>FMcKtCA|~r#4M(3QV#{a^19f^WnI-IHMOYPk8q**nR#u>|AlA$b!di`G2i5k%i1<+`OkcH*DMXO|&+4Wr*6l z&!rXBUtD#L96frJ$*W7(+WNO@Ylze}2ZzHIjA|Jj7daxPZt=@h*ioKweRiki8xcFh zJuFkMU9o-ge2Jz*+SIO|Zx;nkCm;OmXMf70X2)Xdi}&}fX_zd0xcGkKjEIyQozI*) gI1U__sb`g7@ZNHA*V(C@C7@c*)78&qol`;+01zSMt^fc4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..c6657fb73fc06547bfdce34e2e7314a0576edcde GIT binary patch literal 1632 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzadWaXGca>=GO%

2=9ZF3nBND}m`vf$KFlz^NCM6hOgY<&s*IS(cjO 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..76fd9895601bf646508e6b5b4f3e08c02532ce7b GIT binary patch literal 3457 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd8a689347fa9a4fe7292fd4164220da1bddf22 GIT binary patch literal 1412 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@KUDWaQ{-WZ`OV zXy|HU;b`GxX=ZF_X5#E*>g;L>)9aF-T$-DjR|3}9J=+-`BkX&zK>3U0T!;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z>Kjs)P#Y7@rS32V@SoVHxX}rnH&Z7nsyilZef1m@bA~@#mrU$+5%bv+6-1Z z_*%H${dnrH%V_=Jii_){;`4jF)n?xHtBH7EIL`(^;P+} zjYeUJN%_xq`@^$1%VYcOj&~N=J$+GdM&*6_ueC-;jn7QE@?hV$K+CF?V!xlh{aW)QN4D>qOsAp1k8=Ra33_ z`7MQU>e-@<%WkgMb=kz*$MJgNBDe02mfbdsZTq5IduFlinFaO>zw`MqMN<`T(u4^HqOx;a(lvr^*nTT^CSXqtVYv9rfHsN4C?$`ogh zm^JaCCSeA0@oFKaYj4_F?ta|yaEI%W3{4ZOC9b(=QfeeZQa;>bsZiQ$W^!grZi-m# ztqvXG3qnh#O}I8?(a|FX_gX9px^jNM+I(huQHk)C7~@D&#lHeeUZ40O@!VM6C)ejh zYD`G&Y-3N}>iK;+J{eONCar#af0C}+?1)DlS}n77+kX{4uQI3i#CFb|ry|mRAC*+S zy(v?8pKr$8nM(^hZ(2D>cWv`Mw&~->8QZqa%IWrr+YHf^65fBucq x+P#Wt~$(69D-S6kh-U literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb5d5033db3388085dce97b09529197be2fbff9 GIT binary patch literal 3166 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a662182c392e0fa96f5de74b193fc05ec1940c GIT binary patch literal 3455 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..df1395d598235f35a40d0dae97ad07f2032ecadd GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX6WkbW@ch+WZ`OV zXy|HUVPs}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z?~p@PYeSC<8MzF$B>F!Zz6L24mk+Cl{zv*ql$S4)imTTyGtfTGNRLO$pu&tv&U5`&UgKQh z&L!v8o-|^Nb<7gX^fip~;dtKL!F>G0w$pa6T`YHTW-Xn$#%jVo{!6|oHEo}lc25yA zRGeKH_%&Bg)ig$>_?)lC`GAdAKjxoI>l4qq6VS4L=kMVEk7l-P72Ij27%h1^$KHBz z%5K+NE!o0a#+yy_45F(uoDXh08DVCZcKKS^0G2B?WJR*9<${tYB=;`X`vd$@?2>^LO1xf$_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..36f7b33758d31c4e2bca403fe9a0ad1726fe3a5e GIT binary patch literal 3171 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 L^>bP0l+XkKarx-6 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..07d5e2eb110d8634002690ba44bfd1c4fdfbe809 GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..51ed57e54f94e9cccf00345c5d2f61087009eaad GIT binary patch literal 1152 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|GjKL{G_o*ub#yi` zG;}p`GBR_ua5OhGG&6E`GI276>2=9ZF3nBND}m`vLFhHXsTY(KK*3?C=o}FTWNUcC@K9*(^dNGf*n|&XRLMd&MWU?6_)H^IFEU zL;1n}D{anZm!7etYo1t>5x?q&V&1LDjm|Q;91#tyAoMFFf7Rl6^Y)jPS1k|KJ8w}; eczVsXfsujTG0NzOpvQ7hnc(T_=d#Wzp$Pz)+=C|o literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce7eeb6fb4b7fc43e9438e587e794f0eb083b2e GIT binary patch literal 3927 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36iuV_;z56F8g4z`(#+;1OBOz`!j8!i<;h z*8O2%;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs29_pI7srr_TW6;Gdq_vh9N+)` zY|5ltY65DJi!!%#UbVduvFqQ#)zRWn-xPFm1zfmXwW=dGY|z>{|<{6FFx_K$Yc5C7zKd~3^iYW zeSIy@C}aO%u64P>X`^l1wyn6E=U!iLpOuv*cl+(P_kFS-PEFOGF@OH?TeqYvYk!&C zzk7G>y}i}t7vGjyoB00z9l^MJ*RBnlH#1K^?V4jY`@+SGipP^S?zsPczk?>LVvDue zft@=ok323cDJwhl{Bxv!>@Jm~k3XJlYisLfI3U5C+#|#N;L8`2kWf~J6eG#klhytC z^6u{Xy88U{-Fh5MU)C)u?@(stX+JE$!Wgz%w7I!CtncxXZQHgTjM4kfeE##UVuNk_ zl$mAZ<=am`Z94w=;OXi5x^w5w4GIpv9J>7S&+c~`ickJp6&?8Xt7?u_DVP6zyR99I zX811+dh55`_|RvYz);Z^0TF2_ccvF#t1e!?+}zsA`tH-y)0L6aY8Pqz%iMfZr)T5$ zKGE4eH5=`H)FvNWugj1pGHsnnL*vw`Q!9##iz9ceT&Wr0wQ=|E)2c$8W+o;jMj~8$ z3oK;R&ngF(f4Ki7LA*g+&4PhLd9p z6Jecl$=Toa7xNV6Jy{K&;ZXw5&(C*P5OAojw$8i1FW0*K-JOFcPMkQeH+^;ZSiCFO< z|IF<7_xJOMhHl)u_w30{Yu>$kXZ7mUtADp{-(I~bLP!2=xbhmoWit+M>1pN+-Y9bQ z#tjLEgyQ1K`)YqrJCbC0+j#XbV*5d z^2z(z+1dIMw~s8}qbjy;&7?r{fF+*H4r>bRWqH_sCKzZe4O-c0oPMsxTl25Nnxzif z6%0X_4kj36v~`N!Hn*|K`B=60XNcC zt5!J$imX`0)%Tbq`3(cZiRXKExGM=>x_$e!)4~ahKWq?U@Z&$fyvxvyQ<42*M#wLn f1B)-%Gc!!*e%JYb;&mnl1_lOCS3j3^P6i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs24+)F7srr_TW7-kJwyU!{@t6+ zSz7+reO8FrR#%pV?c1D16oVuygv->nIahd{a6Znpr!}R-Q;BOLm&zgY>s(3;S2zc7 zZIyQNo)PhK(yc}7{--~?o*K3+Fe@`T6wj>`CkWe=*6h@<>|<2#Pz+2<4uQ2LD%o#p;cdyS{X|M0{)WnyW z!ILAgM=yZoK=StV3dLoip`m&$28Y6T_w{bPRJvO6p?0Ehm?J@q0R-VN0~fRe#=j@&hDu+5xF?q>izy%6Hf72oe!OP zE=sQWU2s5n_;Z%UJ3E?~4a)WXOZ!DbO;cVNu`e(=ey6SA2us6ble*7GycW$ao@d09 z?ENukrys-f;9sJ1B0ilpUXO@geCyReW&jL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g_fully_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_g_fully_roam.png new file mode 100644 index 0000000000000000000000000000000000000000..4665f0155fe27f6562942521dc67fc217afd5153 GIT binary patch literal 3664 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..eaa6a534c26d45c511640c295440fceeed0fca19 GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfmtatB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBv2u1ZGct3vaC9;-a56M> zHMVdub9Qkva&j^=w{SEwv4H7y$xklLP0cHT=}kfCb;79^loUY0Vdauqlv$RV;#QQO zs{r=0RVHq?Sl~1dsy79EaktaVzP^|Nr)f6ArChx$@T6uV0TE*l{0LV6?Qfoc8I{Cu12| z*{^Z?YIe$NT;UdyFJRxbV@JiVojZNY3koLu|NdT{+1S{)%O;FHZf}*S3oAn*v%qWS zkFE-K3)ZfUb=KmfQb=I9)bYkT$uS~ALgQXm-u->C z_io-i`SamncAn!3)?AVX4-JClPcGyQkYU)`lhLlKqEaw*`t_=xiK0o=>qMr73m5VpvEW(J_xkPa?Xd^u%>4NJx_%lXBjXf}BWx37U42CA zS&}LPwlrO7HsTPtEi9NM!^OpQxk2oRedVW?&e^kPGrn+Gc4Q&12%=ecB>pl z0qp}doF)uYbp9!7uUoe+Eh#zqb#YnQIbm_}^gU&7rS4rgq}sQpWdbwzfzixOA31V_A;p;C=mC>W5@hGoyz#sNIOK%jZZjni8aNEdWq9Q3JEq$`a|>$%`v0*cr9F9}$j)&0 oFbhwIyn}V!qml;+Obm={41W3M&fhNSdzopr08(W5761SM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_gsm_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..c97f73828183a1a0323e98a0187e7260f6adf576 GIT binary patch literal 1405 zcmeAS@N?(olHy`uVBq!ia0y~yV9)@uIoKE&7;ewkdBMQIAX(xXQ4*Y=R#Ki=l*-_k zlAn~S;F+74o*I;zm{M7IGS!BGfmtatB%&n3*T*V3KUXgiq(-kIw}1fzZ0suv5|gu2 zOB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVO5b^ zkegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&- znVFuUiK&^Hp^k!)fuWJUfswv}nXaLUm8qGPk+}jCDA_646s4qD1-ZCE?J7!1vsKC{ zDJihh*Do(G*DE*H%P&gTH?*|01esxEq+67drdwQ@SCUwvn^&w1Gr=XbIJqdZpd>Rt zPXT0NVp4u-iLH_n)YyvL0=Thx#n50%&d=4aNG#Ad)H48i3F6n>0$*SJN^^7Js*6j4 zQW5UOYH)E#WkITbP-=00X;E@&P->bo$V~-S&PAz-CHX}m`T04pPz=b(FUc>?$S+WE z4mMNJ2+zz*$uBR~1grP;werj>E=kNwPW5!LRjSA>(96tBu`)DsGjeivc5yN=a5Xe^ zHMTIaFm*L^wKOy^H!^WEGJxrI$xklLP0cHT=}kfCb;YR{loUY0Vdauqlv$RV;#QQO zs{r=0RVHq?IN>x8sy79oN!1iwU*In-o@hyHDYa!Ogg8llIse%O6tUe zCj9#NUnZvJfUJa=SlZ8!vAj)ur*I^C+5%IaMf z3%nQq{nM|dLcx4&_x9g$*k1eRl*1P0#siEU*PU!CEb1{qjkS)(w|`rQFUu_WyZz70DQmuder&$z>!YFt zc9Wc?CmhjdxXg2SRp{ytBbx;)`u?kO|KFm2$SYBQU0f=o)r6Gu4^OM`FT5DVFU-Nq zo2zgvAozZPqU*W;oc3=Q?Y>|C_qdDaqytY6^gHPAcZDgWv7`zF_z3E0{c35oygAM0 z@5vW@B?^b@%k&M6KOXFFW{H<(dk*xo3-*no}P3b6y)dq%F8UZVwIv?drDxMSlS!VrmojHF*dZz`&J^yB;M@7xP| zZis)^53jJR`+wrV(W6H<@M=B#_EPD5|9pFihF6k(|Cu`r>o?X{&tgxxw!c1M|K=Fs mAD;!~_B;`h{=&k*$i}eYr^t`o>oYSz1)`^`pUXO@geCxqfC&=- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a217ba278d38a40c87af2d2ecd85d5b0aa0df9 GIT binary patch literal 3374 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..2585797e40b998723c601fcd8bd62836ebaf202c GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjV36iuV_;x7)cL)Yfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&zVdxRHT@@usJXV@SoVH{o}44;cvf1zdf;!O<0{85=IWJvUrV;~-}Y2c@cX6mf9_lT?>G0gc&%K}*vlX|ZF+;&i_KS4 zcq3NXKd#kW5cGd7!;!Y1IcJ{;-$>eg^Ucb~ReSCJuw8v%ATD;wqq;R&yrqV-BT7m7 z#{|=}tEDXj%>*WHWBu&yasNuv<>jx|PL?$YJ>DR5`hA;m)s{J5MH|EqNH4hZqwV`_kc6{XPMMZo)0WPSeEpeZ%UfM_1O8e*~M+Q-_BdtS$eTA zMfiaBwC54aC;0|Ex}ubL@5hl{iNcGv^0ps#U#WL;$A%rM#%hm4Cip*7Fuh-RDNrDF zPIS!~rjM;(MU?Y|Gv8|;4al=yX%OqCJS||#ik_}Ldnb!2zb@h2xo`87DVfft)21i~ zdRd7ZX{2wm5k9ob{N{$lygQXmEA?x-ula+? zoIjFVdQ&MBb@0B529g8%>k literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5f672d1c5c1bf9a9c6a6b062c956f3143e1f40 GIT binary patch literal 3127 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..1ece3224249a48e576cb59deb07e03b1144f3bc9 GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|v9xeAv2b>Db#yi` zG;}qxFf?|xG`6rXHg+{OHnlK>>2=9ZF3nBND}m`vLFjeDsTY(KK*3??$B>F!Z)V=*I;_CcI{ni3`annhJvU#t9!n5^H0$h=m9zBN zTmDUmvY+gn!6=x&&P?~H;k%x&!erIY36B>f&6*liHD#mWvA3nNU1x4pD;S6!>U2G5 zvzD7piEqa2{~zxhO)z!XT9D8bpy|v#VMXlpl=Djy0}t$K*u>G@bcii<_K)9xejkzL zkrQ3$;l*DsQUBU{w#g68Uu(3vSl6b&^-p}wt`BF77`Rs%_ICEadr*boiIzI;PdB{LY$?z`UwrO% mZ)?BROGGIu$H$VPG{_h@8vEb?I=d#Wzp$Pzn6Of(& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..9d138912297d6fa89889b1478085cea9331ae390 GIT binary patch literal 3405 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 KelF{r5}E+8kokE4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..d2058d20bf82b5f5ba3c3341f48112e1c11172f6 GIT binary patch literal 3134 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 Y*nI4MbHzopr03~wP>;M1& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..b6695bf9e9982393d9593b1382ff392e6862dbd5 GIT binary patch literal 2996 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_hp.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9ba0b4095d10d8bdfaa3adf0e88b07a620e5fa GIT binary patch literal 1152 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OV36iuV_;w~IZ!0az`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzG%$5Gv~;y_b#!tw zG;}qxG&eMIGcYi9GO#ePG%<65>2=9ZF3nBND}m`vLFl!_sTY(KK*3?G!Lpb1-Dzwaq88#Q?StoMJ!T8!-Rrd+(1llngpd!I|W3-Pt8lQ zRVq@lx3ivHq|d;>@Ws=`F{I+wn@C5lBMLlsru_TAxJhnL&P&DAME*??o{O&Tn#;H_ zENHf&am%zBKUq&~P`N%wGAJWi_xFZ^kmtfqH!fMc|NC#Jzh~-GIkzqslZ`ny+-K>C zCawMysTRWgSH+i0Xx7OBwn^vwVxuk9)(D4%o||3d@^P~E>L;Em6LhEg{IS;0zjN@x zPDM?rm!8*`zPDL=kpJ+n2AP`+rX;2WF1A~}wP&{Uo^9FtM0M2Sl0Ssc&FMd7G}D4- z-{gbWxA4{fy~?;lGqU7bWWU+Ri?TK6?N;47lKA0+&IHy?4q_)}@t@mSZq;x2E_|)v iKWV2ng=`Z(Mm7ea_C+b}JWC#f$^=hWKbLh*2~7Z{R)~@S literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_in.png new file mode 100755 index 0000000000000000000000000000000000000000..7ccf35c00ffa2a9e0a3a6b6ec43979337ee585aa GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuV_;yYxxfAf0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*$o&6x?oc!l_r^PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-cIE~SpowCW2UEzV@SoVCm{!O4;%1od1LqM3rFk$2eTEwKbhZLaC5;-gimKYH1>Xi<;h#TjDm%C}!MliZy-8O$~6o!92PX{;+yxVtZD=Rvy|Ve56?sh(4QS~GsiW%q5JCnwZZ?zopr05hDy AT>t<8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_inout.png new file mode 100755 index 0000000000000000000000000000000000000000..ad684092ee9aaf6c999b16a4acdf46831ecb8a26 GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuV_;yYxxfAf0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*$o&6x?nx#;I4|PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-mdaTj~xR8W3Z=-V@SoVJ0W*{4?FOjo9pmlhTtxTC3y}v7Tj&fyWqzly+wM9 z4}-Lcvdbxkk`}ulxuTkBIVrK{8e8@>sD5Af?e6pQ_Tu7BCzgrK_tlxq9JjQ`_p(jG zP3P5%G~Oxy7Mr#CCC}XlXAY)xcw5GIz2)XBYSN3$+~2*VI60YR~j_k|XuhfdqM>G@o#qJt~N`~|zuBvgm& z@-=nsQ9aOK6!_LN?MrjRmD=MkXBF>IE{mD&wN&GGIMb87*^kyNZ|`yT*-RVr$&t`7Zr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`3q#^x16gDE*bSHB{$K;KZ$0OTczUvmq5eeo;J&4sHj zE(uCSxEHIz#UYgisro^w#rdU0$*Do9Y04ls6<9eJr6!i-7lq{K=fFZSAS1sdzc?em zK*2fKOhF?&GcP5-yjT;g-q+X4Gq1QLF)umQ)5TV)BDX*$o&6x?nx!>L!_PQgYW6tPGV4HF7-aRV{IX%dt^?Gz9RKQ%AK zR;ftI-p;RKxc~zLV}YlOV@SoVCn0xpn+*hx9bo9Wz&c@*<4fW7C)rN2on^5QR*_bj zyP)=|W>3QrhO-=!4fE^5=Z0Rl57}C=;>u*c!#BVG{CzI{h>7pTNn-BYw;wgE)V@)A zSM0Fly(g9bQjYY0=y5LpA(yQe*XD7`;$+YI%E{6-hyC8CpAjwQ(e7=ORKMMDvDbXz zL(zX8SvqYI8xDO~qsF^tLp)R!Zmi0|$+YO3y_a*GSXJ;d5z0P~FXUO|}mJ`e0nm*iJ1&V!&e*u}R>Ow8a5C$7aThykSO-PIaOo&b@O@o}Op)Y7gNQ6TTti zbnDo&&#eC0t6B~N27|15Ijnn`8A0Wdr>mdK II;Vst0M16nt^fc4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4g_out.png new file mode 100755 index 0000000000000000000000000000000000000000..abe5ceff9c26ec684db2ebb1a541778b0bda03a9 GIT binary patch literal 1273 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 L)z4*}Q$iB}+n(V^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_no.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_no.png new file mode 100644 index 0000000000000000000000000000000000000000..cd94520e2fefe0d6561547e825f1a62f9b5a44ed GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuVPIgmb}c=afq{Xuz$3Dlfq`2Hgc&d0 zt^32kz$}sJ>>Ln~kzbNuoRMFk;OXqFP*9YgmYI{vz)*23IU!-*gBOpUoKiV(ARr(l z=!x7D2}wc8r3dQfHTE{nYy<&C!<{=07%CiSZ)|K-)VJ54$|!1JWKgsF*ntxV4jd?m zyngZM$*GMd2WG_tgd93>prE0#@t}t4R*RX9jSsn*nVqXDJsmljnUi^#nVUU=%D`+! z5WCD{f-y65GB-1`u)k-PDV`^Ypm0M@i!lg@>HYI!21+8)_NGQs=vWt+U*f1_tc15@xWT<-p=7S4SqDlQBWGAns#N?e zE#^IqZ(8)4sx@oZe7~V{bJ@n)Wd8K~XBQs1c=Thd@x;$e)0MA_<@vs2wF$Bbu57JP z|H%2-_wn?H@j45XH#lDi{m>P#>H`16I6={gdlx-i6n{jmQ@S&L;))4VCfle@)z{Un zbz0^V7W-{l%=|swf8<-&cC~s{dF4;NzDi`ptQG%4tXJGyD!6LplAn&R8@{Q`4T;sZ zb=({N%biC|;+oV^iQBVI%r=_6&t!MPzRO9SPgz!5y^fh}aofQiImj8bmejVs^^lmP1jp3=4JSUH-6b2Iv`sNxX@1$#NXN){^Ru-0GpXk{pI@(WBjm@rh}|lyOG0nX=K6bT(yCa~ zo~?1E!LQ}bUYTAsnV&l~TRX@8mge2iE491Ax31s#|DDTh&&}%p=StbX{lL>Z^Y7+; z=RIdsSMB@Rw6xnrY`fmiZ92t2_fAz@?YF)#a(DjTr){~jea!N2W^Ky-&9{2)@ABR6 zEO+bY{BLfyY_F5cv{$REIqLa3`1v`N`F~66F1fz-c3-a&_qV+EobT-D^7mKn2k)zY zlz1dz3)r> z@5h%fmr33D_Dz2EOr5$oUap^gYxTF+#Zx#p*KV1q_;l6mE4O;Xen>G?|J5?N+;8l|z`(%Z>FVdQ I&MBb@0CiX4CjbBd literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_e_out.png new file mode 100644 index 0000000000000000000000000000000000000000..0d73b0fe9a54b8713f30ae9621050e5a7d97242c GIT binary patch literal 1116 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 I=akR{04+H6rT_o{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..54f349d4a22d12dfab59ed4a11b7668358c44ee7 GIT binary patch literal 1160 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 D7`F1C literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_g_out.png new file mode 100644 index 0000000000000000000000000000000000000000..d88733448c650a15831d6c1c656f8a8b15656706 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oV36iuVPIgmb}c=afq{Xuz$3Dlfq`2Hgc&d0 zt^32kz$}sJ>>Ln~kzbNuoRMFk;OXqFP*9YgmYI{vz)*23IU!-*gBOpUoKiV(ARr(l z=!x7D2}wc8r3dQfHTE{nYy<&C!<{=07%CiSZ)|K-)VJ54$|!1JWKgsF*ntxV4jd?m zyngZM$*GMd2WG_tgd93>prE0#@t}t4R*RX9jSsn*nVqXDJsmljnUi^#nVUU=%D`+! z5WCD{f-y65GB-1`u)k-PDV`^Ypm0M@i!lg@>HYI!21+8)_NGQs=vWt+U*f1_tc15@xWT<-p=7S4SqDlQBWGAns#N?e zE#^IqZ(8)4sx@oZe7~V{bJ@n)Wd8K~XBQs1c=Thd@x;$e)0MA_<@vs2wF$Bbu57JP z|H%2-_wn?H@j45XH#lDi{m>P#>H`16I6={gdlx-i6n{jmQ@S&L;))4VCfle@)z{Un zbz0^V7W-{l%=|swf8<-&cC~s{dF4;NzDi`ptQG%4tXJGyD!6LplAn&R8@{Q`4T;sZ zb=({N%biC|;+oV^iQBVI%r=_6&t!MPzRO9SPgz!5y^fh}aofQiImj8bmejVs^^lmP1jp3=4JSUH-6b2Iv`sNxX@1$#NXN){^Ru-0GpXk{pI@(WBjm@rh}|lyOG0nX=K6bT(yCa~ zo~?1E!LQ}bUYTAsnV&l~TRX@8mge2iE491Ax31s#|DDTh&&}%p=StbX{lL>Z^Y7+; z=RIdsSMB@Rw6xnrY`fmiZ92t2_fAz@?YF)#a(DjTr){~jea!N2W^Ky-&9{2)@ABR6 zEO+bY{BLfyY_F5cv{$REIqLa3`1v`N`F~66F1fz-c3-a&_qV+EobT-D^7mKn2k)zY zlz1NJPR=YE2*IrH5 zlw5B2MpSEk?cC!wS^=kY&V4m|H!&)$nEPIzdT`|LIrEY`S+{*}(BGHCHhtoiHEi`) ze%kO!8HJy+`SwV8dJ_Ak3oYGOJP+L7@s*EhrP`dO@rpZhWfx3r%j|Ey<8gnvm^n{D z#=i->F8i;|?hk$-u+aAGyyeelIQ+hweEoODT=UF+@i+GSKBO~fPPf(Fdt>Qg1_lNO MPgg&ebxsLQ0Gx;ZA^-pY literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_in.png new file mode 100644 index 0000000000000000000000000000000000000000..59b33c1bc355c39c912a5f98b6704ce2331d49e9 GIT binary patch literal 1107 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 Cb=3p_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_h_out.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cda1878d4b861207aefe71598821f50270885a GIT binary patch literal 1109 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3e63074dd2b3d02d372ea2222cef3756d43a58 GIT binary patch literal 1650 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CV36iuV_;xtIMpJ=z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzaWXbCvNUpbbu_Rr zG;}qxFgG=KH85~7b2N4~Gc$03>2=9ZF3nBND}m`vLFjeCsTY(KK*3?IeC?@5EhnO_=h1Q^&V} zKP|?2Q<9Ifs(!6FTAjNu2OcTI8qa!YElriJ_+rs5yBeV+6;PCOo||6=p6pt}8P;cp!`Ov*b` zedJ<^pi6{!hrpfV`#$_~X+KcB?}FGrCNtxZ9I9R zbb9HtoY_AmMb2pdFnY}WWIeZ@FvqqFr@q@}=}Ns%wZ8s;)9Nc(rpg+k4?})wdv5hV z;ivgI`X;|q^wj8k60KW*yyrOP_tfc>k-@RvWP#{t-|~&FGoOebR1H$;;^@-69$`Lv zhv&b_2Ws25oq7Ml?QF;ECOzLz{)-d*!}MlN-_2Jn9<(#2th`Rrx<&l!te7*!;$E|t z95|PMsLHQQ`kjKXRrFKcB_ES`%a1?FX))7yahfSU{+^T3%8mT**jy*D+UQm(ZTS_n z+t)}*q3O1d>!JlktG!pe+VQJQTIlVEIV#H!uD`>w<@Etk&aamb@O-e<-;;m9iSJ9B m=@u*IzzLHdn(zFtd4M6!kp10qo4o;`TENrQ&t;ucLK6Uut98%- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba7fd284106e028816e2d35c7dc1950a2ea685e GIT binary patch literal 522 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V36iuV_;xN5}TjRz`(#*9OUlAuNSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@I#tu&x#}E(ix0CjJA9j#vTkULZVG-eVS4%HQ!1@ROj$POPA6UtmDLh+k zt?#8vC(j-|8CfX8;;247PxPRCv(@gMT3T;^&RHU0WwAwE;N`*7h4CkT-}zlT-Q&+| zQwg3Rjs9s%S_E!JFnNEj+yB31pVQo6y>v61V&;3AcqoD|56x1GJ`!HN;$dU3%~xzi;D{tgTV!OYfHJE%N2zzWl~?wy)r! zvWUpr+jh_ObGPXG9I-acT#e0>`TqCx%!%5GGxkkfb31Q4>xSxA*UW)G>%K2WVv*z e<0G?QY&*1U)#Jq*85tND7(8A5T-G@yGywp3f6rC` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_null_sim2.png new file mode 100644 index 0000000000000000000000000000000000000000..834c80a9b962c8d7cde6fb4849eb4f842654bb35 GIT binary patch literal 551 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V36iuV_;xN5}TjRz`(#*9OUlAuNSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@I#-*Mvjv*f2Zzt{cVs;d1TkIjCBixiEtlw&WK|J6C>zhZ?5vk63YBzn) zyi;4UNlbdagX0FC2v(K3izIYi16!P(pY@-iH4=DbJ%^{~2U1^ehhr_glYDK51p@exfbvHV5Ym8+v9YU>!-sU|2{n{T4}l`Ur%XLyqf$1L!XOI>r3CP z51H}x#x*Tf6BpI?0+!krwNgQ@zkNcC zNVn_JcVC<)x^TB1nwlD!E0@Hh^Ldq}#`M#tCcoXd?9$pp_jTZW;6(P4qYv#9178#WtbXovr%Tct>&x46L$#*b?U0TU>pt4V z@>bvv!{@!%PupI7-gQu&X J%Q~loCIF+%=Y9YH literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png new file mode 100644 index 0000000000000000000000000000000000000000..11ffbde017f59104ce1e1fca009cc5591e1059cf GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj+d2J$r`hb)8#YN5ZJ%`F-_;bO^k-*yWa~Wz>WrqYjFfG> zvFhMO&k47>np0A96K|h6C#rtYap5NODf2$r6dpNtDK<0dyVrLk-Tt|~F0J!+uAc2+ zf4QtA@G3XYl(pynoD9mlTb-J9@9M>mQ`tRbgf{ZCWC<}aFo>48MwB=gr6!hS=I1Gd zWag$a80s4u>l+&WyST2Lfq_94q#z}+B-JVzq$-uc$iUE0*U&)Mz%<0r$jZRd%E(yP zz}(8fz&k7D4T^@`{FKbJO57T(%>_3HZ9!x*o=XJfx*+&&t;ucLK6U{YLa&V literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_r_in.png new file mode 100644 index 0000000000000000000000000000000000000000..cc59f7c6bd9a524f2bd8233c7f92ff29adf7ae1e GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36iuV_;xNd+Z;^z`(#*9OUlAuNSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhPj?Djv*f2Z>L=3Yf#{D{rhg-uQ#{msOg%!WpG@nx^ULqvR$uR;Mqo% z39asL1wL)=ZgARA!zJhbP$=;HBc%fZ(;1mJu>J~RF#6t66>qNc+V!E>NSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhKZgojv*f2Z>M%B(o` zG)?1cHdjMe!Vk8Nz$Fn!0)rSLR8$}6?GXAUav|}hSmE8733Eg<&1U93vE*TxzT7X= zIA@0AA+d`G7fldIFx|>q)OXF9q4z{K!?NAZqHCU=pZO$NeEKrcy&KfUi`j!5x$l-2 fd;SRjZ9eb6qw#^NSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhH0KIjv*f2Z>L=3Yf#{D{rk4+)oH`bn=^!&j#N!t`*pz`W^t{hqRMm_AxN6ie#<>e7O?2U844629aj}B>7fpu5hhm<0XC_P%O*EUS^(ls};qK(+ zr!>uEetc2*%5z_9NSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhWVZ@jv*f2Z>M;39Z=wL*;}^z)mH9BrrlE%q&_b$Ss0*^@vK+abg8Wk zXUIbX1ez5683knIkb20`@oWR!nz~@CU!+}G}kII%e6$Z8(T~d@1Ij4A^ zZs{VaoiCwKV$i$QhtHS tKVEHH^jocN)m(4xGv}5z#ILDl;K??g!VnR@nSp_U!PC{xWt~$(69DfQW0e2^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb923e6dbd4ee883ddd283eb7c1398e5e1271d4 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj&W3u;llypFr?6JvRXKdyk^h-Zbc;~dz?hBsDsY?sbE$tCkUl`80@KS&E=VvWZ zt3yxETQxy>k4?zl?+mq%3x$*XsBywple_nVrXn-YGh?>s%v0wWni$u z@IJ_o2o1UUDVb@NxHTNiNk78Cz#s#%Aviy+q&%@GmBBG3KPgqgEwd=KJijQrSiw2i Vv~cTVGX@3*22WQ%mvv4FO#nybkwgFh literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..783ad175510002f77b13023032337a3190b73328 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj^bvUfrrXS3aLDQIlh=mA@bIS!yIavuvi!45`;8$Ck}3n|Viihk3|q-m|=? zZj}aZzn-;+^UJzko9SoL4SDJ+tbTpE-|;AVed%)Rn|U^sx;NKN_P6i7W3k}d!-aQ3 zRO`yDwwLi8T0Fhz+Ruu0IVMultJkQWwtS=8vSGvdG#z>WY1_6K z9M5;EOz+MY^D#NpYrp+50|SF-iEBiOb5UwyNoIbYLP%zADubcEp|QT9;lGRP${83K zR6z<-5=&C8l0m9c8H@}J4Rs9-bPY^H42`W!jjW7Kbq&m|3=B3H-UkI8LPKtTN@iLm zZVd->(vL7OFvx&x2+mI{DNig)WpGT%PfAsA%PdMQ&o9a@R&WkBE!_IpjDdlH!PC{x JWt~$(69E4%xv>BM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png new file mode 100644 index 0000000000000000000000000000000000000000..e499f9d42847f87ba2546705c2d6687bd50a5146 GIT binary patch literal 416 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36iuVPIf5_~rX71_lPEByV>YhX3vTXZABN zFmM)lL>4nJa0`Jj@KAr* z)I7O^4&4=Pe%F4>A3Q0&ygY>Uf_1b$L(4t4=#?oANsWC zWU1xaNz81XMmpO?i^O^sWr$?G-6T_RZT8u!i#dYNj3=FCu1u2OosaDA#RjCX{28M>Zh6cI@rXhyLR;ET)#%8((=2iv@z zMbVI(pOTqYiCe>mmfA=L1_l|B4Z-HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNnfE$}v3=O8_{9OHt!~%UoJp+)JAb!m)@b$&7G&dKny0|1L z72#g21{a4^7NqJ2r55Lx7A2*lEl2^R8JRMrHb4Fz0AxMD+5Yr(jj*NyUp@? zs}_-9-?X3SStJg+oYFrtwKn(Qyer~6OnyJT+tHJuXffw1Az~h zPI>(kQJGL1FZ^K6>c}m=|B873pPfIE`2m9k178D#I`Dwu9TN`&t6n9y-B+7LP&wo2 L>gTe~DWM4fsZOi~ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2g.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbfa6f95eb5f7a4fd12c4c17f0256c932e67cf8 GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3m8Da#=fE;F*!T6 zL?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNnfE$}v3=O8_{9OHt!~%UoJp+)JAb!m)@b$&7G&dKny0|1L z72#g21{a4^7NqJ2r55Lx7A2*lEl2^R8JRMrHb4Fz0AxMD>p+6M^g(^H&;gkCqqM5 zBPUl!QzsKM0}CS)M`r^A3z%M){N&Qy)Vvay-W0fAGXtD@K}i7=99Ax=MVV!(DQ-pi zxe8z}TV>*QiwjQkpn6kqy2aELr(S(K1si=(#3DsBOeo034a5YeNl^NXUDb>tUzRN6(pUK2)GW?me?s^H z`@)5)FDE{TJ8&_ESDz!Pn1kr7P=)NWm1qWlhGuj zNyreYHzxVskjz@7RO=mQ1 z)cYW_zl1|`*{ma<{tG5>2y5*(m>#;7wK!=1k)|E~r=Tx`ew2yJwF0+^GUA~B&nDYLm{faLA&kDkQ5}C*OYb|s8%Nk~U zkz`|vn-zU>eG|*3_sL9e3Qeb{PPUIZy#1$f5rYf^`vJxR2(?1?Kx6|WgXyj+%kuJ1 Qb3jFnr>mdKI;Vst0B%;UEdT%j literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_hp.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..6e88bf9b5fe48952b29c4a1948cd3763f12f38ff GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3m8Da#=fE;F*!T6 zL?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNnfE$}v3=O8_{9OHt!~%UoJp+)JAb!m)@b$&7G&dKny0|1L z72#g21{a4^7NqJ2r55Lx7A2*lEl2^R8JRMrHb4Fz0AxMD^m+g14|cILsv&f14Bbs zBTHj9S634!H&;VbBWEK=BbZ*7{N&Qy)Vvay-V}shBb<6cNdXibRxYVUnPsUdZbkXI z3Sci=W#V*;iyKb!pn6kqyTt&fUVS?S8+}m3B1JSzD9FVP!~~~FQ2Mk}KqUOsycAod zA|-n};UaGh1_s6qPZ!6Kid#v4{{OdUHZr*Rjc4X*jw36$HgwGYI4Ma%++dM)!^DXb zQ=BiHRbVv`3`*GZRnzm4NIQc8*Nnz1@d|uwk2)Rh@E_UhaE9&3{s~928!PMtjF}fd zSbwlf`>DgXo7{p{)f&8v5i%W&8%+dGKNgtoBK)3#m1m{mfhPBN@>0A(zl9_JonKzw zbigG!ZNsCx@hfHs8K}fGe5p?Gn6vZ>V^0R(59X!yiYKL+gCFpz*k%Usbg_kd$ue}y zr7O&1IuhgXhqt3N@sm!ClR|eyW99??3(prE31R$FslIg)gBa7P3l`~3ZEV`JY+M=Q z&03DWj!_U}Op?@y?NsAuUZ4=~d)B36p2Yt}7d3uPzw*Yt#Ia>bn_%yGm(>~#KY6A- z-M6swf5WBw8(UdS7cqz(@oub8p5$tO@yPy19^B5Wjgk}tP8vMoNOQ|#vA-s;z&s&I vBEjHQLm+#PRl*g<#e5Q_2UajMF!3;KSevuALV)ums2uWi^>bP0l+XkKvSFHY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8S5q+7#b>= znduptn3|ax>L?f)7#ist80j0B=^C0?nVMM{nJYknlAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6bkQqisxCgqow*eWSOjjhNnfE$}v3=O8_{9OHt!~%UoJp+)JAb!m)@b$&7G&dKny0|1L z72#g21{a4^7NqJ2r55Lx7A2*lEl2^R8JRMrHb4Fz0AxMD>F+|Hy1Z^3s*-+14Bbs zBS%M9OG^V&b2lRsHxn~6OPF4l{N&Qy)Vvay-V}shOPqQ^NdXibRxYVUnPsUdZbkXI z3Sci=W#V>=8BX({dQ)(_#T=(zeLDpkeNedF86kDYt zC40Mrspcmb7#O2GT^vIyZYBNs|KFb3$fEk2j?r|%jzG}_L31;+GzD>kMb-@yCr(Up zzHnB7)j%+);Mp0;Nk=sK7!yPcm{;z1kl{HZ+_*!&qq=bhZ%4gi=XIu!H415LZU^HR z>?@j3rclklRFR>Z*-&8`TT-RWqe&T$WEVVf$l}=WVB+s~x8^JVTqcXNBpEMw|KI88 zl!hE}g}-tVLg|{N49c^Z|2e#j_xPkB|K8!!WVWLVG76SnVchVdknNGC!x`2i_ZuR_ zJ>^mawJ&V1Z?I!mUB;!bdva7D12Irl+Y~-1;&Si2t zW59&<%hHrw{CnyzW=#3xo%Kz5mx5E!;f`bJi$X;X)Ucf{x_{wFy~E4*H=LTJ0vWg; zEp^xOIjC(N^TTbks?vZVytZ1B%jT3LE6BO$3UX=zzSwJS%X&%f$Tk2 f30D{y7}*%izh_*WwOJ<+RPuPb`njxgN@xNA8y=%z literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..5076cf95203bf0b062e39e020c18666e7792e297 GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD4Cg#u978nDzrC=~%Oz0a$jAGZ z-?O4li#2nxU2ZzKOl)>Z!m5!Wfx(4P}1_t&F_bpL0tizp1_lOCS3j3^P6^ZiUWTuUz2OWD47WX9978nDzrA4V#hfV8`tbQ| zmmH?7$M@NSG{wTAB5rW6%sFz*Z$klVT?8A8^zJFs9*JGKr?9ewvB_)^b0wVp@a_RcVkrVp$ujJmix*`8&Uv{jid27L? zLa%25w--gPe7h;!QK|TylY9K-smZZxHLfLjdPJ8bTy1Cl9=1k#itP3?RTn4hEPirz z^2=4%O0)e6pIz)+HqW2mCrr`h8PC$iTP5S!Lht*0(3`68<6Bz5lkTOLT|X!mIj*q! zeSZEQ2GIu=$C*wsaWgP5h?clUlsFfqCYEI8=P86_=B6?j>KhvC8yfz*xUQUmfk73d zASJOR)hZdJDwV;=z|c_Fz*5)HG{n%*%FxWp$VAt`+{(bfp5eYFiiX_$l+3hB+#391 z(_0xB7-T>;1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP#=yY9;OXk;vd$@? F2>>#OxI_Q| literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..83538d463d4fd984567e3ac8b45c7ba7137989cc GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD4A(qe978nDzrDE7t2t5R*vI?7 zf9mRXoHd%AAar_G2b=Gr*dq#UiQky+rF>vwanwK1cu-m(CpqE5whRfkjXX0y*XnYA z`uS4y$NB%C3+5F&wJ0bn2wx4-VU4yQ&NkP~R%c#4($g0E`*M=#$Ggp`I*!hglB5r>!UsDv*-1$&Gwd?xa!gOrT=XzX4Ea4kmA^=^7-}w`>i#M z@sBLM#ZESEVPIeoEpd$~aV| zRWe9bDua=Mp`osUrLLiAh@qjCp_!GDiLQaUm4Sgh!+lE>4Y~O#nQ4`{HTcD*w=ys= z$bf7J&QB{TPb^Aha7@WhN>y;nEJ`iUFUl@fa1J&t-1^vzfq{X+)78&qol`;+0HI&H AQ2+n{ literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..aa011ca08219d424d54c3256415bafb31b47f922 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0y~yU=U_tU=ZS90kK$hA2Bd6FeQ1ryD5KLamA{uj)%{AOc1`VrQ6iKZ|@-k&yTfhU#2X4+VCfCwRP0}^{cMPEsky7 zY?yU*YtKwoDKm{)e~ic8%V53^E`ag7ec#$`gxH85~pclTsDjGK*5n^NX^J Z6`X@j3%5QtV_;xl@O1TaS?83{1ORM{i=+Sm literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..4cebc4365e278c7e8a7f41ff25679c8be101484b GIT binary patch literal 461 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 Rz`(%3;OXk;vd$@?2>{ygqEP?< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc627c2f10ba0e2e81b83410e2e6c47a989a19a GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0y~yVBle3U=ZS9V_;y&Uuh5GNS3%plmzFem6RtIr7}3C z^~=l4^~#O)@{7{-4J|D#L1q{k=@zA==@wV!l_XZ^<`pZ$OmImpPAg7`JJz}FYQ(%f9Q>f(~1 zRD^r68eAMwS&*t9lv`g!Rmc|tvvIJOA_;vQ$1a5l`3)z^fEJ3tV~@D4NWZ!U0fXv%nc1) zjVxTz*Q}aq-dQ%X3U2*CKB?VA$Sh=JYWtOF;xE1B+ zDuBIgm5JLePB_hj>P^Az7H6D#_3adF^g$7e6wxrDAQv|f6PzYN>C;XDk?>RVQf!rq zll(81qOD2TV@QhiXa1B>=9-fl77Ly}iiZaV}x*VNeb z<}TRV*2*ou=tJZLWmdLDix&sl^sea?jIKK%&fl{nO`(B-nc>$gt^C(a={=y_>FMg{ Jvd$@?2>>ZaM@j$y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5c6af9b10d9d60eab9110d020d3191ac8d8411 GIT binary patch literal 1131 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})y)5S5wPva&7L;*iTEkY_m=NJ zSKH6~-g((X*Dq1`27i&`yhD-&EGbQ?Uca9{kS&;$`^m?G^;=_T+rJXCPk(DRFt1@> z{&W9?+!y5&6AWh9*x1amH8Gj;yuhN!R_?sm)`Myn7~eIzD=^44X#RW8zF2|%NU)pL zUs;_7feMa0Tyh4-)AcU!#C0f4Vf(dp|2nM?X1}N3FDqbPW3uo0*DCYS@bKMU-rid$ zO`7B`V7=1bhh@HD!OnGsDRIp2oAfnQuKRA_-ov#nyFUJY5u0&CYyI{nH-Qvs$pzni z(_YT$ywIx7k-Ku$s#y&^VKFgl5~umS2U%qT{o$!=x;n_4Nqo?IR51vjaZQC4xyTX!xvI{NjymoHb&o-?QBsE-Dx44eAA z3k$VE@&zW@Zo2+tZ^nr_ANIL_rs@2>elSo?Gx8X_;*=Zr?$s?_u)sn1P1)~Cj=ec* zBE46=+T%{;*84em$}GsY=#FpZN)BrdXyOnR6SLcVfh#Z1lk53Gp6_QY^DfK{Y)M(U z_elN<6@Ax|l9DgXv(J934G*6#dwO+UU0t2)8mCB~y>@Im76+?q{)LGso~#mnU?+Um zR;@kRTkzG}x4GxepTE8)Z1uHEmx@aB^7K^06uHmOc^t#EUGk5sUALKYL6*=7#E=&&cSUBa(5m`N9 zQO;-DY36_D+TJPOuCyh5;`_fxqzZQiX4KTw@O#agec%X44!L vCN!0Co|y2uGM}06{*oQ(I^qAe+pwLwmK2z`E?^P^0|SGntDnm{r-UW|pL_>= literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..68bfaa9c46df5ed353fb1d07f84aad4baefab4e6 GIT binary patch literal 1674 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@c#U;^yLPY+-3= zXy|HUX>8%*WMOGx}9J=+-`BiX&zK>3U0SJ;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&!TpPZa|L(?3ra$B>F!Tc-JD2s?@#FW)?S$wtpxA+{QBCI`D02CS$!p%|56 zs#$fVTSCNT{aeRJu3hTF0X&bEaydFSy*N8NB7{Yo)mzC?;L;C9Q`?Nm*J@0ko&JBK zyC=Ksv*Ygv$Is24dH2ufXM1M~O82%c*uWscF8t)SgTNf6|C~FRHZ|>f%NDnQnOlL^ zk7?$y@PoktkK?tbpI+vo^lT?b##|F3nVqpm-7!L*TPh*fGfXFU+O!W!;(?AE=lCwX8zn2laNJ?WS`DStqeXei z&1}tyd#CBxuXD6T;;vZquAJ#%nW0*5eWLku0;kKt=zz1&KmVRsZhdn}(8?|D+D(dj-`zR| zein<|b&bk$pRFNzfOXXa_Xf@njn*MsvmY?`axc>0(k+|xpJm&rm6lcWmU*2k__-qV zU}{0^P08+~ea9bv+-x=1Z`;kB_qBHS&-xWPg$W*e9=`2pPObx2{6>cd28+Vp zYkrD7mmXN_*^@DsW6i9WE(VkIbJAF@zTw_+Z0mNr@}1ulp2{T0v%k+exA4W^yN{>T zEw4SxQMc4-hT{CYF7JZhtzCJhvzYbs`(Iu`=d!jgyOG)St^7&+$qbWq3-VjvHvj$m zH)l=T^XH9?jN;a>4F2)5em$MEQRn5?UwdC@Kia94_4d);sI5^~A1fJn>eIPJtYg{!rRch;9TMTtf;uWfgEkajDdk&R(ev5^I@?}{a$ O+QHM+&t;ucLK6TK?3q&l literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3af557fa16e605de4fa065bc92c2733187c9f3b4 GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}f)5S5wV1TAQDmEqZ3#RL43mqqmbzraZlKC+6{+H)~Ek{%F$f zw6LmhlUz@8>cj6}nQPb``DS@Ht9)n(7GmOW+@7OvYH{*SUgPrz${MG)aJL`!+I&;S zM1qIu2j{};M?ASbHuCOoc>O@(_o}ULxF<~herWz{))f;3eyX$|NEc$_-@bjj{_C$* zj>|7|3fxfgv$8n;<=O6Hi>*bk?HX-w3wYE&RqSZIEuz%vvPes=|2osrSFf^Kr#PrT z{}HPz*$>u})ex7NvVJD9xS z^c`U)Z_fo`t92t1B&X}x{NDaqDQ^AtgAWUAO0DK5U%q_#S%{XZ{A-{q~O1#u(2}_AF-27R5fk2N}G3 z)Y$GyA57oYHmi;O=DFZN1xq#cMGi+6%r%<9RU99Gf7yY5|NfnI@_oF>q2-9t&55>F zv&8o8m~}%@Z`#D1fSHjAkEZN2G85pK^X|oqh%FI12j|U`vzL)S5SX^akM;4wg9i@= zs`S-lWMs6=%dE-DI^}aRb!${@O8et{!OpV2`#VJ5oDG~}%)RA`q)zkaPgAE(m2&8H zF!k#ddiC|gngxbgLYH2CN!#pj-o)?o7QWZtH*S=w;*4Z;zt#7F`_tjJ1A%Ey$_xw) N44$rjF6*2UngH#Xlm7q! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..162393fcb61228089cb2df201395cc3168fc4fec GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kVr;B5V$MLt*PG$!O zinM2M>5hx758@Yan=APRlrB_iGBg&Mbc{zYs61Dw%Zo$s$OP9dQ+d2* zwOZfxaAI4W@_dnZr{rvblPRD7%q>{FQEjQG;oC#(_aDtIe`kH)``ym(d<8P*4CflE zdx~|g^#$v=bF6Dz$XCfU&3Wf>M)^CrD+?ug*2#x!O?5l;@I#1!ga{i`p2*Dss}&(n9s77aPs&X?`%bj;oH{-;wXma;c+9g3Y z$cF9xwQJWZ%x0fmdHwa|sI_JfzyH2E(VF*cgFN@x|tKt^1ZSB0H4@FV}#xq2gIK4|MckNkH}uP&5JI-6k=;u>^dZT zz>vxTvsp<7MZ*p3WCH{_fTpXLTuSCRWgYK&XY)#eC zpZLmuEe))(n18;X(TYRn&^kkpblW?hHQm}`_H c>(wzi2=p->{^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`=wfN^X6WML>gZ@> zXy|I>=w|6+VdP?F;%I1T?Cfd^)9aF-T$-DjR|3}9J=+-`BgX&zK>3U0SJF!SEirN77i3Smaev5&9GDG)+6SNY_Sp-T?090{Ni&I z*IUx%q_Iojf3sIuo{0FmD`JI$;*J?5svJo#y-sSCElg3&FzIv&ylt|v(*CdC&c@RQ zlb5XB`0POc&iWbo>h2_FH_pg#YKzl zcOAVYe{=7ij=}==GmV#XT`ow;TX3ywuQ+?EIGtBSgeUF`f`sC04c`51Van=yfHXFMA|eF4Vi(W$8a&vu!H7@3X9Hwwb}W z`(WXR32%>CAM2`rVo}~zru&GYVv*41-=fFtjZe5)9)BKEXV0E@id}i)2}_yz;wqk( zZoK`rJ#PK?I&=R3-y>lKFXN9#C{2{$Za+L-(Mh7Q(q`VvuN@WZC#*;@Es%@J`8<2A z?2P!e99+`9Zpsrl7DWdOf1G=CRgl8FmkN&r7q3k zEzq5L_L)S{62I^s%N1`9)Nm!Ib|3x3nO)}K;JEyFUXs93mg;-ZnDcu<5tQ zi9=B>A*(}ePj#FXxm2)*E&cLTuT+MJ7h8@7Mw`s^+0WhDBzm83EmMKylmL-S+gtkL m_PH%K)ZSJ-_j~tW!2|{u7R_*(HHT|vfq})_)5S5w%VnQNQPt7W2kz+2lV#yNc7_ z{k&WK>`wA!le5bvaP>9T1T6SqRw0|x#Cz&T?*rC?u4FD93*Jo!o!fr4u8aw z_8&fqCr!`ncC(Q2laiG^D=R6f`Juw*XWjn#^;QYyFIdbE#tJZPKdAG6KZlxwT*u-w zk{^U47zICwf6)AKQ0RT7BX`9Off;+$+2^pxbl@Lnd>RkFgy1JxR2?yIZrkxVX&m60cMBnwCok z=Fj<%z2T_JhR3J)%mOvmaL8^Jm~`}4hqms^$*DW`w`OXu{3%qyBE!i2pz;Ibhc)Zg zsg;(N?v#>}`t$Yc*M0Zy-D{gUbLR0iEkXxZKUi|ICC#aqP4TB&UzCkFZ>YxXm%lW) zU9~P-usd8vjjU^icKEG4g-qK;!otGqcf_naziapIyB_P0J$?Gr zcOzHo#xHD=8w}3bO#gk}MR3w8bKbm-7w)7KRutPh)z;SPwzjs;I{ffLRCIKGL{yYl zU+9T*#?N&FSnJY1#D9w0B75qQdE`0QjjM{5efj=71uF3oLuI6Z{e|qDE_3t%iEmw&B@!V@w9Q*lMoQf+tSV98>H>#N!7+g?k>~7Gz za_`>0vJGBOFSo8*y?XgmOF?t7))X(^&9C>SIyC*9an-l}nZf?u_kE77KJj~BV*ied z8YZTur4qVlc^?#8%?+=$yT5PYLPhql`_bXy&ySz`;*e3Cp1z#>?pFEzzpJXMq|(#V zFVCJmd;j$37x?~KnVC&X_UX6y79^?0o-`}+_-VbQ_LCJ;dG=jjbK^!>SeQ`L!33)f z&09QFHaX7n|1(!{|Jn2BmoEzLh>nQxcqmb=A>wsxM@7hqw|{ck`R=>iw%w-9uT#(b YgEhtX#LJi)3=9kmp00i_>zopr0P|5E3IG5A literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..42b98899d754e22b6be9cadafc769cb256e56e93 GIT binary patch literal 1692 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@hQ=YH99jY+-3= zXy|I<=wf8#=;-8Z;^OS$>}=``)9aF-T$-DjR|3}9J=+-`BkX&zK>3U0T!;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zzu5Z+W`g!W&uwZ$B>F!Tc*W&1Sd)yKY!Emc1&LJ=3N?5Q!e>B3-mO_&S<(O z7FQB%KJkk0J+oaATMyU&e_nb2`-$1JXHQadTEPFM_&%@O0o8Z@O}7La zrhed@^U$&@^~0p++mmW*@0yvLKVKiBwe~`2R(}5f1zB*l$U({NEEv8&kd<31{85aYbF8x6@zAztuM#6!sP~$UOdjw#Z8}+W&xl0pq(K zH>HUiU6c$PzO|iyF8%u5yShA;f|jE_+>7pUm8y5Wdc4!E$*h%E0^SJtuCq`9j`PE(yb z`H6jFm8t2`^QRTKf}Cvmt_tj6%gba>-gx6@g-zYn6r+`S+pEn4IPT=Du&!z}*tqYK z)yjKiI(mA)mMvetenPTb|MMmH-`DR5Zmbq6@Cy=on(wvpZbk?zU$fkW(|_3)Og{c7 z#{B(3-*?`BcwX%_nSFNKx%21eFXd%&v|NAv_p)<8x974qAKECCQg~Qr)%JVdlTW4` zKXQcS?KQQ~&~WF47czHj+o=3}`_6eWwZ}`Y?Gk+P=Bf0-Q?;4qvL;>mHS@!6SI6&m zx_#92`r+*kdspmiyL;Q}@s_`C$5-*yJ?}L*^Eds0=Jk7B2WRcrkofQH`b8;o{nYQu z`E99R^sg&ybtz}EcL|@Fx%uT7*7NIib#>!*y)yXEEd6Tx;fE0hv(LI4h8-x5Tvyul z-sIHNO_K6Vdh7OXx|`=e-Ak2w-}gBs$DE!>9ZB7AOtD5M#Zhp6OkTz!?V`hJn^V8J fJjgpH&&bB`huNHAf}bP0l+XkKNwJgD literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..65c1f2972dd0a9b3d111246fb7cd22cd57bcc00d GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}e)5S5w)l%pL2ne?9n-eTY}V^()|1X! zD);I_*48%X6U^;lx!0~~F^MWlX`NjEKAHb(_YXndNpClQtp5LJ9>4zk&wJMU2(U;7 z^Yt}zJE$IXEns`Y^4g{Ns7O=Pg#(XYAJD7IXLc_9H0in9;){z`u3S0mFL&U0P`>^dCwcJT+(9|$|v77DQX6*xErF#0i=ax^Gh_+YKySp9%?g8F%07N*du zz4xx)x~0{SFR<3TM9QJ(>AmLS1nKo!3t4_2G=6yfx!w9{K25$4V!00P&SWXyvURKO zmMvR2&YnHX#ByHUDtFNV{{vN>3*0X5xSrtLWhmV!YH=X?!=&)f+&fMlnx5J1qBQYQ zfkh18lAT>Af$bBtd2*0X8STW-H~ ze*F0HuLzxGC#EXAUCh5|)923p_WqN7>KPj2rh2KaxSF+a_wL(Uw`>WSqJ2=PKy1!4 zmY>mL%Tp>Uc1(BiIFV!aJS5=ER3Db+g9|RbEt~(P!e;B`%a`4!O`rZ$Sy|aq*e5*A zNT}tCAxr1Q&IOlWGHu?xS#6U4YMSFtz*rv@R^f6C&p_6Q}Bcqg>MU5jb?CdKA93F z`sU@!NZl(}<_R2`7O|kxMBaSX{H85JR(3~(Q&mJm(&9G8Obt0!wfA20+qZ9x*_sbt zzk2nl@Ae;`=C$-+frX764_j-a!vjB~ znKt(-UL^dBS$}Y!FN?hC(^{r>i=v7LRsxM8Cm1z`d z?#UFE-I@^$=?6J1*zz|1ypkcVcq4mb1d~u_i(vQBp3_gO=A2Dq-ThNszajm=5wH9c z%@68?rg$yQ<-T-#|APaZ_qJbDk>+T1y8fo@chljA5m9k*Vd1Mo~mE+o(K2valU^2 y`s-n)yTNnj1@;Us&n1ib;^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc?C9)h;O6M;>gZ%@ zXy|I>SSVKVc=@y>f~w+)9aF-T$-DjR|3}9J=+-`BiX&zK>3U0SJ;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z)e02{Dgsl>7A#GV@SoVJJU~R3kQlEOIMq`Wab1H&TT&qv^t8rl_+*G2D|uj z>=FfOZNK2=Z>GCHUTo6qy0BtFlft%jEo+j*y<#&rth|yw+x_fs!;jWaL)sG6 zde?5e!fgNU>|XQ9pYQH`en)uY)hy1OzX{Uc?Hk3LHoj%5W~epfpVzc2?VrK+#|qh> zdgKb2G#pq%=R7VRtEL@3XUDdY;eA&wqdJtXW)( z*RwSrlx}o*;JDpI=jw?}?FDn|*v~bZ>|i&$@JxZNW~NV?tgQTzgKmK$yT7S9vE@Hd zN|$lGoR$2@FoOA9!Gz!d`zJrm&+MsxvO}%AOeaZwN4|kydRhCy9f4v}`IF~9JHYxk z!DyyU+m}kONh;mfU)RcZy5yB_YEDzS_L=W*u=n!Ie>+_s>9}x2Cp;{uD6mwz*Obln zn72S^PTuD;t#{A=D{OdhBSJ^4(M4eHteGA92}e|3=ft|Wte7l+?rBl&%8)F3neB%k z?z#V7-jwUs(~cLreEt01$x2B{H9p>SH*bFD(WKoM!^5X?c&$BQ@p*s$w0FI#;rx?6 z$lvISEBkfFfBx1N$Io2LbPb4|^f2MvHqAp^3DdIY%6E%oKijQ-+H(8tzk-fy7pTp0 zi+0Va`Bq_b|HAY+e(79>mzIbn+i6)F*!ON+b^7VAhW9y54U?{B%@sA}vW>aF{fC>W z_e4Lv2T?jHX_`*2zV6~pWx0DpNGAKhO`o-4uNn1DZS&Zg>KgdWYw0BE|FU9S2j(wm uS~TIGcfig?Rx*8iZoIRK*Zt<*z{uboukF)WR>TCV4Ln`_T-G@yGywo;Re&7; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5c6af9b10d9d60eab9110d020d3191ac8d8411 GIT binary patch literal 1131 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})y)5S5wPva&7L;*iTEkY_m=NJ zSKH6~-g((X*Dq1`27i&`yhD-&EGbQ?Uca9{kS&;$`^m?G^;=_T+rJXCPk(DRFt1@> z{&W9?+!y5&6AWh9*x1amH8Gj;yuhN!R_?sm)`Myn7~eIzD=^44X#RW8zF2|%NU)pL zUs;_7feMa0Tyh4-)AcU!#C0f4Vf(dp|2nM?X1}N3FDqbPW3uo0*DCYS@bKMU-rid$ zO`7B`V7=1bhh@HD!OnGsDRIp2oAfnQuKRA_-ov#nyFUJY5u0&CYyI{nH-Qvs$pzni z(_YT$ywIx7k-Ku$s#y&^VKFgl5~umS2U%qT{o$!=x;n_4Nqo?IR51vjaZQC4xyTX!xvI{NjymoHb&o-?QBsE-Dx44eAA z3k$VE@&zW@Zo2+tZ^nr_ANIL_rs@2>elSo?Gx8X_;*=Zr?$s?_u)sn1P1)~Cj=ec* zBE46=+T%{;*84em$}GsY=#FpZN)BrdXyOnR6SLcVfh#Z1lk53Gp6_QY^DfK{Y)M(U z_elN<6@Ax|l9DgXv(J934G*6#dwO+UU0t2)8mCB~y>@Im76+?q{)LGso~#mnU?+Um zR;@kRTkzG}x4GxepTE8)Z1uHEmx@aB^7K^06uHmOc^t#EUGk5sUALKYL6*=7#E=&&cSUBa(5m`N9 zQO;-DY36_D+TJPOuCyh5;`_fxqzZQiX4KTw@O#agec%X44!L vCN!0Co|y2uGM}06{*oQ(I^qAe+pwLwmK2z`E?^P^0|SGntDnm{r-UW|pL_>= literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..4dac80fcb675b68be20ba5c5d2726d2b90917d0b GIT binary patch literal 1674 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc>|*BVXliI?Y+-3= zXy|I;$mzD)9aF-T$-DjR|3}9J=+-@3U0TU;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z)b4&gD?XF(?3ra$B>F!Tc-JD2s?@#FW)?S$wtpxA+{QBCI`D02CS$!p%|56 zs#$fVTSCNT{aeRJu3hTF0X&bEaydFSy*N8NB7{Yo)mzC?;L;C9Q`?Nm*J@0ko&JBK zyC=Ksv*Ygv$Is24dH2ufXM1M~O82%c*uWscF8t)SgTNf6|C~FRHZ|>f%NDnQnOlL^ zk7?$y@PoktkK?tbpI+vo^lT?b##|F3nVqpm-7!L*TPh*fGfXFU+O!W!;(?AE=lCwX8zn2laNJ?WS`DStqeXei z&1}tyd#CBxuXD6T;;vZquAJ#%nW0*5eWLku0;kKt=zz1&KmVRsZhdn}(8?|D+D(dj-`zR| zein<|b&bk$pRFNzfOXXa_Xf@njn*MsvmY?`axc>0(k+|xpJm&rm6lcWmU*2k__-qV zU}{0^P08+~ea9bv+-x=1Z`;kB_qBHS&-xWPg$W*e9=`2pPObx2{6>cd28+Vp zYkrD7mmXN_*^@DsW6i9WE(VkIbJAF@zTw_+Z0mNr@}1ulp2{T0v%k+exA4W^yN{>T zEw4SxQMc4-hT{CYF7JZhtzCJhvzYbs`(Iu`=d!jgyOG)St^7&+$qbWq3-VjvHvj$m zH)l=T^XH9?jN;a>4F2)5em$MEQRn5?UwdC@Kia94_4d);sI5^~A1fJn>eIPJtYg{!rRch;9TMTtf;uWfgEkajDdk&R(ev5^I@?}{a$ O+QHM+&t;ucLK6TV1TAQDmEqZ3#RL43mqqmbzraZlKC+6{+H)~Ek{%F$f zw6LmhlUz@8>cj6}nQPb``DS@Ht9)n(7GmOW+@7OvYH{*SUgPrz${MG)aJL`!+I&;S zM1qIu2j{};M?ASbHuCOoc>O@(_o}ULxF<~herWz{))f;3eyX$|NEc$_-@bjj{_C$* zj>|7|3fxfgv$8n;<=O6Hi>*bk?HX-w3wYE&RqSZIEuz%vvPes=|2osrSFf^Kr#PrT z{}HPz*$>u})ex7NvVJD9xS z^c`U)Z_fo`t92t1B&X}x{NDaqDQ^AtgAWUAO0DK5U%q_#S%{XZ{A-{q~O1#u(2}_AF-27R5fk2N}G3 z)Y$GyA57oYHmi;O=DFZN1xq#cMGi+6%r%<9RU99Gf7yY5|NfnI@_oF>q2-9t&55>F zv&8o8m~}%@Z`#D1fSHjAkEZN2G85pK^X|oqh%FI12j|U`vzL)S5SX^akM;4wg9i@= zs`S-lWMs6=%dE-DI^}aRb!${@O8et{!OpV2`#VJ5oDG~}%)RA`q)zkaPgAE(m2&8H zF!k#ddiC|gngxbgLYH2CN!#pj-o)?o7QWZtH*S=w;*4Z;zt#7F`_tjJ1A%Ey$_xw) N44$rjF6*2UngH#Xlm7q! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..162393fcb61228089cb2df201395cc3168fc4fec GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kVr;B5V$MLt*PG$!O zinM2M>5hx758@Yan=APRlrB_iGBg&Mbc{zYs61Dw%Zo$s$OP9dQ+d2* zwOZfxaAI4W@_dnZr{rvblPRD7%q>{FQEjQG;oC#(_aDtIe`kH)``ym(d<8P*4CflE zdx~|g^#$v=bF6Dz$XCfU&3Wf>M)^CrD+?ug*2#x!O?5l;@I#1!ga{i`p2*Dss}&(n9s77aPs&X?`%bj;oH{-;wXma;c+9g3Y z$cF9xwQJWZ%x0fmdHwa|sI_JfzyH2E(VF*cgFN@x|tKt^1ZSB0H4@FV}#xq2gIK4|MckNkH}uP&5JI-6k=;u>^dZT zz>vxTvsp<7MZ*p3WCH{_fTpXLTuSCRWgYK&XY)#eC zpZLmuEe))(n18;X(TYRn&^kkpblW?hHQm}`_H c>(wzi2=p->{^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcYHDC?Z0Tm~>gZ%@ zXy|I>XzFBPX>Mxa>g3|+YT{@B)9aF-T$-DjR|3}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z|B*)DVu?T>5iw1V@SoVE7MPB3kQlEOIMq`WabPP&fJfUD;&k$N))*mgXeQP zitDksDvHE*{BN8zRr+YF_SU1JF)RxU)j5)0d!5uOTbQDlVbJLkc-v%SrM+6+@;e6v z($q4u*I0gdd~auY-m{wWbGF5Yw%^X}yUB9n_^KK%~ZtZ5j1JV);IVPpvY{(9L@=t$p?0tT}hTRJywWi7xTyr|)qZaI# zd-1-|!fnOHU3Kd(1pPaw%vD<;cFw-TMJafu&$0e}Z@yN&ueO<&-Ym2+YO#SF^Xwa6 zHLUN1J4)Fw-u4hV*PuQ9bZ^j)2QoR&E9(;S4=w-1mba1TsOGIc&j)N8jglLr=dkqO zyj^iV;$y!|c*@0nt}-nCrb*u#PVINB@0Y2@&* zF}o{u)cJZJDHmIv)wpAOJ4d`d|GDR%AD>M5Bq3vd_+iuSxAQ`+x4afKEbv|$ ztj~B`xk^0!;kruU;Ci{Ev%bCSOuCo1z5d|BX#v8i7q1nV?X#5WlYhY-w%WAQ_|hV= zWIZiwgZW1z&ZcdyJvK{LAizwjw|kG%!sc4f%mvFPE3G|n?wztCcedcA3=WwT(9 z!yDD+oW1(`t6;+7obHh5i7GG4cgAdcyx(~_LkwG}Nb8sQLmu++-A98Se6@RiIH{gR Zf?@Jv75DaM^I||{zo)C8%Q~loCIEq9aK``u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..fe2607f6954051b9e830d5ccd5d5b211875b8c59 GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})_)5S5w%VnQNQPt7W2kz+2lV#yNc7_ z{k&WK>`wA!le5bvaP>9T1T6SqRw0|x#Cz&T?*rC?u4FD93*Jo!o!fr4u8aw z_8&fqCr!`ncC(Q2laiG^D=R6f`Juw*XWjn#^;QYyFIdbE#tJZPKdAG6KZlxwT*u-w zk{^U47zICwf6)AKQ0RT7BX`9Off;+$+2^pxbl@Lnd>RkFgy1JxR2?yIZrkxVX&m60cMBnwCok z=Fj<%z2T_JhR3J)%mOvmaL8^Jm~`}4hqms^$*DW`w`OXu{3%qyBE!i2pz;Ibhc)Zg zsg;(N?v#>}`t$Yc*M0Zy-D{gUbLR0iEkXxZKUi|ICC#aqP4TB&UzCkFZ>YxXm%lW) zU9~P-usd8vjjU^icKEG4g-qK;!otGqcf_naziapIyB_P0J$?Gr zcOzHo#xHD=8w}3bO#gk}MR3w8bKbm-7w)7KRutPh)z;SPwzjs;I{ffLRCIKGL{yYl zU+9T*#?N&FSnJY1#D9w0B75qQdE`0QjjM{5efj=71uF3oLuI6Z{e|qDE_3t%iEmw&B@!V@w9Q*lMoQf+tSV98>H>#N!7+g?k>~7Gz za_`>0vJGBOFSo8*y?XgmOF?t7))X(^&9C>SIyC*9an-l}nZf?u_kE77KJj~BV*ied z8YZTur4qVlc^?#8%?+=$yT5PYLPhql`_bXy&ySz`;*e3Cp1z#>?pFEzzpJXMq|(#V zFVCJmd;j$37x?~KnVC&X_UX6y79^?0o-`}+_-VbQ_LCJ;dG=jjbK^!>SeQ`L!33)f z&09QFHaX7n|1(!{|Jn2BmoEzLh>nQxcqmb=A>wsxM@7hqw|{ck`R=>iw%w-9uT#(b YgEhtX#LJi)3=9kmp00i_>zopr0P|5E3IG5A literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..d598aeaa6943ceeae3e356c37769dccbf1828da9 GIT binary patch literal 1692 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc>}qaqXyj^YY+-3= zXy|HU>1OKc;$mrOVeDq+Xy$AJ)9aF-T$-DjR|3}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&y<&D9FITEa2(l7*cU-%d}XJ;6#bz=Wklxj>#+Dyh|f$$|YZCfu5$=8BN#3 z;!1+eCtmTrXSOS%JV?O8VA29^?j;IrXLoZb33ci5Fx_<7b?Gaknf|G>JN0vCf2)5q zbI;s!H*4zU&nxeLKQVju>`7`)3;4ej-{*BZp!&|g>9&II%XY~a7QFz* z)DN6<9$I##ewg%pds1!fT{Cm@=j%hX)?NtB%FqA5AS>?P(WE01?72-33ge7Z6ej#D z6ufaTc7r_2L5&^EevNz|qO=X>pO^1&TinmpdPtFD4G$k*obk(!$~BV8&krTEDJI6N zJXSa!*C?*QoHExwL4>QtG%$>Dt7z!tTPDjtv^`j{#4|l~MW9Jz^?}20Rl3y@)el%2 zxJkAK`zuBglNcKR#%xB8}o!ro#AnaAJH7I|q#`ybFRV0_o( zrZjP*i;`i(x3=@orC+~$SC^+!&~mhgd(l0vQuVG^k9WE?nYHq&94Otup!7g_=d9CD z`<4f-Y~HdVLPu`p(}ai>d-c@L{M9TgZwtN~<{q+@jsJ7rw_-2#$~xAXGFBd713V8*luqu&KM6Vze@Ed$pMW$DMo?)>VxL8~0tZ zT6wQbM^Eq9vgOOyPe_*Qf4=1Y`}!ThjnzU0enBEn^SxHy%?M%TYnHok`Y-!}$;ThX zn7=>h`_B6h&#S#Av(IijcmDkRrMygzmg}$oUUu&1_FVSnLmP!s3J>e7+J4V_^2wCr zM~<+(y`~l#8t%OCLgtQb8iFGG zw~v}$KfK*x?~0vmcW+xg-tyP&_$t1-=e-7J{-!_Byne6i;H(`R691iDzbIv{pZZ-n zzb*BP{&j_|F6B)2F5xpXH@_UidVamGu5R3}R|fx?rC)77{4l~`_E~qsumi=B>q@)c zo1A*ONm8CkZ{6Nack}$Gd#Q5o`#z`Sn9~!fBdHsXDc0zuI10{>$;()zU355YbLuyj e2YJWj8QB>AFq<<>aI^%~Lkym-elF{r5}E)(Rgp6Q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_0_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..65c1f2972dd0a9b3d111246fb7cd22cd57bcc00d GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}e)5S5w)l%pL2ne?9n-eTY}V^()|1X! zD);I_*48%X6U^;lx!0~~F^MWlX`NjEKAHb(_YXndNpClQtp5LJ9>4zk&wJMU2(U;7 z^Yt}zJE$IXEns`Y^4g{Ns7O=Pg#(XYAJD7IXLc_9H0in9;){z`u3S0mFL&U0P`>^dCwcJT+(9|$|v77DQX6*xErF#0i=ax^Gh_+YKySp9%?g8F%07N*du zz4xx)x~0{SFR<3TM9QJ(>AmLS1nKo!3t4_2G=6yfx!w9{K25$4V!00P&SWXyvURKO zmMvR2&YnHX#ByHUDtFNV{{vN>3*0X5xSrtLWhmV!YH=X?!=&)f+&fMlnx5J1qBQYQ zfkh18lAT>Af$bBtd2*0X8STW-H~ ze*F0HuLzxGC#EXAUCh5|)923p_WqN7>KPj2rh2KaxSF+a_wL(Uw`>WSqJ2=PKy1!4 zmY>mL%Tp>Uc1(BiIFV!aJS5=ER3Db+g9|RbEt~(P!e;B`%a`4!O`rZ$Sy|aq*e5*A zNT}tCAxr1Q&IOlWGHu?xS#6U4YMSFtz*rv@R^f6C&p_6Q}Bcqg>MU5jb?CdKA93F z`sU@!NZl(}<_R2`7O|kxMBaSX{H85JR(3~(Q&mJm(&9G8Obt0!wfA20+qZ9x*_sbt zzk2nl@Ae;`=C$-+frX764_j-a!vjB~ znKt(-UL^dBS$}Y!FN?hC(^{r>i=v7LRsxM8Cm1z`d z?#UFE-I@^$=?6J1*zz|1ypkcVcq4mb1d~u_i(vQBp3_gO=A2Dq-ThNszajm=5wH9c z%@68?rg$yQ<-T-#|APaZ_qJbDk>+T1y8fo@chljA5m9k*Vd1Mo~mE+o(K2valU^2 y`s-n)yTNnj1@;Us&n1ib;^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc=Hlw+;%Z^;>gZ%@ zXy|HWVc}%xW^7^LYG~wU}9J=+-@<&X&zK>3U0TU;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z}<1>M@rgxq$jv*Dd?o2}+IJf;c(CR4eR-)L&80_N9 zu}eTyq&1-Awf%ydznSj-c(F;Z>%xi!O$yuAwX8`J_lnKju<}a!Z1=Oj4L@2x4QWeM z>s`C?3bXyYvwO`af4;l(`5obnSF<>C{w7F&w{H}0+W3~KnxWQ^e_qqBw0{QMA1h>k z>X9p8(r{o6jgw~(i~B5V^Z4ieu$3WGIy*Z(Hs6flzMpM3|NYc8Gwu1=cK9>7-3;6- z%Q}7M|9RK5Tzd+one=^KE);to;9ST2>9Np`lW!e2NZMTQ))3*^`>~>CLyX?{hsnlL zy?h>rPD#A|Bm99w#Mfok%og(t&gveap;g(N_Bbisd7$+owSE7kb)VMdv$G!%y`Ul1 zEobq1L8;kn-TW^b_NyMscz(>J_V2|_&5vv5@O|8Phux*1z0b~q>3KdcKmYx?vu1HE zUeDHiP`c6Kf#Y@;ovSA@wHM5-V?WnuvV-01!ZQW7nwdUnva<3=4!Q-3?Ea?a#Fqa+ zDP6|#a#r#q!wBYc1rve;?4SHJKeMO)$qu#dGMyy#9r*@+>1FK)cLa(_;UWE z1f!WYZC@(ACaH8^e_bov>5^BzsX0yQ+GoDM!QRU+|Lt^nq~pR7o$#=rqQFw=UQ;&P zW8MOxIeDMYwB9}cudw04jR+mFMi+s(vu1YaCmd0EofGTgvSPCQxu-?7D?_sEWwsxF zxaaA96xg{(={M=(!+#v+cXbxB}~hnE8i`W{cN}TY0K@m{|Y*;U7$A0 zE!s7w=39l${R`9Q_@#3hURolSY^P;yVBfoO)#<0d8s6tLHB7piHCNP>%Qoiz_8)Gh z-V^=w9z^M+q-i?6`nroZmF4aYA(`w0H+|NIy=K%qwasH|s%zjgucecu|I3PT9hkqM uY0-p#-T^xoS;_S6x$({_UiX`K10#cXytYqgSrHScHt=-yb6Mw<&;$S)#em!Z literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..5c730cbb7d99f7a6b2b8459349d2d794a5e0e10d GIT binary patch literal 1150 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})<)5S5w-@%_h1;5KW>nV|eZ_y*^tgFFlW`fOl(^UTar>kZ@UgX~@ZQp7&|-kBgd zgZv0C~(Tr=Y2-^>5iKFD_j?@Ql)TYTEosl4Li z;@+;Vu9F3B>)Q9QwpTtV;r(!?hVNRFu#U@h-3?qiO#i*~*Kgj_w9?^xy*=yI1E+H{ zn)Zc8E>+fY5|3BjvSZ7ZD~ysWH*5$vr1f^9eBBWtq4gKayQT{}YTNTS)+TUPDE-+M zo4O!#Ptd2WNR^XUHx)?0bkSZ1aS0 zfm;iV0%on5Y;#$}PBLHNi|G&62&aVsHQwIc8#isb6c!kmn46!!zQk(o{1u!p4~T7e zZ7SR46w0M|OL?Z&d)KCK$wnCu^8;VhGwyq?;+nWe(rIIFZ*TbLPoGo{r5KqyzDPD* z=y68OYRl$3m$s`cdCX~bcy)!;pEYN)1TIYqsH^+8r8Vv2vt>&zu-w^`-uHnmR?e}* zDc7#vS*1>EQEhFlbg$dvpVzL12_IU0>izfgU11u{!S5ybXY63y_wc#45=Y>*;s*CQ z8EzJqe+)zy_VxAMx^pMyWP*W5X=&+SyZQQxQHr+nE$xdq?mRyD|KNG0wE=AJPbSTq z;t}~y^h{c@F7Lht3mjIhUth27q!d-q!2aZEux)Kubq3@5NvkHPC-_Pg#oaM{vS&i+ z>B`J(hoYl1&(1Zy$Z_#ytxOEt(>aw>n4|Smb~fiv*rv>Nx43+*^{w?^|K3_ZaTZ%i zUVHt6(|(`dU%klD`FujF`R1a8n|p+^oMtc6F1deqYUP@EX&bJEkD0CXTc){ayG%V` z`fkFen{^8(T=}%KAe6&W%VNLKH@A-Sy#-D$V;-M;Teg>bp~Sil**hD#=P$J zy7SQHd1pAC_O08TF^wVgp?FJx>=P{q$)cGYI~CgRa4Sk#aGr4D<>fuk7j~*C0=2ohw9=jvYTP{Bqum88bXM*qWn6R(<}lT|{P|)mf9%Q@>AJe(-s! V^rb%UV+;%o44$rjF6*2UngHm?Bj5l4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..61bc6cdb030e286e80180fef382458efa20b381b GIT binary patch literal 1686 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc>}F(XU}S1+Y+-3= zXy|HU;b>;z}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^t0He-{G-Gnc1}V@SoVEz^86gdIhWmv5Two9uDxMwfl1+V-tQCMmIw*uw4_l)}4GD4f?&5_PcJ z{=qXewD{_gaF%ToR^+|%cKRDxYg?@FiP3dC`^BA8Jyh6&S6<=#a{6IG#fHU;A8(v` zz@k%9$YrmPSeM4C?q_Ry0(sd^@CxbWtE+VYN0nhuW_si3qE{h-mHKOMuX@!q+G;Lee_!9XPaUmJ z3u`BOJXsgqI6J9hj>_pz^QV0J=eAa9gS-su+$Z-Lb4{i#*;UD`H(5VWdiA#pe@^u; z+hSJ4V){OD(wzLfj(rY6JnHgkq6cSeSbM}H#=i4a%=?8iAAM<@9$zio77~{F?Bcl} z$M}`=Qr#!6|5zn=RdCVSwE2aMt!uyC<-7NI2b+Dfv{U`(?C=-n0cQ)pGZeo}KL6iEF6gapM9gFnu`~PC?Sf6`Z>kkr|8X%}u}{#nf@|kk znHnwk@&BsXCvtzw#ky7N*WW+iZ`FVNGp}~d$@kyS@3{N!uEgoZXAO48-dXwb*reS{ z(wkRHCOx%UYPdP(Qs|%eA0PKSrU*VN`Vsko+n#&BLt(&9`eZ{a^l9 aEP>%@ou<(V+sg)^n!?l7&t;ucLK6U}d6d=w literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6f6dfebbf56e44de7f09209ffb6642afb29d3b GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}a)5S5w ziD6VJ+`$#Yz{k9M#=eUknZLbmg}M9=3o4km=ZCgpP!YaNpr+Zt|Wy8}FPo(SqN#9iFDYR*iYw)#hh2xV#VO^A4g2=p3yqHUPBD^X zJlN&2v~Q-w{Tlx{o}oUw`yI}iv3y*Ahjq>Y-x#I1_2$7bf>cz6YrqB0^bPZ|z&QOszUOdGXm4BTX4T_e7KY)_N>H zoz&5Hokxc8+(rF59t+;4nNq#SVq#-`SFKug;=_jzbDutaDl2&8X<@hCY{muR6I}Z_ zn_g-}1P4#vlE5acqf>diQn34I(4xyPe|@d``{2iq9ZCWm9Kos;GCvM3nd@5hf13J? ze~c`*RE0PvdM#bDbm`Ge`}WP7t99`20oMmMo7V|-KH6^}!Shz5$ti2A)zT)Nvz;94 ze(WzSKKE~P@j3U@&+CpKb=)*7(?lv*?ZosnA)!A{%%+w2a68St%(SR>{^JiUcH(^! z?xrh+Y8W{ti|DxST<7b^&(YQE$#pMTt&aD}u^AHeyJuyZ3+sFQYfrFzuu%B%!Uc2L z+$34w=QDiX!Ye1WE9vcWLB}6QmrNEl>B%r?GBn)2ZCf74wyj%pRkC#YIZiz-5{J{(>+bLxZZOp`MoSUfem=s^%xqbK)m){iUa6s4Q_XJt+ZVC+n(>cCGAA=C3Px4E_QbIt9!jAcl8}j82)>_TYTeN6VQ|8tvwu9WKH7z*vnB`&?8XkIB(5S%SwV=ao@lI`B z3AT0z?TTq0Do@fj?>wAf@FOcbdvDq9Sa}YXZ#wM?fB$%W2sm}omi?flroZr7jwb0I zx5bOstm&CLZQ7=J^X5q(OelzCF>lO1z_jZ??1H(s)mg4jOsK4^yw()&m@Z{?AV6&X z5B@oR&po@3eman~wTz#K=Y?zF6#cM*h3;WZ0vUm;ulg*$xS_3$EnP?Kbo81B+5wZ; zezors*Us2{Gs>f-W!9`&(^PgmiPSl=?@g8b3#;Fa?{y?Oi{Y~?+DW9`GUO#E6z#Eg&`)Jn{pKx_IY+^FS{9`ntJRYcV^%} zZS!OHn!7$%wLiaS-Fp02+5Z#eA3x{q{`)a?RY+D=R?XYDZ(~1J#N-*xw0be;*6-iH zzuKJFe)anG-O|$1xSaaryzRe#_$+5l*uBLyccyzmvR7X8GIL$EMW0UY2)ER%I#7`~ z$#?D2D18ww&4x)`Eh$Epu{swlw_YxNqi3lhv&}2F^^3r!)^*9+NBw7QnDD)TsfPgs NJYD@<);T3K0RR*5VGaNQ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..b82719c2f48fcc0a0b0fa66dcb721fb690a1efde GIT binary patch literal 1657 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`VB%!tWawn->gZ%< zXy|HWX=Z9^>1Jl;;_7N(Y~th$)9aF-T$-DjR|3}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zx_zNd5VF7>8+=WV@SoVE7Q+s3p z$=Pst9S!)R@Q=Of%c6=8OSV;f4sdzw8}KL4e_Grc*C}!=ZxwX|SDWR|x_|r4y8Gek z8;+ed>s@=1UB0ZWEWK=>asItMPumg=5^EE7Yn*RLKXa?B@ot0EvIEW=QmX1AV$=`V ztj>!*pm^Y*Mg+t029T=Vw?ffyF{gJ~a@1i7e9&g?&$?B#Rb5l`G%^!K z8F`u~On9T&&Blz=J_NRZF7u+tm|WlFzPLn0Y+kxPS8j zgO8hEUH^T`>X1&;r%6j*RNqtMTr6SlE~)b4*sCv0p5dRk-v3atGHT|vfq^B#)5S5w@baz1{4ooHnD=<@RL)qKl`L zsor|AO`m1cu@#PTYa*3SFh_7^&3229*nT(mM)#Z6yC3V%%=~sb<(TU=letgC51ljr zJoo}!~06NJt*Nq!KY@#ueTg2a<% zi)oe&#~e9Y4&FbYmcY)q&zy1Af$pvYFKjCxC{!@WH3~go3_ZY8$Jptm*nW89s$ILP z7A;!jq@}Mvzx9S);naPP4!o3lIyI929;13>$2#i=z8j?OO!~L?+y}li2Il{<+)@qm zk6&QQ4ZW!<`~IG8oJZh`Kfx{6LPA3=6_uw>o$7gG>EBOhm+B~f<#1mrr$DuRQHMJwr~15d(8vai>r!OMd(aZw_W3TnXO~&KbdLoUU;GIU^io`a32=Me}YP<6oy!7d`g{{xI`+k<7bL z=iSFAh1LJL7h1f_n`>jZRW^Mmv)!4izW3&y-t+484u=!hOU2HLFVOolXTqxF2fS0K zoOV3bYWeh^;GzSb4q{okxwSgu;%nt-@0eH z|K8PwOX@ql-+jvVk<-!(^Y3NP-oJnEpLgZkdAD6op80s)gB!cFr~mGW_}e*amXvkb zGHItySy@@NlIvxE@?O7tw{HHdSy9(++^ArFJAwD@g?wjc=gL!GIv&SqIX`vq34UF% zv)dzFQh(CH_o3QmyKZ_Y+!LSW!_F46=gS6>D2KDpzkDfSGpMkc7gEAi7`NWM^`ClL yTH2(;4>!p5zViMPZN+z=<*v=`ssDBR8Q+Vgi*I_fl9z#jfx*+&&t;ucLK6Unb2h;M literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..36f76c4a403de205c7806d020d2d5cc29690a59c GIT binary patch literal 1706 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc?B;A}>FnfWY+-3= zXy|HUVPNTMX>RFgVs2*WVrgmy)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zx?KPd=Uc!vz(`kV@SoVEz^86gdHW?$~VnkV)*QQn2TXj^qwEgty)feTU*0~ zUmon1(-EuQ7~agjSCn;OYnSVXfV~!Q+(B?td(ySwK7 z4gJ(R@0R6mkhghr=1t0{ci;DJ-t2SP#8cedQT@fDef&I4-B;w9w>v}`@oDd1*yF&u z`hl{A@AnFogWS9J%PkE$X=rUN9THl~U$WN3+g-uo?cKXKT$e3L?&YzHXKe>W4z}ug zJUeLoO~{5_@&J$A0i6_%)sI72_vmWxy0mO%%k`EXuU$o9Ewfx@cX0o?^3QS6&JD^B zbR-^%x-Pq;@m%kp^6azI429waZ@4VlwL+KkpK*0nn$m>zH+lIkR~d%{#jQR5K-{AL z4UfCh#EBI)_j=1L1vq-PY~5;WENtPC>bT^2K-77n9paK z&Cc~%8dUxBh||J?4N+|EEbq4pIbV@q{>CqG)WYefjd`=Z_|B)E4V@{rI!ScwxYcdtqJ+W^f4q zooc4>b(``;4;D3b_3Daaf9n2UOfdMdAgs|^=)@eA)1U57`t&Vqu~GrUmS(CQ^lg>3V-8+)EJuX0`=D6)1MyYcCSh>Eo>o_82JU){*L zm{R!e$LxGtL0_%gDQV~9%Id6I_e{+`^~db_=QVx;x@nUW61W3yMBR=${Qt_EgZd@& z!fsi=k6rjy_59Y$nj0c#oV!@Erhon1jncoa9@CQi<0YNg@XP<8@TYr|PR^OJA@QH> z$Cb(PiM#MYaJHV1VT<-WKx$M^gDFSb=-+qdo(i{`W2aJTxM?ftpc=ikdPD!Lr# zSRin&amMjV3)bBUyw9W7@n|#_UE3#8w)yuo<1O>IPP|^V_uiR@4<9~SxKMH9%^bbW zx8MGJIQeG*|FaXP(i!(P_BPMsZWKRLFhM=RN`{%!;s9q**?H~{3~`QGPqy;4FLuzI zemg5Gi-SdAi%CroW1ZML<2j9Mb3!x~Wg5hvTz{@8t;^WoYaptc5Z}{aot2&aeAVjJ zo}rNk>_0yFZP{*D zg_xL_GaaG<$6x*^-15CyGikjOf6Pvm>dF->6sq?A zyY=SHn^i14_K)&1m_@n&Mq9J^EM#07lzE6T*m82K_Vf6E9Y>QiU%h$r=Gw~=TV`hF zqW$;h&s)>*#rD@BP3y~VexH_@{F0yJf{s{sr;CzeZ*T9krAwEdNnyRiwEUsUY=!#S zM*}5!+R~(2*n(DH_2fNKsyeUX^FIGYh3Vfv7CxUlsdMM=R>n;e(oCc#iy4H??9_fx zJ$>VfR2P99S-}Z?*CUPd{}>&M@?dGdpVdhiAf0aR5V}ySR59k zY`v^M_H3s4DRa+%?gxy*A~WXJo*~kQ_O+I_Ez{H}=#Gd)m#0eW+ZDQOOElf?D)2jVo_QuKY4mz73 zZ<)OPn9H`?`Q?4**q3da>C-I!(r@Xyb?5HgyH|Jp`RAqCTW{(8nl1PK{rlRCTuHi2BB4W3Mqrwy4=nwwSn_ld`KTTMvv9x6U^P-(C z3X5j91ZZs86S-jj%fc$T)u*F!WXv`v@BHG=Arx^b>?nWzz3!=tcW$1;z`(%Z>FVdQ I&MBb@0KyBL!~g&Q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdc84116b6914680b08aeab8f5b30588c72712d GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06`r;B5V$MLtcqvxx&<3-Q&flrL$wLVkhaZacy~X$o$5+ zo}DXpuS+s=zfrY)OVf#+TV>1VynVXE_OG0^aqr`Tu4k^z=a0_&TY7)<+c}>-I245} zIL%p>x0o6pZ;@n;X_%{Ie6t{O#%{i;1uW}yEBlQneEojkO=;qsix)3`nmAFg_43O- zk3Rq8TNY{hF zMT7ner+PVjG#m7l8l5wl_^)2Sem=uQDkwJASD>O)nd$QZ4zV9R?_2zf#olor-2S4v zS+%MwLTB3Ug9#f_jQ2mXd%?6L*O-1#4e400f8oKcY*A~kl}R}@M@2_p7v1shwSxHXus?PN1uvOz z#~aF}oI5{x{!O04cWxRr%11_59-q-tQl;`_o_hb|N5V_Z(oSqhWwLLbQ6zPpb=mcu zGROU=82x89=6Uns&%Z8l=Cx+bw#_eFBiCQoXW6!Ot8UDSmsMID)~(BHJ9e?)O@b4j120HZwnIr&;|W>;IL*+c#-`o_+Z7=0De&`HnxHU9$Yrg$oZ} zzk4Uwar|-6;)^%D=U*<}eRo}IWZ1IHFYoyJ`o`V)r*=2*`^zi#OTVA4J(Rmr!S}&C z)#6s|+DkP`T64RrpBDcS@ex-&`KN5xb?#OtqY0ONos4G2+|ar3ykzdazTMtpW_;DH lTa~H=CS8p?{%>l$Mc<@9TW94iXJBAp@O1TaS?83{1OUYIcuW8Q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..8128273a791785010f0b854c7cc6c66bcac2a2b1 GIT binary patch literal 1675 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`XklvL;$md%>gZ%< zXy|HW;cQ^)X6|BcU}RumU~c9H)9aF-T$-DjR|3}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&#k`{*!@$>A$CoV@SoVE7QHRg#$&7KlhvDXKdK38nIDKoOhSNO6{W!x{J(Q zVmr9Jjt0HDroTY`fcT4J?%VacGC~6!KL&<-nO{@#ie1^g#3g!bXXd@j=X(AJ`=|C8 z8y>s%pi%z&vvW_L{X1{_{f=+Aer>VtS3iDKgk1lcwkDRl)yey|#@2R7SpAC&sAAjZXPcCMt9l$3@Dm-ffN z_ix|6oxJpyMCCue9jrxsN^^aV@tFj%NVYldepYtf(?!^VH>%>`oKv@t@lChKsFPf6>JkN3(2Rs3eJ2znCATBlcQKQqqz~Fvwa*sFUYUZ^!iq zJ!gN&STOK~&L}?kd!@ad0*CbU)2b6W7DW{ceH4r-KVg+!ue@mYEctU8o!j_trboBt za3yL*RexUhTOje;rsmSqe!)MV&zAT55+iK1bosI~6I1oAS>A1odba9%uWll{ijcw% zf7#8)cD_MWiyh3a zG-*Ytr%u<~dDg+rBQG{HM5xgrforDcx1Tld3on#r8Hz31| zsJ5AxnHVVX;Mct;(pNQIf9+^6jyy3vs^yHNs_W(bX5ODUJXUmhD zLZSmgOV#F|H-EVQuoL49Mpu#6FY!&ML=V6Iy3BRy>p%4y^O<-Utnzf6)*fUO2UQQA Lu6{1-oD!M<14oA{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..31bc62c93310ef21bc4b7a2a10c888ce2e957726 GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfr0sxr;B5V$MLh%y>om5 zC6372X$ei6Zwaj^iQKo>JnXkOqtOVy} z7hfGxZgOE+DYfkV#mtv6|NH;1nnOgPU_WPXA*8T5mcrTggdMI+OVeeG% zd?;{(_0a)?rGE-G2)#+4sUpnRP?|7hq3zt0f9xc6m>wT=yvKc;_if$rw`J|-rlz_1 zIXOO?Zolp1YfoMll_0f(;r+qz3+#4He)o1eaNl5W(p2uXV~;bV4-j;HT+0yysIC^K(4m@>_8Hb<pQcsG|g)LZrmNu_6WKYZ*FaP+%e0gDd9{Hf{IK2}!E#!KVb|B4h99 zn3x>W9MHkBblI|h8!vF=<#BSQJMe!$lbLtns9j6SO5Y?|t%v_Qwr$yxvn6V6`07=w zaw6hbnVFfDnMAwNU%X9fZ*5O7y|4dKQ6+G_Y)!&~%JUC49G72s>(;GDPoAWlP1=~D zs;b)m>-TSvhNm+(PxpSnYhB;{zUFLz&G!^F_M_obez*Sm^(*ORO;psZu&AhC;VmIf z2Mo(joDH@;ciz@y=4O*A6I^c2l{t{RX^CQpNXLXZ_tFpYPB?ucIj3Z<(9^#EZa2QU zXYd+x^;Vb4wQw;D2Ax;5Hs8GQqRY9KnHQEZv|Q6F^`6VkBs$6G!8{`;_o*&MEzb|d zE_L*@c&=T2_;B&z*#R=eHhW_Z?HAxmbGviSYxhCXgopPkSD4&55ZIsAaAEy#k-N(k zB7c~suCz-Qdl0;0-MV!FR(edk0wN=Ces2y{ny)uy>eQ=xMoM`+T!K?3&8#?`x=3m6 z&I2!&)o*V4{ch{@Pg+6uWuJ8%-pg@vzk+_HkHhG&Ye5=qN}Sb{{+6Rin3K#@7&pQGg`_h?BtA4wTjafGhKbY1jVVg zePx@ib2?xt-%nY!lj-5%;XEC0U%u>gS|)Jk_HAj+?@saY@kbs!NZ=5<`mx4LusuKG hg8VY=|GM`X_O~?t=z0_4#K6G7;OXk;vd$@?2>>3C^Vk3Y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..b34834c915d4a64ef10a8203c9c16da3589eedee GIT binary patch literal 1633 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..b951e162e90e4395fb4a0ff4570b4e7b66b7960b GIT binary patch literal 1606 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`WMJ%M=4N2*>gZ%< zXy|HWVdmuGXku*WXl7<;Vc=*9)9aF-T$-DjR|3}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z#RKm){23FX_u#qV@SoVE7Q+r3p+|2D>t8gL}l5+mar>IuNJWj+G?`+{Pp3e z`kDRGvE$h61s&HWPYQnHc+&BLoRDUnn&Gp}hPyvjKIP>} zET6n(o0I1d1tfx{2t?px8H6%V#rxm^jEk-Z|3p14g41l2vzXZasNHOV-B` zELYO|TK>oOMIDiP$`6+Ia!3iYvmbQ*Am`J3`T@rcrg^2^D?+p$pG+xQ7PmhCz*4#X z@SY?E+zRIBXS}{>?`sx(3 z7xA42)y12g_DsHc?{@gk+LIKol=O*pT|wKVmQBKO1)L!Voj35xu$BMJ z-jn+8T)&!L%Ef)IZy3Mp+U&l)%~e)mFA=~B3!X%D9eyFsMn?tJ0N^|zAiB_fVw9jW`!@H#cF{jjRj z7VgN5ojHT|vfq_NL)5S5w(LN#W z62~J2S{HRpJRP+)D@eLkO)9!JW7egPUVb4_-&~ev@rZT&vx@qsF&zAHK}0Sqcw&n4 zmW#dmEvLObr-+{wT4=LH>anRC@AS2&|85F+@Z3to>Dc5yPG#rcocWWs z@8>gRkIP#WS~WJXFKOm!4SoiY235 zQ~d#*3f^BLHVIwts~l7#5@*c#GMUG(X?g-vN^@WUN6Z5|4r8v$z4yMly1Lr_{P{B~ zF76)Bk-n9yOB#izKi6M(ChY_3kEu?dY?$UZ_8+i)d;d9CxdGpepXI_D>~`BGvi>@j zGQDX>_4geUR$cg7*ex^(@@l@Kcniyh~@G9)b+F8Q#T2x}R0oRqwo`*C+`KYxtG&eYPj$bUoF;u`bFdfo)t`L0{2zy@xp{b6T3QxgyYuQ*t9}({Woan|C|bXt zv-p8Y#le&R&y{n(4Ny9tVkdr7>-5Y^w{AsgPCkF~1-?A@l+U1I{?G7t! z1Qfr@6@504X7_#W7s2_K+aY87rR`rN1ySX5+`R90pt(fTT@PQ3ecdE^D_Y1;2~^BLZ3ZvOJ? T@a8)V3=9mOu6{1-oD!M^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcV&LXxYU1W%Y+-3= zXy|HUX=3SS;o@d!Xk_T>Z0KYN)9aF-T$-DjR|3}9J=+-`BgX&zK>3U0SJF!Tc&wu2nUL^rK_z!He<=fT>(8;Sj_Df1h}41+IAsJ zDR#%jUWt=oR8 zmn1ebRX9D~zxHBA#O9kh4%42-Uif8AMggMJ0f zZ`cwyu&ir-{6L~&nOMZyF!xC(pWKaFyG@+wX@EvaXB%poRFz+Y2#`8z3atGSvHxbAJAC4-Ays|;x7JuO`AWQ3sRcc z@w8~C26p?sq!zxr z`RV5#{i$BDDRRZT@3u2H9++Fl%6H^}<-r7lKU|ut%d@)tV&);}> zyKHyu-4r8Phj`vp$DH!6|IIUBoSKqREb`%+F*Cb$vSJbUqf-?+H+CLBWFByQ@@ZDz nH{X3%UyYKRa^QcOJ*xymimB-Rqt=X#pnAa5)z4*}Q$iB}fh=$7 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..61b14bb9db30088deb7401239bcc23b5f5de8159 GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06tr;B5V$ML<_;yr=` zW!OK2zH-re+3%+nQnj*u!SuMQ7m8IK3Pwxpmv~;8UVqZ&z<|(+FiNj z!Uib|w&#xX53^eE?oQ|}S-(bR)`F?G%@60*h8y*Do3 z+dyJXu->(Uu``7C+uJ{oW>G28<>mZv=%5Va)&dzGfhG=#pEJcD+U;q%bf(&QVZh#- zIeaChrJO%H7o0ui%B^B~N8N(^_KxsQKE4CRAHRQYsP>+GSnbCQ)d#jy8?1Nl-u>Ll z+S=9Kz1`tJ@hR8oUmh*rV0YYmZP4!R8x*}~_da0ZuW7h`XZHPvV(j~zoK@ud!;d9x zl)7;C{Q2ptSxdb2>!#$^Y+#e)N-ofK=MOt5-f_roMayAjx^|f5cfdHGt%9-@B)G>(;H7A*QykF*T_kJ6<(r3~l_MC_8ocBa{J{`$O`tsLk&ttR9b%jf{ zIX#SLaBV)D7R_a0V6Y)%#mhZH7gCJQ23m0S$)26xa79=x?#NW5NxV~Mn#-(_qIXgR-i;0VG^;=%t()aSuks~dZLY*(xgsr}xw2@`QpS|CI z|8;-bKJCCW8CT2A4%796!%i)T%G%%et?FV%2)pSPPmkr7y=SvpE&E&|yZUrgj?A_X kJF|WX&SILjCG;b=Qp}3B^Ch)T3=9kmp00i_>zopr01Y2})Bpeg literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..063458f20d1a04225eccdbf6fe13cde050b433a5 GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq|*b)5S5wJ~XgxQ%p0Nv20;z_ky!Ix3=^)uGr9&)uHj3*LlUyjK`P4o%sc$JGqxj254My z-5s`Yh0EF|v8$^LePz#nc>DJI^kmCIcemvmBTF7WzE^$jebxSA+x3clkJ}DN7PJ>m zoBFY^D^=xz(T&rSB^j?rzB8M_u6|%`U-=yN!}WI2T2tK~f81dq)$64+@kDQkR_U79 zmrv{D^$)J&WqDuz#IB*)Mv`#{#}WnJA_vC02G$Qudmd)TSk0Yx@nwnU)~K_MRxZ!C zJ8w8^@#Bp0k3HQF3fG41UKX^{VrkGx#}CiSIOLf09&TlU*WE%;P|fy&{B8}ufh^x+TM zz~IL$ID;uXVjkNq8J6#sGJPE}de2jgB%go(EuXge=1a$aN4+0#ZZLXTYRU0V(XrL( z;%0@d|0MbCK5T1u+|(DLQ+Dw2N1e*O_ofDDELnXutErCFy!wj@N26<}%OTIDLFbY- z9?_b5Dr0}s`vazOEBM!b(U#y~5%X+m$uYYa)W(axF@ z|EC8N0;ZpS+LE@}GSNh8a>PG7HKESpxAIHBe&UFpc5FAtyZ0x2bG|H{eRdf`fLqIF zm2lZ4eDq1oy PFfe$!`njxgN@xNAeN{hT literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_1_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7b1a16679068aa271ec5a4eb9e335d7be73cb2 GIT binary patch literal 1629 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`ZtUV_gZ%< zXy|HWX>RJ~;^b^-Vrpn%?qX&R)9aF-T$-DjR|3}9J=+-@<)X&zK>3U0Sp;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z7u8LV@SoVJJWr$g#$&}($yv}nK@yZYD8c+ce9>L$x;ae*DEax zxC0#nIb65@WBkh)#d`P0#kJiEQlcRNF0Z{#Xq7EIGIf`S%Nlu4kI842B&R*9e&W(* zFnQU^+_mg-@6OJhIs5ZH%kOuLlU839x^e7)*t>eB^Q_gk8OxZeHZaLG&!6_1eaBq3 z)OJg@1Az+|gwK5ZEBN41^}a^+n!o*~QoO3uPpk4AmS}rlWg%0i8oh2lm_I$X*>UQv-3CFM*CK(duex1&`DMwn%Ct)TQ@4y80G}9&VX`xX4`KATL*Kfxx+V@1;TJ+^tSB zwZ>Atah)zo-=}%G?056q&A9f9b%E5AgSs2$iLqBJ#Ar>u7VslMK1aZ{@Z>$0GtYSE zJnm7Bhzopr015YSwg3PC literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..82d26a33452bf897985534006a7220c16fd33c2f GIT binary patch literal 1162 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B^)5S5w@Pc5+SV=IoW1?qrQO@MUw_YEfAsOv>3vfL@;;rsR(*c& z^O|!%=idJ*84_yBafW%dqo#&%g>()BYr?b(b!HKqX2r9OWVbbhK5+D{Hx&Ey`}P5@ z39Q>b!F#NFl*Zr@m>l5S*KHop?Xgpyj zukVG`R;#ZpQ!aU9=G6WA_3Pt`i^IahS4S+>-Pq2*x#g7hms!uA`g~xu?{6wUXjBlp z<9pjVhtHKuldfOO)s@{-O)@LVHenb{(qVZ3(irvhoWH30cu{HS2B5 z1?4KI&Kb%jFA{e?E%!WeM7U%^_(z5c_t{q!QdAb6I(15t+xEch*^`{qKYX5-`Iz@t z36mn%R@Ohf6TiIdi2G6-{O9geUiW?SH#2PC-q~lo=ESm;RxZo0ejge-jUTAi{qtc` zJXQ7hft0$Gx_W!>Wx-!Juin}9+PwJ|AD?v?Pm5BJ+a{+pyW)F~1SB3F{D0uQ(AogS z_a~#~O>v2QSARos%kMdkcbWTm?#n6)Dp$;BSNXg$&fu)=mI>jW;T~MOH_6^hel2@% zvFhP_>#wyPhKxLMbC%4Shauqi^+_OH;Fs_X7e>_nWn1k zGWCG}9mUkm-&>q6op^r8Q}M})2QgZ2dNt-te{A8}ajbjm?GpW#pdCtb&->I5CI+0V ze%`ae%Kp=u=LJn2vCAX3xHPQ#u-Iuu+ygBK=^|GS%U0)i%L3R_%DA20zI|)XckR=s zPqUp$OG_WC1c!!}dIz0I(2VL_Eu*GnGUM-@yGif&9QggNXwEmKFMEY!l+Rt``YUR& z_0xl&tm6E0%y--EpYZ;}sXo>8;KQHNIem=FiGrWU--u&(TUQ__j<_Ho5yW3bXgR< zGU&!k?lUJUc6yoEXfOG3dFh7?xx3tM$DS!i1v51|JUeovWhMt(vt-vIiNFlvms_@{!jKLb25+n?XLA^U|?YIboFyt=akR{0DHST^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcVrc2?=xA}9J=+-@<#X&zK>3U0R;L;_`wKRTghY5YIoAws~HG#hsO}f2F;MTC;X-?NJ>j>4VX)jI-JucrE<@DM*O_aSCIV zYtSnY+{3W`plAWZmCI3*AD3mA>@t?%>027KGWWvL@87=7o2JYEto#1fo{uNKPF}HR zgXGE`f0^WSo}E$pt|<_9teLGMK2UdMZy?usPQj@E)j z#KszUzO`4WD{Hx>b#h2^-6w5Fra6qk3M}^;mbxfy6fX@wtM9e^vUQj1hWHhG-4@ON zBiQxMV(G55sT!FNblyI2Z{W6IdUs*nT=vN(`i94rFsYx6XX3tkg=4FFhPr!emCm;2 z%@1~!7HIw3@jJO@MZ00-$K7TAX8AkIl66fN-r^8`tsSOtRrU6HpB+DIb9S`1ue}v4 zpSOzdPLWnYY!7$v%}=vWtLCiVbAZ8u<<^P)yiyrCO|PD*?r_-Wk{iFUec7~UtM;k6 z@h^II*C!~b`p;c|#j_=!lF9_%2=`636B1Vl%w273GHK?W|2f}6PE6tPO?-FcnpLiR}T@75c@Py^z%_odc{nlfDZL#j)`3I{m{MX+)d%JH)@f_Ri9oN4}U2ZD< z)4%`E+1Nt9sNGMhE z=PIwBlJ}V;+8<mdKI;Vst0Ltu@*Z=?k literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..83aff3ddc3db694f655e24c2989444227b8d78bd GIT binary patch literal 876 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~iB)5S5wVCs8rd}o#m^*m!N)I7k$=+3YjULQ~c&SUD#G~>+mbX>ERQmhKbC~yyUv^ zwsT3O;c3C8nzJsR@OYl{?ov+i_WJva)4%5D7H@hgZ};JOect^4me0RiwEOC9Ih)5~+cHB#nC{4XopZChASU{IcrupnabMG+~UHl6rH zu@`JSXJMwe;?74GAPo)^urlzWL z-x08Vq&tryE zW7_oT?m803ImPrcwSP`Dy!`bJd;BLWdB11nnO~Ma)%(t*AJt@i(A@9V%w_M_JF#50 zx0yfb%KZA{8@?_mPP#6={PsKv-GdJZ1g<1su5zpc<+n0Vr?SgEoqu$ns9RCXZ zxQ_Xn^YzWP;#NDeebe2z>OECnQlFeCHys{%PRDM#=G}hQ>r!!|7 zMK$>|=sO*ZQM$fKC8KqLLD0eOIgRlRPZ*ddr`jK1X)dGV@vl8Wal@s?lS>!OV{>C{ z-7}v>cnjZ7lPxS({S&)UN)umfU*Mu-C~T?JC+#a} zzSHZ4;yZ8UMup6@Ij1Enw1R)j8-|8;{ z(hZy!mEAL)%g16L`^#kg^}W|#Zd^CJ+?Vr&`R?Dp*>ny)NNr>=4wZl>1l5tTd17*JLmXgPa~<`nQYC9(d)0rZ@8JW zd)fUps{7^7C%CrA#?LiPZ+pT~eER|G?8yfdKR77bw3R>HH|K7i|Mb&OuQfF>F*&x( z`ybwTrJ18q_cO~oJuNM%)925t2d$i<@FB^D`S?S=f`Zm}hu@Yh|6rrfHu3svQN7Xy z(%+id=CwO5bXgm=I#_G!wnvYWvZJGC-+5T@rpI03@8|A?6VF~e|E4)OXWqOFNsgGs zVXMFH+__UlUA^7J)HKv;?ztT->zacqIKCF}FDc&Mc_7rpKwn?~)q%tn+|KNC17#lB z*KD~yzxvnLlH}jpjd}Cgyw|fg*(I)Nos zUics2yrxn1@TRU)dW;txlJ7ra60a5eyzk)K`7&SA?Tbqz)6ze8I-JmUN%*;m^UY(q z)T{!H)w@`qlzp$d_w?_if2Wkf^=BWb3olmd-OYOI`^i10zuO!9a`63rMR6YA8;1wJ zM=qXV6N?B7Gpk%U%|pew(P(B)&#{XIYckT9Rv%zo{N|C=%N(5)W91LCVyFC{CH>%* zaaPr~sCV@Oky+K>XH?$*F59+H`ue+XIdW@X`flC&MZQ*uqpJ1l)vH#mPKk@PXI#4$ zW_i3&X{uMMmZs*$N8ij7jAr)v=9{o?+Yo)Ft&-{bxmn)5U%Vf$@s;@=ee^LSch3@E zAC~Z6P4<(P&x<}{&)nDB;^U(y7Na*^!lgvFW4AYx7~kw0*_n0w?E^Plczq-2Cu{nF XsZTc*YQJS*U|{fc^>bP0l+XkKy&Gx# literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..cac2e1b96615aa3f6c5217b34f7a8218fdfae27c GIT binary patch literal 1657 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`?r37gZ%< zXy|I>g3|==IUYs)9aF-T$-DjR|3}9J=+-@<&X&zK>3U0TU;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z?{ciavK8!(_2p$$B>F!SEirN7Iu_5o^GbU*)Xw{`D37&nWvtF%lu$!pHxW0Aq zQ8)Qrs+Z;;*_|f1_|Z+?dp9~3m?;*p#IRmY5ctykIKjFiP)BK|j~OpN|9$_ZLD3Vg zIxP&Cf8I5f0zbDYq#vfYov zdarr4Ts_e{>(W!F(|69>a@7{Fox9K5ezv}>gZcOY zW<%-8O?&E}?8p>f8{uMI5u%j#J!(pH>!}uB4%LHaA02wRbYXY=74`IoTNYZB)xWt> zmAqh*ppNPy$uIxjN<^RNd;fofP0>82Ws&bB><|3P|KHj1{lKbb84Gs38($(N{zhEo zX1!DTmviw|Fat$KXtoyGt7H`5uI8Du);_v}hL)&;5zJYD@<);T3K0RRUkkSYKG literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..5faca75e4978225765267d44a98b9f787cfe7834 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B*)5S5wxjDh9 zBFDX-UplKREK}logjca`g@o_{eTk`=K2ubk1Ue@hl$71=miO7Vu`#dDWwF~$wlgo* z^za*mUD=@X@o9792h|&o#9DhDPaVz-kx4e2{(;7zZ19uaQD+H%-zhRo)(D?jVB*(l*A3w3|VVTFy&#*SBc8<>m zUWv+oejB8wG)|wXtKhuTOoS_ypNA)BVXI4*pMI*<#h=G=ze!V}G1GvN>CblQ zIZt{o{;9dZxUN}(qp|RT$c!f&BR_Cgw8_s2dLb5Yh`)&E41@58MymuyWd-k@*WQ-t zuV24@e^_v^a(H;SyW+NHwy?(cPxi0Z_#tC+QtXn+Ja(HOy$&R3zZHH|So7=L!3(|=>{eOa< z_zw0rf@WFap2scR66IV!@J+Sca`Eqj;1Ak6&b;)Byma#BMVE`bEKHS`FJESBy2R_$ zn&p&w$TvGQ&tvCr#s1)5YZ$9rO;u)3c6cG^Cs}n$UbQ1Y&wfheyn5*hi5~~8K8S5N zmb5Wv^UXU~Z`^p1m61{K?dw<5Dw}!MS6jk9bbDuRDdJPyb+VRg;paJevnrLiY|mYc zJ2i9jg!kc03(suZwk=pxRMaSOV}zB$79ZaXJvo-=6`z+k%I&EWZhfTb9%#dIkNNbJ z&k9Ra6(^rG(O+m2aN_Bv`KzzKe-J5`@250HQG{KvcG9K4`fhvY=l*)tpL;hx{$`%# z+Z%U9COYjZX}QN5r+3?MolWcMi*H)S5oWJUe&z76-RGh>o zmoR8@_Wu0U&Ci>;v{~R+LWFqJg}pC1Y|q+8))Y&#tn^uz!>9Q4#hq2+W>%}h(q@LY zRwj2^b7z$&;*aOFs^mKcjt4MthyKjEqj;KfROT zmIB-sU8l;uPv2iHyXX|NX{Neh@7XjqB|ck&1&>}XjZjh6`MHUCVm9lSSOcp@zsjD^r{N(xCOJ|uxP5ZA}&lKm8ox^n}<|hLK1B0ilpUXO@ GgeCwe8Yp7` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..67b074fc6f5c6277a30e8280b12a410e7447f604 GIT binary patch literal 1710 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcVq|P!?BwWVY+-3= zXy|I<}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z@1b&@*gO-c)B=-RNUG#&DSF&P~`aiT6tr?$33&6L~3U=uNGpte4te`!(&%Q z@Px)IYTJ2rv&>akq=NFIB4#&9WaNlCx;9-@%D?)>^K9bZ z|1?ZtuiNwc>$~6gi_h)-Zs>cNWpXTY?1I^^LK7tBEd9l@gYQw(R?P=ID_FE5Sl=Ju zeDzq2)qiFE*`l3uv}O3duUNH9dRJJD-F@ksCY8pWhPNzMm~+T2H*7Xz`q^c?K!&F= z>jC@X2W%F6QU{AS9|+M373OMvx9sxET7eaOJUlTXx<~F9Z!J9E+mPABJzM-uZ}l6= z3Lc?`NSy=cR5-LB2eR(bIl1h@G0m3gymF#G53jV|ij>^J$rtpKz4O^2sRNn@$CSDJ zD+SNR{!wi|JaL22dhRvqfpcLvxeFM1NncYfPD$z5Bg3Y;)I)bmqx zJIB{;Z^O;*{4%t=c>ZqK>nxt_SJ?8VYZbWna8Hgbe5!Q&SM{y~3@;ewhU{mawIa9e z(=*c@PNj|W>Q;MRUfpeae^Rje#Ls?e9xtu(-*bCh_KKV_m;G;B@=^asOe(92H+wF= zc{5pGT#vetZMR;^k7MCOmv_my$~ z^mnd~R(%@7ewS(X%(oI}TXxp2joVXveQxtJv%AglnaV6H{t4JDxD&le(m45s!R!2* zXCAwr?*06uhuw090ITKtj;GyuJAbJQyPQ)E`@Hw(Y@e6&9WIn{ z_EZq%KF^-lg_5r@Ko`-O#(CT8vzcDrrHVolM`B$ew|4!kdAX~dB1n^OMWty5Q!$Zmxn$1@R9A)+}4>)sbkuV(0w%epXRE4O2gy^gj^I$h2@Q=t5x~-o^#K9GwlV8Ru1g%Uu5_lu9W)0GE*sRwdu8_ zjUEm;+ix#sV%>A-^^eB=KOL7|TzP@*DwFaIhUA1cT>?wT3{4MtGa7SCy4JMvSUsAZ$j{`qDn!dSF;Ou*AmBi0 zNy!x-U*Ese8}5bQVftFo*7k3yEK}R$23J?tZa#^F(K0feU)^UX%XfN3v<#V7!XkDG%0#?RgG3gIX>mM)Q zvg22oPu%awxZQONT|enFJ-cw|)J11U(O8K{k)L%kZW+@2YYPRP7(aIHw2E^uWeQW4 z;k@a_92ORKPW08EKYv;qf>vH}IW+Ns#YG(!6=lVxvv+Lo`Qd!(i~;X-r7cON)2yxa z`MOG{v#Gwhy724Y2$SqMpE=Xac#mxKW&Zff@9w+Ve$!*GT)1!{CM;~3y84WD>-2VB z%n;F@>b2HsVZz40wO6vXR{!MZYqw}z^d@=%^V}qfOQh{r0Au zW0q=)`)|hFFSzvajI7w1w9PC>p6GPkRpnuC5B;*;rTwsClGw(jf5q(?4r@+`zwr0k R1qKEN22WQ%mvv4FO#p=Vu4VuL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..891f9f4cee88d691e4cfa6c4ee5af8281dbaccfb GIT binary patch literal 773 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06ar;B5V$MLt%jGR1d!lX!7u#{rI}f?2^4+Aj}re?DN~ zth2j&!>tp7az@!*QY&ZAzWw^Q)$N7qRu;zYtMnKg-x$Uz8yS2fBhRhSq(?3MMIDYf(HH5j$beKTeA9Re8~N09itb{ zbG*=KLY0l&NjKJG2PHNX$RxceeA~2mLF4v=2?1*^zs&0H?#^v(ZM}BwTG-UX4?XUj zaNzT6;t_fvH21mxmK2tE0jsaJty!ZpY35ANFIBazmtXqaIT8CuX4M15-Z+!?1GzN| zoECCePx$|}lqqYWanIzGiFVbsw_ZOy-J5H_&ZI_WXZd~k4_;x?J1*(2IZ(d%)Td2; zf|~7CpF92cHCPvIZH%3u)nMNy6()VdZkf*d7ea!(Cg0ZU7M#8Ac+Ps#hqHn8U#)|u zXO)@7eqgs1VwsjZ>pIze$d$VnuSwTO$sxwj;`+9y#c46e){RKG|2Mg@sAH9E}mfzYhqSgP&ae4 zVgI?F!|XRyP0UYhQ4Rn8X1mRAt*uwS$e9)2o6p{}nE##K+nd&bccs&_j^je?%|5QHfyy>q}ocih*7#J8lUHx3vIVCg!0OJRD_y7O^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..647006efc967fbc432a278e0232759e32c0be2f3 GIT binary patch literal 1677 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X=!9>VrpUH>gZ%< zXy|I>WN2jRV&LLzY++{Z=;~$$)9aF-T$-DjR|3}9J=+-@<#X&zK>3U0R;F!SEk?h76}wN{`}m(qV$WID|LLEBDlIXv>Qd8=s49; z)4|0hJhAF6zsCQDH4EYvRlRjo+IpaAk^Hxi{7(Kh*DuW;8-4D^Zohjo_WInJ``r5t zb&Ox{%JgQpJ9Bqu`MY`VXBNM=Rra|&<;J&0-8*uu=T)n3GfFYoO0f4IShMuMKs>wS znZ!P>0w#?E48}HgJTW$DOg7K{*-tx}GUegJhswLwu|KRf6XDuh6#eUbV_Dwh2Jtr; z`%Ig?@BBNGyjJPg&s!{URvil}gB2LoF@0Lh9P|7&;|4*Sv*Htd)K*tlRpl+e{Ic}N z%I#aXZap1T*`xGdz=mN~vxoZRk8D~R%{+$}Y=2fZ-P1*M2hXaT4-31r+-s$8@LM_h zT{aOt_bYSG_1C?(eYeFZy-~WJpZR?GG=7=qB~~Xgcd~O7Ob(KlY5i=zYuB#4-ku&A zx7!&xIeWzT+N;C8TvodIRWrE$lC|L8*J!<9T2r&BK$qL%Y|YvYd}bVqVQ+j*ZtiL9 z-t*XF+Uio@FO8uKTE#7OU;Vygf8@+h_rB<|i;G;ZH19V1u9?35_MPpwTiLkZ`0YRN z^UrMgWxLMTT>aH|Ff+I`_wS7j`xbAW!C}?8;vvW1;Mphm-qhINt?m+9=9VdOLp65C zCv&BHOuIRY9;jHvCY)=1aeSJVQ`>hv!~Fp_3^H-)WubHc3)VI0( zo5XN1*K>+p_)Qm`h%u<{#qE$|bz|&v%o(Nyf?B*$8Oy4wNWl+nL9?AHy`Fvi7=1hK4zP9g-RHkaW z8uRC`9p7$Y*3@xMHSu(9la9 QR6j6yy85}Sb4q9e04ENS-v9sr literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..db434811325276c7a040e046ed0da4f191352af5 GIT binary patch literal 1007 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf18d3ecf03fb14f8ac988b1c7179ab31891660 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`k2r;B5V$ML<>ygPyd zC61p>bDP<<@VW-8@ug*AjNHg713?W5~%9v zj&ccXnRF>FO!SJ9((XsX&Kuu+vHu#$esT4piihms=gZIiyj#8h^W4QrJu5kEEqKl~ z{4|@xs(!$4gWHSSJ&ljVHNxC$#X0QyckPT{8YJnjHu;!~lA(P6@$}Tld3h#&&7uJb z_3Ph1koMsIuq}Q8)1!p_O%KXGG#xW)tiAGHrh?^O)5T|XGkuOdDB5|6uf4f(zJTr3 zj4w^{CJ)jJq;eK-U$xx)fO_T8fARf|VUC}|qz|@pHCfN`OFx*m-FWudV+t16Gxq5E zoS9!!JKOWG)1B%K3)vn2g|2J1*>NCvNsONV6fafV3!$q+*G_sMoA_w?+E2|EPAd!K zW8Qt_opvyM5V?O?zanYU*(>b0`RCI^VF&-*K@(_@cc#^$$urJ)fSi z=;)F^o8yHZg^7xtJiwZsso>V$q#7k*%(CB}-!6d1-Xtb_>-=v@5*#f5M6xEI{Nf)l zX$jNx$B!&7p6NUqy2y7=pj*_z(`T$F8EdS$!Tdn@==w`9-4@+9syOgEK|>^}Z1-Iw z`-3iv1HdwP2h zJ8g`(!Ypgg?G)A9d^qh_{-&_inIW|~na&T*FHOGX_;p3_Sq26M22WQ%mvv4FO#m@m BRjvR4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..e172e18b22e9981795aa4e2dbbe5e3a95ffa551b GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq^OB)5S5w@Ql}1<+e?iz{eR|Rm7mf0pFA^G_h~8Th~1A?AxxRN%=|>FC2gT@neKenZL-<&u8W1 zH{HL^Uf{6sv1Vi*>lf`Oe$Dqgt?F?` zlVjgqrw>hsA4Y7BT6-pGqXEag_sbsme_(oYK;>(oh6tOA=OxD6l_8hjY)xQ{VLN}| zc-7u@d~D5%{l}Ge#jFc4krFkUd1hxG$EDNjne!|9ZpAQ}SI)EBBFG{4@%LZD$tREW zxG8hDANJpTGbfzo_km;s{sPDc_Qe zF!57QKTVEWyX<91!S3+rre3$?Wj6($x^jFg)B3@BCy#NjGxuDsCdtU#u4mGYH(CGd zy7*JFpqs62=B`G`%L{Dw&S&|WV9Vmj*|g>B&+oko7fu%m-JkuR`(Lr+{PWxQ1xWL> z@jC9lyU(pirBC>5+k@f>jP^est@@(s_u)+Whnf1P>YuK<`ikS)-q0!GfpG_|E5x$z zD|-Y+3zojml;vSzQe1vn^Ae|;P$$RE7{AwFt0w1dw{Cs=KHF%fOs-uC!<uJ1{E@x$w=drH`0QaPyZP4{b?34gHpt1y_7#J8lUHx3vIVCg!0ICTuEdT%j literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..8347aa05766f26cbb82adab133e4a5fabe8144aa GIT binary patch literal 1591 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcXkcpMXlUf->gZ%< zXy|HW>1yEQYG`5ZZ0u_0>SS&X)9aF-T$-DjR|3hEfWH)(m79_g#;zAn$}{PK{cdH+nWrD~gQzA>y(mg~RYaWsj4x^_pNZ;B01_SMf5 zZru@oAbh8lS4gBr{ZA_svZTJ&vq$2gEE`%CBVY z3H&2BpXbgbS8Ki`^*h;%Z_1i|Eeo1iG$BB8-M^{po;^Rm`|i8oUF&9lt@>;GuR`7U zhF-_lf_L@VXC8lilXmTV$NR5U@tb+q>8o~ZPx#)*Hm7Yf-~F7kbqjARtf>;e@Av;M z%SYGDt9~8P;+#qs1NBUM1iNZI+#i2g8*G<&A z;HT|vfr0sgr;B5V$MLh%<9*I1 zN*vb?>J(Y|IREB`6UYASHkd3LE|nw^<@&4sV92RMMTvSou_r8UospO|`&uiv*{;Op zntCVB+?TvI|M1G-U&SteYvh0btN8x;_tlGrpKse)TR*R@KmWUK{`1QD-!1EAE&Hk2 z(p;**o1*oG^|phJ#NspZ++j^2=T2@>kX32?*!H!>;nulDyph&@@82kEww2aD_*mg2 zB`qB+B_(Af%jZ7p^2?r3^)pOm7r6E{)_oA%@pG@Z4b$!h`=coh&mU+@u*`Ru-6UM| zFoN5HPff~9t!&akxesz*8f896iZn`n5MhyK-5Ikk^61f{x~#0MQFV3y%sIS6_m)hO zp8lNE)|h_{({l}vdEyC@Gk9lhjX$62W*~Lrhb6lVv)nmB_O<4nljIj)_ij*oe|g&hlDL+h7i|89$Q_Z~9{`ZYOGVtVg9 zHuD48A7*9VI@?p&xOkH2-o1Mh@7}#@=6H#>DQOLhYZHIW2fi5zn>O-#vGfN{a2MQi z&S`?hYa3hLmy;7D<{#KH^-2u0TI1CP>^kh~4apf98cTNV`jwQKxpMQ8B}>+>Teoh@ z=FP>+rY=y}!1=~3@`BHW#AXFc6;q-Hm)lA?=!)RL1S?tfBu&W{qq+} z+%hd3gHpF&YMedu($jq$lWzakdEeyxhNY)lO*8b}3Hd3x`7CQwr(UiIdt71K6E&fV z-?CyxZ}&1op|B>i9|{_Q8{aO>ozLQ_Uf}=ng5%POQ%Yv@znaSWR4snN9A3dKcbx)k zs%>iTy{lI|G5>BZJFmy>!dBS=$J;<%9)#7gXcW3#9SguR0@xeh~B_ph&97RP% z?e(s$S+iz-6BjqPwTn+)-n)EP#VLzk-Tb;udcxV5gwo6RBM%mTzm~GE>&EWWa)oO; z6@GGmnsmLTgtz$Sf>%rbsj;x$e*3Na#k#p2UeUR^ZxgrQw%xjC&mYEH3(dAT=g*oo zYf^99-<#g9vtv3YrpfB>?$DV0Q|scE*ZC8tHFouC{QJ%s_{}i#-rJWiIbXkewTbiZ z-@gl+o0}OkLY9BnzM`?QQDJ}JHtqkq_Zj;iY%krJbG3?rfq}u()z4*}Q$iB}H2LAo literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..097cfc4f26a3029e338569e8ec9928f54324bcee GIT binary patch literal 1611 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcZ0_h{Vd3m#Y+-3= zXy|HUX=-8NWa4P*?B--*YHH{P)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z`a!|yMuv&X}_n7V@SoVGt;~?gabv|(l6OaCC>_b?G(6@b6tqW74{TC?JYrD zxXpJJ1ePRk7Zcy5&E=%*y17vBu7<~f67{Ag)^2G>4VR|f$JiHX%vf^JW>%Kaf9C%u zO6Pc9I@ZK)_slNs-JkDsish>oU%cQ`CfU;vcu}3${J%YPb!fiTT)EX(v!WNgcGnQ8dT7FH=VG|(sAGVj%ya9>W=yHaL^nvr zFh?I0nZX)<(6NBQ#*kZQs@LC>DWA%A#@yp;+}hdMS`3+i%Bi5X$G^3A&c{RQW;k0;YR2eN}`u z`luQA71_%09aoxog4w#!SVTD7#WwhppQ!1fePupkt>P&MDmSnQJy=??HA3gz$)`oP zpB(jCx@q%F_QhWBcqeMS{`}>glCx}%;;9n{Wn<1J^SqS#J^i3`RmkPi*v&UQ{|RMG z4gOp+kI{2N@TbB}od-kYZVxi65$dtcDm}z;hf$9EFVhiK?WtTZ@G}&?UoIBrJ zd-KE1mlGsplK+ZHq(paBZf4NiwCV0ragaK|-)?(q4O4~jjun!5Jb#mtV|Tff`*_kL=dZM8Y>*&PG_#xS!B zFV9y#`?ryQ)@>gCx(7}((*D}*IDRL3Tc!F^9f{4Nl?y+7KD2>rUz7eFcKcJl$DV)Q z%gw^{`^k#W6*luXWUl}9_n+$Y(_5u;Q*Aa^ZI0c;T>SAwNkL)C&V;HR$GaZbtP8Ju wy6J;#$c1a{zMpFEzWyp^=JmjSb379dL&d>g4-MV+dx45~Pgg&ebxsLQ0Na&fnE(I) literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3546860670c3db283ac36d9cc4a94be6de79ad8d GIT binary patch literal 764 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06;r;B5V$ML<_ygPyd zCD;pQ9}8S|+~8_YkfCyJmf)7m%ZpsMbSP*oVLxl)a`s1?f~kD&ooPm*jS;gm3|$q! z2#9a(Sj3^a)VF)Zf~FO3y3X?)Ez0{Je1ERrqrJ%*T=o}sKA-n{e)0LA=K?zytx&4E z!F@b2>KLa5k8~nuxxPQQuz~Yi^+e&X*3LJIf6aQoHf(kC%8*kteAJc;cOIFd!14If z(ZU_9t{=}ox2|dBX^)-VuBDRD?&HAwhFv&iAw$@!&nkCX#TVr5GoO7{>P}wyv4;g6 zAA}v%mv-CzaC~TYC@{i%@u?RH);6O5>)u_=See3exLu6#y#~vj2Sq!(%67+YxtXKH zBsW8Ob%?VX4a0{63Lm^aj3e&b@5MLz2FCzbGkybrYkrG>Gv03{;=X=MuyVF6Lapr7vB??uO`>O zyLjiF2y4do+Bywo9*n0q^e#J5W#OT`kF`wsfrEyKSA>q(#T>Kliy2>>?B>7sba*Km z-|k&7&FTMTKE~gX4y&);Ds(X29#NtE|7X9%LpEQ2`Rb#0xlTO0sJ`w^&BFKRMZ|)& zH{UUyr~DvcJJY&G<$?~e6G^LgJZG#-zr}N6*#X8|fj8C}UO3y}mAdS1!x|aW6|sEB z6t1jo;LqIsN@c;s?Bl0;7hY}%-!XfBKw)m3M)lk0JIeG$#XPSw`vtly$#SJ-Ci)0` z`zx|%soCd{$5-aE@US)S=iYiUC5q!kiB-3b40oUKStkcGA-`KkmKt5+(l%bNIma>a z=({Dg7S76h`+lYGXWeo3Rf2`gyw4RjOx6dFBpH@347k9`)VSsR^V12xtEc-d|Ndd_ zx5HX97u|_ju(f-N$hIu^o!`6@C9fafP!gdr)vM~l#?1;&-yc5MFzcUL)cWhDtN6BU cnfHUWpzw~H$hpva3=9kmp00i_>zopr01&}oKL7v# literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_2_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..53b74b103771943749c1a8cd756d51ae5221d452 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq^OC)5S5w5}lH`;`<}BIxqd~yEebrPRuN4oT zsc`xV%x&R&m6Dw_Nv-$E-Ph%(Jbj;<&G5)#XO{n7@X31TeaoHS>-*dSMR@15yq*-i z$-g(*$e8PS;&QKLvTdpFqw=vwZHFFy$j}hkCDVPBFLZy+ znm@nxwB<^3+*@<cKOC8ABC zyB>CTJ?OS-YJXeyd(zdcP#v-ErUz5QINq_!vpg`anX-B(Pydn+yoLQaX1AxFO!>0l z^z+YeXRF>|j#uP8zR=t5dZY!{_lLeqgD(F1`!BQqxNz~#nC{J+H}|P0iRk$&73N0#!+z4s=ZObP07TP(!E@=kT~$$w}6bk9HFyhC~E^``=N6j{!u6(4R& z`sN=xqwPEI9+lS`V%>*5Y?s>xYl!4cKmGJu8teZrmnS?pb?Q_|slr=J7VBA}e;B5R z2%Nv*v$@G2)VQqgYEIOL^{*Ao-#2$BC9Sz)8RqjwuYCKY2Lfx_1kNZ}I9%SH%96N3 zP5so_`h(Lr{QUgZiDfk(+@NM*XSYw~NsER0EYpMR6B^!sSaWW+g_`mG2fA+pPfzt) z>iFs&(_7YCpKY4iSJrNyAe5Z^Wv@`_h3B7rt>>PbVR4Y9+0k8V>Lp(vAD6p%-<59P zU!Gx7wd>d7r2RGu+n2txYTBJ$WGlVa#3@QZ()N1Xy4yR;P8BZ7kN>)1g5UD53xv}h s)h--6n7IGV>(oh6zRaa>=6?`QdH7h}fp^Ah1_lNOPgg&ebxsLQ0O^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcXlm?gW@KUL>gZ%< zXy|HWX<+PP;b>v$WMSfH=IZ1O)9aF-T$-DjR|3}9J=oNh69!)YE=ZwhX=7~s^aZ>M0R4~kf%h=vITxwwIt;4}$JpLPm}grAz1 zVyjf7WN&AF#m}07foZR&i(^Q|tvl1tW(x-j9N7FbN9xv%X3?z`oK*rBn>E zc5rn$X;yue-%#HW>Zrdc&X(okiUmzdQT}mD*;V8ISV#zVn{pa@PJWhr{r-t9I*I1n zR&Kqs?n>gG27kKA<^Qg!6hfi5{sWkaqo)Y}|_w*ATaXT3PuKLhY5xRGuVA){}lT%NN zL{blbiZhVVvB>?lyrkXNTHCe)hnBSw=JW%sZL#O?h^6 zbMy4aAAj6EYP9IGq8Gb^&0jIU!|FRYvyWIlanPB5dhL`Ciu~84+BRmWPb{!#ERHI) z*>-cDFn#xCf^WSf{{(5WH)?3z3F7B+jaJJ*>tA+cm{?z>s+fx_w#6jUhm&uMD0?PLqF0=7k zu&LjAWBK^+pFP4y#NI1eAN^m`^Mk8AX4Sc0_a!FIIL-g~DdV!aEqw>yMkm)bT?%to z-_bHP)A~->&J~qA_VgV1yxE9z&xXA={}29n-aFxUBHMD)gK~bCrav*!`<(k|GfU*# zQZ?(|$8L)Q9UD2lR-SNmT6NMkaKV{0PSeR-J%#S}xG2dlzL?>2t1m#~OY7E`^XARt z{}RYtV}JB}DZeE=2ip00i_>zopr02z9G AbN~PV literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..bea4818a5fd90b35a52932893fef5323759e5afd GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})_)5S5w**?MP z632H71qD0`Sr8)ItZ8^;rD5>*)K2kDIyX&bo{M&Q%sai%@FI)A9TvmFo72wl%A7X4 zayCavYNCJg?+pTbTvj$)w1x%?J~p{@IVt+qrHi*MkN=mRucxoRygljf2DSYR&uyna zzy96w{O1LeQzO~qm^L4j+8``a_=aJ1L+80(BhfwHuU!pqu$ncuI;`I@FI{c!ZfPBc zmnHY_9*LT;WRIQz$C9%0^7W>(&$`CO#@?3UbI&U&RNcX0PU!1CwIcHu373074J z$`wp10t{se1v@fyIsP%dzbw97Z3^S9r|I*#KCnqFy?>sG+aoaUd5P6#ZEbD#)2B{7 zxpe6g$B}KDT5SqC^TZg}K9Ie&u~bFs@0JFW0FIiHGrZp#awfQ1pRChk+h24&j_tBZ z*~<)`g<`x5?{sx>iKjf7G)YKu_m;W3ISl_VowYi+x{F)E$R8B zSUzuVkanEnG+FzAvMU?z%Jy0;|8>}Gvb{|Pm*+iCfm4CPx6avaiFxX%Q@(%kSB0lP zj^8o$DJ$wxm>zg)L;la-obLpLqnPYiV<+h>+h+gc!E-h5w#6rn?$-IPuzOL&w||k^ z7pc8Fbb6olD4Q_Fg>(GnRm)_tl6$lF6wC3Kb@Kzoa+VxAJa4;{)5*2W+E)AbEuFld zX>RkG$%8{={F=>G)^*c|kJsGKX$aJO;#w_!qJ z>Gn07cbylxS2{ns`9biRLko937mf1MSJqz7YRI&D`GSa7XXiWI?DKxHaDDR8jd8Ub z7KW>vf0L{^*P!};*WZG-pSeEPzUVl0=15cSHGy4=FUCI-s(SKTd@Foz+hrQKCu3pel`AS$A8fPo zTtfs{tmGEFI+k*ut$$~1^7Z_M&tg1|E@8Rzq{Z*Jm+z7o#vs2XQ-1q*u*RL|Txojk z)2AZw$(nk4a={`u{(Q4!O<4S;;}Fw+KV?t0>pa^xPHegMR*EO!@|ph73c3E6%Fj>U zO8!;Po82=1-IIvBjM?{k7cQ1Jjl7h5Tz6*Qw#KP%6EDthy7*kA*N(5puD$K_!Gqrp&wOR|KsN9Vuy bJf_~a1ssWne@-wkFfe$!`njxgN@xNAN7W(p literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..5370205ccb33c6a76c55ef9e3832c71722921124 GIT binary patch literal 1695 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcY~p5OZfI_7Y+-3= zXy|HU>1JqR;ppOIWNBgI=4xaL)9aF-T$-DjR|3}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z@2sFo=ye^W?@ek$B>F!d#3q&hy=K5SVAOJyL&$TBM@f0??Ym{+>C4_9zJDnD zM&#YCzYey~yg$40^S;l&jX%#wjhu8guOaM$Tb(3F!{#UbjdlVP=e$+OU^kk<60Y7`_vVQzeA0B?et6QE-NL8C@7H>PVDEG%FLPe>Y45iw|y?h@8$6O=B)iO zJ$bVFg)go?K|)vWoeRGym7p*9M$}GwugbdlE?eJxxe!pa?%&r-t%5aPFH^_jO6IeZ>SBt?E}t~NXDm9429 zvu&!J{rQ|-b zDXBmv#QhXE6sBox~y5U|zCra)P;RIhPIFe21tXJ5HYToawc6)3xi@ zyA>ENE?(%y``~4Z{XxSG6YD}X|1zaajQe>1GVi5ik9$2zKQ!7Ns4We8xoY)l;ipAA zIS#H0c&wY2`03fqK(VVvfA=-6QRSEvyOV9s1074HeFv^s>E}{Pyi&&g_e2ac^f7i5*k^ku;GZ zqDQ1k=S#^xwhf|FF6!@-ebfFx>+cOc=g;DPIZU?GE}!kwyuOKJ(&NHLx!J!LFrPU5 zyd@z^oF!V}`kVy`Qo=eqJH0C>CO*G=Dc$~5$@$}_t$D8%&vLk+?m6uN--m8bYq4Ly zYkLx+4&3H+eLVI2oEsb^i>>WHHJK|%Hd#L4&`3WQY7=PFAIBjisIYmdU9KQ(l1^Y?n(a@BRFkJ5{oo5mNW)B zD(*ku5O}LSM(UQ*)yoqUwngNmvQ#VHa7ndV`QVVtTb&RM5j~~w=xFUnZox;@!dZ16 zEi@70oRsFaVvbJKky*C>-^+NO&d%rYTwC5|&aaTcWp_hQE8xBD}rGuW|g$`YA*3zDxU^ttHjF;+fNGB_Mv z+|=zkB?~``6-#3+U#7qkY$JD`ZToFq*2=p5@rP6cE=_CQe<*v( ViO#gLZ43+y44$rjF6*2UngE4jgqZ*U literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..28bb4c457e1eb08e84a2c4cbfb24de84bac77df5 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kgr;B5V$MLtUHAIzw;3{3d#^t}?eDgr;M3^?9?x4!%MKJ;>BnTWa>S%= zd2e{N#M8rcPg&fWk5$Je3GI;jQXoI;0iVY5eBnlIIi(8?J7%#k%U+N;&iumXfq?(V zlXpvg-P|sG?Av?w+4p&0t#A9;x#cI@xl&J!4_7DbTD2+IY1M*@+kV>~|9$zn^bJPbYD{`EEN& zx5sFv%2%BF*to^)wxG?cq7N%hA6o3UT>h(3rPbVX zQGtPmYp!OouL*m7@P*s;Lsh>zqRhP$+|I=G-LUUnZFW^&YMSppj-DrON)MkN{NSJY z<>&+P=Vw(^jGm?{N~A5dk@rlDH0w^3kbKhSv@qmk%=_f-r{gTe~DWM4fSTt=; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb2ffb747f0dddfd58619ae362a426aa88ffd5e GIT binary patch literal 1661 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcXz60?YHsA@>gZ%< zXy|HW;p}GSW?^A$?quO&WNBs$)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^yuJCWwK7>7%EMV@SoVE7Q;V3p+|2OW(G8?cJa((EtuZp+%i;9}*s<{AoFI z;$U+po3HbSgg@*ZGJ8F2DncIn`l>XECoc-TIQfo>%!OkLSyu!?7A(!(a77G$YjyQ@>aQP`y!K72YxWsC0+u?`8%QD#vzvUDcf6l%cR>%0I!$jObiEUQ? zALnq_UyD~{i+>EVu|Bw3NvUGCfCZ0UlV^c&4BPPod>?e;Tb5;(9zJ|{d(g@&W_xBW z3|Qf=G7R9$UYxZ zUHjib(>TJz#rDO&+toRG)@2WB|2&km`}{TQc7*iH-QU!e?lCRr+YvmMExr58%-Mf$ z%#vkYTz+xt+sBKRZr4_M)P7^N-^Z%!T1r;lKMRbkFaL;@w)IeLJNx*g8SAcj>x%5w zL>_6o{pQi^Z_h8^<=1#L#c9>#=T|$!xLlvM?dp<{*B5tiops^U?^RE>Cf{AN=sI86 zgB$9V=kKp)>iJMTS#~!^-P$;TugR`+dXE3l*zef%vuJMMrYlptr0cx&CZEumu*Aho zRC~q;Pt!oHz|+pJpH=GiZ>_zje%(!C^NK@e>JQ8%_uv12@@<*9(}6{cGy=1J&*$iv zJS9D)tHncph1k~}6Fe-Pc(fm%ob^#*VNT?v>sw8Cr7R6;&fJ$eU-8|VaK2-g+-zp- zW;k_a`ROfQ*GqfHT|vfq})q)5S5wy&~7zb2uJYqR7~(^nm}d?!_51987dY1z)I2HOI`7_&-78W0P1^mFI$^ zWzvn8{xNKg;}Y!UjBMF*K%{7*4G_#rZ+rI=vubdKzhxUt=B(mRWROJ{(5$TrbhDZ zuL+73^Pa!HX@7sk`pYk4vbNv8&Y8FUx8P6RLSyb6hQANkI-2e~GVpx>eg}}hTh0~@_Uu`yf zt*7=EnGYWu8To1iD<<&oJyZSZ!}Wu*3G07-zsNj~F^uWoC5_ex3wtl*8C-m@^wReU%VOIdXPZ7y zu;5(Rs4MbIW)7RX$`hrH0bv$a2Eq|j1@D)H_WBzLXI*VM=F~j>9E;z!iQ?(ZyVDj} z`|SHO`_HYnHrMa3zk23ONm1YR(+%P}1uU<^-&@ZA9-SP&Z~NW9FD`n#Ij@=K4Ei4%iRo}i+8A{*8engon|bu>h;;4H-{d)t}HYR`_+-}bj21n&}Gsy*dKyOZap9+jr~J}s{<31*d^Ej{V5I-fIFl7C^jV~lVR z>#mzW118Jx89mu|oo7qu>vKsH-tN1!<@Wb@PSH(g0wO#99kB9p`e=MDxabelytMgi zeV%sSzn>FVdQ&MBb@0AP9@ A$N&HU literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..221fae019f63773e16be05851d3f1b40e5b28ee8 GIT binary patch literal 1709 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcF8tt)9aF-T$-DjR|3}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z|5*k{5b;yv!bVqV@SoVEz|rxL;_`wKR+vf*Z$_Z7u!Txmz8j^uyQ8xPn_Cr zb!F+Bpa+`zta^_B^|UGitSZbjJ_RJ+U8EG?^J&Y4NuKPclg}zS6(5heem5;W{a4@L zFuB8Le(BeLxOwyYv%T{7zyJPwullghWs#gR?m29}SM=ELK2X{^zxlR<=p0?9EJry5 z0d{tW8TX?9u0JrR_R*6kDK4Q`m9PB|(D<@)*)lb?+s8~MNZkA7V5+{O|JasY99JB; zV%X9h*)7=jHAuW*T0Vz`kDuTD`0?ZV5suw1O8h#Fi<)Qr-e#v=WGm8X!8u#-&Rg3G zE;X5ZGo1=QM?KP5t$M9L$9t`p=AKioAsd!%R=9FD>VRYchl=B@U$zgpBv>z7D#y+; z4su-0BQe=zeaOoQqgIZv$r{zSPRS}ItP|$U4m=x@-hR+Iz^i)~+p7cjIJf@4^myeh zet)~`wKX#>>=_Q)si(Jclue#t=XXURyqq<8OCwwBSKmb@sRw-xxc4=`R$z4W&8$t7 zZ+3UR6We;E>nO{&g00sbz64ZvERtRx624wp$1gSM?JesEtQBYX)`y*tTP(U+>0HXW zm3P}--1PCA9Ampp?Bmalh|TwJm4xQ3`@Amm+36Vydh*=mr3>DDl0MO-u$$wt_)@DS zRl(CP)-Qa<7R6({yu;_(YpvVAW*j)Pmg|n-$iTZvS3?2KrZ#dkIesTRIfS+#M-;XO0I z?)zQ2IQ*}1X!hLg$G_jtwtiu6xhu5sk=pU-z*_GsyLp|sym#DPnX}x)EV`NV!pXn) z3m+>>ESa@=#jOJ|*A4xy_wGGk@@jGQjNSd$m3~Y$bF$w0`=yTb!n);#$#>cw3g`S- za-l~}pRMrSOs>!BuFKZ^c>00IEI>e7t+y;p@bBlkosZaWZSv=$%3|^fU2OFMk=^1i4-^FpV@0V*C|xqH@Wp xlr+`N-q%b2zp`mvv4FO#n<4m!kjx literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3c6b388e461c6d6d03be084a8322e41638e80c GIT binary patch literal 881 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~h=)5S5wz51;yHyacwt6#j)Y;A_9<rJ1uXoyste-F-vmU6J2?`+wobcWxGomiuua@&A9z|L6Zb|G(Qn=D4AV zp$1dC!&HX$gLWI(&OEj~tE4)0(C4*Djk-I_c2-uT^_r+S=NxR_)#Awfu7E zt(Y9CAFoagTNX$fR)Sta^0zH;a+-nMfABhUfzvc9-tXVVJ(+180%Tp2m-= za{D9Se4Krxt}MyX*9->_~t%cVsxO&wNpst`3r0Pw=-V;U9EA@q+47q^YG7dp6d)(4olzv(LC>q3ujvM z-vvEvC+;t@P>SLZ5>#5^xj|w6uLu_Pn#GS4-GARxY~NLL<7Q;b`I)OsPYS6?=$<{I zV)1BK?43KOS)!{X-#u#g*`0lA#{Ww?_R}>EF5eP!R5`-wNz`)Iy8=2r;UA3hALh-9 zIV`R=|F2Gd-28wEfA|l2&5E$RC1P^nfX4C(zaJ;eIG32&=Pf97MEzM*MN<@qSF>rYFAR!%A$^aP!nQjS zF?ZV+M1H(g71cEybk(>osb*;{Bjtqi^#lzibz{)Z{SbK2R-TYmp%U|?YIboFyt=akR{0N^H%=l}o! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..65683166ab0c27e58c2f11b348a93a925d1158c5 GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06er;B5V$MLtbF%wfnq+a%{vQRHVCpf?(++#3 z3*P9R%39p}!8E%|>gBTP!g-6c^U~A(_cx#SdadDiaZkpFoj3p8{yDF>>|C)*ivXug zllPUxU-M?{Em_9kcgSs`q~?>0JG&?F?|yh_O|DGy4Ez1BzyE%$Bj(+AGe^&0rqA;^ ze$V?(w10i_{k7<@0~MhgdmJ8|yL9PN=b}YQK@kxi0u^O*FK z?o>?bFVt>8Z!_PDGpy{=<>=K&*G3ar*(@ ze!&&)F`-i$58ab?v1$3Hp*P90D)!i(>CVfgqxa9v{9&+Wx8S4YOTBqx-e|8nV6MEX z>r)x$N`~g#|L%R?kLsFkU@mgy_`k4iDciQ2p`uP50#|Nq-*X`KKKsoB1;51mKfVcH zuXx?;UP;s8mo5oEXK}vyYCAu}qsOcc$if!2LMm#=kzneFEXk-*=_z z2>+0ms9mtH_?d`1(`|tW&t$2L2lvgh^4q+Y&JuVu#Y^>|@Y(eTvOY9O_i)Gbs+Oej z+&i4MaVKMbc3A9nv*XR@Gy8tci#0R*P`kVG$+NGw)`^tI_TRaAr~V1+@!v~zx8>-R z7U`6pjCi$WS0Vr8WmmJ-O7*5~S+geRK-N~d-ajig#N{nL9rTE)@#E%aPd>|L#%$fV z@4zopr05!d94*&oF literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..b61f1277cb3e6e27cd16c5663339406f275a4113 GIT binary patch literal 1677 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcWZ-7t>S$@<>gZ%< zXy|HWX=GyR=Hy~&;$-OTY~kbt)9aF-T$-DjR|3}9J=+-@<$X&zK>3U0TUzf`Ob9 z+gB{uAh0pparuFN4Qu%3PU^d=dWlO%L+fowiKmT(SfFET$gJIKZ=c(>`|+7QwfAd! z5@%j4y*y3s$A^8t|K0ljd(Zjb$r8_Fly0+1Y1%W+^LV$7*M#|^A?LehOZUHaUha;E zl6#B_Br*=LS!Uhms=4yay29aWz0T~jS&tt-{;hkuE9sq^v-4r&qk;88C4q4q5{o*Y zMO$0=|NMUCnr70BOJ*OgIJZcYi?tk3Rd`m&7qhH{{|1BH)9wqUd(#pU9%QLaj%=SF zmY$wIU1#dCmgnyqcPqSAymUHcjl;|ih1=VXuF~}CbeYo3y`W9aMstr>+^XUHlE1FhCZDRf z$aQ@4vQw99d;b|<5A$}}sHV2INuh#w*TM7x*(;q>Pi|WIYK!D*p}1MeohNFhUlqLg zY!j1h$s>=xD?8QM99ds1@YOT>D!WQvSwwB8?`{J@-v`UQcXr%dtM@c-`Gprs%P;#E zXzl-yyXOCo<6j;)9+T+*VYWYe<=dCKN1Ef5vQ9exzp_tS`S$%YckHxm;#ZsYn|P<| z|Lg4tKak5HEW>zQOtSdk@6M-P6AY{6XYSTukp(MeZ1gHk_DTRvD2lezFt;bYISVq*^s!2NA{g;J^YZr zZvTEcrnJz|UgP86U0UvapOY7|UfIZn-@?x+=_rTc+n56z(iRCl-ml79oBg=B%*}YG z+^qWkAH55Nd{fTOd~t|5AaUWAL)VsE&Wx?`?s(oM%fmL=Pw@ZRzd{KN$|7RR_~t+B P22~KAu6{1-oD!MHT|vfq}Wi)5S5w-X2o| zMUG!Jk>0wgX4ywOFJ~{%*WUDul`?5{biS4qOw}ak{Wj+0D(hio#LuLnXayi5tsI!usvtNDCxw#vgS5(0Tvx13?Yei6Y9g_c7dWl(#sz;E=$NWBckZ zaHUCcc(KjBwLXnGd&mAib;35x#!Sz5#;jY@*49?H`s%8ySFiRuMeMvM$?W&}!KHZ@ zjJglH6-;YdvX>?MAk&AC-*?wtXwFoaYcJj;_TaIE;RP{a{jD=Ob{Y09kePk}cigubz z6JU3|nbvgV>HD1zVkabQNSyfSpcvOD%_c5iKCNR`?%v)%p7=UkuqxoPXlM;oIQEml z&*4IivE#-BX$|Rg=g}>z04y(hqq*A+#VJ_$&{@t3Rr#9*LVeGu+Ohdzg6KF&MK&~(9FNHQr5e} z>1f7viDhR+H2S;9jtvupIP#v7NqPH7WTNkkmJ^wE~m$_v8R?NUTV5he&XP1nH`y|wux#hGB$bL)j?XR!*mUevK_5j;lVr_F7?=E^46KG{-MJt+sY=^pPu9uKbxO@<`K5 zZEy076(H6nJeuyb>bvWM1(RM`&(yH`p*yE! z_g&4h-G38NS&Gx zc+N1~a`wKoru*;vKUMAZlz`)??>gTe~ HDWM4f(^RpP literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..f24da096fd31f99f2405d32a3e9f382848cf2ff4 GIT binary patch literal 1551 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`WM=5%Vs2t;Y+-3+ zXy|I<}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z?}PE{cQ#Yre;qU$B>F!XQugQTn>;qK6%Z}X^zKVi7Yda)V?ReRvcGqkg6rO zy}5mnLe)8BRVaf^QMTd!Hh>eI0Ji}3-r;4kvcs~4!sxm*VpHm{q_oH>1*0LrR^Z=ug?oKekN`cwqZ~| zkorMp58L$vjs*?xe`)fs3ejrbmaA{sw^@4Eofy6HV*zSn`ukVM2v3~7bcMqWcinq+ z4g7-N|I8?q6}YC`#CD{zec_UAr$kN(UY$}RrfIRVGC|&gP0Yp3QC>p9Ht`X2qf+a0 z=S$N#Blq4{;VLZSzmxcC_d(qcd}|uKvwX9HF5VI`*6*xRGwo8l`jq9p>&$afZ{Tc?DCuhRWwan^60$5)B#2N!Ky*B)cf>DTSH;DEFz%c?^qC)c+vsnRa%U}~Lu z;A|M1GZ-}vy#g;DL|k+J$9_9e&3-1^?8Rr=UOtt({otQgjdsM8=aqhI!%jO) nmUtgIZR^HZrrT-tED{V?XP@Z|vRds4Dxy7I{an^LB{Ts5xpGTU literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..7f68ddaefce670cdaab885b50f00336e98521155 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq^O0)5S5w#(P#la-*fAjwbsWW_pjGi1~H@;JR{^#>^me1q*gHAcuJkYRU ze>ST?ZVuD#gI2j~MeW}{&$K?c^|Q;PinXt^w%!Ubo6VbIG;?Q(m2I$w$g(phH8(Jw zdUgK?=QW2o=V$*Kq&%9N`IyR^rhh4AlzFhL`+;Ev`>!>xyN)ih7wdkiJh6jmzv7o3 z%b5)OUwq)U;4Ui&uf4;_`6=qJy#Ij(%_ppVS?r1gc4$lWPCNW?16QjP7gPG#le?o5 zetvqW<`_KdF1x{{Mu(r;<_F6+91xMbYL>Wo@`3882kB)$9s3ML)N|)S?n&?P2Dct{Jv<5ZHkoc=U9(vUQ0Vew5EEi z2>qwPk;bq@vsmZPT3$3=9mOu6{1-oD!M<7w#xW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..35b004d00196e07e54e59dfae150a2dbd582b4c8 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_Ze)5S5w{Rf?Q%a14xcGc+h_dw%%5XRR;}V>OAIQC zpZ3yF!BqGI$2zGORZHD6elHL{W}3{?{PTR-$&^isB3zM82Oqd72vkUQy5vpQy1#n= z{``PsgAYA!+gZ=D?aKS1S9<=ToJt~>-C_Q{CtVj`jN5*D@ACqSkQ0d|Z{j6I_81%d zc*)aT9;0`C;oZFOT(j9-2h*>b{1ATjkYU+TiB_kDQ@40us<_D3zd-)pA*~qi<(K0< z7XPfVn|3zsuf(2E-sZHOO7ctnw(R8YUm7Q~MR7%Q!?OM6SB-A4)J3$UMlj6wo4<9c z)SX6ES-S&nlF>CyK5E9N!n#6Z6SL#Hbk|*ZaKA29@`=NlX;PEo)iYOId7#$wLgC-S zsb0K?)+~FwlV{#|7sYMhB&8#Yz^?8bwZ9nL;+>)g}}y|TU~`o^7FUedBw@!j6oPrILN|G{3p z<9A%g1h>eRP3s>$SQ4}{X@#=<;&bx-$E|Da;%~hE`mWMu-rE9;KMStBEZw2#9CBKc zP1^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcgZ%< zXy|I>WMW|8=;&r(;_BpLX<^|8)9aF-T$-DjR|3}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z}&7kV-W)bQ;(;MV@SoVE7Q+r3p3;Nvnmmtql-kB^tQzjQq7_{XB7BS|VbBkR)Ll0;!z z1A+z*MgO!tPFVSC{s#`5y}^6q{KdFh7oSZtK6_)XkJ{%;*Iu1J+_LFtV|vztw@UK6 zR=w$8wf5bS;-#BEC>`N^Ik}m+fbrg8-We^2H%QLgVjZ|P%>C2PKWC%XZfiWArZ;`| zhMs>X&41ikc#i*N`bMVJDor-$yFcXIK6XlI=2zJQfn^I0CS0GjOfvZE=EgYP%g1YZ zZP!GlKK8CSU%G?)xWc<#?_|GNr|rFvVWQWW{C4iItwKhX${V6=*N4ykEmPBYdxK|~ znpn5zU8~cZcqI6$ZWdWihlw(nL) z-kfXrv_Qv1cGBEc1yARfJl&P9Jn;l)+MRNl=gg}Ou67GcKRoll&+zuP^39$8owB`d z@r&1eeRSkDpZ)~jQX#+gJ)2E`KV53o$lO@A-LEEmqtul3+jSqflm+g*^4Tr$H;3%x z%hw(4(;n1?Yu`9-oTz{2`ltUlnA-20Ds~D=^S*J$_WA3^>5U~$?|iMQEKY9yHNER} zkw=YJpZ-Z+p{~2f48uF5n148GiB?aWkX7Ut;;~uP>FnY)9y5h`CFG4CE&%wI}pusrQ{JdCYOYck!i3UK?#oIOn?XudHI< z-Q%}iui-{9lhS{oK+mF1mqm-L4L5uWZ(w9#`o)<1tzStQR91Vs`njxgN@xNArgLTI literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..9e14317c14fdbc8aaf0c1c76cd911f35271565e0 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq}Wt)5S5w(HJKrqjEziEq{UQ?A{`Ovf-TUUn z3yqBYeEssBF{*$6{(bqXC8R*^OGDrX-WrzqKmKZ0uy8f@CY?G^{DJw$0frZ$FWB!} zUgMp0u;lQuBYt)_nC~?w7BJMX@fFD0uwL$Ix|3I)-|fXfuO43|GBe|x?Psg{Htl)bK1?n zQTl;s#aR>Cq+>fAl{YI*J14YALF24ffX$BstnV8nCigzo6wFzquwF^yy3+)U*D|)c zFDIu;^e5i(%F1IfK3MgEbq(9`Ms61)?jx493mBW8MRImAL_178*_77QC&hA7^5nLP z^YW_}$W+zyal7hVwwQl>k#A=SH_OrpPOg-T-6l_#?MM|?@$k3oe2`fnv}DE^Zr-p9 zAywX8PTc%24aBGW>U>w$=$q$fCLp;WpzxOHvP|X88XAs~I(wV%Z1^ytQtz?$AC5^i z-wp0pcRcyOj)B!wdv-m~qGr)4XROoBEjaF7yrA3nvpYcS{F1qT8&?%gRy#3c|5uYI zPkZM{K9HPsTBBFhW7V57s{-xdTarBrJNKUdpl5MtR(_0$`^qBT{{h>W1-DEL^?Mw7 z_Q6$yJjYkIPaY+j=|vs#h~PZM?G&&r>9+T6N6txp59U2uc-Tu>^X0Y(!)H%@_qkX~ zD`hNiUEuSr;@6%O{;8GpUa$Iyfw1Ez z@h7V5IbTYNZF0Qo{nuBlE38huuhM27%ks-V7pz;iZu_=v-+a^4)AwE6(7QKe(#ckd z{A(XKb$gi1TtCTWw^{cVp70!%Py79sZ0e6Zb+2T$q1}A_l8lUuZx0?M70^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc>g?od;^<^*Y+-3& zXy|HU;cVh+VQ6XK>Sp0=;%wmv)9aF-T$-DjR|3}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z+Bq@*GdKkrWu|tjv*Dd&P?;q5O$O}YJPi7+QBJq+A9`JVaXTm`g%T)b?Ty~ zxGxVBSFl%at-25$D9|%St102@BJqP?)S8^Q#q^s3I@tJ~L|p}z9@(-q(zm3%RyqHa z!I@|Nz6aUu%hJo!zn%SlcKhay20XgH;s@&r8s3WRVC&m#%cs}4DRmliU!&fG=KBvs zZ=9`mQvERF`}B~tVRw@@T0HpuFY3pysV7t7j%+>nJJao|gok$9@gHXrS{w}@%O~*e zV7k_*Xuzb`ESn%*u}XSPh}PYoHUG9fuar)_a6WDG@|@tvln)X^v%?UjEUi41RBL6gje_zhUtMo*R7kKE{4OAY0IJEU(f0fvLs%#k&#{*jn-n0YGA0`Eg2F9IFH=m)V$NOx`*6aR7IsQhw zF8h@3YSi4xX1;M2`;1G4_vSO_PknPWG$t~9ms+I_Rt{$6PlU%1lv^`lwBUra7;Uw$`j2fO}4w-3VHi8J1^Kd`%gFXo6b>(Yc0 z-B0aGC*|9uez5KPWc_32?O77V(`wUlZ?99Gd{Xjw;kE+{+LJZYe#qyv%jC^8>t1}M z>E#piZO7hct8YKFe==9ofy4UYT=QK1A1J;1bE?q|v%i7~3^u)&{(Un$Ee9&MJzf1= J);T3K0RR(#R;&O3 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ad01076925a63ff61fc2ffd11c60e69e58195e GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq|*s)5S5wIqBc=y?~_#?p)8L2kB%iM2>uVuCCLxZo>6x3wS(lqziA5>^q?HmRoZf{z!m?U#5bJf|u5PUuSMZ-=};zW>~@`{~AujND?3@)j(21bf}M7Y2B+G&?pn zEbr|$pV~U#dG^^woT+!JGqy`?W?XmBc1C;oowM%?<~E++=whZhd&4=+2fC>b)x*9z zwnuW6KbUluuk4Vx#-Y3$9PAI+-!y4|==pwX=O&%y7EIr+3Vqmkm~lm`;0BiJ9oBmb zdaUg@*b{ZLZ~lnM3vqa?zK=Kjp^fwG<7*4G7lf}A4t-w#Pq}VJYGsDa+jT5cO20&A zTF3wVJN0nlCZok`K1xO1<=P?Ycc@V8tJm@!4;e!*o3c$&EtujzMNy99I+NAbnNiHA z%0iy*u=#S(bvu(?D&uwG3+sC(zdaV7e?a=w0r8x5&s?9LuXB|Ae(m9e9dZRzggN(# zocWNzGx?7ltGq>8r|r4dWd}S|f+jp5ztlDD;*y9xI$J_lUtJcoa?8>Poo^1|OM^1MUHRyd-C@u8U0L~QldK2>0|SGn LtDnm{r-UW|T_!~v literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_3_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..79b145004c7d3193530dda83e630e1e00099fd41 GIT binary patch literal 631 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 G&;$UYfhWlT literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..671914f5878689a36710df486773a5a594bd397e GIT binary patch literal 1700 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 Pfq}u()z4*}Q$iB}7J!k9 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..69d8678ac34ad0f109e350e17df8042f7c78026a GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kEr;B5V$MLt*Jbi=% zW!k%UglrVrkXp>C=+90M;lbG|yrZRnzZ%-Qs#iuY?rvx~EQ$KeW%a7Kl^`nWX$UDi!V^C)9K!TQwDl&@Lz^Y4ulGhO%pz9`wfednDw`{Lhm z^W}HnyVAM;w)OLiQ9zFX~uJm`vv+8B>$<3 z{b4L)=B+r(J?GENzb8Jsbr)?qxTd7sdfjT~hZonb6i~6RmovB|^K!HBluI@vrAHBD(6pG=$@<8rFvsyvnKV!umpA1<{Cn!(K7Z#9V*Db8zs1lNR zWckJamH+-fRfldER$aPayKJA}L+4K^tm3zXgx-{dgoS@SaU|^z0V^;e8T}ZCN9SZ smuGI!R^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc>}YD~XkcXN>gZ%< zXy|I>XyR(*=w|8YXyD>vYGG*x)9aF-T$-DjR|3}9J=+-@<)X&zK>3U0Sp;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z|8pVMFs-{(+f`*$B>F!SEl>=2s?@#fBrUaWl3w)&yEIm!;3D;6$S-Civ;y1 zy*TL7EXTtx?03(jL*4&Kvv_akJs0JP6(5ynJve^wgzpg!sYNP_+7{GoDU*(hI#qW3 z|A7$mvw6C#YyV7+UpCh~-zwkko=<1-xh1m>`2DP8vPnF5i(9Ippr?U7;bL0;w5I|b z#^t%p?Tn3#2@PQjJbv?3u;}a#HWJm9G?$axI;CZLG}r2jv*U~eTb8u{53^U8efC^s z^lrm|Ns0ceZyvSx<*iV>J&%>$L1qr~_k+?8PJS^KdVG6*FH4WMa!-7nca2HO>z+eg z%RN7wJbEm4Z-;Tvbn$i(6XovAH~%L|+|4TxC}B2EY%`C}S?D2Q8)D_o=a;=z=#E>| z`JB?T+Ap4K?cnT-xbwyC@1=W}t;4>*`*wWS_w~#5ONBDimIW^ibMlE(y`ix`{KVnA zeEXWD7euY`X{^0a%Q5WxHTpXn*d5-3!M%i6pOj^KyrOElhu9)7$ zPB)`k!|0jW0$&$gPd)#xa7F#Q0P`n7`Xa32M%wl)zx`_a?pnLK+*$ulDtpbVSLagM z?l!Gp%Kcx}e^!P4d#_Zve~0AyPo_L(8_spF=1gL-C{^IQT3BG@J^$rR{`Ef=Bz)1* z&6l29^u3t-(e68|{eD&*mv72A`LzA{q{-3yUD>}WUr+vAF?s91YsVwsx7#%Rcs*-g z{nZ=x7t7iwEVo%x@@`B1j(OAa*8d5LbyPW~&9ori{Qav>Uw4H&&X>LO^j5m0YWar3 z=?X_S|7zdTzFEd-;$vq8*0j&IJzY<`f3K+W3JmsnT(_rl%ar3>E+tECT(~0RR?QJz zyXV@p$k^2!MR^n3^ScDDpGk@{etOYN<%7s`t;^3(eycyEpC1&sae}Jrs|6w3gd15t za~|0uw&&y&L4ox_hBuP7>TJn4TC3Lo>h$*Fz)ca{EyBwLJ?t4wFD1*l&hMXn&}dKG m^ggGFkNR&kM{NJ4d4S>2&DOiAS0#6Y>H$wzKbLh*2~7Z8+I?#P literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..982a93ee5cbed6a11d87b271b1fbbf5c70194dfc GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})_)5S5wHbcKp+=b6G42`o}Sn16_>In4Qf%u#s9Es+^}(q${;dYUwD@Ev+!TEJ7`xG*w9t*-E?VE)Yd z`hI8jm75Q4t16v(FX=(i*P_(0M)re>TqjLA-mz*s&j0uQ>N(jGCh`CGc5$Icpgy|}Yb-G@J(`BsHJZyaOxj#86W!dmRfb3UkO zY~)xIcGJoor@Rnyu0eoB?M3okam!719H?zs18OPEuyn&MBlRk`y{w`heNF4^1Hx@bz~9zLh; zK7QL*mG8sb|LJ}Bvv0BL9Es>eb(8s?{YF1DPu(qSZRwdZS=NT(9-H==#|l$^Tef_2 zbX&47z9GOa+`G$(+y0V<`gDbNrxZetO)ZmTNgzQz|*l^)TgpAoa_ZL&{-~Dn<-$Va`VL`gT(`?;y zVJD6nrwdm|_89!guh75D7y5DborA6$R~JnyarS7+XPes`?&hH?{wB%6aNdilpZ~P2 zd#-nr%XRYPbDtMJKF{M*o+rgs8#(>TqN8{JUB7?A&BO0~vkiCICSe2iu*D%e@BUwu zlP)4P`)kPdFVC{ia=Z$N_tcTF-u~>k!(?k|#ji3}XZvr;+z@-$GB@C@Q>)uy_0{}e zo@5DKIe4$>M#!1jTPKt-*%vsiOk1zjyJX4jtOtQXetw^BPtA93nYT@FRZ4$)&+7mB zEk!r(vRQ82A}jl*p?u>m$=#oI!)qnETMA19OEx!^Je1d5S;coJSxl<&LLG&z3Jnle*Mjpyy0fB)`=qZOi+_sic1em>*$&*QtZ z{I~l?-~L4|U%$8h>d}Bdhh7;^uHL@AYW-K)uX?k8B)!-u?5P{nacz0;+Vd{c*I%@q zEfaswuHdzQ#W{XAHs|?k%$K|KRckIk+8B{{_2Z`Qh&;o%qbI*diAuLm^LyexnQ^(v zyiewH{hluTspBME^>h2qD^G$_R+}vM?s;aiE>_F)^~#tY{r|7c=Nr%L6SES#vF=a) bPvOJ-RiB>9am6t(Ffe$!`njxgN@xNA9G@&O literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa66a2cfcc9aff9f5c68fdf7f480c4cfc15e728 GIT binary patch literal 1721 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcVqsuvZeng?Y+-3= zXy|HUX=Y^M=xX6;Vr1;%}9J=+-@<#X&zK>3U0R;K8DCdRn~}P5_q$iG>du_I{eNwG z_N=mN>)$lWf3D;E|Go0x`*TL;cBXV)Uch%H*j~J(srkx#=5z-KFIlq!h9?ay7Y=X- z_!cXr9kiYGU$n4RG1;bMyWzp)n=g)e#Z%J59XVEe#bZo+JI|ChIxZ6J@xG>L zR3?9i&GCTGXPdKe3y=HdvaVRQatou@Lqn<07cNJfTN1FkprLrdlw0#Xw+L+GeZxB4 z(PYwx=PzuY2?U#2YPW3uqiUzQp~>ZHaJ12n^RK>~aavH3F08Tq`(C!GQ|4wTu$dHj z?*H)P^2K*2KR7h2ysUALdp-5kpU1XgOxB(~*A-q(e7H!$_3FhtUQRJw>JrSl2_kn` z&bx+97y5T;gITbKpX^oV*_Tr{oPJ=-f6?`C-Klp9Q+Fjv272;OyO5i=VA8jXe`G#% z_82)!UYhE>=|hOUEq`O&1M?pnO?wY;SY*n{@ZP)mU+>24Gc(rg$c?VKdQ|p#co5T7 zrx_m|8by}ImHN21mG`s!n$;@EJ$LHi-CgJ6VpbpE)wy+R3h9%^3+o-WF5$^y_U+ka9a9_uc%5 z$-ISPy(`b??R#t(TGkfP^}qQw-;Z;0zAQx#ZP^^}EPQf4tLCKG_2+kYob^e|;z@4w zPO~I literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..64b3ecd883e1daf716cdbde7c889405fa87bbb7a GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}e)5S5wW6^>IvzvCkShRZ5f+H6KCTsBS>YAivsI^P`Q?}EO#;GY?##(O| z@hhD&33Cj*_GjD5t7hRl__v=d+gAK*|Bs%&?DVxUaz74QJg+_f`F8ca=aup^6*!EX zSidzLUf|KB{D2{XU##<4S71X;fX`#@18i0Kh6f)VVLAWxhwSNJYtLH#TAA&-;KD1( za~w8j7@`t{)AYq>u%rpTk>pQn;CnMgU`n%2fk+K|SV7OdN|};|as|DLb!UxNt-Guq znN^j_^x>fiJOUaX zEIe@d^`Zmk9h+P(a4#x!Rxms=sN`}Vm zFJ5WelQ3E1!{dP8%{Sbm7xIR9tx3=_V6wi!H0gle1D4qirWMbgTOO@FESKACcl6Q% z|9Lg3cJ;>|%KG=adx&5*tKtL^jdM~hWwFnw~+Q#~<%lZDD% zffOYl59w4#!_f_>Dr}uEBwN<+csF_0{Di$4AGo#F9c;Xr zzF$Y`d!Ux*zxD)0(Xhr@OD%Ua_}%U~_jQj4UiWgJ>zZyC-d1>OHuLLyX5UtxnPF|1ayhLtUWR*;YFAM~Bj5F- zCnjtyGEWcN=yu?2WZ1_&`5Ujl?@0G$+}*CmIG4|Ud8C8>j04>JB+hux+?yU$v?p3| g_VJ0^6#lS$=$o(mm2ZI-0|Nttr>mdKI;Vst0C_Eo(EtDd literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..02004e70e216a1b44694424ea966889571faf088 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kWr;B5V$MLt<@;!tL zWsZNGIaPc1qFl41N-9c9FFYM>UuJp)Bt@>|Ule*lnRBK3#b!|!M?dq0%fd{Q{;Muy zO+9}|r(5pGoZDBW-U2nzOi}sOnKc4vp1z>`3m`^ z`#fB8FJ1haQosb($4ZT|-fTw7tfkY=+;6m5eSU*lqvQvMTM0aDC)P{0SP9iM-#;$% z`t-8M>665{F28J4Vbwao$!Nhc^GW?*VZH{jd+v+Ye3|<9%4@dnJF)rGs;gwTUk%Af z3O8cbwBYhO(Jo|kK0c$B~r|{Vz!G7d$Nr9NhRiY&o*s;oF2Vf?cCNceyiTMD1W}>!W{mqOMAoZz?CbF zyexQ4Zt~TqDu21=!u)$d2+M!@EKidS$0JuhbpEj*?Ds3C@LKsLGfw_-%>VpTu|9a^ z+3R()j=pqBxVnpT%kOxx>_V;58z-HE*+gf^-~M~C^zXl2oHBe{#9yEA`;sOpn(&YP znEVP;-8o5$8`vAKsw`_|>AJh(E60_Ixyj6>4_Nt4^ovcyCd|zI!E*b^Gq=C7t-OCL z*B!qmtJj>mzBg&#`#+C%RIlC_|1NWbMqLTd{EEYF&z8*HrleEKrBix)F&vv|6)Xu8rb8^u|4=veQ=LGL1D{qcg(cattS9?FhS?6VwU6vXtFfcGM Nc)I$ztaD0e0s!N?TI~P; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe7e3a93c850493658c8b352aa2e8339646da80 GIT binary patch literal 1673 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcX5?mJWMO3H>gZ%< zXy|I>XlZ2T=xpie}9J=+-@3U0TU;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z)X?mnZUrn^w-nHF{I+wmFf4rMFK^Rzn?j?^sa2l-9L_5`mC(2H=Q*&6&-&C zUGUdf)BZ`3W6?dPm;4*zs#dhz^J?PdN7|f8u#X zfwC8iC1e=m5}G0-_j9h;bk3wg>96;+b4R?6Dfjcw@H%zYxAp3)v-&dy6kk5uzgB+2 z(e$U2mfn-lIQdCGs@u7`QCfy6-GQOyV59)MxPyEJcg)RP<&__O&E5Y@e68FQU+rFF zQu2JtA+F@4XTJ|P3vB;be0n0;@{4_ z)mnddaawn7`+dIrYUsRuTf>w-nHpw@e`xr=K(>Z)yJK&}OcCGEW4#HjGnQI%{k|c! z&Smvku96ed?UD1Y8DHc+aTf3%mqv*Y)bwaL9#W#{fZvtV*ZmZkImE6Xl7Te~ZN@9&gc|ILiY zY(sbWKerjf^(I?aE6 z$^N__V%1xv%Wcj2t@mEs{{Q8skBa<)*?Ga8=DmM~bH95CUJrhG#`ArF?OFHrQ==Cu zeXH3b%9Nq`>Dm48gDz{9iJIIfoSi@K>Ep!-yOFTIk#Bp>%|!chm0XI70h{EL&S zCdaLs8FGc^@(zB>iPH*a{#&swq{Tz=vTrD3;OX3T{4b(XClpVP*`wnXV{Egh?9x)v zYrk}*x`|V}4pv?HbYafSFH$zk z^j)4W+T#AXJ=pEY{uvBeOOD5O&GV2tSd_BHT|vfq_}o)5S5wzBxXD zBFEELUFCD`&a{4&>>uk+%NiRuC@2YCG}|Sx`d!ESB`be))QYQ= zIPaQJ_E5R0S7FuCN6M)zwg1%r>HEdqn`{0yxNvg3)%&~U?|1$$K5zToBq1`)A&^1K zK{g}c4bxQxzGExiZ$7BCq4~avghx}6!MViq%UT|nHy=&lTJd~yz|#%c%Aa!=_RdvU zW}V)!d4c#JhWLZg9~#d$FJQmYpm4O~qWS~tADs6Z&AaM8^wzF-o#6{cY;y35Fe? z-sfE43HswEv*p?b@3m}>;g>mPvEEy4s`9qaQzWsl{hBqKA4~2Vc_#J)P9I$N-cE_g z=&?@S{)>l|*C>h2L3r_^hI3s;caqc`H$7edKF{%Xs+YTQ zN_L__-0|d#E5+)Ce2h6iDXrn*3%Ijrzlz3mzFj9`_b`0how8MDf73CeFmKBr#^-&s z`Cka}I|^k5hn~6JVkDyFxBHAi?xKSDCLy0r`JD+1rPrkW58`)xYjW+l%jMHQ?oV5| zKy2%U-wAu-9Ru%K-j-z2w|K$!drz6hLF1kMejiU2E!I0Bx!>JV<7l+)yoZun5A~J` zt3;L=%kG${SbL^lVdq}|#@7!FjQcNV>^xP}d)VXlOpd6-U56e;&ON_6@krAb+bc&8 zzcGnAKG%SA)fdGTK4<4Xy0eePQ?W^gY*|mUyUB&W+>R}h< zZp-6u()uG$7Jt9KttIvYOcl{#ePem3xkmg16YhLLN}&NDvqSRl~s6O*z|_`m2n a#)-@kvm5WVNHH)lFnGH9xvXX^EEr literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..d61ff7ea0fae8eebda8511cab55558c7d70d0ba3 GIT binary patch literal 1506 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcV&QCP;%01YY+-3= zXy|HUX=&i*X6R~ZVD4n$Y+~pF)9aF-T$-DjR|3}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z`aLT$jrdN6z1vT7*cWT%rt)wkwBT_>C3PBoY=zS;^Fe*nq$CFEZM# zSSMXKYucqd_YxoL#f4kFW0NjM3$SpxPUnc);PfJ3AxmO?j;YJZH7`Fuu>M+c=FGbp zZt*`1KHod@{$uri`+PNFmd58Vm}FY)dZQCKewoTOcL#iYbd|6DVEgh9a(&KW=bt~2 z`%~~n>Y+wXvuMQ|Np{_$gYvD#i$D0BFWRMVRi?MLApZ57_Pra{{1)4DM;#`6zjTzvoO-BPp+ z-ZDpOyOe5(8?VW{2Q8J$MQ54ZW9%-FiaQ)z!L)h=&IufTTFd(WBX>H}rbi`vXmsQsn{VlriLN#XX(G%bQ6}JlNIPibTs^Q&bYQAz;B}=;Lx018R z*JRIn!jRLZTCw5Ux%0=)JYSovs{fp;Xw~+%((fyxUtc}=yM%99*e#LSE9^w>hF;?} zkNFVdQ&MBb@07#uWQUCw| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ef30e4329c501631b16d4a1f36cd71df88582507 GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_ZY)5S5wj5|OyQIaf3CY=tD=$ez);!=2ynaY+0&8H-7SW3=t6LT|F;a|z3o4~+x z(}2UuQTIep@ng;lb}qNM&hZM~RKJ~cFZjZ_owWz@`F=Qx#7KRA%QmMmxV7hQlYIia zi8V(JquGvY1{sg`m?v<)VP1c>{iwxz`4@)l#}3Bx$u!0VxULVo#JuU`w2v32HJ*2T z($st4Js(r{l*voJ&Svgj6})fHg|y3_so#Y~mMR4NJH=kW=q9P8dW!R>ACvv+bD^_; z2*eqS>}%R7Vq3xc>R|PTb2|h71#vDn44B(trXA>CRV*wLoujqCHtMFVg-YjZrr$dzI5tPBxtULVzWsrC?vqOf z`Ni|>x*R^b%xK>c>9%Hq(dXtzOnj2Rh5ju2%b0JTxbO7EZ@q~k5373~Do>wedrP+I z+K*HJ?kv+dE}jwJG)XBkdfl7iitEPLE7A%hHBySEt&*N{e)6%2(*)l!1pcnQFgvr7 Roq>UY!PC{xWt~$(6973b40!+m literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..2504ed7fa3921e36130965c174de4178a67cd37c GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr0Ufr;B5V$MLt*PHVda z${aslAwAhgGT*bS^^^F9t2sJ0r;-=ih?$j{ZJMBa$gfl9NW{dTvYaJ4NBsUVJT_d^ zdFJ=8KP777-%s_NIdf>O|MNS=`=8HwZ@d5Vri@u>jbRdDTUHt=&zhRXu}k5$OZaM& zMY#<@5?8)n!OP*Y(==fcALrYaev*|pMC51W`0RES^pO$(-X`uh8|jYsn>yf z&jE=y2UcD@pSXc9xIai!sFQ=aJ~bf1&~Qg?n!u|Ef!E!GcnevAg!Z1AcFA+D+l#QO$PB#`jmfdqpHCV^ za2QFg-oSaExMJD$SbtewgkCd_03qWdZbh8&r9Lyj$#L6)+qfH zp48;RJI{GNqfz^vPN^2l*t_wPf4*v|O$oiAY=7+7?UNmz7U`EyCbZ9C`IK;>-O=(_ z+NEO(B`-?sO3nUD`>Z_Zx`TcFt(dc6k7iuDb711FDf?gSFxq+JyUi2ZC;Bs+ufD0B zT(l&x%=_j%9hv?2|Ce2v_&vz%=y$GDdK$aa-c>EIzLp_4Wwr9EAJWZcbJrcoS@P0A zJZUgTe~DWM4f DNl*I@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..07bd8b167c28e9f2453c4a2f983f0e1e4e59487f GIT binary patch literal 1531 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkc=IY{T;_PPX>gZ%< zXy|I>=xkx^}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z&&g?;57pSQ@*E*V@SoVJJa`Oiv$WBDF1FJCS-a<|HI+{M{Yq~m(?0w)7>1o z9WT1+uxML5u36Jm-_SaDqkyiclEyNQC@&WKRSm5j5_{%Mf9!K*@80eI)XqFgzG+)r ze(tB$#b$W=u^VO5natnB3 zDi}W(Fxlk(XA(|$P0`6teM>04YQn`5q*7VW$<>22jb zp~~m?g*@lpEnqpO@T7Tt>O)uGrMp-rPMLbE^Mum0^l9s_9JAT}Ku?B!|HX`+#rG$< zz4utWS}39@V11dB-95L6rSnWF)b>tjlaI z(vdyQ5Yxt5!EpPb#+_?-E7s~{*GA6$c4%+UoV$}B&G-4}oBqRf-@)D`ldo8wUub(& zyuV3dMxyw!U7Sh6bAI2pbbEXM{6SmgvV{Q^ox5)O3gjE9O>i!iI=5|x@xNbJ%bGW6 z`$vgpnRlF@wL0@_)pPkKiP$h*(=_d@mMeujH!yuk7LzO8(rmj&nD0>S*4I^hzqL6u zXKp-VUSR%p*ZZgYIS%=$SBBMJ-Lq!f3ICNJMJJRO?7VFAj8jqnTBO&?8>K<3PTB@8 zJ`?6)+PuE!d_nw_+WYe-hnuo4aEtcXA6aAnMD%n>_qwmuNgnw@g@1AamDm$|zfE>{ zX2sd^|MlXwrBjlmOIU3iU*xe&ZqFlX5( QXHaqM>FVdQ&MBb@09DFG^Z)<= literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..1d813efbfa26675f38878a52c4ac68b78239e78d GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq~h|)5S5w-Z?#i zBFED+G9`VM-ufsbv?Ro7k65q7%PXsRqt<7)Rb6v?>wXT!L)ssUpO)yIjE6st2ljI`GvMMv4<>gdv4vj&hgFK$5PP_ zA^d)<%N_K8Fz#zIe_*@6o~_(bmm|oBxq@Y1^ZW<86>DFx-?#Y2wWZN;T5!^Gt{hg| z2i!L}*$&zj2-+}I>NPDZlx?@W_EJOkS^uXy=_zTAMg>hxPbzuDE=Fws{QTt;KCxyF z`}Bse2~Vtr7EIOao0(B=JR#~rt4Pzb=JHeREs`1wINGhZoSJ1JR#Nas{08$gqgl_k zOYyrezN7isB;xU-4C@^%^P19q7WSW+!Fb`&8V=(KK{ka~sw)KcJn6sgaN_7judU5% zMW%!_Y1y!NZtyd@G|A2|+vdoYsaIn7jy0w}5RTyCYt)-?UT4CCFO6viN4+n2Y=|nl zkm_je$gbm9UOP~6goUm#70v|Ek!=B6{=I`Y>jWpG* zD@0@#F8)@1_z#!V!HlVepA^pfSkIj?-z|VqS$5-z^8qVZ-pX9w(i-{1JD^APBeSg7 zJA?D7HI7n_b7R)@w=SFhbHAapWA3So)d^eT9R=@M&OVU$p=t8E0-d{jM=R9I4K?CI z^|G7Z{KrC7$yaRNe(?IR>R(H)_b9af$se$E4f8E#5c%UGwwXqQcOpv;Hs2 zNmt5XT|MXU=BPuf6HhdKvAuHiaE^Y|`MDp2LS8xt?A$bWNp5`865$;ym9~VNPMVar zdFn=${7;szayl09$~Af2d_42}t4)d;C*ED-@w#0&O}0RI_3X$GT8r%(Sr6H4*Vq!K z82h7g>MH(&hjKW$3Y?lISItn9Dtu!RlSzcqJo+<9iR^3c_74;89cCQawwcwzBl-irk)tVg# literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_r_signal_4_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..39309dff3741ac36702c868e95f1fe531e663928 GIT binary patch literal 1528 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..f11b84eb00684d41959624f03b96c999ad5f36fc GIT binary patch literal 1260 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRdavRD6SU|^K-ba4!+xV2}pp?`CLz;SQqAa-A= z?blqdZ#r>duK$ISq^l=iq;wR%RCvf-lJN4@E&Ybg-nXxI^6Buk^&fcEvR~QVsl)N& zlIedc`m3k^zJHfl`TXZ|{?B&hJ)eKA+28rdB$b`do^ly+=$!8Q=zH^ic7X)T!PD|C zeGl2>9;{h?ZmG(Zz5N#~vzP2kx6Myp{((jFOrnNguv|%!Lcz*L!;Twb^%r^5U+TNE zJvgX4=L-Msse5}aHrARlDDJ${`~J6I^9fd+2h4K&g|&`&Tw`z7vst@p&+@vPrOhWe zu6^JuFSv4Lo98B;jT~XOZicyQy1H0>_ql%Qm_f5=u2pXs+pSp!Q}~uLe0_T*|Fh|` qs59Do4sPk4Fr#q6|1}%*8QB<$OQX(kRa-0ql|P=YelF{r5}E*{leh2y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..005b3a434ad6e71adc21fdf3c4b05859f1d74272 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSoWWnW>q%v#E)b zv5}#np{uc@rJ1>#xuLnCk)ffbiK81#uV-FyNn&1dD$L$Yki8JS#(4EwITxiSmgEL+rE5g9QXzl6Z7*cU-&s1Ii!vP{~)e9XHrgd6Q z`;fX?O`upMLdMi%(%A>c^%YhhHEdL6bl%jUB%u?0b+*&x`2q7L?&(}WxWW&G8MdtXyZ5xG6gs=OG?rvDF);0H_^qZf0Wn95GzW+VT_ki1KANvwk z`3qldd#`OO@2Khjr)T55|3%vczRX#D5yuRg6GdE&i}dHj>lR0KA3CTUGc7Mm?pB!M z<_^}L6TA`C1&fp(o348IFm3J^0nwTF&WL=Qviie2ZAxDb-E0Lksn!i$c3wv+nlq>vxTQ#TGN$}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ov9XJ(xr>X5 zld+MJp`oj>lcBk>o13|_n}M;hp^1etOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uGyzU8Y5uU(HS#k5Yz@kqUm-uU@s~7Kvs}X+Lyifr*`gWJmLdw5$aS zn*zEWT#wi)=&^S#Wz0-g2y2VFESE8bsfDB8SWp9}l53o7T_f>!c-RXS9One1>lc#ZR` zpvJ~M%#UVXxY7~Blk29}*1_7NaxLA+p@ySF^yG>59vzjeiYDcVP9_FMHioQ}VByn8 RdvAkECr?*Dmvv4FO#q3IuH66t literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..738ddec8025ddb3066e436dbfbc85eb6da2affc8 GIT binary patch literal 1327 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 HB{Ts5XpOu_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..24cbdaeb565b056c1815d98825e28c25969f3c10 GIT binary patch literal 1260 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRfEzq06LU|^K-ba4!+xV2}pp?`CLz;SQqAa-A= z?blqdZ#r>duK$ISq^l=iq;wR%RCvf-lJN4@E&Ybg-nXxI^6Buk^&fcEvR~QVsl)N& zlIedc`m3k^zJHfl`TXZ|{?B&hJ)eKA+28rdB$b`do^ly+=$!8Q=zH^ic7X)T!PD|C zeGl2>9;{h?ZmG(Zz5N#~vzP2kx6Myp{((jFOrnNguv|%!Lcz*L!;Twb^%r^5U+TNE zJvgX4=L-Msse5}aHrARlDDJ${`~J6I^9fd+2h4K&g|&`&Tw`z7vst@p&+@vPrOhWe zu6^JuFSv4Lo98B;jT~XOZicyQy1H0>_ql%Qm_f5=u2pXs+pSp!Q}~uLe0_T*|Fh|` qs59Do4sPk4Fr#q6|1}%*8QB<$OQX(kRa-0ql|P=YelF{r5}E*i|F?Vq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..0a71f5986287a33b47a248b604511354c51ec99a GIT binary patch literal 1236 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1vb)y&P= z$=JZq(9qS`!pzaY(b2-q+0D_w%+b;arq?sCxFj(zITdDaW@d^NRId|Wy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*Arl1j?nU|7ZUaSd<9&p%Oxuh0lmZhe+73JqDfWy}+ z6N~-E#!gO7=FV++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRcv&Y$^-fq{|5)5S5Q;#Sh1|Nrfo6$Qk^jyWhM zus@pbV{q^4>TubHANEsp8IJsRtWnq(A0MCZuuRp)A%^A1cLy0YmCm0YZ&(Btu3dYU zV~H6I#dB*Tv3jybHbIq@jgp@yr2*<&LIi^R(*=MOL_9AH@NAO14&_3~U$ OIpgW-=d#Wzp$P!i0g;0M literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..3a4bd3ca186e895c9925f4d68f32120fe90a7edf GIT binary patch literal 1276 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OtC^vzlcA%T zld*xNp`oj>g`ttNg{6t1lZ&aLqlK9zOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKme*oeV534b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT8*`0AgIX{?a5)iGv&#OrXzE&FsxLxr(G@kOh1DGe3!0^OIa8b2_9G*g(iv^0x_ z^=6pDwWXz((%Bw8b;#-UX5{WE{P`(WTw$y9l#tTW((epES2w%~P_W}Z@-je5Jb~rW zOoun_Im`6iH(Bs{NHT9Ux-yB6XC&kmeYyd}90i1+OlB6m@oq zZac#mb*SS=+0j6rw{H4vCpPtPd|>GiJ$d#k10x&55^j%}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OnTd<5iJ6PJ zld*x5p`oj>qqC{2tCNd?g`1m^p^2#>Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKme*oeV534b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uGyzU8Yk^Uhrvc81 z4xAnLnPnM;_IDpo7rgL5d0kG+uT!j98XOHxA8ajtzkbyu^Pp?FL==awgp2qQh30fe zL!O35n!GOr99QUHY_v4#+&pnoOk~5l_N8VKhi0()_A1=p*SyNxUAxUpS=`wrx-BT{ z)hi>VjT>3#^9a0e5_9JfiF9MBXi|>oWMW`sW2g%B=s0@icO$4Y@^tlcS?83{1ORTE Bsx1Hj literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..ae85f9363564d6543a7ce49010ecbafb40ac05fe GIT binary patch literal 1315 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OnWKrNlaZ^d zld++*p`oj>g`u;tlewj(fs3Pssj0aoOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT8*`0AgIX{?a5)iGv&#OrW|?a_t_i#9J?#-`d79Tg?NaCq@XDp!4o|GNK zC6PGu*Qcka^&GOyHCDcQ_39ntr*Oub3mt02Ixf$iJ^TEljT|CNHaA*G&X-D=KlQML zL-(bIDTV^t&bqG^9;`NF5>spve6_mTvl7;`O$&})`QwiRbiFh1f6>RMg2VxhqT zmLu;Q`xrX!AAM{bU})0$Vw2!2ZSfTg6&Sbxz;HSh_x{1S>b+#(sqBgh@mu#SDX*^(AR?pacf`)b)kr}wRwP`YK5!goQ)O=X*Q tUs8s7m7&YDRF?*IhczB~>)1IA82CD4&;3}C3M#c2JYD@<);T3K0RU|zwfq18 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..ea320f91b876a42094b60dd27b33224c4d9be316 GIT binary patch literal 1315 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oo28Mnfw_x; zld++bp`oj>qobRJql>G#i<_y5g{6fXOs{8NaYQ#zd*q`*i1nqJTosPzr0uz6g}Xuw{l4>$}CGwaVyHtRRD*t zRVEhujSLJdEe*`g42+$OLH>5MFfes7wJ>(IaB(s)F>qCa>P;ah%=GOPZ1h2i11Yh< zgo0e$KumDD2BmR31w`ga%}cRWDpInyTUge&kb!|Q*we)^q~cc6pa1{unGF?mbb1ldXILL?n6PN`vSn+N5+60f86VAcIOAV7r%^{C zfs>0_C~G#9ZH#j8d$-hYTV!T)t4*U^=N&y2q)v@)4x$VgtYdTHz&JXctcwP%A* z?axoC;tE@(J7P;qOTRPxT;1>{K*5gt$jh^5&!%%mnDKTPe>`EV^m~oWF@~rqY)g6? zBP6pT*%`ZMaYVFmxUE?KPO-CDCyMurqQ@HHj_(f)nNvJnl$!O_t4!PesU>sL)O54x61L~-~^xQHK7Xij%Dr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRfY(U{Y~z`)4j>EaktaVzQ1|Nr*PiUML{#~c(B z*dNXJF}Qbib+~N95Bn*)3`c%D)+p?YkB`rHSf*;@5W{lhyMv6HO6O0HH!K1R*RDOw zvBZp_(57=52V6U0PsK$-gzh{z^ELL%c4-CGHOq zi&&3zH~bJ2NM|x+w-evUz{?_ehGXjs`w8zkmN-tE&wfcEkv-#vGIOxPI;JH1EfvSP zFNm5sJbuY!l3~a2@yM}b#~fDJoOl%LP{Y;1?6Hx9MdIa@^9L9d4lpeC4}Y2XdU-CW Oobhz^b6Mw<&;$U#S&+;C literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e.png new file mode 100755 index 0000000000000000000000000000000000000000..55521f581f34a82559751665cb8f51b2497ac1ec GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OnVYk-iJO73 zld++jp`oj>qp`W0tDB>-n}MsPrHiE*Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b06zt_S(s(Zayg#ni&s)xyQez{J2+392`RoG{b3Q?StoB@U#-0uu^y zaRV{I=^B*A?GzB1Cp9m{R;ftI-p)JWTP_0w!&Ofg$B>F!Nq_$Tw`Vp~(9!8>3_5Vc zL0-UD|8z`ag`BO9G5aH4hcj;3r$ZVlj0K7>TAfR2sE`-vzGT(-f%&7E!nCEOSuCtK z!xXL^RXfR)9J8-RGP~{a)vKv0mz2^J;`okS+aa}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ov9p=Ev$>0l zld++jp`oj>rIVSfqlu-Nsim8Nv7w0pOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|j&apuU|_i9>EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uGyzU8Y N!_(EzWt~$(695pue{KK( literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..ad8a117cc5218dc46a89fd8703e070ad92d6e81a GIT binary patch literal 1227 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Op^>S%xr>{n zld++jp`oj>lc}4FlaZm5iMhG6vxTK4Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|FFEOEMjA0 z-IVSgmdKI;Vst E0CoV7ZvX%Q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..7358b66b7d5877e9328351fcbc5510e0446845a4 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSoWWfsu);iIJI; zv7xJ>p{uclp@oUFk%^0`k(s%Pp`is#uV-FyNn&1dD$L$Yki8JSrg-&QITxiSmgEF!Nq_$Tw`Vp~(9!8>3_5Vc zL0-UD|8z`ag`BO9G5aH4hcj%CHcVKwdD${H)u!mED2b06;f#;YI-GGWo71SHkif}t zg5jf`f|#pVisDtH8Sg(toZvrlyCGuQqbnSrC95VlF>0LH#tTs$s)EO|R zvF4S>3JIl~MoOQBS4iCIjpLd4)|lx5r-1gP+4c-fJPgkc+K9#l%RB`YFrKb{F6*2U FngHtPlkWfk literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..52263415d30a0c14aca01b82ad29b5491713ea44 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B!)5S5webq7H*YT9fBUW9rQY+6>l@jB9JKf$?DO%zfyLrI zI(%1}q7(Rj91tkb?73jZTgR}z;Bm^|yjyHP`y?M+`M2-QoX13LI;I|`-s;HP)pF>aD=9?ySE-@OuVcq`oQZWyE z=|YQd#&7dJSZIXG{5`86Q@ZAqjpf01k!YhIaxssK^&7T}{I+ND_4Pg4*Wa(sC6p(y z<(kI@#-~eJ+5B9a`ZK40s1(|>c#YsjL$#)Pti3ij{ig_Dy6NYrY*X4jbHUD?J6*qi z{mQrd?mInA%|cUi^V{z3?($|rTl(bJ*?hRTn`0J>G&4&qBmaz6SB{Pg@0ljGZJ3i- z8IvO*5*Qp@tf#E(EG#80ovoNLb>f2EA5DHtJm=kUq`CY*v!nGv&b(()9Gf~8oH=ub zm9uMV`v>N~U6L=YZa7z03OG*mDhlW{FNpdfFelXLflX~~t+g!Q@pN8Z-sOUEOO1_< zzqcyCU^X~5MJs8~0miU41rM_%2hYdNd*YV`EIu18W^wP*r6L_$+t|%fYok(ApZZ_E zeA)0J$1SdJA8)TpojW0_c*?iMjx4%~&uZpAOquqy>C&xRRX%ghpE`AE)v8s8#Fi-e z)p#yn*Q634_Q<@%K*Z7G@ad}R>R<;gr(E+n{cQ`nTDiQ^qNaY?b@<4}{ufhP?k%hK zxUIiv6vx2@m3j-Ee%{=3E8bLzKl-##s_<+0W|^v{Z`;$54UH*x&Bx?ta()eB?= z9*ZCU^yyQLz!pUrNBvFem*?JI*3p%eCLQAB_bP1SqZKL*p=wQi8lUrKl#2Y{rf~Ca zRhse6e+kYrjcWA(1@>g(gvF1sHY6Z7WSNfXBle@jbC`AV+m z_3WNCYnIpXW5>cmLPBDulxDQA`}*a}9+?}~M!QvwExmT dKl(qpx6V(?U_ExEhk=2C!PC{xWt~$(695_R9r6GG literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b95813d12b2991a58219e725fc23d7b4316e37 GIT binary patch literal 1696 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X6|fZX5wsMWZ`0A zXy|HUVQFk(VP}9J=oNjS)#c3W?ZwgMgIJx1}t8b@ZqYsK$q=<$I1-ZC^nBX)CN}qNLh=iY- zmtw0_q-1Z`U6{U%fq_}X)5S5Q;?|aF2eX9(1&)=Q&tBr`k)#{7MNUOff3HZB*TREh zwGT45o(=c8+zxPlo8O?F;JV|P0mtVX zI~JZ&IcQzLQ_{FS!Es{5&X}_0K`S%1M&-7y^D>aASvxz)NylwVp@0BOfAN_G0+*TP z8ub4-spznOYb@58@GP&vI*f_C_0T;RCBrbSska`6C2zbT>8tc?UuK_?IoC4@p>G#O zoc~py`)5+Ys@K4uFfmyyV#}(C*==XG283pBoyEIv-E6Pjhg5B}Q$h@{VPLd{OkZeZkD|eWMQjyoIR2{7y0PJzkImvu1uI{^&2L&B z_DI8d^5n_ir%jutBys)F!w+lUy?dvr-KeaS79;T0>4kM*i2eM@H;X^8ZSgqrmZ|K4 zv6w)W-i*^vzXf<+ESFuiDk`lY=PtoVh*RCa3 zdf!aSS(>)_=HrtopG;V^8XX=4s0c}Bhdn6M)t|j2=vIzdD~nLHsq+Ja7p%2!?mvs2 z|Lob%gy9Z6G|^Uth4HUzWLb{ zBX@N*H96-g?@Fxp^YZex8mu!_4)}e%;?yheWvddCqUiZA#?!LN? zfcd_Sr!Cek7PtTX_uqPnY`K2*-g#>-2^Ks4y7KUk(X(rNzopr0RAY6;{X5v literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..429a149fa7dc7fb2410b2b62732d6bd45b767530 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}m)5S5wZU1dgX;gLl#!&q~H!ROro~!)#e)nga=POh^ zgA7#{aK*4lvA#Nxxq&-{v$$OC$Cbk0LO0IZ{caF@BlzsElZue0guMLvvfX#3rk@U# z=3zVi^kC5kfis@>=j%T(=HR#xA>-1(Eh8kh{&A&zrOm0_s**RGbT6E9!G^GoNS3!ZrXll@?J!0B&>1#Ej5-EXAJ zeqX;#V8`O6OH=)pU-tC%^%Y`?o4}sy^k8|y-a|@h2jA=7Q0NI|GT;Az{ew^l_v8JX zF%c0OJne^79b|jmJ_mDd;ck>~&S7m-uh6z(xZa|#Q9R`+>y7ZGDg~95mA>`${~fBU zt2eA&t7~9ol{IJHJiX}N0~=ddegw-Ln0X|QORaJ0we|xttFOMgl(jX;*}3^ifyKJ> zXU_ZyZwygnJK(!PmT9wRLUMBQEvDku6v3OTJ}7NJIM-$O@y9DS-OMR}TlU*_`Q^-> zqe+!Bg?3E;J~gJyuJCuOlTj|qY@xRT7ZzX4Sn}&v)ymDAFK^zlBVvMPqw515i=&*2 zrX1Cjl#zL(sHk!xX=6&rf)h`#a?F`KH?(^1y~%d-*QX^VJ-Tt}Qqa2#7Xps4EYmVx zEyNLcTu{YLz3E^Ahp(^iR9=4mXk*n6oF}}46HHkbI8^Pm<7pIq$+bt7rH+kjGRw04 zca?tpoa#4czv6^*7Yx{!c{}o}yYV{b+EyI5E6Ln(P*r241DB6uO5=^@uu}{qv{Ba6z|&;9RMa>(24MX1i35JpQQjYpLDM%sGD^>~GCI`bB7! fN#Bz4bm;CXr7^K!dW#c?W43LXbo zKTIfWJ$l6Abdf~?x5?%onPSSnBxO$99xgh^Xt`Q3%6|Ikt!&MXGw;8DUSk&@ZzE?P z`LcwgeqQ;4m3|YChgQZPR1|xkzOixwbLF?Wa;&E<`Gp>M+8%UKy14dgR!07bN^SAuN1#OmI%n%dhYBjL2(Q){2FpX2l_5lCB#`h1H zCxm|eue@W+mMhcFrdcDBc9!EKt;yYu(x$cboYTCP-Zh(jHq$`jk=0y1Gi&SB zzDt8*qjf!YG=!_%<9x>8|5b5E`}4~AF?!-`?Ch-5Pk+^!>zBVeLBF6$`~eF~`NRho zE?k(!n)%hY%i*ZKnZggDJ*#@znHuAE-~D&%VS!K8-niV25jm0T6Bhg19z6WOBUgq= zSmrnn>0G;qOWlPi%eq^y#ygFJI18=2-c9#u5+prl_@kDw9v@^&da{Ud2(;*Fkt?$SNI{ z-T%4Qg-%dg=Bd?G!Co14aEoDofB$-pS!bV3?Va^V)Nzkcw@Kfz$8MjaKUjJ+s?3N= zHML8!v_DW?5TK(k)f*=zDLM1<>#v53FG?IcGS}i%NJ+4xP2R?cWg7~j)`YE|d`o2h z%$XN2J(7}@<-KSjQ(qjBVLNqE?i-C)0=EyZvIv-3zUQ8O@5%3JMl;JC#2b@KvM$8( z=V~5(F)2WA`s^2zZ;33gJLUW@P%L}7ykcgF{B6BD#-90;Dm%+3dND9CFnGH9xvX^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`XlQP1>f&tT>gZ%{ zXy|I>WMFCJWNztZZsB5PZfN8P)9aF-T$-DjR|3}9J=+-@<#X&zK>3U0R;Ak0mV@SoVJJWqLgdIhWmz&4?ItgW8T=ezIis>C(L8=#C9BpZE z=MORv*;5rHvb7@Q;{(?t^HioQncQP>%&8VoRGK2E#TqE>s~md7%-7^>`sR=SpRl%B z?e1N>@(R0s+PAkU&;O?1-!pebubXqCHQ%@5|H2i^PP`R(!Tja0O$ATZp}&*w_%*5? z^gqv6xZiT+DV2lL1w1lr>kn+n`Bb#?&8(R-JFmU|>USjW>+iq%YYzP_PMGjpCBbKg z&z9f^YTxgFjtD$ru|3g1@yG9j%pX`wiatbc;GUB%_+&TZJE=|$5iV=t&LagYLtY(A zwH52;%{uk$Ci@4mn1`%Ye0ojg3Db`IY&N+1#8T>>1AFR(b+5%@qSwyWXlmNWvaVT< zi!FxXdc>3~)22_a<+$b)s<pPa_gYIvIKB|8c*~20$#CW@bw_^5ex#|P+&!&|J{7R7jvSQV(ZRUd0 z_B5`JStznF_Vlj^g{9~7^q9C<^+GOAbCqG?PtBK*neanhWuGRqeI%bnn6X$HP_}`fBm<^_wAvX z8FIO-)sHuyfBw5`-?Osa!8epkvmSoFypj3)^M|V|Z01G&N#kb`$u+yZNK4}jqd0r0 zq2|OqJ28`p6Njo=u4I{7_X(DqxgcZ^PY7G`w^MHlUix!-+sk@$bvS?mYo w7xXwQ{++(yap$`dtIw-$KCfAQ!=I6jfg?>dJ9FE$!=UQG)78&qol`;+0F&*3ssI20 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..c7385f0c10df07d92cc08c95416ecba5ae907de9 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B()5S5w!GFS zSK$5gf{5Y)al^Hcb~89(mVQ8h^j@ z``*v{)%PrqFUp+7s>8(JH2uJAh1iDzH+Uymgr`eZG=3`)zQ?q_@vMSZ zBD?uR>(>YV0t|Kq(iWm_nX}oRALzbg5xIZ*w#0qOY!+K~hii7Q|8`*g(3IZ8(%aLs zMpsX-?8&odS(cWTnwR&~^%z5+rx?LuuO#S<3+p9?RCD&vY{`KH+^qy(?-EhvCO)(y~ zZr|?j`WzV<8RhHid!#AkNay;OS3*0}#r72JTj>0d!$~Uc-u?UYxh@H0RX?oJVF}d@ z3E;ZCYRPq3wZ2-H<$H2`5Bc6s&7QvJ}?B?^CU z|1L?G@o-^rcWszp#L1r^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W^Q0&=xk|jWZ`0A zXy|HUVPt7!X=32&XyR&U>FDeR)9aF-T$-DjR|3}9J=+-@<&X&zK>3U0TU;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z)cq9>BGRltm*0E7*cU-%d~ip;6jn(@AvM$eJ3SaNiC6oqa**#W(AfeW>(qi z71I|eIaPT#b%=SIGQCvgX_8Yq$e~%2$>k`*q9xM0w?kp$^hH(vvCI9mQWfE0dLASiZxSEw7tL57V zhCdEUD%pf_pZ-PYn9Vr7HU_b*@OgzFr!G5R|3`MV~` zww7AcvkSkefBR=q!M(2Oyv?-4iNa0oYkeA@XKAe3weI$Xu+ZQPW0^zTP423}7Q71= zO4bG)hc`f@UQPxu2WBFxXk)S8BlXXr@C!bS&dLvWsc#GX8&u@8i zAH1D=i>czA+#Vh&j|cHb#TKoxu}C&FJE_Vk|8)JO6UXmyoxjp>`HJ}bdGq9s3KqEq zibU7e{=HdX@h8FBI@nxLEl)dH@RirK^ojF>w5GnAF>96;d*h`0@A+Gt79PxEeRs`d zwIA2gvuTq(6gI{hvwUmjyKwUD?**;D(|#^3nG*AG+mX~GK?|3estI+Lbrd=IY}>iB zvSxM6?Un4xhc*f&7XH;)RlK@gZSu+F!-o%_SMVyen!A6|#SHCNRi;c+WzVUv-9%cVjdOH@JNGgC zePv+Rzb~}^_-EE^KBt&-dE50*iG4p98@)25=)rYY!N3ofOgTKoyN^meSSZYX-1pww zvj69v7RBB9+jIJmkj4Wh$8yJAAusf%YwuQP`oH|IU;=}_l(pLPFBLhUip0~^&t;uc GLK6VysHMaJ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..9296499ad1c7c54d345499d5efdc02b169d6664c GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~i5)5S5wQNZSn+vl zEKA^#YbBK%XWKb6t+@8=`3AGtcW?jS_M-CW}d|SsJ!^p`$~Dj(;fF2l=TK^OtH4Ji+ftM^NQc{&Bxw< zpMGMl>I20Y)9dWw4~jn!Ua(JtgHhc=%O~#iW4pro8MnV=90-fMQTl;brbFF8fMd$5 zuT}BI#hY37Ilo}td6_}U<{^85;F~8?g|!MKY^K-Q_B-(P+cU*AOKt0KEPlXiq1It> zq&r+_$L^&|Q}?Z0>6w+2GezOUq&u0SO!lm^ANex$G~JKh5cy&?gI?SN_YXoLh4<|W zCpQ6w7muYTjtyKK=9b z)JCQW8#is*v~m6V_51hky?g)KwP(_@vRBWaIU};({Xv8e(;v;U2OS$vGM%n`o#L3# zb~LHb%*4dw>({T7?&j^cw6^|zpXF5jN8JRb-3kTFoL4eTJh{(^Oma=xeaPuuQ}xEO z?YCnyw?_TWHM`w#_~8Y2rHOAsIBib+_R_PSzw@t?;>>LYkw4G!G2YGE8ntTm>d98t z)_1+Vy?3q@@|gY0#^NyNqA5o?C1qsZs41$P$T3?Uvf#wluN-q`&kpwW@tO0j!shDa z$&=NmO`mSu-qseRW)L_ta=JsuDwhcyb2+T$>KWMD#@g7}qOQh{wR&+l?JnYmW4LP#>TF0o%LpuLr!O6ht#gW1u@lNbe{tygV~x7UcY$pq2mKti&I-lf*bGNzkJ!a;mFB%Z{NOMUcRZnr{{&{ z&K|eNEWL+6nzy>F7EnLOa9gCSD5vq9XGoBMO?G19LV*je3mW`*cfEcX>uR=3#bxou wl3z>9HwD}OJZL{Zw{=U$7L~p&^@sSsZ0TcMF-_$^0|Nttr>mdKI;Vst0Kfp1YXATM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..8eeaca8d9ee17990d8da4f0bd7dee09842b129a5 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kir;B5V$MLt*PG$=S z${Y`Vs}#C&>DElqtd9%CT|ek3iHdA=?dXzr&CCfC*fim&bJy}^oUTi!$h8QVNGRqW zT*m&N(esScl(;L-f-aqrvjfhi8P(N4bxodmY~2=ib~}~NbMIHbpL}wUx&MK}ISg~y z$|avi9y`t%rpy-ZAbYxhL(hx!j>xxx7ve7dm%VW4dcE4@%rC$HDy_e+{jI{LcB03V zfS-%z{x06bWO|z8-ue~4IlgV$Ge0%nkuBwBxmC&n$rxt-1N;S(*8k5ixwZ6a)?u%u zlbG!ltFjlfoNxHPfPYU)Z4A5oft_97mLK@8)zoe(b#{-_!Us=^EZGm|_zY&ycKCeAip>(k~p=SrKy0-|-q z%KQ5Jt$W;(UDjW3PfttR^08u1@n%*|@dEvmr<%T0GF)-qa4l~OZ$-}}lz4_pSvjG|8+&z5;b%Y7F#zr8(cHOISkD{k+< zGxykouPZ}V@m_FSF!i3)mg|RiPB6NqGR14D)UPGQr(RlJUAV6`HTR1$i+1esZC&wB Yj8mQ0pA4VFz`(%Z>FVdQ&MBb@01u{D^8f$< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..e29348a4c661d66ce28eb51b84f9d6e0dd04082c GIT binary patch literal 1684 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDkcW@&EhWNvEc>gZ%< zXy|HW>11H$Xl!6^X=GqwVCG^1)9aF-T$-DjR|3}9J=oNh63!)YE=ZwhX=7~s^aZ>M0R4~kf%h=vITxwwIt;4}$JpLPm}grAz1 zVyjf7WN-KBu;OP124)UV7srr_TX&}WX9zor94j}Uz2xSEBSBj{Y)xMr?2>a?c%g$` znCX=(|56Xl3gJB(V%Z;8ReT70<5|S%bh%l9E9r8x#@C>#i7|hKbG1UdayM*J%#4Su7$j6mN))gX8e2KO!Iv8qODO=Z}>GZ-}%on&+}OsiwyIZ!#Wi#rw;uM zzH_dz=fU!g%y-uB4M~gp6p?;oKcigp)L+xZyIplBdbDUy^|DUV|M~Zy_^N{cN)nIk zIA;jOsolyf=>GlwM`WPOoZAXB#QxMiu=~Mu%kqcG4Q{h84~_7x?yF3oFmfJ=>lTt8(UHLCRUSf6+>3()9GcWUu_%64Y?H zEA6A%drc#+{^AEZJ9tWFz05GF%1=yGY}qHs!Se3gw{L#iypGJj5&VH`3n!Dy;=PX^ zOf}lT{^w;$mHATsZ;sP-PU}W@E;z~6Q_wo8W!psE#`ZlzCif)789SN8S7lsQ;%jDC zt7|Uaes7s?O|e*=k*vk*n$DXyZ+cESU*{T_BP%P*{IH;6%}mKHLXN5V3tBZz&t!g{ zyfkR#WMgAvaRsMW@7{fDcUt&yZN~zs+T%z3atUtvAn`RJfTJ2i>}nW7g>+ zaCX*Ij#EcDyH{=gZ?4pIc2C6hujf*XZnhto%VBZ*@@3=HZJFDZ7Ckkyx39Mm>hw`4 zxcah0ufMNP&h`F{K&2Op+qynK{+ls3CdfRs>x=x2{V|>KS@yBrSAMUVC+wQ?GbHlq zsid!^CqKU2bSQn!t7U2ap{47u{}!Abb$Dim;9IM2$I|DY-`=wCQQ7XvHs$!|3l7Ht#>qt`(TD{q|e!O$#otoA71rb?hu**0*GlB6nVVUbFm0IU^gx XymCYN}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OfvJ;)iLslB zld+Mpp`oj>lZBb1o2j9ZlbN}*sfDvKOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|KL;>;&nLVmVG*;p~6_8_@dRhl!gj0-1jNu5A!yJw;XIT|$88QSl{>Td?MoJ5)3kMx(65Gh5 z(A_YN!=d?;f{De)Mj3^53TksA3p$#cw#a2YWX;&{NUKe4Vz60Vi>lCs_YF4$vjp`X zu;{i)bZ+Ijna;gn-%S238w8~4xhx)?k%_X}FfsHMbL}TasTlbMD~oKeq<6M-DHhcn zWAJV5W9eFW_r+0x$Z3L%^B6WN?L5lu(7?!0oa;D!C6fa`s4(($^>bP0l+XkKXwsgv literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..e77a91aa369e633f8e6ab8f1a074fcbaf8ecf393 GIT binary patch literal 1271 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OrJISNxr>X5 zld+MJp`oj>g{85jrI~@DnTxZNvyrPaOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|FN5?3@d*+@GP=t_{bC+d)G-xH>quzm3q@po{Wi16K?T8wPGq%77%AR zD%`Op$4G$vVQ|Bn%?t`+43AtE=86sJ>xG+df zVPAN#lfOY{rRuTQIu=J99i#ZSeqb_**x1OC@nK?&SzU{&(1iC5Hw3c;_a$X0nj{)b zc(s`|;Qkr*s0fZ;dsdmkG(O))IVn?rIn1wVV7tzqu_}iDYoyY&qzvOCLzlku5(`#d y5bUp#RJg~g+b5y1sfXhOOUKj`x^WClJPe+j9jEWFGF}cUiacHYT-G@yGywn*u%eg% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..7d0d206e59830215c8cd5f8dd6ac44fa2ecc2470 GIT binary patch literal 1307 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OqlKZlvyr)p zld+MJp`oj>rJ<9#o13|jnVX@bv8lNmOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|f$m3h;w?o9>kdf&HC02z}xej@TLd7eG>J>7%mF#D*I7BYgqgA4HwG7jiZ?hRoM(_?2dN;gD0tAI%3H z#>E*z>B_6Gu>X3(Y_h}QOPxX-|JO*RX-OHzMTRbY=Oq@bydc}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OtAT-;vyp{~ zld+MJp`oj>g_F6PqpO*PrG=@Xfup%2Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|KL;>;&nK~_GrU|MVpr`V^eL4j*61_s1eTi=&ZvT*RnZ{ItmG# z948n)+9`;+ilr!CHJb7ML&ORGBexqOraijC@maEJf)k_0iET_9_00Ba*zKHn|#^sf#5dQOwW98_F+y85}Sb4q9e08tFCc>n+a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_gsm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..b581f5d5ab37af67783f63b8ac15d55447577b64 GIT binary patch literal 1193 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1xAZ!`CVk zi~YvNPEJnd&TejwPDUVqJ6af+x|muRyIQz78JHNjDna$8kP~M5b_zE7pu~ZcSYSdy zE^Z(uI9-F%xSawb^Q7jb*eVq%+1q8W=VNDJV7Te&;uunKE9uYw|Mtv^0%Bsv9267S zAI;Y>xOa7RIB!FUy@0lYCfAi~*Y-Iys@gcrVLNivLFa6X3ge~@#*7_G9LzK26OvLG z6cyGnKVo;d!+j)3!BI?wmCxZ0!(#?r6P3e4o(g&_k9ZWGxlT_xxQtn1$^VHusVawr z0z9TL6)Fi7KL~1(>5)(P$hvhwBZv2vh6+J}`%I5~YQz@)=6Uk>r$c;gLzD~yZ*k56 zk&e|3H~7yUtY8!lD$s3UJI=o1f{TJ%zj?r(cTA6h1CAR^6k6C*awr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1~ z$=JZa(9qS`(!j~t(aFWY!pzag!otE4rq?sCxFj(zITdDaW@d^NRIdSEy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*Arl1j?nU|7ZUaSd<9&p%Oxuh0lmZhe+73JqDfWy}+ z6N~-E#!gO7=FV++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRdCOPbrpz`$_R)5S5Q;#Sh1|Nrfo6$Qk^jyWhM zus@owV{q^4>TuqM5PJb_1x>Ci*RJhzXjHXvn8SADsDsYg78S-#9gG<}lsK4Y$|oeH zFeoalV}8W$aEJRykbK{#RV4yw|?`0J@1$v1qU2Am?*Tcr{q+60)s#T!}dKo U2eYn*PXiSmp00i_>zopr0HODPkN^Mx literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..52263415d30a0c14aca01b82ad29b5491713ea44 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B!)5S5webq7H*YT9fBUW9rQY+6>l@jB9JKf$?DO%zfyLrI zI(%1}q7(Rj91tkb?73jZTgR}z;Bm^|yjyHP`y?M+`M2-QoX13LI;I|`-s;HP)pF>aD=9?ySE-@OuVcq`oQZWyE z=|YQd#&7dJSZIXG{5`86Q@ZAqjpf01k!YhIaxssK^&7T}{I+ND_4Pg4*Wa(sC6p(y z<(kI@#-~eJ+5B9a`ZK40s1(|>c#YsjL$#)Pti3ij{ig_Dy6NYrY*X4jbHUD?J6*qi z{mQrd?mInA%|cUi^V{z3?($|rTl(bJ*?hRTn`0J>G&4&qBmaz6SB{Pg@0ljGZJ3i- z8IvO*5*Qp@tf#E(EG#80ovoNLb>f2EA5DHtJm=kUq`CY*v!nGv&b(()9Gf~8oH=ub zm9uMV`v>N~U6L=YZa7z03OG*mDhlW{FNpdfFelXLflX~~t+g!Q@pN8Z-sOUEOO1_< zzqcyCU^X~5MJs8~0miU41rM_%2hYdNd*YV`EIu18W^wP*r6L_$+t|%fYok(ApZZ_E zeA)0J$1SdJA8)TpojW0_c*?iMjx4%~&uZpAOquqy>C&xRRX%ghpE`AE)v8s8#Fi-e z)p#yn*Q634_Q<@%K*Z7G@ad}R>R<;gr(E+n{cQ`nTDiQ^qNaY?b@<4}{ufhP?k%hK zxUIiv6vx2@m3j-Ee%{=3E8bLzKl-##s_<+0W|^v{Z`;$54UH*x&Bx?ta()eB?= z9*ZCU^yyQLz!pUrNBvFem*?JI*3p%eCLQAB_bP1SqZKL*p=wQi8lUrKl#2Y{rf~Ca zRhse6e+kYrjcWA(1@>g(gvF1sHY6Z7WSNfXBle@jbC`AV+m z_3WNCYnIpXW5>cmLPBDulxDQA`}*a}9+?}~M!QvwExmT dKl(qpx6V(?U_ExEhk=2C!PC{xWt~$(695_R9r6GG literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..85c241e7f53b664a7cf6804eeef3583beb95e853 GIT binary patch literal 1696 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W@c&NWa?~SWZ`0A zXy|HU>0)l;Xy$6+=;G{Z=xpE!)9aF-T$-DjR|3}9J=oNjS)#c3W?ZwgMgIJx1}t8b@ZqYsK$q=<$I1-ZC^nBX)CN}qNLh=iY- zmtw0_q-1Xwep6YHfq_}X)5S5Q;?|aF2eX9(1&)=Q&tBr`k)#{7MNUOff3HZB*TREh zwGT45o(=c8+zxPlo8O?F;JV|P0mtVX zI~JZ&IcQzLQ_{FS!Es{5&X}_0K`S%1M&-7y^D>aASvxz)NylwVp@0BOfAN_G0+*TP z8ub4-spznOYb@58@GP&vI*f_C_0T;RCBrbSska`6C2zbT>8tc?UuK_?IoC4@p>G#O zoc~py`)5+Ys@K4uFfmyyV#}(C*==XG283pBoyEIv-E6Pjhg5B}Q$h@{VPLd{OkZeZkD|eWMQjyoIR2{7y0PJzkImvu1uI{^&2L&B z_DI8d^5n_ir%jutBys)F!w+lUy?dvr-KeaS79;T0>4kM*i2eM@H;X^8ZSgqrmZ|K4 zv6w)W-i*^vzXf<+ESFuiDk`lY=PtoVh*RCa3 zdf!aSS(>)_=HrtopG;V^8XX=4s0c}Bhdn6M)t|j2=vIzdD~nLHsq+Ja7p%2!?mvs2 z|Lob%gy9Z6G|^Uth4HUzWLb{ zBX@N*H96-g?@Fxp^YZex8mu!_4)}e%;?yheWvddCqUiZA#?!LN? zfcd_Sr!Cek7PtTX_uqPnY`K2*-g#>-2^Ks4y7KUk(X(rNzopr0EvW(ZU6uP literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..429a149fa7dc7fb2410b2b62732d6bd45b767530 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}m)5S5wZU1dgX;gLl#!&q~H!ROro~!)#e)nga=POh^ zgA7#{aK*4lvA#Nxxq&-{v$$OC$Cbk0LO0IZ{caF@BlzsElZue0guMLvvfX#3rk@U# z=3zVi^kC5kfis@>=j%T(=HR#xA>-1(Eh8kh{&A&zrOm0_s**RGbT6E9!G^GoNS3!ZrXll@?J!0B&>1#Ej5-EXAJ zeqX;#V8`O6OH=)pU-tC%^%Y`?o4}sy^k8|y-a|@h2jA=7Q0NI|GT;Az{ew^l_v8JX zF%c0OJne^79b|jmJ_mDd;ck>~&S7m-uh6z(xZa|#Q9R`+>y7ZGDg~95mA>`${~fBU zt2eA&t7~9ol{IJHJiX}N0~=ddegw-Ln0X|QORaJ0we|xttFOMgl(jX;*}3^ifyKJ> zXU_ZyZwygnJK(!PmT9wRLUMBQEvDku6v3OTJ}7NJIM-$O@y9DS-OMR}TlU*_`Q^-> zqe+!Bg?3E;J~gJyuJCuOlTj|qY@xRT7ZzX4Sn}&v)ymDAFK^zlBVvMPqw515i=&*2 zrX1Cjl#zL(sHk!xX=6&rf)h`#a?F`KH?(^1y~%d-*QX^VJ-Tt}Qqa2#7Xps4EYmVx zEyNLcTu{YLz3E^Ahp(^iR9=4mXk*n6oF}}46HHkbI8^Pm<7pIq$+bt7rH+kjGRw04 zca?tpoa#4czv6^*7Yx{!c{}o}yYV{b+EyI5E6Ln(P*r241DB6uO5=^@uu}{qv{Ba6z|&;9RMa>(24MX1i35JpQQjYpLDM%sGD^>~GCI`bB7! fN#Bz4bm;CXr7^K!dW#c?W43LXbo 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..c7385f0c10df07d92cc08c95416ecba5ae907de9 GIT binary patch literal 1181 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..8eeaca8d9ee17990d8da4f0bd7dee09842b129a5 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`kir;B5V$MLt*PG$=S z${Y`Vs}#C&>DElqtd9%CT|ek3iHdA=?dXzr&CCfC*fim&bJy}^oUTi!$h8QVNGRqW zT*m&N(esScl(;L-f-aqrvjfhi8P(N4bxodmY~2=ib~}~NbMIHbpL}wUx&MK}ISg~y z$|avi9y`t%rpy-ZAbYxhL(hx!j>xxx7ve7dm%VW4dcE4@%rC$HDy_e+{jI{LcB03V zfS-%z{x06bWO|z8-ue~4IlgV$Ge0%nkuBwBxmC&n$rxt-1N;S(*8k5ixwZ6a)?u%u zlbG!ltFjlfoNxHPfPYU)Z4A5oft_97mLK@8)zoe(b#{-_!Us=^EZGm|_zY&ycKCeAip>(k~p=SrKy0-|-q z%KQ5Jt$W;(UDjW3PfttR^08u1@n%*|@dEvmr<%T0GF)-qa4l~OZ$-}}lz4_pSvjG|8+&z5;b%Y7F#zr8(cHOISkD{k+< zGxykouPZ}V@m_FSF!i3)mg|RiPB6NqGR14D)UPGQr(RlJUAV6`HTR1$i+1esZC&wB Yj8mQ0pA4VFz`(%Z>FVdQ&MBb@01u{D^8f$< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..67ae5899fd017719e5200a83e3f2cc2d8e779226 GIT binary patch literal 1684 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`?B?X?WM*vc>gZ%{ zXy|I>WM*jO>f++$X6|g@>g?tO)9aF-T$-DjR|3}9J=+-@<&X&zK>3U0TU;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z#VJOuYLvwW)4pm$B>F!cc%Mi2s?@#D>t9L6I)0QV-1v;XN8+*&kO`d2kBi*PyD2F@J<}wL-gcH*L(Eq;~e$ z`;*)~h33bug}iE(H~w8_{CnR_^L+K9tx;2N_%$%!`Oh-X^H~{-4D*-6Iu$IZ4*dI>NsIdwk$z)8qg?aUU(?0AU3DjVv}jNDvQEy=C{C;ae6+nx}sa^_({%2~F5(Mo61^z^=Dul(8))Nr{g z?W5UyO(U=V;s-iAcuHoy%rL3SPfS#7*(b=s^6uNWZ+_dnj?BLi{DEr=CzH$Ky^kJD zHQK=b=VeKi`BMIGj?;Bc>qd7jILXyh&^oDQ+eF>Q_B}!-_awv_JDJ2+Wn5O`Yi3ug zYcAe?Z<%jRu~?mvti|h^&YL%HdQLfC=NgzJD=W+Vu%KeiOvx=mj;Z+zS~X42WPYB! zG-%~yV`F1+1*cc<-hFF#TKI8o#{#L^<464E7k*x_|KN{i~NoKF`e;Q_Oabpey^D)?3(g3B=YI0 zq_3qXKfc^_D1FYWWoiDQrR%T%7MvY*cxHy+TdQx!(&wMw-m>pe+3v|Vltr^1e!jes z`MdbT=?~o{w|94%X0E&>M$fvS=Z33h?*TJ` zoLwPWTN(L7qo>?zT9$eL)6YHP|7Ek-4}=CBSvcXJ_XWp`1v_IRcV2v6v;0OmBOAlK Wazpv$CVpE%^@OLZpUXO@geCy^OqV+V literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png new file mode 100755 index 0000000000000000000000000000000000000000..43053510881aded0128758ce8bfc8818f942b8d9 GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0y~yU=U_tU=ZS90kK$hA2Bd6FeQ1ryDMQ6u0MQbifro}oj=S$r`kMECW&q9l3o3q|Ar=a<;*izi{~GIbne50U6!Yd?dHZW zSN^g286(RCG zgr~qwUhU;65tR)kMTa!lrXGs&U}!&+c;Rj5@nt)fc217?7V&N3@ogNHPMM;?OTFGK zej<6mtXX8m>kCi9EskwlbWpJ(#fLfPl6Nz6ZEjch(#3M=w@>h|4RCmTW#!IUGuQ29 zJGE2(g>gx^+1tMt-aM_e>~Smk@>GVA-zQ^*fzCahzmLUN<><)Xzh>dk+@^GQ(doVV zPv7kjWPEr1_Pov?@wE&`69UXO`knS*U|?85kI3KsE&DrgTe~DWM4f4-eGS literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..c5dd2c50e38c75479b3611312db519667efce397 GIT binary patch literal 1277 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1P%gPUg;TZjMeyAb&er7?`@4S{S=pxHuV@7`Q4y^`?*$X8LvtHu|8%fs|Na zLP0KWASO6ngVMO20wVLI=B3yw6)D-m0izN9uKE-5`cbuNNk9FZ{HGK~Z5H^CNbLJKRTt6dc6_7{72TUtnThafsW2XVV*o z0GT(^3+^y0=}u&M5B7{7&5Y*e+qce{b7y1r^>wkVMahX59XSp(T@=WA;4*=KAs<7hY)h9k zQ}APEJ3BjnRn?{5@7}$0_wn)3={#w6qG6)nPaYlyCLV@*j^sO;XU`l46-b`0elF{r G5}E*(^rim* literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..39218a01ae1f91dd5b89a675a60082596b6ef578 GIT binary patch literal 1337 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oqm#3NxrwET zld+MZp`oj>lZmU5qnoLtfw6&;xrv1-Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|zqA5wF7;x9rm)4Hd=$#TTv4r8HE?3v^$yYW%?b(M)05($Xvz z)|+7p*Or!EN@siY)FG$Wn~}R?N6pV7%L%U-9&L7*vu^e3YB7y%TqpQiI~_A)8U#Di znKsJb^WilK5y%o;(XoU5$Ww=nCJMPcM@|KJTXFnY#oIBNvvMx$i|+3M(;I6tctqJR zu5K*)-jFmmK>iVvr9+HkP$8>{NQg&MQ!&4QHsiU=$BF0%ve!bxmVt%!hlyy%O#SH%WA^F)@16^!zKj<1uJIHocWgZSI?82!%V#E zN>Z2?Cf#WAKX&25hcycpC}`hU>f^H{+Ks8A=+BQrISKdR;K?dy85r3ZT3;sb}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ov4y#@tErKR zld+MJp`oj>g@L)5qp^#dsfDYHsf(o(Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|x0ba4!+xRvzh|9^XCLj@h3p2na9 zM;zoIxa*&u(@!UMz{Ji#vZMJ!TGoPv zO#$5wu19PY^w_(WGG-<#gtbLoay+m|P2rr%lTxt-`uCVK-B$4TE_|d=Wg75KE?|xD zE9V%76i;2xqoNlA0u(v9&e=MwVL9@C;lXP0>F4A2*WG2|wYzl6ZGpbSzSRs#0RsEl zyBcercKJT$_p6g%kh=9ki=#+FBimicj6V$x3RlWA9d#+5i9m literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..946e832fdeff35e0699790d14c62244a8df6a02c GIT binary patch literal 1369 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ok)@fDv$=_h zld+MJp`oj>rG=q|rG=@Hp__$?rHQdIOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCN}#G3@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*2AUpA*vM=>>NB-SdX=5fluwv zPfv>!b~AUJXDZyaZr!`c1vj)5tVPtW-MLdUts(VtgN1Ovjk55C0LK-s3zQzo2~1}` zdZ}THp@6ot?rVjFKw-vi1x}V1-QN|W9c31%9t$WG*ej(`&aZKe^Q)pB!=@$EmOSFh z(9k&KcyK3s$JB-&wk8$tAAP#{`uciDyIDR(H#xqro+uY};Nd#-J-~3n`k0NGe-55} z&%9-g*ert%CY=ilteJb|1q51t>G5iqbHDNy`OrQ0__xMQcaQx~@0%F*syRq*!aP=9 zy?_m+PPHsvI`11Q)HF;Fnfyt68dAR^Wv_UK;>nwBtWq&APp~;1-M~8kOmOAp&G&b< yL>$yhO;WmRBy>Qy)w;dnfsL>4Bok&935L@jDktaN|FZy8*m=78xvX}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oi@BMTo2iqD zld+MZp`oj>g{zyJlc}?_ft!J&ld-EAOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|(o~{FCXL_&*^;sn*U1H zdLL6=Pp-t=hr@A3bWAcYe-)Bnrn8@!IS6G7x3`h zym#I6)FKV5BL!MD=1#3=)K$3K=Wzen^;57d@eLna^X4m4SDrXw6~sElGQDW-s+jYi zekjFW-)?(;cmLyvH`kV*J6v(FY+^2>_M)^(_H!$xFSE{Cmb+u!?M9=A_uW!=XDya4 zdT0LItM75kvdnY!^FjiToMd^l_V!!7rTWuSId%UDBrtr4sQB+E5YrAS@H}1pT-G@y GGywqcr0f3x literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..25d9d069491f79feeb4d111808c9341d47f51d5e GIT binary patch literal 1278 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRfIQsueCz`&^I>EaktaVzQ1|Nr*PiUML{#~c(B z*dNXBQ8>LWZtpCHCr6k+vMc0Wxpr+Ig9tanrq2tz)XmJy@)QmW$tn0TKT1-Vme#~| zj$M)?^*Xa|5W}U{3zN7PepZryJTh88$Ls5N{0#KlsR#;aRrLv<$|NN(%c}kIZy9(|G>2j>BO)2Hj}>Bisw@ ztQmN{CMaKXKKz$?3R`ph8=GtKl`gyH%il{|xpb*(iOZp;ivn2>Tqf{4@-=kHwsc7| z1wU?-VI-1@$&#$HvR3dr0`njxg HN@xNAmM*74 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..7dbe663bab946d40b59597a0a7b3ee2d24aee7b4 GIT binary patch literal 1253 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..eaf6a27f4f86ed7a54037bd5ffe0307c05ebf998 GIT binary patch literal 1358 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OxuvD0fuXsf zld++*p`oj>rKyF1tAUfLxv{0AiJ386uV-FyNn&1dD$L%@%oHoAUIV;(t(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWK_fgfFD1XcSQ8XI;IOxHNiE7OOHFYr%Fk5*hp$y8 z7W<713@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*Yt8jtdO(SF=l_n>u`qc(S`|&HZNPorrH!86(#XeBb@QkS%)*OWpf&J6cRW& zPB475QxJ0%OHsUPG~@k;h!gxrZZ||sdvt~4vt-o-Cq|7E+n6@$t(|OVETGSxlpVt* zkvQ|$r>Cd&9J0(cR=#@m>K)^!aK@Vp9csinF3+Al`~0Jg93o3LH(E%}mr9vG^{|9P z_oap@h638ox~~-;tTtm3Q*07^wYu8lkwSMEb1jF^YnDg06=zN`KH>`MT3xhap}_){ zBkvpg7&`ACeY*Mm{r%}oD?MGN_Xfo8bl_!W3=r7IZrEV=x<$-fqG9^<>%R{+vtM5D z(Y3^p$EZR~KAyh{yyf-S#nUf%QMRMr<&1zFBs5}OyS6nt{K zJfQTY0k4dV%&WAtwCYAXWy{+OrYJagOH90Rqsjl+g$p0nELfnRZ4ohJ#)<7c93P(i n`1shypl{hSHP2a$Ogs!buV(LBw&_R>sD$%$^>bP0l+XkKYe3cW literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..c591c856900d2769a8f9697753845baf0a1b6128 GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRe3CAKYNU|#Wj-)CD`3E-kRA+{e<@%OB|=oXTPM7$ewZI@In1Dx!3D$l}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OsiTRZnWLqd zld+M3p`oj>rJJj%qq%{ZiIKCbk*S#zOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm| zgS>#R{^^*;3OQRHWA;b94rko5Plq&A7z-3%v^tm4P$4hSeaWiv1M^2Sg=tGmvshSf zhACV-s&+*o${T#1zuccWjS+#@ex;2%#kM7Hw;3*8ST#A-(P?J$&)8@T-JQwcr;SkP^z-B za_{>1{dT^=!IQVK8k(DLU)$PxbXooXe-oGV2h3@#dDU^|`GW@m=ElaixxYxB&t8pJwD@Bk3Ov3JOnGKbLh* G2~7ZuLYQ&@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..7360d59afcb9d792489e614db34e59615fdc303a GIT binary patch literal 1222 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OiJ6h3siTpR zld++jp`oj>qnWFVtGTJOv7@n>p^KvvOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|&8rdh^2Oiw% zKN8FFb&@)dGh_|Utec$ zbvT_7E$~0-`NrA>Iol`RkZQhR!Tj@z;LQKCrw0FBIO%KLf>xh1Dpr$PkErN>4!QT` zO}U<8SiuGZ!@y_8Ob}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OfvdTbg`g^8t!g_(tsfvKs9n~}K@Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6tdBNKShRWBGB(ww=%^@(j~d~OkLEg@@h_XxsH2d; z$zWWg=%t@Zds~-)tJN*{S_SK-?=~1WBFCW$Y|^^ z?TXN2rJR)?8H9c_+MQh=zduh%RCKMi~0ZNGI>@6DuO&+{an^LB{Ts5Z{ea_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..f085372b827a3f87fbe4d47f6b4232a42cf8683a GIT binary patch literal 1270 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..213194917084f6b708e281f37626ef1706103f16 GIT binary patch literal 1720 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X6j_<>SF3_WZ`0A zXy|I<}9J=+-`BiX&zK>3U0SJ;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z#V6K#194rW*tu#$B>F!Tc%y~4i1z#etzfeJ$Yu=r9@ZqZ*=Wf^k{wH;duNP zGZ)L!?KLl!x+Xd*IJP(m2y(jdxAHHvWpxd73e-`WDAJ;#Gb{0FbMdyFXRq$v{(j^A z*2iz}E!D37@Ni!7x83FUKmY!F?tNUI1l#5a{S0Uf|h6H2O~FV+}$khl9^*S zLD=(ym<&tr1JM~tW??#FwU;knF7&7X>a0+Q$(`#Do$5g!YPT$0d6AwBq+#nphcK7bzGm?~_wWa#H!MOZua}BH%iFHHwR_5;$3ZSLRp%}XxY@Gc z@&lU{;`J;-4`evEZGHOmDML$zYh*}hsP4_5GnfvmtZF{yv&#PFlcue1kM?cTZXL?v>^9K0%oYS?fC`7W|ZOEpG~vO`CeNPDno}%ALK7Gtg}A z6aGeFv;DmnziLPNx0K5DxaCbS-YXuB~YXG2iq|18Pft`ohcpFY~+aIosE$PM-=N9nWc z1Fnl_PyVue(bPFhEEi`VdbjZArI^Fh?{tf;lb9o&r72_chk>crtL(MN!ImpwLMrR} zUAF#xyYTbR>+Ev1@Ae!PEzHT@92?9T*xXvb zZn`M-heglhv9I~jOCHgkcVF+=zNSC1^6i3~Yrk1fzVDs={F-T_&mX(!d_uxXtqpqzT6<1fT zvTENdy8pg?^YKdQZT{;#g6OGb{{stQE!zUI?iBT~O&Y0ydiQ$lZ- zJ^1`{-}BEuqiTN7l;@5NIKtlYLri47%iY&s^>Vuo{LkFaBEi7WuYdMpQ3|MTV(@hJ Kb6Mw<&;$VK3#O_7 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6ce88324f854afac8288d085cb0e50610e54d1 GIT binary patch literal 899 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~h})5S5w1pT##f@J-i^3n>SOpY?>zMqQTA!><`f;G{0qd_yTb7EHKa2??D^$KVJ6Ia9$tcx^ zP5j-h$x?1&Vsge~X;4Ubc)P=gkUfFkx_@{g&Kh-2dS%Y{Brtbr!&I9G;txa>7Tu~B zo-=pu*>njvh7ZjL74)Yr=!^QnxuMDRgTYUccZ}0lnoBHiIbrD;&o?{4MC$Cd3=`Y4 zXV0!%woGmL&75h~HuK(|7L@VfXs~zXpE2o5KHD+|(|PhN#aFVnx++avFl(07lIyS6 zSM0s_U#r8|g};FJ22+#vhJ@VQ+*?iBD-#ypJn~6ldxLf7SF_n`eO6z+clBk-UbV@d za-A+aW(wVL-nY8qR^fzC-qRAIxYu~EVQ(zk7}2w8_3A)x?`~ZYuBT~U1s+NO0QfFw|n+_t;Bb!{xgf;+bq6Vp&8t?^3s`2 zEb29X7xkITl$6eBUdO*aamI%w8}9#bn5%hkIfJ?ELH@eM9H&c}W^J$J5uPa`by;MO zqwXJ>6aJeF{@o4@*)Of0dtvP!hv&7i3`%JL=ap8hzP(aYZzK2Km zS9o5yu>P1}k8p8z_UopE=;+%{i;jIQbe!p9*8FsX#hi?3EFWi2U|he_WD<}1&2<~* zOwdhQUeoWL*C%3?xBt0y$@{M3`(5qwjAzTwJ*qzS*fF>8@bK_>3z=tS<>lWWRL9sG z7$|)ISyQt#C^K9`#P7zxWpB!=HEj#|Hq2AiR9DN0TQxX$A%c N22WQ%mvv4FO#nxMkwE|e literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f00f7ff38fa7ea37fa5e82d3c12204b793012a GIT binary patch literal 774 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06)r;B5V$MLt*?s`uS zlsTR*HY-(ZV)Xkuh zJ}`R9bGF68Ej#5vWdirv)0u5o0#mkp(^zZCr;*8j@ZZIZEg1y`0k6t-r|L~#Z6?4W zGcVp`vi)P$3DcLJ+`7d|KEUU*)vQ|PMGigtjxStfs@|YbU^_d(KtktohRMHU$K06C zG`%=_Rmg_5hhgi1;9HBOBv}0}&stkjmn?Wt+1J-MSZivRiHV7Tz@9BpO&+Qb*zB0& z8^aq+a{tO7eEIUFP~T&f1`Dxn(REuDf*hazIdHRQ>wcEWCsX#FOnH@^oz1;v%a$K= z{g$hVaLGnxJ04-OVEMH7fW?C2{}gsauD`x}ikE7jhRBhmjd!@(55LxmVEw{a-tbpp z2Pf<6*RQARboj^bXSh+L!G7@ffx~C+JpLH+_1iZ)quFQw^0hl3{#7n4q=xaduv+}FqFZzHE4weCUo0=EY41CM1`ST{zkjn!y!vYMOc+NAxLziY>j z>CDOt8(#%(+kZ?v?cCW(^ILfi-??MZBp)$*OSOkfRh#RRcOUrrynCkJoT2`USNVtG zA&#%8{r(1dXQI}Y`EA&|xj1j}v6{GmwPF4X zWx5Xcra5k4=U}|w*yuX%nD&-5p$g6%@m134^TY2{Z_a;ou=-=m&)A*s+5f*>aQWvO zt$QJ}X3u73Yfe;{=piD}d(3W5a^CjaraGs)Zr{GWckSA>br%1Q?TyQST60;bO2o6} z+Xj^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`VruDX=4#^R>gZ%{ zXy|I>WN2*R=4#|-YHVU?ZtUg+)9aF-T$-DjR|3*t9a<&q1vsSw<#p6|Nl9?Q}GZwg*6I<8u*fvYb}Tje_2Ozmv=?%n_5 zYa6%vU6Q!XCjV!~&FLr4{7JvJXRheBT{2(U7@cV$bftIw*^wW~b$;pP7O_*m?E6VWMUzXWFpTRapozY*W z+48N%jw4_B?_ASNnsA!W;K_&W&9fhHb9{IroWO2zQt3pwV2rk^(psbe?QKk&_Y%v#0e*Ze(U&h4H}27$}uMXdw;1ydrYai5>Htx+lCQu+bb z3oerxmmjDUQ{CFy%4)Cndf|!{t5ZANOiWQ8nRGG|}%`-IQs^&BnC{4WK^{~14f=Wxo z_PH-6ym8P^*EkxuE^V#OghR_GPHu1#E>F4G<+`OIdXp?$waP!m&io}U^K;~0XwN-- z_%PR{^Z*brT5yY z9B&$&m{_i_ObWjle%58p(#)+gfBL5$-+iF$!|AWTKYPhP6q)$s^z^ecmtJ|d?4VA( z{65W4x5g~VNN1C}(AZ^*ZvLARU=qCk`trYZ|9OlizxrBb|7gMNkVE3jvfJ0azWm{7 zt=)Z#cY$XGCKT?zyZO+<3;aCuLiYJ|efhNYK$_zH)q!zopr07adT>i_@% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..86ec69084c9302ab426c798d468acc9a4da56d44 GIT binary patch literal 1201 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq|vM)5S5wA`IVfnlwaeY|GN*k zmz+7ks{4RnfYs4}Q-&+=meYgi4+7?X&+I*B&&_T**z)arDEFp=d>?c;8g@V8EZP}U zdG+d5VNp@hsLINpGA(b#4wpVC-j~By!(sOEh}^<}zg8?^O|b`#8}e6hJ!y=Yx8zPf zyIJZx@drXy#nKk6rySIOaOJQruQb;<|8p|Osr9Q?6*>2Wg@rA9IOSVcqV;QU{%0+3oAKwnbNK)&!4cY56O{sw6{3?y^dFIxv$wz-4Aja z`}NmZES%;XQPTbw;!-c3vhdSoU4K#UVX<+A+f3!8%|aZz*h@a9#E1KNJkR4Q`h4Z< zN9&y@XG`9byqHnq>F(aXb=|sikQb-GGG0glmnG+ zZf<6gYp<1CSzGff?s;|i;fGBnEPFYY%}8A2GdE1`zf)6+a$U%!9do}Ma`kSnoPMnD z`?qg$2D8sb1qM#McIAqR6j$q}OM)tqspk82xnH+jne}(edw-=2RpaM;ZNZClri;uz zTjnrFUsw0)tl6_Ki!D*|lUW*U?`^aB!O~B>Z@pb7*xSrBerNUP#g6BH=i2YEyJ08& zb?t_meI|Ng7u=SGdah^Xl&PNS$9iMdl3Ck=g-Wj74!=-#ME?A8Zt%M2 z%s0^qn-JAL>u2C z(otZl>GA&?lk5g#n-aYZ=T|XJ|M=5q13S+JyO}JOSIrN8?G!p+ng747Z{wcN`E!hJ zu2sMO_YvpZxcV=b_bI*k=i=+zE3AH**YWi2+qc)gST|RqyrjJRy1%b)?7bT|e(>H> zWWTl0`0(Mw(O1ONH{^HecI>n{dL#eziH{YoCfgRMy;XUpv@rGG2IcGa+2%jfWp_?| z@y7L1ji0~&bEe7XpGT|iy>sS_&$d6}OpOjf0%Ol^lo7e_<1D3n`v0W;4B;s` WioDYm3>g?07(8A5T-G@yGywpcST`I1 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa6b71ab07b6b96581663a1a9c001c1c440a9c0 GIT binary patch literal 1739 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 FO#qeTa!>#O literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3434045fb7bf61c0351c274ab13deb174604b7 GIT binary patch literal 1699 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`;b>`T>g;6d>gZ%{ zXy|I>=;&zdV(w<_Wa?^e;N)x$)9aF-T$-DjR|3}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z^svT;2r}5v$&^=V@SoVE7N^5gdIhWmz&Ao&hc^P(7H8G=!-&-KUb@p%?*J- z{VEMt?}M`+xCVxNSXJ>M?9It&L0|r+6+bS@9SP!}rsSbl=M=q4EO*unllZsqe${_t zT~;WZoFiTHAvx`SUfMJJ&(F@fL`++{;VrxMPCMp#THm&@zhV7y*klL)v?br!cg|tq zo;3efU%}oxD-(|GSgZUdo{j%NP3rSjCr5u3A;ZH4OcK?aGJN|Byx#ja)~%b|kRFu2 zNtP{q=f8RTr@HnO+~jprtry?Hy03wO-;Q%z<7EXtqXh9C4EJtyo=Dpq{pjP51iSh7 zyWAJAU%x&+)a;yHS?^zWEl^YjI-LJHDvMa|bw z>9iH_Q=2?nvt|STtrmgT+l20#X%}=FPf?n>HHYucA>sDxOgv)S(fg-SIV=JTgGg4 zPFB{d13!NJ;Oq!+S{Ps<)ywy$!hQIAqyvO>gO(|L4@3A5`YYCEb2_;RKFF zajVsul0N25U9~u zy1F3a>hLOFNkS)oSJ0FQrH{;c+fIj5h_5})K`f1xtqsFda&ELZ9{u zDxOXY)RtV?@JU;7<+9_FbM(cgZ3$ZWWN~g&$n5K-f8F(_XCJL^|HNv*%(X-0Qa$G` njahR2>bhC7&;NJ-6-i*|Z8H)L;QVU^sx~}b{an^LB{Ts5p16~4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g.png new file mode 100755 index 0000000000000000000000000000000000000000..7c6ef450180181b9efb3b392dff6c2a8b573b0d8 GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ofu)h7o3n+9 zld+Mpp`oj>laY(Fqp6vrsiTpFsgaoxOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|zqA5wF7;x9rm)4Hd=$#TTv4r8HE?3v^$yYW%?b(M)05($Xvz z)|+7p*N&>4Y&x^E=I18H3A6Z*DEwj;(7$l?s;&z9ZLIK1*IuVpZ5Gf2x$_ zk(+`ZLzlWhqM)+Cd6p#mnyv}8Vhl%^9OiI*Im@b0%a9?c@kd@DF;ZGUT{!4Slh{Tc zh3dAnRYaPZ*5ytK4!;xCLReb(@r;~2b9d0*0r3l~1DS+GDs`^Hiq upC{37EEPq6eiX_{xCaMMRyoVS$i{H+ap2auLLW0h<(8+bpUXO@geCxmUc9FO literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..795f722b5f42506d96e9fb72bb8195ed2dd89257 GIT binary patch literal 1302 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OrMaP@i>0}V zld+MJp`oj>qouivi;Jamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|;R2MTVet+Fv7GAqar;qh-aAEo+E71JtEt6iay~WSk zhG|!wgxO9`(`{h8S+k&(&q0Rat0LQvqvw);JKW4u-e}6!mg+FSreWD3{tF>H&f&BAul@I_nrx^yuA7T&X$OSdZ|fD_l=Ye2)A0dS3I!s f^_^tG%p$>Xur=J~>CIjGppwed)z4*}Q$iB}}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OlcAH7i>sN5 zld+MJp`oj>g@u!)vze)rsk4!Zg`2SnOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|!ft|AdhdU-wqLjLq?_-lvou?@GO5 zEATb^5@7z5^n7FOf}HIWZ%8p8Hd^5CAZF>LdxxLbX~KD-iKc(jo`%$~NZBi%p?I=V zM0LJn@Iqy|uSWh)eb3iD7fNE?J*Bg==5z;xzsNh8M~$CNOg%602qZAPh{&G%Q9n!& PRG4|X`njxgN@xNAT>!os literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..2bd02be4f520a0a3af54ff9ad0f8c78ef2844c98 GIT binary patch literal 1351 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oi?frffq{{U zld+MJp`oj>qmz@Vql=-1vx%vNnW3W_Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT8*`0AgIX{?a5)iGv&#OrW|?a_t_i#9J?#-`d79Tg?NY44;u-jepa}(o) zS^P&7elZK^U$}ZzSLKrI8HYVG9cv3U6IxQU7PxXbys{CnXL#haqV=!C9F8pojEz3L zT$gS-%<1vx-E^L*A%Y?62dhFY!wZJG6;E3nq#3&nngmk}m`^AzP-P03FWbVVZa0DX zi0F|P<8@a!xGq(#XjO=}N(%n+_xE=nKfiOHPp0(BCw8(tu~sN+iE0u3@aa>PeZ_|a zDU*F3+j1C9PCR4QEn#@Xu!7%^!Q6cN+Sb;i%j*CCn;8Czx%LyIRE$EEy}1g9eLuPsot+PFZfa^;lQ7-LaALls;DeJNA0Mwwkn#2P eon*qyBEfJ^IZaqBWTGLcX!CUSb6Mw<&;$UPo5*Sa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_gsm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..9b068c1bf42d90e4f1f31699545b4971b0256c6d GIT binary patch literal 1210 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..487cd1ff5b7d0ac082935b39b628d6624831e0e9 GIT binary patch literal 1626 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`VQl7V;%4OR>gZ%{ zXy|HW;bQD;VdQ9P;$rIPXlUsS)9aF-T$-DjR|3}9J=+-`BiX&zK>3U0SJ;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z`UqA#g2i2>71vFV@SoVJJWqLgdIhWmz&RC=IN2lqjhVZ&{vgLOT7-fINH+S z&L3nTvZpFYMAT+g#RsJ%|9edtdpNr?ss$94TI94C16NPzSdnq*SdCel`9JwRtqadA zGc-N;>%s9e`~J@Oe!uo}TG-nXE3Vs#8)pBWe<0X3@Am& zFK;xyuXPMnW4_nWoM2zUDwfi0KHJw{Z@RZco1nv+wFMS`oW#$~XS#exo$-9jK^JSb zbw&SeMe60nqW|d}J&7GHNB6YhULuK;G zOkc@)wJiAuS?e6nAB_CKr}N2_TgT_^CmG)OgegWROnlkf%QzYit!AF)^ec=q;>lhYcrw;InrtEDkt*7vd* zd-K7SE=q-~#h;cbt$5?hYq0d(X{`Xe`Sz1eruaFv2ywNR9eez7=GTr2-gVx8atmbU zy!hnv`mKKH&a}v9OSTkR$Z&NkRGC@}PU-%hyXxFJQ z?D1FKB#APHJCEyHpFcb%q_~WG>4jbMmi}S?cD{4L*8@&vdv3XRybO7EHoRTCJGL&& zapHFV`@hdVF57+AfgygbpZZtrUF)RvroY~N|NZ~Akjs1G-m`~jH%I+AwB_xB&mY$Q zsM+WGX0cj9z3g}KP{)Px6&5R|>Zx8jeY=T|`{%`efgbPf*oN?A;atK0TmdKI;Vst0DE?EQUCw| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfd0210d33f199770ddb28267a89c37b3cccc77 GIT binary patch literal 1148 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq})@)5S5wMeHq6Y^&ZFD3R?u;EQ-D4l^wNhoj9{B=L= z153nNL*u`mU!rdxfAi)I^WMFC*{iCmHtpKIyZ`pvZy|SgNXIZvKES-}K>UG||79N( zTctf}Dt*BBp()aU%T451#%$*62fgoDRQ`9p)wc7Pjl`vYKc_aa6iCcr()%!HqC)%O zi9sT_?OM}QGwZ~I7em=V~~T8f6%5y%5w@$LET+l#}wR7pFVxLz)Sr|0mq%Ei{|pM ze|0T|GNn4FY%C9c?aCE@!NmOMUHF60TPc(6S>`w0ejq7XZZ(%P zI5_xZQ;Rf9u8~lQQ{Y_+1c4QfBg92rtHZ7`Ozu%?K(;sY&P%IU$AxX zDrktfyqI3+=`6lQehsssfJkI?^zE5*=dR^Ed-iOpz?Op^7m{pP_bvS#d&VOFezK!b zk$mI#1CYBQ`x=M?tbB&y768gc*ryk!wL*Zse{1g+rGta+^WNoSB|JA>J z>(;r3v(L^tnsjm1s#W`D&z{}Q?LHx8s?WW(R@XRJnl8_@mvsrSF@B!d7Q8@5Tx9my zGPgPB&z`-yYW3>FVoQ|#VipB&SD6?2!D*+ny0hSuj}=09^S%q-bg)S^PEuS^w6dwp zaIII>UEu>8%U@3EUhBCc(>lblTH(m!)o=2)yBtau2-z6om?gXF+0roap5#Vul^5>K zzdp@pDO9$dBff2c_>IXg&%F(BaW&q|tF5SBx;mmTMCd>pL*KrYXMQVtxPRQwHR*0{ zg4yKz>mSIL?JqqO@XJY5WVbkv)^fG?^2vqg5{xF=y_I&opzi4OIlk%E?c3T%3I!K% zuUfhCqiER4nq3PH9XezvsC?+^5{19FBdrY1e7GQ)GC!2%T0tF;1>derdETZuuh-ppM3%s;X^G4Y}KOL1!}E1esE7fzZaWbL<%wJGe%_3P0WV{aSUUAlBB$j;Dk z9L#ZmHi9Y-l|++)nVWF{=-h6 zS?5olJgG9l#@2RkP}R^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W@2n=;AmuGWZ`0A zXy|I}9J=+-@<#X&zK>3U0R;XWb z{W@{K?T;_rto!irkNx-Ry8XrHY_k?$4A3cK>}d$p`+Y#g;>^>`0zr`$Lu<#5&(B)4 zK6B|bGsna;_aB(__3%`$qjOKDD1EKE%N~2xLE%Ht_AfV2C%JSp?^m!mS9`40?)O32 z53S-Zhdw2+Td+<_V12_R{Giw8!K+uVwxt+ZhU!h7^9j1a7 zxZv{xqZf<$8#Q(uX)6Exr|bjopCyjj+1YU%g%dN{4{y{7&f)s9c}3tk?L+^BePi}! zWmfwnJ`A}0YJF4t9XCa57QUv-3q0h!RD`w{?TnGAR2Jci1U{CctX09baSD{rCJWhaax&<$80aYm*n( z(z9v79tsy%&16bW;NU6#$tLk+7wbQbSk?5MYYL>M`gS?r^q+3tvf_t!h~k@*_V4y@ zvy~8CH&vs%d*h0SV$bffzbl^iPodgODtAkULkE%WKL8|W$ z_VE^9a(%maHESjFOQCyJ=d!lGS}4u_d()e;-TS9|E!DMn`Ybt-HRMCXg6#^nT0GNF iZ{4HG^ndwZp#%n3A6@n}8rAlo8pG4o&t;ucLK6VkKb_hD literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ced6d85ea219f4a2cc24e623f432f7d81bd0baa1 GIT binary patch literal 850 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_}l)5S5wMJmD*9$dRuCTPYhG)rM=oNi!V<4`0-=Z{`>h~e%5?_ zSg^xsKzFxbU5;_wLzUzjaG1Dk_SFMPF;G-phmM5AO1jWte^Coo$5v)vFBl{2#b0c(Zoq z=~r;bHToyW9~Bo9^HQGJ!T2J1V??2ux){pe0ljZC5vg>82*Xze^_=@U3~eFJ_TDQ}R?X-;6|oaM7DlzZJovF8Da9yYD*3t-mhRf4nq`Q|>|K(j{{}_4Wrv`bb->{Ug}!u>N9(NN;cNqTRc# zH|*FEv1qD-?<=cheHw9cLS@S#AzbHaqf4=;oSJgd@cnh}4S@#(=`E=q-6Vb(19 zS*kO1&py$L;123lkT|$fsL5|F%Y4SWSuB>0+U;sh-ETKObl4 zMVy!AyeIPI(;C$1&pc1}vThheGtENwzwqm~LluWHR4)1n*Sx@cj>nn(lzc28r z^zYxl%_Y7cCr%VR{pQV@duf|l*M?z3=Y=g+^+%$zGEaDKUQZ19{{FW)!yI!hiul_^lU`p440!gWlt)7Q@SI6t9_ Qfq{X+)78&qol`;+0GxV~CjbBd literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ad7ca900d409fc0c10b78956808bff7887cb19 GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`j(r;B5V$MLt*?q^R5 zlsFz6ox3Kf_v)7Wi@SGeHmy@$v_L|KNjvL^M%uqw0t@wv%amh(t`1auFVHTI0+xK=6v;4Wr`JXF(>{rztZ}KbR(Fe=Mw6Hua%}uJ)CFNm3h0a6| znKk~qe%^np`XWQAV!Psd<{Rf8J=XaqD&jD)cjZb4`yE{G8s#6fT=;b|rKscajva1` zA3Cxwx_(==LTV3l@&nfB$5Ivi=S=_nQ~7bv>B9uS<+JC{nDO9hmMQ;1>9;~EZVoIp zZ1D%O6;g}c4+ejbsbM;)_0U8za&wp2# z>$iS(!e9M5jx!1REanpzcrE>v?s%*AJj;g$^V0$~Jo9vV-4|cv)|-C%aoO&@2NNb} zPd|NETQnvwTWv@4)T#E51ZGS-nX)HF@42s9a7kj~!t$j}`3F}pgx}EnGkbwT-TwMn zE*>Y6Hm>n1*!q3}$NTGc4y6TKf>y>j-Df`dTiP>#E6Y>h%tGm=1-XYgHZjHK|7X3e z=3za9YxB*Vb(~RauSG3fRuLPp`s%sKGM$fIK6`%<^k~dKa68HTUYcd`1JN65Q`)7> zW3;BG8O}R8BQM21>%OejN*_NzwKrwE#XsNWYd`FKU4);7DMoFwpmguC8&|G`$jsm0 zzcC_b$-WHv8)whu{?%pKZuaDD*0&|AuV$Gqkm3C0_+@U%wbN;vlN1&@Gd+^Ma@q7~ t=DdA+78X1kZYbPs$=F$%v-byQ*3~U{PpsWk!oa}5;OXk;vd$@?2>?D}RA~SJ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..254211d4cb4e9288e1f5eaaa4878d2ed6101220d GIT binary patch literal 1650 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`?qX_TVQJ#*>gZ%{ zXy|HWVQOe*VQ%4SYG`QeV(4fD)9aF-T$-DjR|3}9J=+-`BiX&zK>3U0SJ;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z+G6Y`F81O-@B2Y)GVr|8Tus0{81$_CNR&*?54}7HhMQP^`&XpZvXQ%(nIg|ItzJfdX zhVSKTEU%m8t$&x5r~Na|zjx-;-MsK5Yp!oaKaDHYX5Mxz;JDB(`a$52&^-C)uZ=V~ z>sDDGN?jZ{v+`)^+?0BD8>ZHK$D-Fxvz~tXsHyMg#qZw+XnYA0oj0G^I7W@}eCsh6 zYsP0g{>-~C>bm5o6svdBe~ul@`ape^y{!l^{QZHUEsum8`9ESB7LQyqWXv z(AsGpDrq8_CEqyru!dJO#5H(7khRy|IAP1t2a?MY*p6v5mBem;7#HfU(PULC8N)7o zMY2FJCOPnTwjN}6z43qkP+S7^?w@2=84|ismfdAf;kEzE^6F+VCw4j zuuy6aleoi7H>;UG_u?WWI~T5TSDG08u%MzaLdh)2|6sO(8izpdwXWuLuj5i2qTNSj zMeHKjg*WN&=c+AIGcK5FJVhnu_f4&e1ICVD&lU?!Sn=3NOg7>OW5M+!>xM7OwX?7)XvoKx$SW#0qL2!$ZV`hF;hob4}#Lw+dKmSag>GMp- z#p7Utfk^jJv299CMPGb{?Q@;d4}{FO>bYSpaEFaJFH z{4-22tLymVpB*_%FN*FHkhOkcS(6>N{yX!zz{x-MHNNNGwBQ2!ojWVH+G$>5KK9dA z=u@(>(*?cUvbuY{r7_$;!V9+D&ecziUNd>w?YIAKW|$nCxVMKnL3B%j#*%tYD~(rr l(^o5fzkP0d_g}FDh9{RbJ{4}?a2Qkzc)I$ztaD0e0ssi%cZdK0 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png new file mode 100755 index 0000000000000000000000000000000000000000..beb641bf20be82823292824ce7f1c312714ef25f GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0y~yU=U_tU=ZS90kK$hA2Bd6FeQ1ryDbc%=^dNd!OQPg z&MWSF;NQ#4ap2(ejRG7x-X*6aJcKu#VM>+cmQ0H{?s_63qsi9cUst9`Sfa!tkJ<`1 z-f7SH!k5)pXW=8PpWb+5yM@21W!q1)m50pe!>v|e&YKNaZ?oc=FS&-AUNV5ECXYOkDB#f8SonXhl`{mPvsz|SalP&t!# zgA=!2Wo=%R@n>t#?Cf{bCoJXd4RwE(RIw%E+Nm(3RrM#$HfY}e+k0=~qu~ z(+ms@q9v{oCC){ui6xo&c?uz!xv30>`i7SJhDIEz@+%n_7*s(DQW8s2t&%~iQW=a4 z42^UR40R1HLk!HU3@ojTjdcwytPBh^b3O{9Xvob^$xN%nts%nDb1ee{gAB-q;QX|b t^2DN42FH~Aq*MjB%%art{G#k)1?OPX!mW?Z7#J8BJYD@<);T3K0RW52-K_us literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..c715e53a9be693f231e6a8f3f29df731c5d7546b GIT binary patch literal 1286 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRc{{pjhEaktaVzQ1|Nr*PiUML{#~c(B z*dNXBQ8>LWZtpCHCr6k+vMc0Wxpr+Ig9tanrq2tz)XmJy@)QmW$tn0TKT1-Vme#~| zj$M)?^*Xa|5W}U{3zN7Pepv~e0A8o`c~DL4%L{7e25v=jG*PTUzc+zP>JYH`f*ofeb}u!$cl#H|G_N!j5(= zRtzd-0$O<-KE3=ue*CbRI%SI9&fUA^4Gj%9s;J#oV0N>5YHYy3VZiV)E8G3vXPr5q OlF8H6&t;ucLK6U=?5CLk literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..6a6a34dd90132b2a5613c5ea0fb3226b304d05dc GIT binary patch literal 1345 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oqp5|txq+dH zld+MZp`oj>larC9g`>HvtA&A~iGeX(uV-FyNn&1dD$L%@%oHoAUSqs^t(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWK_fgfFD1XcSQ8XI;IOxHNiE7OOHFYr%Fk5*hp$y8 z7W<713@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*6yIXyY zHF!g4d9%g?)|~5id)K6#Kd@r=*UAERzEg59Hh7D;+TG!3Nyw0J>$qY2&fhNi$>|

bJ&OcG+ojC^OZY_Ig9%o literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..2c2ee21e9e56dc8cdab8647271717df7693de151 GIT binary patch literal 1345 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ov9pVdsim`t zld+MJp`oj>g`tV5vy+*Txru?9fr*nPOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|pk7-IRzZzTQp|!4IAEW4`rvc4V8-CcDRJ?!m>E`R}>u0}P zwYzLmj9F6+`x31N36Ylf3zHO@V>V{~Ie79t^OiN=(&bMIDLB)KFppP z{CDA`uW<`nRnn!!G76R|OLK@G7OOGxf9iX_?zvDB>+UI?oe%YW+NRE3klOQQjSV9c Z4?})nfv3aHL^n{O=IQF^vd$@?2>@*1)F%J{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..e2cd61e27c441675df9f512174b59fc5bf93aa4e GIT binary patch literal 1384 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ok+GYbv6Hch zld+MJp`oj>g`EG-Sp%?ym4j6wc(v@kGrF|{yuwQzAVFfnjdg6d5nC(QKi6m0ZCi32IIz=VQa z+(1llx(20jI|W4MNzF^KRVq@lw_|+yLYRSpafYXhV@SoVq(A@v+cO&~=;-t`1|2x! zApgK!|MZ-O3QJp^%dC$|9nP>m+Av|!=4H#+RGXrsq9i_Qgfl*x>u|=uY)+$&LINj8 z2h+zgg=sEgDT-H(X1xCpaf1KrM6RPN1)mvzQD|i{%aD=0WcAY6Ie4zH9&676pW2_F zo)#(WX6`u8RJd#1x_6NaZfGf3i>O_@bEigZzOVoO|JIskPo}iFb1Dm82yk5Cx%Kmaelc9`;z{{;vF6GVO$@akPE3ib8;gV z9Gu#hqY%Oq{o$m|RCC+kbG}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OtE;1ltDCcl zld+MZp`oj>laZ^VqnnYXtBaG1p{uJKOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|>1?^47`U8SZcPVanOGc-!-G(T${yei0t6P7BprR=AW2xEQhtz1VzXLhG*&7x!?_6PI1E>Q&{|DBI4f z>jZd3_nc&Zop9!5ZM4YE6eG*ESF^-7Rx7)@>2i+ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..01b735868baa983af3d0609effb386c4ff447e6f GIT binary patch literal 1289 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRde6s;9wU|_WLba4!+xRvzh|9^XCMFBCfV-AW5 z?2qR6D4bpww|5r9lOxO@*%k7xT)Vc9L4=!O)8~a<>SktUc?ySxjICv@$vER8;%PdRo9Q7&wA;5 z!w!+zt_i0b+Bg|DGG7pH4G2H@$dln&w#~GRzYjzr%Dqp2es|n_eNRITU(LNVMyYR% z88@pG;uyZ(WXuR?lG!LH^-g|)iNv3z=Ntc>Qoi)}&j+*9_8ZS87^W#5k`U`@3t(1n zs^KVN2zjFraz|i>l>DCu55CuEuc~_4*7ttmajt38j-*JZ9Pn6P!^XzI$i~oiui$pD SzfcFLaPoBZb6Mw<&;$VU_pV(4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..a79913f98e9eb6b8bc46a0ae8053b5965e1e0bc1 GIT binary patch literal 1262 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRfo@X+#LU|^KW5Un p)YPUONs&%D;IX`hjg5hkjUhZVJ^7_)+ig$@|OspPK*x literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..89a8720aa280007b7953b1d8911ec70497b0d6f6 GIT binary patch literal 1325 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ok&&^1i=~@| zld*x5p`oj>qnV|JtC^XTiLs-Tftj%jOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKme*oeV534b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT8*`0AgIX{?a5)iGv&#OrXzE&FsxLxr(G@kOh1DGe3!0^OIa8b2_9G*g(iv^0x_ z^=6pDwWXz((%Bw8b;#-UX5{WE{P`(WTw$y9l#tTW((epES2w%~P_W}Z@-je5JmJZM z2RFVyKF)8QWL#=F>1d|IDT$7$3#XMlFm{QEsJL}=bNbs3Eyo4>cD1YUZOSmc(5|r2 zPvKs(vFV4;;kRzzPM;7IGu4^5l~Glpj=zM(drFY;5ewYIx#7WB?EIf(kEYD;I%R-XaIip3Tip zOx*bL{{DIu)o`%|uM=1DPBTbz3|2m|{r!ShmlCBKR{GsNb0$asLb^)2v{(w?1tB*T zvuzJ18=9EdXlrPk;NlZgYpKo2$zjn=UXuQlQy_ui!^=3<4j+~tPyy!Y>gTe~DWM4f D)%?UB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..de92e6d81139252797fc9331fd87be576cd75cee GIT binary patch literal 1321 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OnWd4Tp{a$j zld*x5p`oj>rIWdfg}JknlbMO3rK^E6Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKme*oeV534b069jGc@@{&uu5Fm*AtFm|1hl) zaKu6WfxG_cISmz-wmO$tAC)?sam_v*(omr;@cFXUIhV!?YXR>|R*fH=YnM2^zH)-C zSJ^pAy*4dlRq>&v4Xnp@)coAUJ>eGbk#)Ov?W%706Y5Z=AuylyQHe&cu+86p?`N2( zPnO&`bC=A?MN#7I|o{JGHRwP=k=bes(J+l{)e1=i~O*-7N{fyLIx5O@gnq#aAp;VBk9R z{lS~{tGSI%h|WGHKj)8~!|AO5hK7?v1e$r~u^u&G=vr>Fz?o&?J{QLQH!5@FHE!ps zY&+Jl+-}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Op{tRpi>0fJ zld++*p`oj>ql>A9g^7`+p{cp6i@Aj%Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6tdBNKShRWBGB(ww=%^@(j~d~OkLEg@@h_XxsH2d; z$-*V8?yr<=L}m(?8z)^5ysb$(QE%q*Y8YQ2M<_<`_fN z6t*QjjS-Srk?eNe`#yE}{VRCCOEOTE<4XAV2}c~o*0TK)P`So=q`E-z!(8tTZ`SSd z=F>bHYI!9>;AXQsk?iRT$A|V!&_o& zu~kvEC-TA-j!$o`SL`a8(RP2$oLBr)*L-KvRXOM%;U%y@wZ|hT=b-xMkb7U=lKmtH2l+ga>FL!Ej<(GO;vYjU}PwpUpI@tb-EU)nDcb?b6Mw<&;$Tjjo;P) literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..9ddf4291fd6843425c4b0532ed33a583ac94e91b GIT binary patch literal 1367 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oxr>>(v89=z zld++*p`oj>qotdfrHiSvv!$D%rL(aqOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|L?^| za-3lJXs00NDwd*n)o8~14-qH$kKAsEnD*!j$7ji^2~La}C$=$d)LT2*&R9U7Jt;ee zOCoXRuTM`;>p5hZYpi_r>eV~OPvML=7dq64bzGi3d-nN98#^X8H$OhmFK_?m!%D|* zk(ND-TQqn*B$+oFUD?D}6DK4lHm~g4n@HNruPQK?{wg0WegD5$8OkQ z_qs*QT%uw6^y|M5HnU%zF>|J;R)-_o`KBZZhNHn!7ZjTU;ukUG<>f_lb9ejx|Myo} zbLS?8Sbo1;56)yU6Vs-e-+Zg|WS23{cy;CMnKR#*YTb&qIchpKOfyj0xRG^!&%%Wd wBOM(b!wNPSD85NfPFBv4RJPUjZ(v|%5UeXUTR%-A160&`y85}Sb4q9e07f9xLI3~& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..06f5ec9d66006ec9a92a62f5c0cbe59cfcea9b9f GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRdC2>knnfq_xU)5S5Q;#Sh1|Nrfo6$Qk^jyWhM zus@pbV{q^4>TubHANEsp8IJsRtWnq(A0MCZuuRp)A%^A1cLy0YmCm0YZ&(Btu3dYU zV~H6FdoG9%vm+6TD#*5W|=mFlSGD)CT!i+Kda!9X_chjalzuTW5C&~Cz=10sCCKG`a1LZ4={yXebp1>AaC+E@JBD)}wpMC$0 z$~F5xb(GlK?>YO)KgT$tXJ&^%n$u%*hsQ6OG%^}~FbnwS}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Osi~!tiLs-b zld+M3p`oj>rID$ttE01vqq(cGrGc?2Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|zqA5wF7;x9rm)4Hd=$#TTv4r8HE?3v^$yYW%?b(M)05($Xvz z)|+7p*N&>4WJ-?NS0kC-cKPbnRFz9gX$oFVdQ&MBb@0Aup1@&Et; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..6076075e094f7ef6da537fafb54889660c708356 GIT binary patch literal 1236 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OiKT^sk)xxF zld++jp`oj>g_(hyqp_iZn~|%zk*TF2Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uGyzU8Yp$hc`8`wx@-b$@rgTpAsr zyHT-0_ncJc#UIU+??3J-&ngKXZyq(Qq4Ckn15aoocVwD)Zo7h zCw+}u(5mu-^Q@85}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8On}MaXrG>en zld++zp`oj>rGb-+i;;_ko0E}|n~|v*Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6tdBNKShRWBGB(ww=%^@(j~d~OkLEg@@h_XxsH2d; z$>zN zYIn$Y?iP4)ne_+Hk8`RKW#M;K+kZY`WSgYR%#;$#{~@#P@2}F!-rF}sB{?^+dN*aL zxIO0gtDAp){rao_l9QI@I{xXNd;DADrn_!Q**r;)d7cEjr~Jzg^ZVNFb*;KlY|;aD zlhYk%{Ehsd`kt?QE|kQ|&Mho_IDQ6?wzcEgo-b=`7@2q&_Wg?MNSQP}4OAp~y85}S Ib4q9e01ITZod5s; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..fe9f905e60931b859b3d4d8c53ae286b73f4ca56 GIT binary patch literal 1283 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OlcA%9v!#WT zld++zp`oj>qmj9Vo3o{pi;;z+rMUrIuV-FyNn&1dD$L%@%oHoAUPruot(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWK_fgfFD1XcSQ8XI;IOxHNiE7OOHFYr%Fk5*hp$y8 z7W<713@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB5$T9ilgdoG{b3Q?StoB@U#-0uu^y zaRV{I=^B*A?GzB1Cp9m{R;ftI-tP9vcSji*7>zw$978H@CH?vT-=5h}K}V;jG3dY% z2YCTs{nIgx6>_#Z#_W%H9nP>l+Av|!=4H#+RGXrsq9i_Qgfl)m>u|=kY)+$&LINkp z35Jh$3SzEeDT-H(X1xCpaf1KI?S_bHkFIchmaLlK#Hev%8`DNTv%LlLWB1iaX186w zdNoz$lI$6WJu)3@3pEp3QnO~H?%+|Muu{^}!h-M5kB^7>=1Z+osZC6Ln3;Zl-d5!$ ze9DaswL9cHcMH6@%=&}p!SmF-plvz@4Mx2 zY)J4F=slA0zopr0QpnB0{{R3 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..e322672b6ed9d8568cdf44f270937e78be130129 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B*)5S5wKKbJ-4>!e{=eo(z%h-)*1SJI=!v< z-I+P}?^r*V^9&8;OlgchX#7AmKx+f94Wo`t*kh{?634xHD<9@aVG|7~(?p2ZdLy)hH|^s}b5w6yg3 z>eZ{Su3EK9;)q$`gR&32_jTC#n%pan%}Wk^`+}+apj$!bdDa7~7YNL#R6F}8ZNI>} zzhW`xPu^koW7Pg3F^A#xf%AX7lbK z3UMBty@hwU!y06r7Cp8)9k|#>!ri!Hvp_U+U-RXf`;!wk3;b`NpmTcX!GsG=7mAuM z7}+jdd&oJvWYR45d(SO&=Z8KpeJC~Qtf4>^N6F_ibqZ%D9BbBj@;q{SPm55e%e1?B z@3-8{x%cZ=Re65?dR+mIJB!q}%(0Kz^)NSFfUD7Za!Vacch59esR=JOE?MMw=fvqE z{i6ygS(%xZQE_qWgznzG`&J-ok$Q>hJI2FvY;-3wefU+c@I~Xsas6V+78RjYD^|>y z9H4i%#r}fbI*;@NpJnnr6ixg!_>@?!JcZvkoNwi-kX-)$!shn#Q%YoKYP_^E+gV(0 zVzygBc;WVgBGW@AaW?xE1WP%6QK}O>wWGV9|)4LOD{r`2klkmZPkG3fW@5yxuy4^1BQuA=5wO`dNsb^X$@0{~Lx$D|Zm}EP_>4o~- zzfV`SsOf(d-EW@M^}g}Ky^C);^e4@{@c7Q;%#&-ymOLv?E#~y@`?l6fF;I)ao2O+P z_hYqQtFHR!j(h9ou9lSDU*sHdiuK^x=gKj6J<4>=`);kd_*MVYvpo~LJExXcy}gmY z#YA0UOM1)nISN;pW`;Sg*tzrPr(;oJVc(_)`18w+JN@DZ(hK1cpvwXGbMBsMIc^z?!k2qOwa{9kp$M|A* zC8y~`QLfga<;$1rx>(4Z>pcEg&16+&%{qs`DLIh9Lr+Xpn)L8}w1_n=8 KKbLh*2~7aQeLwF2 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..946ae176caf363dbb6e6e46051a650abccbff2a8 GIT binary patch literal 1719 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X6$6@>f~Z}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z@2H>?UM`)%-WtVjv*DdwoHrm5DAnxetzcMyM^VKb2sYf^FMXE;LVYyxMRTr z!7nj_ihG|r>*tE7u?V$juv~O*yy*PUIg?*d#Ff)E&_zkZ!~9L!javOpyWj2FY5cdp zj(K@z+GSn)9~+C$&6)Z4Z27+8v>k~OXN2Z15Zw}J%~5qQFDst;xMR$&G+~a*8!Mgt zY}oV4Vv;$rzLUWfjgEOVB+%%azH z{)>Z?4x83NMIn*eI8z=5ecqu&dHS^*Yf$D5Y z38y45Fl&aw{+rUa(V^a~E*Q!Ejg z!*KOczXMCj#0|MiF27`O*|SK;M(%viU5Vfg)0W(NF~jq#dV9=q?Ck&g}JHeR_5bX7BY5sZ``nWqH@FA=#nRv zeeCK>AB*xI-89imSbADP?m@%0r7w86xodCy_nF~4|G=3C>`@$duk7Q|3w*08bF9ac z``P#9*J>r@*Z*3yx zw-Y-rUApACXL`1R`RlUXi}zg6i_1Clx;RR2K8I1B&Wozprx)i}9W&2g@~8W~xBt1- zY>!`l$&uXm_e_7Q%85tJPBq+J;fvmVtx6Ab`A~mMpOKAW&V0>C8%>)zpsK{v)z4*} HQ$iB}i|3nI literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..6756017716c08db84788e01de6032a33933edd2c GIT binary patch literal 903 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..180eec96067265a22190dd2ccc1fa625af4d0d10 GIT binary patch literal 1738 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W^8O`YGLALWZ`0A zXy|HUVQ6G%X<}jS=ICT+%EEuev9ls5^K#Ozm*7tIeue%Wej2zwNuQH;AL3OKz&qLz9-S zW2|%8(j8g<3ve`)3GJErth}Mn;Ap(p(jcvt9Xm3XUzXe+l*6$`DbP1$TFW0{-xyot zuXi6OE)4j5wY5&?$5Y9`S}gTs&AaRci2ws zjyrg}^_G7@w@n4pl%huCE?t+%%7Pn<@*C#GROr9;QkIW?Hp7@rBsluT+4r;g?Uv@f zZ&irhnwzsS_VT@*6Q=&FlmNxbFjYI0jEM*OE7c{;ScQoDFd%^u@V9}&kLbl9dlhrmQPrW~>`K!-0 z!2s3Wad%7W=Y3wEz|Yo_tm^Q{$|L0P9_yq>N4L4h^WRM{vj5>F)P7fgyTOXs9*3O= zKHgdF-|?!Zd54%@UtnZX_xb5g#UG3<)Td0p>%zZo!JNlyq7UpY?z`ygxqSAF%)^Yi z3Xxk1dHCxV_Fi!O`uc&?(>R^;GXxV4|Jj>$c5d0`t@bI=ew$urHFj5u&GeZ@a*G{H36YlkJp!WE$VsLGe<{Hude@pk?Ij&3z>-@0J(K}wG-$* zbLk(4*6OuWG|ql%m9#TUzkMg@`<2_@pX@A?+MTrH)gktCw&&09d_M2KrBdHx7ZFVh z9=~Q0#z~GgH`w;f*fvqGbW-Lop0(ObGY@GB9N7|kBx&Q1@{*DxtFFEhnd&ul$>o=a zejX~gz_4sbYdV_`gD$h?Y<95)OuuKIo1D43Fe-0p=BE<}s;oA4Cy2c%QMa(Plw25~ zu_ZDxQl`M^i$(klc9|`Q1q+y3F3uEINzl)DUT4eSFk{<&_9{oAv-!-N3;1PHRK8s} z$<3K}_T0I7r_P*tVq|1w!7=X%cfK*RJ#+S*QU7}fTFSC|X5)N@e8z*yU&0lbry9ghP@i=wGc(rCzN>C0 zvx3Brb7#-~3<(Rn_T>5V*G0v}TXl7Hx%S5GPql2y)sueUpUJ`>`>Eof#;@0F+7{#o z22RwnwVmtj?fqCvTH2eJ?Qp&Dlj%EnVi=_rU-+`58r|$-4L6+Ks_K%UWPVWg`k(WY zOFR49AHRy;f9(2RxxED^A8zTiRo&73FTCc)#S34w8_#a(Ynyui)BOIEQ;)uPog;MR z+xxog@~A(ysvdQ(Tm;qb!V*B`6=D>gva!9DAX)@)qz>}~IYqAqND-V`&Ompb-xE6fy(4j-~8?8)DO9KP+ruz$8D)mX9U8L|+ zsOUoaq#B&5VPOW2% z+7se&aNXD08?%=h^YPB$m^;7x*Nr*%nZ@pzUW#m&dwiyP;_0T7DU+BucXCg<%qrfl oFiSjZ`|ZCj+7_4oaoRH|eVY1IGH=mM1_lNOPgg&ebxsLQ0MIF^w*UYD literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..91c9a031c90821d9269d538934377368f91f04f3 GIT binary patch literal 798 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06%r;B5V$MLt>Xv+&r4 z6FR$jSFgR(+O9JuE`c)5`f8F0aUB9~azOBu))XD;$ zbwSHt_MBGS<;L?oQF*TV1<8qioiA_wRp7DsFWT|QYX9Mf9NC$ff|*;RHo7hLG@j{G z{Z~J1bA8`-0TcHJUmHrRIF^4dv65zEw|M#f$pi-#mBYF-S`NoNH=lj>qtVPWGiJ{| z-6XzndYIM+ixNkvJxiW@H0D`|e)zZ8z|jA}zCC;PY@9Pk#?0D!w(EnZQ@KF zYc#dAj6_95B&4OKQ^mSd&u6gEtYS@9;8=VJuRRWYI>R3&eF1CFvjy$)5Le&`R^$ASnAHz)WD@Bx3hx3Ui(!nH-B>fflH;rHJd->elDJ? zb2+PynQn--E_r_JaNmoItIkPW?!ITd-ZoBs|E5iw)a>o=yObI5^70zZKC7mor*}%q z&-QT1@lA76mp7eAJD9hf+tJ}$)05k*((M{n-KD$lF5J^c{P(Iv5xj O7(8A5T-G@yGywqL)^~RR literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6145e7d50df2963c2863e5bfde721a31e355d9 GIT binary patch literal 1698 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`=IUf(WNKvT>gZ%{ zXy|I>WNu{OXld!_X5?sTWMOCy)9aF-T$-DjR|3}9J=+-@<)X&zK>3U0Sp;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z`YRjl9z#jSL{tSd{m|VKveqKK|1-`{i)+c8C3Kr{L-*;+4^}?O`R$;+Kwj;j?S_nO`xECq z1-4%ezOSek-OQCX=eO0Nuig*rI>h+qoql@7L!~I<`d5aU^X$zB#q*+nYhE~=D)ixu z*^IkZ2UGRxpX9$)a{GCc@mS8+w-3~Q@G-rq;W242R^SOr;D5oKKgVUs<(Iz-ENYZz zpUpeE`rhTsm$kiLr^g?tzHnani_9E$`5n6FoZPy7=A{~iEof6ZVZbAP@9w)&5l6px zhUpH?zF<)C;V(RH)M ziR!MNLys*ixXv}Poc(g)!iBFZSFUu{kX{(@A}c!jw#QbNHOJ(dr!P3Bb|7y{_?|sM zY~LIV#JY1AemH2CA>tI0t7;_^_CRTVz@)d4r_v6}#&N!SFD1_;WSM8}dRpuvPoCu! zX_?)vX3ql5BbUt6VVu&m>%{K(!~Ofx-pMszUiR!(?XJ?>2NEoeBYaq7tM7*LthD2s zz5h*m-J++tNlUt=q^?}+6kGZK)c%eI#)HsAX+N9nu#Vw0R@ z6U8S!S##;hFP~#NOy9uqgZr$=fv3Qn3!o9~IU0Qt?vW1joEj%LllD+hgEa%VA z&Izi?jwfGtHmIDjpH#EX_oA!vYQ346|BK!|Jp21jV}+V=eEWaCFs2zymMX1Z;+uqA n4?q8`>bmmvpZbmWnRpl^HFYL^?K<2Bsx>@a{an^LB{Ts5l9-uM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g.png new file mode 100755 index 0000000000000000000000000000000000000000..ba1ff45283b3c77493dc2b1515265b41a85cdc2e GIT binary patch literal 1322 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OfwPl^rGcS| zld+Mpp`oj>levkdrMZ!ri<^s^tC68OOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|KL;>;&nLVmVG*;p~6_8_@dRhl!gjWa^Fh<;TO@-3H$$P)1#|I+FN_OZ7ksF9IH8u9_%O4bPj=Jg zYuD6vu`o)WVc5ix(a9iS&9IYw;lWO8(+{7+Z{5C~9uO4M*tA8i<2rMpz24dT`|Hn_ z6cl7AFVFeI;jN-@pV3g`p5B8?Cr+P!{rADa=FBr^&ZLMQ;a=cqCNI+BAj9xgk?p~= zXWO=J*l^>^`}_8vylNNt+c^Y3WY1U?!~Zo>X%kz*s$g?tBNN#AJ!~bprCzYsSn5R8#iunJm;?po5#S&#?aglX&O84qY$X{@^tlcS?83{1ONfB B!OH*u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..f7fa38c7e3b74a1f82efb9775d3014022ae91481 GIT binary patch literal 1321 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OrLnVxn}LCe zld+MJp`oj>rKP2@qk*ZLg`1I!iIcM_Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uGyzU8Y=LC7;??v!7YAb*p5@ zR-QR7j$(|uf(>j>9Wx3ZvE1Lua{Aq>-A@eW+c=aJvT|LjQi$U}@^^>H{<^=rUas4f zt!|n6*gZmt@h4x0Br>f{IPR5o%P?)aB`@CegoUhngy+V4l)d171@3qJ(v93 z;bxxlMpL%7REPOB4a*MkUkKSL_iD3C3h(|%%d7HQk?&cfJc{I8Po`f8dC}p%_e^l* z<<0kZwnQA%OHE4p!96)KRXsye*;d=Xfq|K!S~M-v+Qz>LRCsy1`njxgN@xNAJ@&r( literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..8355a4a9e593cc9ceda99630ec6bb40578dbb4a3 GIT binary patch literal 1360 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Olc|Y;tC_ip zld+MJp`oj>qobRXo3pv8k)eyJk&~G-Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|H5+PD}Orh zEV5_#$P^oU*GcK_K_1^yza1h5hm1@wD6uM(%5}&y6e?ahRHxv_61AftU|HR-zxO>e z{nU(Yyd);piZL8v3OKCK@RHeq{e!daaqfMeI{f|>d~KMyWt&-CsZNIAX@*T48J!GQ z(%Bat>=dqfE~K-2^}9)jYd$gDJSwW;@w&0X)NLn`NQF@qHv#a zqw<7m#_7l8=lrpAIGy$1&~S37fPMqp&6)+Rd=4@UUlrMY96gu(+u>%O@M)-Ri-H{ od^mmvkG8erX^EGSl}s!W3?)5PYa@0Z3IvsLp00i_>zopr07kOW^Z)<= literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..91769b93a4939109ec592ea83fa1680a32925809 GIT binary patch literal 1361 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 Bkh=f? literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..37633888f0f7aeb841153d75c7e6aa1f16ecf621 GIT binary patch literal 1074 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfr0s_r;B5V$MLh%B0Z)A ziX3;3K0D!5Q1sT;4zs8io?eqQqE@WYxg}mK`PMO@FvnRjqw<1WkC10mS51e{i?xTu zyu26IE*6cFSsrs)ru5j$`ZxcN=Kk7On4={1<74gTxx455-}`)Cv9I3r(=2}uSZol= zVK3ymeIQ8S*fy!=14*|Y^W0#(*8K87{7dULv$eh7_D#-RdNyamiRGUByYI>cL`F&m z2L=j;$HnbCnzq?Bvp5q|3= zUtd5@-~+LW!-ek~&UXDZchuF@b@cW1O>AnBW@&xRd25x=tYwcw^b6*can8?7*nY|V z2%8kgEcULQo7JbtUYg)^27z_&iU;>bm)*$_tB)&XU=SyHf>tetJkmHUvf&F zZq{b*d+!!tJmZnt3qy$n5wSQ0r~F;2yonlzKh3zIaKc_+f4z>P;z3mraq;KQ7d&ho z?;0}OEch&>q?qvDUSJEyoM%aG&J#RYRMph}O z_iKdYe{9=Pf4uKWhVX;GiX2~DFUV}@OxK=Y>XdcX?$-B80h0+ci**m5)Hq%0-goJG zx}(;kBdL6Uq+A+oEOBbi$fE#mzJS#C>#nNBX>pNl``L7`6-3>4x}WdExlfsZqu?Xys4Z@85L^+#1XG9%J6LTK%BP;v>z)!kxQ5J3f2&;zb4bbM-~v zmOR>h=SS|3GS=rh3l=O`z_C4By6k9FP|&2S7cLm+SX=+rTjv}W(|#``G*q{EzcuS? zks|@`7X7~Y>3R8HrB`tQw)a#N7U;i_YCnH(lkzQz3i17aX3d`6EF~>{xaHclYYrV> rj=P%9xbL(<gTe~DWM4f3W5Hj literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..88645bc12df5ad9f9cf6836b846a2bdce9db3cfc GIT binary patch literal 1657 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X5{2(X=-j_WZ`0A zXy|HUVPfFuY-(xb?C9v^=Hg-k)9aF-T$-DjR|3}9J=+-@<#X&zK>3U0R;8+=WV@SoVEz{0t3kM1uFE^jPB-1BZKs1+Mm9amFLyM7FcgrLD z1@oHBi$5f}1UhmwO<`gAxFF!;f-eed)g1-5Ea2!;XcS{w6mqda!=rBEl_S2JK3W@b zpZ}WM;c5Nh;olqEci*2o(>(ub-uBfu-Z0HzEw)Yt}OESkLiOeb$T(W&SpcHWaLQ`TF@mXZ6A- z3y&T>I=j{BA;+&Y8@c^r-AAX*Wl4)T)1>ff=7jP^DJs+EMe9#b3i!V1^QO70 zURR0SvvRE6e*3Rj=5)!B2OGjB`gZ+vt&QCGRcHp=<%G85*LS|Ud`D~l6t9z#a@u#6 z$&|fd5zTK2KDshtK`oEtUB`XbPBv>UT(cx1W|r&OFCXtTKd}3rov?qc%h%jn_3PBv z+odm)kzbWruW&f+h4q}-6PxEB6kWLg>9U(#FHMYZ9^X6p@V+^(=C|hbZLs;#YVI`a z`1b>`=k|6To)wyS_)qHFvfYjC_3oAn>v$92E#M0a%ACVG=^|sfE xWi9Bm{3X6b`Qn$KHCJ^7cg*}2-N4AOqCx)Fml<P5ofrg=4*UL$A8~KK-1)|Me#SmIQtCcj`tneaa0aLRgs^4fo%-m+Ex+b@W)> z2L_ea_t(QeNVZr;L`$YL$jdxa3%|U>|H{0jM!UaUdCt($q^Wr@!^A4VXyzfdW=96s zj(K9zYZo{O*D<6Y5W5xH#w5d{-y(nASz-Cd_5;xdUSEqJh*Yrm1(4xK+B)#>>rW z6SP@w&wOy?h|A@s)jJX%-cHW@SHEiP?3pybW!*Xbv}k(w(M5Ygn|{C8D|Gps z(A0P@mdjBa*6rFCqi21THDF$QLiuVI^QOdtCMFlHuKM=L($@WVb7m@>KkCM^@rT)g zPY(>rURjj&xcsr{_#(G|n>P>UKkYS=W zQ%3lBXPWDTw=IHuo?Y_LJ@jSgtc9-GZaE7BBwX$#f7V&Jr=h&Sy6C>hl6?#Gnsy!6 z;olXb*MBpoZ-a2p`RB%}LY%F4^Y|mzUNf+(?_L;?(J_CA@S5o!r>=5F#py3~Siv3g z>+!wzYW8=wk7P79m)^ROs5sS2v$1I|>&@$|?CrcE*W26QOfvoG`CGk)`R37kQTBH& Sx)~T47(8A5T-G@yGywo&?{m=r literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..266fa295fe2d394791972eb362ff4e6726f41562 GIT binary patch literal 687 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f92c9c237bd8b3b6acec890068d30b3a7c0b85ea GIT binary patch literal 1094 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq{kB)5S5wf7VAfx`4_>T!~Xi9h`@>(>q)h@B;MAt&tPHOkjws-^YYra$I>=`UA1ae zRAgkNWOQKQ#+x~2?pbp`A1uAVB(p%YhE42WK7)AXj85)n&H4v8a~=q<2+v4~x8A`% zt@!bi->Gj_KbDeRaP8~k>6}iECO3H3ButyQpslSDF!kx}*$d=*XR^&}QYqlN!=`<( z*v|KqMYp))#FsB$_6j`q^71NrIAxp1@u&~I-P110Ug1BwLH&(+bD=`C;g{A%>#QT1 zkDsu#Yt?>su&g*-`M$yT&17FY-gAxL6WX>!>rA_F?b@{h$2+`DN&)rX z+TH#A<(x;49{nj`a>gSd+=rDvqsCJC+`M`nkC=Bn7HoYD9vnuU3tC!Q?1fYU)tbb= zNGV^k-q7~<_a2T{%UIZ_8qB>YmGnVXm1)<@7cU~77FgVQckAB0I)V4Le+5e!x7_x3)nC|>UGwy= zN9(yJ-PKJonS5WnV8YdWJLM_cF4%R&a%4>jp8Ve2!1B1k43D{G@rJL~h+qHW8IYH^ z&U)jqqeuUWOqn+Annse4uy8#mSI~ahMU15-{Jm1wB3~vb9A|GnyP)as{5=ZGtAu*K zi&PZkrzyX$nX=W|+WP*XAB87uS7uD_y5F;H^^WwtTwGjT0kN|SwZ5vVs@^<%_H1)e zQPI0aGOOGzzbxCe%gSr6MMvpmJ4L={ny=o6DctUzw8Cy-)mjyW1?&aq52u$~3g+_d z>5gU0&COk?tE>C4>1q~l;|T|mRm?ZU+I%_9eg>9{_JRNa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6645b792aa78e57e2364e5b1c6a14397c0a392 GIT binary patch literal 1683 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W@Kz(=;Y{PWZ`0A zXy|I}9J=+-`BgX&zK>3U0SJ)S7{TncdUHF{I+wmTA5j!j2-xH_!IHWO8JNvuGy&QbvBIpn#SJM((v0 z0W6NTtodw?M>>vjIeiFH;+Q9*BsWDyMVI4|_>HDT4_vuiivmMT6tq<1RSXL!=lt3K zN$gnZHs9M{4)*`NG4tmCJ>S#Hrur>^yx~Tw0iW6qSr*TNrrVnnxI|hltsPrlKWpOp z%r@nq;Jf_B;|lq;g^Mq~IG?t;{r1~3fn8q$G`>V_?zwq7$;G=-(6ONF_>mSv_5-mW zn$2AfaV4-@a2qXPDr@xo5T~{wYHi->6r=60zy2ySxqUI?%N8xc;^UXx=k4YblMwoL z)Tr&2{EgrG2eb)3f;O)Q~oEPQ+;~FQ!l;MZd2vAynqkiqTY&E zoRG8OXY+WlDXCLqCcC)G`DZ&-9vatZovrCvyCIFULZ|j-+UB2UUY5uOhi+Z`x{BxP z%e=B>H#vm2hfZm!Qk^~JiF)7SZT$DFTuY~){>qm*J!buZ-YCy&nr)L_t!}-hWx&YS zWSDoKW$~TuC-j%De!{d}Hs)Ar_aSTNl1k+{T>H4JPAwO>5_vxFt&N2Ex~Uf3-WyhI z)Vp?V2ZxV?k@ z^p31g9D5u0skYqx@Uvz?=PL)fw_ma229;p8)J(1gQ=g-XnjJ#hi?pOF5A`!QK`yNfE>dbmp35LW_O$DKp RsCZB{;pyt?;ydjbFe literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..fe80330cf1237fbcb2a0d3efda6973955422342c GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06tr;B5V$MK`n;xmE* zWscuX^L0zUn&tK1tZK#ds!loXRgMM{tlV1KD`SfPRh~L|g=5LQthA#JDoq_yAwQ<* zM({g|EcAW3bb6G4{G8YG;6zFtiu>GyuuO`%4(%pLZ zft&}2{k-)Lj5&%oY!dQdw!d+o*Wt5Wmk%-Q0y_#*FC4!^0g4faR5<)%FCY}&h}bedDZyArFvhYufa z@>?#vC+_{!2%T^DS&sVGh{iBvE8aN6^0lh=Zj<+p!-qCUB`IA$xc1YZ7`^3fBDbZ= zH{E>m(`n&?j42PwZiOe^n7Q;zap&PJa}J%-|G6~iq$*#-7ZaA-QmQA+wo1t?VOA>b zs&DVkw(h-}GehD0%qSMaA65q*Es)YKWzat6_j{=uXBfBfRxZAVRxbe`#|`YB>5Ez9 zo3B-|XgYNJb6wG`=*|8kQW7FDrS@BQ%--zsVPzj^Na!2iXH)`zex9>Rq zYo==zTXlhL()~z}TE{q+O8!WhlHGTO7cX8cSl0aUXU((QDOsfJ1R{>K@ z`kYil%f3xAvO5^eHvUi)Q&y9(npQ2bLiKe#b92#a@$RGdDs0wu9!=VnVPbXe^B=~K zkCY#lSM!>g2<}llIh(Oo$L?U#eFwoQH)hP@mA8an$U3)KSBS+fi$c6`3uL`LgbKt3Aj6WE? zAo04}0pSlaHEix0aT+4OKL6Y!wZd!Zq)nHbj%ZBwZYrMiBXe8v@&kMqV%J~a&D7{{ z;ceMxzvae~oh~~{toH7|+~mTsCq_t^b>)3tGv^JrpMQ4kbz7WZAkh+_QKCQj^FFzp1k*DG~`Q(-)$Ex4+P6@EQpQiXjz$Q*=eTY_+$3^2GYhv{7ue+Lcs*H8| z?OB|8$*E8KD;8gzA*7yU!+Y>v8S8!KwLIcCqkotmO!M)4=9g@KTkOyE^nk|M?^#3G zx87L!`G%qDvGVJa7qIE5I2!ODOysG3?KVL)W8>3<^#}Vns`lP%by|D5-tc31Yzp0H@AP15=m ze82wwTX6W{gO@DAeC<1P%vOJ@u;HA3dg_tq?}L>lN(hU;W#4^cXYPX52V$Q0&ZSxN zE|hby%=+T|V)upb8!JU_`xU?3FyZvmD-N#dj=y$2cwlfM$@#}b+b+>78%-aIpD%uq V(jcI1!oa}5;OXk;vd$@?2>?AdK|lZi literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..003737d95ef11f7c1ee32e06dcb5193eef3b369c GIT binary patch literal 1635 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`>S|zV;A-OL>gZ%{ zXy|I>Xy|O}=IZR~XlY?!;ACO})9aF-T$-DjR|3yg6SJE)f7@4R zC(k$%b8gN&{<<@#Z{MByJ?-9}nJ?D8&eEwqkao?!QGHg_w&uAFc3TeEUYIuT{nIkJ z5EbjMbCd2$hor|9#IxVL$N1fGW%Y-!)uNgrT)$Zsbg&u;qZ*nG3u z(jP9LOfkA_m;3dJas~6bk1V##=?9|g!X7$&vQ;}TEFYH8W8}f{@Ob{=h@%Q8UT%J% zG(#c%KxRQ>^Q}{iYzLaQ@9K3^W=lUT5@8^*B}DfBN`(;P>C;Q}x5@=@6+~UsIrnLv z(!wtmOni;O3%rcyo=saX+I_V4f~(flU6Xv&-uGyAJUx;8L8!-*@q|;g>IrSt4eUZs ziz;Q8@_#$nvhKBVbmx{N)^o+JmzHdsU&CBpsk&nS>KGQ2qL@{SnAtb--U+$E`aEy@ z8O@x}wr^BI1zv3uz4i8+^8WkvH=cjqxh;2ogPrvWo^M=Dr|xYOTy}+L`Pud7B#!Z& z`6cqQ(cyvUwu4WnvN)PXU1gMYaz7X{-)`^C^WRO-liO*q4U*F~HZodWmb|2PxeSd}Dyf;kSBi4Vki-~qjcvk=F#sTfu-oN>u z%;#@9$Id^scf#e9kD`~Jp1L%=?%L0?mmg%)SJ=EOvGTR}Ai8wQ7pb6A2Q3p9o|!fw zi)kBcPD$ddXYCO>(-vgAYl!^fxt(MpRoh>EMP=Xr#`oU4L=t&iZmc|Nr+SIy@gF(X zPqi}~4D@8n3hjDXZwcMvh?+eA_66-741J5MD#Z^-WgK+-uliz<#-WEBmVUQBcfCu8 a(||!wSd}Axcg-tMvG3{X=d#Wzp$Py9)Ou+E literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png new file mode 100755 index 0000000000000000000000000000000000000000..a4028cd2602aee1b7bd4bd880a35d607efb85e1d GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0y~yU=U_tU=ZS90kK$hA2Bd6FeQ1ryDQ_%rt+k&4zv)6Av!sfXlR>gaT{GI8$&Ew`KI3#dr2R~e`yW`f^`&&aE z)c!7AP$Jqq!{Aq>#QljMHC}D|niv{&CH1`bhYe>UKXw_fS z)_WE+|Je3WF5xFCum9immn~Fq{Jy+u;~&K*IY0TiymG6x>m{=p7#KuLTq8=Hi&7Iy zGV}8kLNaqx84UFeE%gnJI8xr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcReVUfA!=z`*F^>EaktaVzQ1|Nr*PiUML{#~c(B z*dNXBQ8>LWZtpCHCr6k+vMc0Wxpr+Ig9tanrq2tz)XmJy@)QmW$tn0TKT1-Vme#~| zj$M)?^*Xa|5W}U{3zN7PesWs5!rk!3AxS4OIeGH5sZ(Pgy?OKJ)v;dbuMUcdDV1s}W*QQ*4L_7NF)h${oVaWM zzJ2!?`)#}I>;K((_3G8H8&|HF%$hxW_RIVG>m|BoG_-LtY-GN`-s(`N7-Yk#@KZ|s z!lUQUW&;a oa%9qsoMs-0ms8FkU{E-~uxV)t(@}TB-=Ol!)78&qol`;+0FR8r5C8xG literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..56f83dd77129be0cff8f4bf317e22a7d2f273bf2 GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oqk*%lftizu zld+MZp`oj>qmhfNlc9@+sj0J@p@pFlOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|zqA5wF7;x8T$N{{CLhw#1CtP<-uUpJyj0tBW^m(O4_Yv478= zKNru>w=ceAWm@Fv;UQyYW;Shc>812%PoLgRNKIYZ?aj#Dv7_c^k>!L}439QD%vra3 zb+wqrHm(zVt(}gUF%1)&o0I3SUcFlOo)51{h(MO$ijE!ZN1i%tG*QUqIdUq%+vS>dqKWK zYl`KS1XYDPe%^b#chr3Q`}?~OJA1p?q|3N$x;unk!w9CaswAtC8Q-G>JU zP14fR9&slvc-`x`k10uY#S8_Ld6yP^T-ma&bN1}p*A5*@65cRHVeJ+6r8Ww-+)^bC`*DT}cY_!lWBb{>Ls{_^@Wd0tM|G vOMN(g-?(ujp!Q(POEI^quz3uOYz%(&MeVlNsxlZD7#KWV{an^LB{Ts5WlP?Y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..42935b6b8dcc2bed30656a5933f39b680c1c652e GIT binary patch literal 1369 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OiJ_^fxrv#H zld+MJp`oj>lar~7rK!1_qqDJ@fw`$MOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT9aaMwRQr=h~qR_8M7qf&=6uED4O{r$b1ZAlrEq5ay&K3_gQKK{I6i^^JIj{nt( zODD(gt9iJrG%Mxz5&gaIH#Y55T07b9vp?THUjC3bJq4NxjDpkk#Hteh5Khoo{M=I;4?F!e`jY$e+>H_Z%rXDEQJGg20D?LjU(Qt?R z4O}OSRvh$l_#-E^r@Zjzo3F30`<7pgwf5ALcHGAtB@%HBOv!c+AeivT&a_^Qp5|T&0fY~w3(ONWXGk6ye(ac+;%gUe_EEl zznF7lQ|zfDM?Q$F9X{3fid)TRyTPT+pIA5y7`U41pV!6O{RS0wp00i_>zopr00H^u Aj{pDw literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..b8742a027db1e6f5f2d3706d9d7b794b58002690 GIT binary patch literal 1407 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Op{s$Vv9Xbf zld+MJp`oj>rJK2nn}Mm3lewj_v!kg2Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|)c*PL(NaOTQ|E-!s#Jsf4>wNuzjwo>lltN7i-PA!CE7Xj2WceyKBB+( z{l=!9N^2+EefH8+&)N!^TjDG7TRd7iD(Y zDg(Q}|K8t-PR=*pGgB&Kg~Ao30Kr23j?;}vnGUxkI;Jk1R{FsBiFW^sC;Z>n%@)*g zY}i-9f27A@k5tx8+ZC>>84R+uPs#*svtE0PpS2CsuKr6-QnO;+$PmlV zwaNIx4@O4E74I)K6m4Fx&xLXSjmjK(joZ0@>YqtuF16Em%J?$!!UHDOX!R@Z3w~6w zA2D9IQjn)^bI~gMkWKfvw@i4FbC`*DT}cY_!lWBb{?AtKd3p1FjMJKg=|+Zze_Bs& o*tGap6X#{!o-b=`7@2q&A{I?9c{*>q6sSn_boFyt=akR{0GHPE0RR91 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..cf04633d1cfdd925fe08926cbddff4350db4d1fd GIT binary patch literal 1401 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8On~9sNiHn7a zld+MZp`oj>lbNN9rG=5Hv89uVv4x=}Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|1hl) zaKu4gz*qltOk;(dt&TDKBVLCyY>zffShRWBGB(ww=%^@(!j*r&zn?E9EPOdlVRH8y z3+Bj%^FkUEDnC6r$*Q2+rE|h*RjR@LhZ`rv$Ho17admaLrKVr6!Tg2nnj!_B9v(7g zW@ghCmtIPL_Vnr9gw)if-QJ8A68iD`V)&L=HT=*KSpNFet9h(lYne7VCnhOKS-!Z? zG;v~cbMpMvt5?h3^WilK5y%o;(XoU5$Ww=nCJMPcM@|Ktw)!Bcq@!c=_RY=BWh~wT z3-s?X8!8K|Z;LA9&$^hkK%(O==aK3H$ph!l$7kl}&vy(eWc|Xcap?3yHf_d_)fpe| z9euj_{r&yvRu&dpCdQaG)vzzoYLF0VdA~4e?uAEe%nZWK-<#R_ml+xx3&#sE$L8~V z5*5&PJj$~0;}o`Df7KG-J9qAE6B84g-LRA;bE%!iQ^uE(7alONMyp?OU+|-f{fP0x zm4ZACEB)@CIg_J*AzdY1S}dbrsj@VO=wY!MqqerTbXHc@$b)*RPB)GpJJ$A!Tg_*? g!KKZgSU3zA#64Pns9P+W3@QvgUHx3vIVCg!0Jf&$*Z=?k literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..b0073c2dee67db4f75388f905eb9ab56e876c988 GIT binary patch literal 1313 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRd83tUNKU|SktUc?ySx8-K9nkW336g^9BecqiNf&3yuZqw48lA4H2r{+~F_p@7wdZ`ZyeBX}H1oqS;AdzkudEmI*bz z+!=o#h(wfopZ@&rxcT~?e;W!O1fM>@Wb%gj!lthddl+7AX1=h1#WKm(q{3c-)tLFh z(`)gSF1zN--%Ir5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRdiEzCN=z`$tk>EaktaVzQ1|Nr*PiUML{#~c(B z*dNXJF}Qbib+~N95Bn*)3`c%D)+p?YkB`rHSf*;@5W{lhyMv6HO6O0HH!K1R*RDOw zvBZp_&_>g2!-fqU%+6~VPt-6R+3TRgx}E36FP0Sx4HobpVP7C7W@ct4CX~!6Ej@e7 znl*2P($k-Zo9EqG!Oq30eEM+BH2x#K9*?*T+#Q+=?HQ{@;`i6pUb}kr>&BHUGfm9R z%`fk-|8F2-*!YOcqxsPj+bd0f1L8RuYPT|Y=pRV#6tlPgZ?(Yx-M*@?r#j}&ohz9C zfr*zz@(jn;7xok0b1ZS3HlO{HLLz&{jl+x=o?bh2=+Is3vNs#ntX!#Rr8o1!58ewE zyBN5n6#g+B5pFCL;}ClO`0?kEprBn(-o2|ka^%R7Ni%Yqc_dy=Ie&mb;Q&K%SxL;Q SN1|e&qRG?M&t;ucLK6USd$yne literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..bdbce47f9ab5faa1bf28ad25911b2d565b88cdd2 GIT binary patch literal 1342 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 PKt-RYtDnm{r-UW|I;ZW| literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..69d763da2d844fa4dd91b33da54a2aea164547e4 GIT binary patch literal 1381 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..0e3d718715baccc5a8fddaa989de4cc6e929093e GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OtD&QXnTe&b zld++zp`oj>g_)a?rManvn~|ZJv!%HSOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|)c*PL(NaOTQ|E-!s#Jsf4>wNuzjwo>lltN7i-PA!CE7Xj2WceyKBB+( z{l=!9N@jZt=Ev@}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oqob>ZnYo#Z zld++zp`oj>lcAxBn~8~ulZlI~qq(yoOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|>EaktaVzQ1|Nr*Ph6*}5J&i#J zjyT8*`0AgIX{?a5)iGv&#OrW|?a_t_i#9J?#-`d79Tg=}xbpA!_w%KMg)gTmOzwVT z!5rCeUPxm?<)4Jt!$Zc* z%xv1>W#aEPpPsIte70cMu3bGYyP9WCpI+WPb?Q_-JyxA15`8iy83#|CICya5`Kwp2 z_C1>!6%kQ!>*nV4w;U@Ee~>h=_^w`}gnd4qnEb!fPHqZV5>r_SOCUWs;Vbc1!HYojZ57iHV8LZdl6V`HSPI z+gp|}gQ4x_8R(5XTLw06nW>*xF50!8$+iLqa bFfcQe>W8n<{VM(dR7QEa`njxgN@xNAZoRyr literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..77c354a3fe54a897001a7304f7ab9b031d185525 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq^B-)5S5w+r==IW z%+$6n(lk>u`{u0rMetOZ!KW8tk>0rrHt^4Ajg62C^k9u|mf+rB;j>(82ae{vHwku-}%GC%9Fj>UA2FwI8UQ(n$sker&Fd+=bt`h zO2*NnM+G}_7aqucpmJY_Y1YBTHp%BVuBbCbTDhZ!I)wHs{>9bpdb8li%}L^|?OQbNIIZ^>$7yH(R(uI8z`h zQDuv7MaD|Upw9=7%PfDoS!$1FjPs_IYEJx(>nqdj1=Bp9JBoe!ye9fg%c5CXwzuZr z|FhCKIpzP(o{QTS&fWd@(vP!lPTD^YFO|Mm#k$b5Aid{;<%SzMktz(G^ZGQUT-fwa z*NP}FeD<$B+WyV94Ecs@49@q5HzuFV+4uZYyxz#WL@CMXAifpH77WCyhL2Rq)rShaA{n;OTDmr(orRmp2?7 zFTXsv%2qHmZbr|A-3fENwNCmpGe0=S((=OfkKU9*^Z(yAt+;r4x8k=ylI5juf5%3| zJxI9!O3rnzkFVPc#tp6e*RtJH&scx+=*QT?mPfr8u`zO>_Z2Riz{yKPTb&bx9$l&15!KtZBmoHlMC@DStdGN-)!MhH&Wjv1T z`MYgR&Akla-n#*h%Y+0=pWT}9XyaM4d2+L*c;gqls0BNp%2Bowm2-`|SeaC8CCnMO xd{tn!frJk~3)4*n@4zV{-a@*k|4*`KT)e8}ht+>s9|i^n22WQ%mvv4FO#l_8F(?24 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..14926a314e9c6c60b533e4cb1f85e3fcffe57112 GIT binary patch literal 1719 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X6S5eVd7?JWZ`0A zXy|I}9J=oNjS-!)YE=ZwhX=7~s^aZ>M0R4~kf%h=vITxwwIt;4}$JpLPm}grAz1 zVyjf7WN-Jn^?NP@1GBcLi(^Q|tu51HJwyUUj=!Hd_ikxsO> za8#}9nD9bXo-0fFq{0LRm-$K^2Rb$^za*!m!6n>vsKX^-!oCSci}-_YPrX}uy)b=Q z@n@bpZPs;bDjyubV_f{~-2ZvS&(1Yu&N`F!e4^NrsecSEHOr{{m%G$?q@{Y*#9EVW zYAi`CmF;gFvnF0Y!7@2QZSqHdKfia^OKp30ZCSNymG~;%Wqn6FuC=?c9IO?&tarpj z$$X;x76rXG=0SaPR2u)>Nqw?v@_`hiNHYV20^7NM`Oe|_+1b|1JdWJiF!%Ay*RIDn z^xjO?ZTl^+@!R=C@e`d-f-@J*;1uFLb5rC@jNJNFi4uBWLa&D1l9>9TWkO(@_Hxw_ z6TKHQMS?dE%D1>oR~)C$zVh6|zw&{; z$eN2279B7=xi!&B&WUa1!L@Zc@u}x59&MdpV_$CmzxdTYE{3Cu*WZ0>`*iNz*EL?H z0&03XYMNiOt|@w-(a+uTF1O}`!Tx}E>*d#`%i8Yby0hl!(%fnPmHbHQYWiz$)9?Evc9yVA*0XwZQ3OdCg!r=*x<0+wKZ4O z>(MTckk3(*&*|*TtoZcxglxc%?C1#=uja2{44K{SklOswX7%}wsO1XlTDzI0j8E*1 zH@nq*`GjiXo~O%hm|ap!dT#YD*7VpG)47?=o;7xl?k5UrH^;wleWCQAO^wr7?czp=spQ(t#>J)hpY#Xeh&S^K_s|Fhu3 z8-2{=w$+J+a4ZQq;lDJ<^Pm0+`_8uW&!cY$HU7W+kHdgr_eDuN&#FpYP*vjT>gTe~ HDWM4fZSR~Z literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..4bcdc7bab1e57fde26ca9f8a7ae82fbac12bf07d GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~h{)5S5wIo|9xoOT>SUX|MdO$EtTdycb(!= zARxo;$|TYxvw^q8F!}PIUm}-2ac-FV?Iy2ZlkAxt_cz>r8(3Rg8?-elc1h4mE*>`L zuJwkjB@EpAKioLLbHR9mnf?Z5(HqBo;yjM~Uj9}YrRJ~sb~0bjf*_9z879k4JuRw@ zjFjZRBVhX|JA^@eZUK`FtLK;1LP7`RE}Z^fwX0!9-+gX32gbGU8Fwa#yjflwcJY2X zGe@4TzW(+p)24k=RaLcN>HjIU-k95-HJe2((CDv;!mP~GELp#rf*+VpFnZg~@^;-$ ziP_%MJqoJ!t>sg>aY*NnL<=`Z+Qt1&)+>_tE$HXbTE4v2)u~Btz4jvS*`@m{Ba(8Y zCY@QeZ1pOi&Ci}Z<@ol4^}zfhX`6^eb;=U#S5xYgZWvBmx2j(M(dz@ncUM+jUh{N6 z*Cd`o;TWdb3KDhPO}rCU^9L2E3hU?;GU*qI-ubZpe@4#f`Y)Ed_x|?wyS@74s^Yx! zdn`hltY7{=HNC84%by^H8P}S5|9w5bEM=?ddzTvBjH_>|9)G&A$VpX$u~K0+TStHh z`;zjgFmIQRfOfMjO*-k*luuZynfK4QRpfqlZRM<;=ML-TsIz1{sY+;^)$tC<-lv>< zAS_Ns;Nx`mYem<7`mfY4`SdD)(~fcCL5{vi>!mL11Y;z-o~`M7z&d+I>-^?YZyld) zf0-`l2fR4)Q@ZI1&(jx&o&*JWGb_(`I<>rU+Be1NZEmxgritW8MBGT4pPvQv&i@*I?aoDo2du!C%PKA3fOWeAeEH3@yv}a(`nYsIJnNK1E0|SGntDnm{r-UW| Dk9&`e literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..1107844469a16972b0a8f679d47660dd0f5b6af0 GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06`r;B5V$MLtSiF&b=R^td4T&&)#iuUUT;Cn>Sy6f3P{KO6_yoz844BzgX7G?W?d6cN1}C>pPJ8 z$|81h(S&nP4olu}xqkVD)I|5Emv1tcJTr({SncudecA5h9=FAZ5)7Wa{`xCs_StRv z1)CiIRPSl*5SSgqKg+neXWjFQTMG*g^ZcDD<7G9OuS|nmG-Lbi;Hz0%x2{;>!6NUZ zzb@oK;EVQ{jHT5nhZ$rR8_$0E-dv31PJB#^&C(F9qlXST2{uj-)0%LCg}LW|L=BVc zg`bs;d38p4v$mh$T>rtiY%6mok5qc=8q4SZI7R;aId<*f8u72SoZoicV`;C8SzT%s zqq$nv!=`b%&}-{NiBl*4scfj!h>gE{v?KJxxuUhVUe1WRd|>hij&}$0SlsN~5_li2 z5|{LNx6h3;#?S8;0e7 z-_BUIY0+ds?S&U>Ry2z*OP(fmgVj>#oKvtwB2#*Zaz&Flk?*MnVo^-^=qmG8a1cWR??eDM9~D^Fjm6?EhVPS|m~ zV14+pjr0CDcJr@!IdAWg#sg(6VHanpNm=}NeCrjsG9*}K-GT)UN5s$0KM+;W#9YFC zr#JlN8J3y`-Js&b>$dg$nio5beg0%!-rCHxbH>Z?CRau^(5&028E4|#hnZP zUD}boc-h{tpKsa^xJFVdQ&MBb@04DEq?f?J) literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..47ff33dd31754855e0c683b40d62d75c35734fe9 GIT binary patch literal 1680 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 W{9xcTvzrVI3=E#GelF{r5}E)!RYB7L literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..d6078c6e1b99a524144ea1d07c3d19ea2c8d5ab9 GIT binary patch literal 1740 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`W@ut*Wa#K-WZ`0A zXy|HUVd7%pVrgOSYV2xZVPa+h)9aF-T$-DjR|3zr;B4q#jP#VVm(9xMUFo|cYW9H+}AUrrtvRT5K(l}WMSjv za"aq;*vi6tmkMUv%G_l;nEK?%WcA*%yi=C24)`8t6`%sa$I@?!f-v(0bT?e6=0 zac31<-sLsBX0g|u*;{_@&d>YB=k^*O*_L}QHNDYo0q1Y73#@OB*U4YtTXDuX^gvmT zwXjeMhX=#%!aEG_7z@95Z@!tMAlCiX#5b5RwkkFCsqw|9n^});xW*e|(6syF^45X? z$&uR2WyL&){n|xwM!^R%T=#lDdmpecu$>&_th;H4=FDxXc2m9tz2R8n5a@g3*^FPw zy|K21cX#_=Zd$o)^?R0gk8Edcsy!gLK=gvnZGm6z{oi_Cp5N|xz@s$q^;4~%Prk-5 z?GErUSI%l!X&n}#eDCun_XFGu8U&x$#U0~_jx-9JWTw{ja@F!qsek2XH}}b0yTQ2U zn_==5Hp5+9!f$JGd3N*)+AvNDXl%LpYNt=it5dnn6-y6Q7lvDXyjMuzPMWr3^QS3Tckwtm5%OYPhDU9IB3B%RuL>tWQo zwb>h)rf1E1{*&<(i_z*B1@8H01aC0DVUXHT&$;5@M!_0QTQ9%F`G>QQWM5kHZ|$Gz ztQGSE$fSXEq8s7RqX@O1vj)_;b^{kJp{eIsN(fO+9(I@%mMk zD|&7U^OxKAz7k%dHeL9t(^0{k;*^hHC*||@F^SLkwnbkte5w{)v~(H z`uyT@-Cwe4g-SnI&7Ii4{dHYn;O4ev7WUjqoXcD{Db4j;{$jtv-<2Ew)YT_N fvi$S^t$cu?(p0rcDx%y0RKIw-`njxgN@xNA?suH* literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3a6b3491fc4ad4a578bac0d9dbbc8c7a8eb712 GIT binary patch literal 910 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g.png new file mode 100755 index 0000000000000000000000000000000000000000..d6e3cac5c96bcbf8f063b5148d5616d5bc431b66 GIT binary patch literal 1336 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OiHn7+fq|2u zld+Mpp`oj>qoaYFqoJ#zv8Abnv8kB}Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|%kN605>i`BSAVkK7dW7`oI25(Smn*^k?WD=3%+vomaD5Kw2TEoSIYXSm7h z@TXyd@1aA7E}xrco9*t!d5B-BVOk8sFE@q`*@ipK7akm$EA`{2_S?5_jWsmaIXFh~ zA9>xlLw@?R_xJawTUl6anHX$V*P<#k;eCUINWOSMCW{)|dv<;~pX9VOwbcr747{6u zE>K{3#IS+UI>iSp9Y(yR1m7~DPNasHIB!U2Zzl}VNBtrsr< Om1Ul;elF{r5}E+|-@R=B literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..949d58a6b05ad52b5e1d7e9eb6cd80fa5731f598 GIT binary patch literal 1346 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OrGc5HrG=S^ zld+MJp`oj>rIVAhld*+?p{tvtk%h4-Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|&aZ*1DBWacTBa_;Hr>AVeBY82Qm$~ROru3MLWJ$`Y`t|qz#@V;-&HHgh;kOP$2Wx|c;EUPZ z4!;;KCnU-vD)8f$%0Q`-KJ5a)?<2cE9&+&fJEJ$Uk+F)HkL zf9K3KO%;qLC!R6umM}bGSix_2K)+1xHv6eE>CUx=20F~Yo-mt;)-^0U^)+C=s#5lk zv!_=63piP&f5BW^YTxFWV!iVE$@Mv4F(w|{)_mIc= dQ^E=d7)qN<5BK~Fe*`MkJYD@<);T3K0RY}>-M;_; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..407e5c1ec19fd39bb0d045f2a7505083d99d3e7e GIT binary patch literal 1384 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OlZCUXtE+{H zld+MJp`oj>lYyg~rJ1vvfwQxdo28>MOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|H2XU(c8(*fDJ3m@-LD;M1jW zxr-;|*U1?qZ#cM~@1{|K5NjmM78eGoDeMamb_&-#7t-0i`rV|%HJ=!69u?K_c->fG zEAajCr9Z#EzFxNb)w;P)ru51ucCtLNR$x1Nn>9wNzTneu2Hn+vk00>~bKJuqmGZe! z%!;9q;Yz#2199vAx6G-#dyia`keJ3;`-yQDm%T&q)2bEcg(jN*NqZVnzanL?c!uK1 zN)grhj=>9+<-QvEKlMFd_gpB6b@!Cc&WHLwZBu2hiu=sSOI(uvlv5yq;qc}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSoWWql=-jrKO3J zv5}FXp{uc@qoaYPsildFv#Xo4xtkeGuV-FyNn&1dD$L$Yki8JS#(4EwITxiSmgEF!Nq_$Tw`Vp~(9!8>3_5Vc zL0-UD|8z`ag`BO9G5aH4hcj%CHcVKwdD${H)u!mED2c+Af4{$Mu#tH}wSd$d3r2hU`lWmK*0QM{71i)~-B@8O@cr?nKYxFJ_hDym zH!C`ItbcGdcPf(p8=ZPN`wzvRlz=(XHt0 ze0XzHQ`4G+=|+lgl9Q92zp@H1i?I= B*r)&i literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..9284534bedb1b479f67ef61ab23b3754bb8ba40e GIT binary patch literal 1243 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1t+!ra)=&BWLYrq?sCxFj(zITdDaW@d^NRIdeIy;jaesfi`| zMIrh5Ij|HEkda@KU!0L&px_*Arl1j?nU|7ZUaSd<9&p%Oxuh0lmZhe+73JqDfWy}+ z6N~-E#!gO7=FV++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcReF37@&Zz`)4u>EaktaVzQ1|Nr*PiUML{#~c(B z*dNW;F}QbibvSQBh`oTef+p9MYuENUG^*M-%waon)IsNLiwfhW4#tcfN*v5HFLkI&GYW8 zVCUjoY{4{JEn&hx_f1nKa#V}N@2}gdrl@#u!rZyCYyREeUoX)$q4pc2SbPAtRL2IF z?)mfUWiP0g$M3C5W!cP;{y}LYcVmU!g>d-=V(bowWtaA z64IQw*0C;l&=AGKB;0sIAkt7?e*W@FlP;;2mw#7QQ&XFEBt<&qfXDJ0HZ}%EHU>6H VPv_;VYaWA&8&6k1mvv4FO#ocdlI8#a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_gsm_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..f7e1a13760bb446b9a9c311aa354329d880762ec GIT binary patch literal 1246 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRde`l&8uU|{6)ba4!+xRvzh|9^XCMFBCfV-AW5 z?2qQ_7~H$MI-Iv5#9lyKL6hsswQKtv8dYr^=CB<(>Y#JBMTK!w2V=$#B@X79@(D>x zn(EK2IdniEo54t)p-^AIyYWcmgew*dh0Hz7TP{op@&31IgLnP2$uDXYmx}+aFBPA> zY?)e@4Y!%^0foQ)DVoZH-!$whe^#AU-)?f)UPmV3>zV)m5;dIoj`45!(G+#Tp+z;y z-h%bo-AkYL{Qh`WTX}}-4u(zVxf(0%E`-Z35My^ZEW`XK>G{Tgr<5=K{qw=>wEf1j z35ID(F~?d&Vz?a+GH&HyQDZXn+Vl6pgYPxktEyhM^}U~XoNL;&BPr4;2RxS7u(2^P avN1@{4RUQWnY0yD;&{6HxvXHT|vfr0sgr;B5V$MLh%BXfKL zC5|5#**ay#r9~mSf*X$t`SbD$CUJHNZQU~E#TGf0w@Z>UgFBCXda}?-$)zb|ks$v) zf#?~R)V}FzbS`~6Lo(|2mbpj&um11bSNOclO8Jr6{yWyst#ALI^SczGBNwF)9d2=4#UebR2@yp2I z;K_lpv2(Mx-@a}w(-(5qf;)!Q_W=8>gYF-C_s2e%V-&%(g2C?ryW9m1DUmx{wl?fe z;1u_}rN3L<{ zy9aDHoOcMw3Jjbmox~*8t=bTKO3Yd9$2rIK7i6!r8Erhi#rlB6hS-@eie<~M+*osE zvaHOa8)XQ6;ejDNs3ql|^;mLwfWymhoztx48PTJW}Y z%YvB?c*?(ZY;u+|);MuC)?AXqX#18eA&ytv=bwL`lbx;IzF=WhliP;}UhRvm1ipy& z@C$w6_`>y6EK$KJpM{k-k>Tzqf!wsJ3Ex5-0yfQC&^LqU-Dcs!i7p#n%X7?P_bW1N z->j45SbMWm=ECV7kNg8%x4d~-j%plqR1HkObcnGauCw9omTlYgnzK7shaI}Aa_MV_ z+l9IhGZjOR{9!nL@PPr#NvAylhbnCE^J|9WfBeNh{qdSN*VqnxXP$StgVmQkyK z40V<3Q!d0MDQNUfELOd%88YQ{$6c@6D_B>aP|@2oIb1>X4bNwur!C4H>!!Z=S`~hh z>CxOy*@^#7DTz)ww?XS+X<0|7Y>N7$Dq$vx1@O|#M-hQYvZ!9 zFwZ<;{XQipCNu6aPp{*=A1qotTW!Xzh77J{o1bs+s~}-uChE@ yF3%!dTwGl26dZh6VM2#%r>SdU>QDWjoYndN&&)6T{g#1&fx*+&&t;ucLK6VNE8IE& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..51a0f3c1ef6830d7586a622506fe996be0b22c41 GIT binary patch literal 1628 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`X5j4V}9J=+-`BgX&zK>3U0SJ4K+=V@SoVEz{0t3p8@CY#}71q8yfKTZLa5!VNrcKul51Q?R!mXm7Mn) zofBC0uyMB?d-e5K!omQHYgt>9E<9Bc>J;B*r0!|B>8V4E(45C}wwOFO*ulE*Lu<>1 z_X*|}&W%ZLw068x-w?I--I?c~&9k=N(kqEx8S-k%Qo-V2N#Tj7n=F-DYD1oN{Hu2R z&so8Du8}`sVzHRUEt5ZIou06{gvDOxU66m%!$(LAr;=O&o_vsnM~jbQ~V+X3dMx5NZkX74d+cUmZ0a9j7Z(SfwL z(HGK}?wzg@`7K@YuH`bTyfx?e0%};^JZy}*n3Ea5(#*S_>CRKO@86Pl9iEjc5XL_7 zTyLYp0knbyls9CI;9?KoGdTMF2 z!1CO3?E;~mCc|&*H@@oLSZNnBWzyz1(qAO+F0z>Fyr@EXuG&5>zCX$xS?izW{#BYW z@swBFBQ?#eHQlBBP1ZrRx8DcP3Nu-K{HM~Y^CvpqFRDL%Y`z(vo4;o4Yq>v1lHP3n zoi{DW!~JA|_;8-x%Iz2acmD2P_N>0Zc98;Csm~kR zEwMk8{wVxmiz~mNckuY0`K(*&IT9Yl2h<4N^-u|V*?r*amitUR3~E8_lTYZpX#$n^ Mp00i_>zopr0Ju+UGynhq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa75b121d5b1a537c972ae2fefc77b374a8487c GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`ker;B5V$MK`nd^3a{ zMUG#N@?0ynH7nXax+=h?Qt*q?3s()1R*tOIjy|lP3ynBcJXDX)&JgJm7j$t6__##r zO0zQ&&@p;qTZkt{l=$||Hd)l-8#-H!4@#RQVW;@7O zAmk(UfXV%U*@c6@@~-~ev7(MEM}2T(HzfC@GRAry8RG=cj z@nlcj`VSR0Oicb7k9o~L8gDq1FoEOqZ05aZ%-9}%X`FvR`$59D`z+U9f3@4jar!LF zy%b@4#<^@v{FefEaO-Ur4e6P*L*(ZzAC|JIUQ64HZf9@3m9#WyX4?VXwH$M-X`kGg=5CWZ@wus?>;B|78adx#3qR;~OVyi2FZFrL=5r66*EL7~`c|~lrg7~Q z_s4wOzS+p~d$YV-QoQuiIi{=eQY@FXHbmX;Yv@?T8BpKr-XF?zy{WKZ2GbFZuKzAm zzHSXsc%Gxpv~lX}hBM8NuV#G}2=mE%uDY6K*3y|_tX2+(Ihjm3WR|_y>hd5sA>Um= zH6zsI!nOn1XFgg++)N4D`Br?!{piWk$BP>Mq&zP8J5FIrZkq7b_(3z5i-EJ|iJ->1 z{r2idcizoww4Wu<^wjIeLFs93vnDQjozTvTf(`X-c9=b5JRA4v+%MlBYxQ2{b!KK)7d%K-+yC?J6YsR=4={} zww_0y^t!`xo%1KpND3mr?dgwJr-kMdJ$5|$xWihk+jq(3m&R_-oBl1| z)66&9QEtYkX$#{YO&0pi$g1HLEjs^6Obd_CP0loiSg_#7;x}P<6cVB;f#c}VZmg7;0BM+r(+W8+CeO)iS=KAaQ zm2;i$mvL*kx$3co&;B)wb+`A@OWCGxw?^qkuMAlxXtVcjQ`htl$CT=1!X9kwxzB5O zxx&9Z>I0Wev!w;&+_zk-u71D6Wcp*d7|Zj-jh1nG)AJ3ddT)t0*xJA1`!?+xSsR6I zINE1D*6EOZ?08FlWz}ubKRl1c?ldeFV|hEn&~~@x!L$3C`IdcBSy5ZCCu(inWBK6A zKU2&(cP*IMvY_q3f;IQYNN@|57$Hn w{PifynpLJU|Gaf#gZ$0MKe}sk+<&kp-O)+g=qy&pz`(%Z>FVdQ&MBb@0Il05k^lez literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..49c02b33b9bb1ffb2f1691704ae8d0c986ba54d7 GIT binary patch literal 1585 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`;ACp)Y;Nr2>gZ%{ zXy|I>=;&(cXk_YaYH46*Y-V8$)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z|6|CMwWqrX{o1+V@SoVJJW4DgdIg1$|w64os=~FwyVbUPmi=YBcWA-p zPL=d8H6K3S+c)>jnc20U(~^Gg%kPwFi%qI;a-SCY?SRAz`LKs_CR@L|yPS7&{k(b~ zf2S-@7Weswx-t!WKL|bZX*QSY4cQoBb1QGV@tM14(>9-%dHdIMhCnpyhX`q(>B$AI zZ}=~T@jvQ(A#*0mJoEwgx0AIybRMq?ozu2k_E+hwv(J3LNQdpck+oHA zWAuKLO>Fx74_SFU123f79!bcZ5cIL4#yBfjMQCHfT*FJEvm(xI*r@N(y2<3O?=h7F zDml}YE`%Oxl4y-)+t0q6_n%~QzS)uWDS|@w)}C`sFJ@dxJZipcU3J%bgS-9$tKQ80 z(X45jxyqsM@tb7fer;>9?!8X2Z`C`lE6T3$EtNTD{Y7$3-BRb-u9GJ-^pvf4ToJQJ zxah{)H$pD&%Gs9P>RG`&;mStK+So75YVW>(iu~_Z%9Ub&=i00P87CI~-R-zyk|f9M zo%{E#`R@>xD)8#wlEuq|L-peKg-qM}@>1J+XQ2z<>8%H* zJBU?rwiI4XoF2GT?z-<{lce!@yNer4p-_qOKm?+I++s6pLF#UKO-B% Xbt#5;UBj1$K!v!ctDnm{r-UW|UQA&` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..358eab95c12536fc14cb941229ed8fa522c11514 GIT binary patch literal 1054 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfr0s{r;B5V$MLh%Gd-pR zinO_(KC>m`>M5`2jtu24g|10TO=4QnJ!Wf73SPE9;7N{54A}BVOG2Y#(IO3xMe=`F zZ)m*~lyN^}xvOmYvSZr<(_h+N{(bQ64XJ=&ckq~Eeu@GwWg z)aFV@(HVzjqrDd1dT-*vxcY$jwOXdx2NEV6n>(dQXvcytd)cZk&g^_(sKIpnfbRs} zd7Df$-|lM_oRVoaJ61qgLraS*Vfv>d8)RypFS*LYzICz1w~jJv2~IQZK09L$_ugJF z>zfA~yL7qlFs!$Dr@LXAS>%()4@4@s)x7uKfB*jI&K41lQwBm)mit7dJqS@Rm{7(! zzc8WulKT<0b^#OSISFHV z@<=RMyEd28Nn2ta$JVIsw^EmyL&8fHjDjs5wc1}7b9bva1VDZt{Yu6u- zyt&Y~;r(x$<+5Tbk*U1rr}chsxnp`eStN`{equdR_URXxPpZ&wuU?6|9J?AUpihUbjy%))^YQh&+eGG zhA!i!Q%yLn7zc$XZe4IrVGA~n8Q}qOcBO-o82Tk~XTh8jjfe#mc94MbA z`6ab_=gwkB-nYJq6Jl+d+*-YCEX*$#yx%i@=f@?Ly~ZX&<^Gzlo*vD2zpHvh_2K>2 z&7Zz7^4%!g8MCf#>eQ**PoF+5y*BLi>R-QpvA#OMS!4cE|A@)EMgMY+Zoc5eaa^;qQo-HASrqNAdI?YR5ypMq%jq>QeICqKo15}rMo WX^BkMsxk%!1_n=8KbLh*2~7Y$f$*sS literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ba830e85dc6c629e6dd3d9f87721297596f979 GIT binary patch literal 1647 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png new file mode 100755 index 0000000000000000000000000000000000000000..b5ed22becc0e5ce1126f4a2720171773a226546e GIT binary patch literal 633 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 Om1CZ+elF{r5}E+8F4)@u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..8e7ac74bf950c6c5939d94b9a38e13e733dc15b4 GIT binary patch literal 1334 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OiK(fJlbNxJ zld+MJp`oj>g}H@^i<^t3vALU(iLamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|x1ba4!+xRvzh|9^Yty$r&(Iu~EW zymuEr-5_SkxN@q=cAkuhdK049kI0y8^;w+SDmCF2>ybYuy~YdrU1svFwP8>3x?s}C zpv(00iOA#2(RWOIdmXxOG+eP$2wRYOi9PBF&k{4Hje>fnItq_IJw5%@VHI=7d8Wc$ z>(;%CTyR56!CEAeXMSqW^?v!^>oYUk%!8SEMO&go*p7T}*de1ajcrM9V}xW@Bs*ig zZ=%)St34CmM>goy@fS&4X+IWFD6m&bqnuyk8s}F_Bh{k?wXQah8WXPel>HEvifv}018R_DuADG$s=7l1Bg2ccMH+RodHX;m NnWw9t%Q~loCIBw>!E*or literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..fe492fdc32fdbe56eeb708e8c98d4d96cbe64e4b GIT binary patch literal 1369 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Op@pl7o1=k= zld+MJp`oj>qq(cIldGkXvzd{(p{1c4Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Pdl`gnbuPY$ zdG9WMxljbe>8MO`0X>gII?E1yY!;mEbMgV*CN za}w(;wb}))XB@JW1*9JaG4mZeJzak~^GZGiJMJSdckSAh-k7wy;Y~n_;gbc<{BFly zAMgKreT&KA*()2{xSVvkm>*R;#PErDGhaI9u!d*rn&yV}%M9k;%W^yMUB^LuKf5K* zE9c}D79DZCQ+Bh9yl(j=Fx@rPL2LGsM_d^i8iyPY?qu(n+VI2Hq~iUfPczd>;*2M} zQrVfq@{8%oZY~8j)`!(ABu*%V%h-KN+*PumZHmhgCf;4f7k)4@I<9zssiA1|f_*OA zPl(O=^zX0g+AHi!jTCITrD7H&yl(l$F(u+2<42!>ESF6lvL0_$)o*WbXx5g!>9Ask zwwU}$hhTN>h=!@Mik)YU9b;eWR24Rlfsu{jPhP|Oh{B30P+{lk>gTe~DWM4f?hV)y literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..3ec684e994a020b21c3e9bfb32fde3474d685c21 GIT binary patch literal 1366 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oo3p8-k-3qH zld+MZp`oj>ldGYDtBa+Dv6F$ZrMZbEOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktacfVgq4!}22~(-&2MV$* z?ChNjf{kw6RK4I?aC!a(o_E*gU+{^P*^;avFqOkf>??amsmC=F`-5*HAN_u^dd|Y@ zMN^+Wczm~Z`km9&-|xDvUX`_U<+fWao+7TxdnYuWV7#L{m&Zlyf#62R&;CC4nCg45{q_k{V-4PppH=37TMz;)puDZ#f7WRUNKp)sbk8X^vG>L-)GIy zSRH-Jh3x_F#_d-wv0s#Wz*(qL{p|QL6W{6vyQG!^-P2Nv<^BI=&JbR^`u2?HKQEa0 zraxPFY>}>-)$(!y+b6pYm?h0W`Kvf2wmtF1nc(%0ySWz}tS zxR<`>>b}%Ad9FT(aNvf$$uo`ae~)cgUSsaWx^lPEgjUw)84LSdE^_j{>-7?RnRA!@ zJ^xm*)vuHC4rsl0Io|Mmlg`z=+Eqpm8r~}1wh41N`l)rt(kzhr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRe-nRk0O0|TS6r;B4q#jT_t|Nq-FuiaR6+)7R0 z>>&o0@bz)N3_%|q{xEh(Z{508pW!G|!dX#vMEzTO$@c z`rK$Ckd0&!%$TB8?S-6MoM5c+Qer;cUnG z=Q<9D?HF{U`Hyffu(M|1^_rmU@bMeNtO7ZO$Rw5}RWqiWS^VqGQ?NRCK&V5}M8a`p z9;3+*hol7|r}!taciA&UJ>p0yXWYmcas9r%%2GeKfM3hS88{3W(jB&)&fU5H7^qnC MboFyt=akR{0OvKVf&c&j literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..5c4a61eedb5e7e160aadda613dd20f40bfae9b7f GIT binary patch literal 1251 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 rL8ditI6PC#%bP0l+XkK3U$Dr literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..f545efe222b865095fa260c94baba0cb3e42b821 GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Ok%^m|p_7ZN zld++*p`oj>rIU-Ln}w;lg{!fpp_#cOOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCN}#G3@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*9I})Jq#p(`^B+4sU4J*j%DWD4R;^yWoBc#QYf3xQ$4CV~_O7|Ed{$o) zQufsSxl!-yZJcCWYB}j>ro$CcMMer!eZ2}p`AkLFrZoJpy&$OYarcgzWs-BR_blVzpBfOq(}9EB;f&7+$df+RJzDysHG zUbw>X>8Z}6;$+&=BG~!1>!`a?K>X$=)`**elTPI1)C7E6kp7fY aAc0|CctyxGi{DE?#hRz9pUXO@geCw^k<4TO literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..c2d055a9a96207edb6977c06c96b26e57088e4ca GIT binary patch literal 1339 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Og_EO&nX{>* zld++*p`oj>qpOp%v$>Ork(-%;lZ%NlOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|kPujHkW7t8CHFAX0B?asKUWNK!%E!IKJ z{$?TDCWiT{0rH*eVt0R&nV{LIbIxg1s=@t-n*=fhPpB_{cW38e-@>expFFl63&l1v zuB>%f<8XNi|CSC(k6e}{<))u+K0Q6H=kQ0~#rfyz1%Heka(d)SUL34=f6q1`>4Sn< z@O0(KIc!TD#59;cMk>5hc(7X2d%9k!(khn5U(e(wS)5pOb=R(43LE_t?lm7@WTY_F z*Q+p;&s2nMO2ZG^3xWzCckigVcK`nTzGeLTQv>36I`FbG1_|bTrx+18kNu$|`YuRo&&f%^~aZ`uP1GUK@2Bt~c}exqC@$Zb+(LU{}W; zI=wGtqSb_3-hSI0H60tK87OUx-T1?U?NxS|fPBQagHI>iyzxWffXDe$!U_i%-mCQO TjAiV!2Nh?Yu6{1-oD!Mr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRfES2LzFFfb~3x;TbZ+)DcK|Gz!++KpAmt<(h0 z9%5h(UmsV>5cGTN)~%9_IgAR`wgSyZDcRDOCw$+}{#rDWZ;aZa8q}lyP z{1^lSx_>vGsZiMG(4=~Yr@nrn#JGA99JYrh0!%jfHAu7V7N!7_= zm2Ai4nc<}d|9jWCPE2pQ^wZ%^hsrvJVitk>?2rDk=m=i_)Njj|vXAkRi9%Z1kH5ms zvce|ocp84#UTOLp5YNd_yOqI1|3Gr5l7K#w(R|~3mg$U3BtKeqv1UAAoT0S9^?zfH zy8`c~KQ{C4?8+u|z)NShB0( q2FsdX@8u^2sVi&zz0A$PBEfJzXXA3iH!UKdGRV`_&t;ucLK6Uq@Sd~) literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e.png new file mode 100755 index 0000000000000000000000000000000000000000..de3917d63a3ee6c6cbad496ca85cb2298bddc83b GIT binary patch literal 1236 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OnWKxVxw)x{ zld+M3p`oj>g|V55lZAnWp`(kDxvMc;uV-FyNn&1dD$L%@%oHoAUSqs^t(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWK_fgfFD1XcSQ8XI;IOxHNiE7OOHFYr%Fk5*hp$y8 z7W<713@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*-8; zM)uC`^8D$OCQTAPYixQUJb0R3>?;=!*|zfy2Y1SM?iP4)nUzIHi#h1#5sNO??i-9M z-&?vZ|`8btf-lPT@6=lna&2#_xJQeJZ*ocEq7Or}4_N`2BSgm-GkBX{>qG zkv7q4!Y%JU=SUCFPY&HF4Ob!+(pW#3i21({b?zv Oobhz^b6Mw<&;$UiP@qu& literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..f5e59582ea4b1f1ec20fad2b26408b08093f9e86 GIT binary patch literal 1234 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OsgZ@Fi>0fJ zld++jp`oj>rK7W@vyq{tv5TpJi;D?duV-FyNn&1dD$L%@%oHoAUT3^|t(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWK_fgfFD1XcSQ8XI;IOxHNiE7OOHFYr%Fk5*hp$y8 z7W<713@j}T%*_mpos2>LcC;`sbuqOtcC~PEGB7c4Rf6hGAt%iA?G$YEL5Tw?vA~3a zT--oRaJmMiaXSS>=1I*N{@yuszF18mcSG=&Cn3@0ABX^Z)(90HXx Mp00i_>zopr0Dh;OG5`Po literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..de44dea1e13613ecd22ae5d812c558cea5e9e8c0 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Oi<6nFiLlZC5^le3wVftjO=p^K#amna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|5Xz`&^D>EaktaVzQ1|Nr*Pdl`gnbuPY$ zdG9WMxljbe>8MO`0X>gII?E1yY!;mEbMgV*CN za}sM#)kC}8H9w86@ho4x`m{$%QUY6$bmI+<=~7}rJnno}UlLOG)cv_p@9S+mD?Mw$ z`eg=l?`64p$hMttIJi^3bGN{Y%d9LqTFgN=k63U;XW29yscZ1xoK_NN+&nLtccWs1 z?m4MW9xM50-t1ZbURhq+roa}J!tGc2|KFq~{Q+|tYhHDvO|+VD%e&7x(&MDRLw8EU wl}Lp&R_+a(lvO6)yzyhf8^`mfgcS}j+-VN^^jMms15^%qy85}Sb4q9e074t9761SM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..cb068da3473b71a6b8aa61729d822f16f49ced1f GIT binary patch literal 1271 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..72eadc0a0cbc13e9661897d803e5ea94ce6a838b GIT binary patch literal 1722 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`>SpO;XkzAQWZ`0A zXy|I}9J=+-|YJX&zK>3U0Sp;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z+F<;R-S=@SgrA>XvX$zn?r7i%q7 z)#?tpU!Nxku*9lJa$M?u5iH^;A$ZL@kv~wRmD4rRMQsKDw{`<%qqCc%Kb~Lv{GQ+b zi}!DtyooK3ivLkyyxF+;{?D`d>Fq|xI+heW@CJ03GG{P;Oa7~Of#FDt;p~RH5oPL2 zJj_4v-Qb(TyuPvS(L$G^s;?7%Cd^+PQTI$^Nyz=rO$E(NiQl60qS-%)&2Qa!N3GYo zFWIfZA|Y|+Yn5*|8GD#}FWpe}$zJj1RYPK&oWh$R`P63N?R^@Tlx{U-2TAwGXkX~Q z!sr|%ANRlE;(L~P%;^pN2h`sjUi?jX@hja^9HDcME@F~)lwIT*Eqz$mrZG41kLdQx zrdnOnR@^2`OBv!TSS_!(3W zlxyWUuR3z2WzVFmt^3&<_)*BzXC>PuG0ftg<7b61;uJ{i;O z>mVA?`?b5`)#q(?e}e0#%sFOt@P5bjCBdEfuicl$ziZmu6ZFhKhv#jr%3Ov>=_#Uu zeN#DRWjh65t)E?z^Ue3^H9cNpP!ynTp+PSVaosAA}*ynB~f=sme}1vBbCMfq0GJtPOR-8OQG!2Y-1f z95=&0{4L94$0(y!D?Ar%6sSqwy5zi}TIte)Cao(UFK>OkXZrm}^L5#-fyZQCCI6f} zC9|wyYTvIdG2H8-eN=zxeBHsnE@GSUbAJ`z=KFp-CN@MF7`{K!Y&QFv_x-wM;gpu5ucvHt}@zb6Mw< G&;$S=|CKuc literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4d39ec5f5893aad09af2c4008bee1e70e87306 GIT binary patch literal 877 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq~h?)5S5w#E^=r8;5Jp%c-rTbdRupCqT$6L!J*#TCz#tm%qRRX1+Z zc&q54yH)PcvuCNn-X(d@=HwYY|91b|`|3|?{IdTi?s&y7Z(+Ut{`3F#*87WHY|eLU zbUt9P;Pm5EV7-}O%#nC(+0QQ%FMZ0~(E9Br=edU5Gdto7cBC!-<-^~fb*6l2*5%rl zTWT{VZ!c6{!EXHLP%^XdffEk5Y!2{Q9h6He(v&s#yZtm+wzEHT5mLa(mW`_f0Kvn?JQbuvPmYy&))JlD3b%Zb#CsZ_RqYnyNm?r5L^4 z&w0zTculXdiqIUr+g#oZj;g{xL^(tSY&`yRl`fd^vnkGK#hi)XL^(Nk*~U~%e)nLr zS8vKDCtbtR7wb>0IX98FTQKM2O@?|e=8AXA?KpXwos8@S*U0<4*ZHaPsN3=NkDZhL z>v|X+VJ;9})0*%?nPZw$pT{;`#{$XCkr9tr;+AlQ{J!?x_u8|)e{Pj+73xfO3b&F;MPHPA54j9Q&sQak-$ zm7{C_k&u<0zkj6^+~+=*D{g;P?ogn3`{F#_KC78I*B1JRt=j%AdCo?!xhWC`<}!)u zeC!*UJa3vib~7&(d2@?n_T?En3Iu0#e6NT}e6sHOUWqe>!5xn|6ZN_IrkkF6T-bhd pj_}8OR_AQRHKPtq{O13I&B<)xG1d|@O$G)A22WQ%mvv4FO#nQcl34%% literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_h.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e215e5cb01281959e66274a0b9497a01079ecc GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq`k4r;B5V$MLt*Vm*Qr zC61rpqOCQIh1g^8tZ zPn%h4`h3~#KN=S;&(`ixF1EJ5ZTa_pjr-|yNp%aw_kL(Dp7-7I{LjLBpX&@3X&5~) z*x_U8mK-Frz*6-A&kcvimL_fifnFK!>}C~n#4I#bd0o6vvU30Do2;9EZ#?y+X3?h~ z?cdz2N*}%dCU+u9WT)iRbmk(d@QXJrJ~T7zReP&-_9ScY0-b3ON)jxhvwi07OHXm> zbyWMdQ%X;F`UAlPMsY{!wSg>a9%!8PT=ac=5?7J)P5!f*`&l?^^X_iq6!L4xGvIpj zfLo*E)qn2`=XYPO+2icV(N=Tvo~W40lfa#v6YST&=RdgN!1{dY6ZNs_e)CtEF16nM zX8YBgf|T!G+(JT`3X9>!D*(R3p z!h4IF)w~=tTsP7e){0!{GS`_KTdrsvdxNh z+pgRjudck3JU4Ht@!RbWc6L?;FFX7yPqRnFcVYCzpe){QB}*-T!Pnl&*Yduws!u6q zZ#>E4$e}u6bKH{zgVVb&xdcvdl^5F~pe^1~(4=oMQ?T>n!<#B<_eyiN{^0B{S;?W` TA5_P{z`)??>gTe~DWM4f;mTVo literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim1_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..b47d04f71726a8e61f5caee7228fb6fdfc7f6ac1 GIT binary patch literal 1667 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`Z0TZd>1bx`>gZ%{ zXy|I>}9J=+-@<%X&zK>3U0R;;nb^dr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Z@1uUbv^?F(|1o7$B>F!SEk2%1P96-fB*iT_4BgJJFj@WUAjQQfIBHH!0u)6 z1#f;O+b_>mIjS@!>C{Y%>s~OOgH!3HYL}9+{2~J-!AtDgoZKq^x2(Op@#V8UyO+Pe zxOrDk@!!pJE{WT{c~gGwoaOz`^+zOvTV@@Qn>dd_Uv%fUW`PIxJ(n{(bOL={tInZ7B_4)sn%SXsr>5CaVMN zAB1+O`FKv zm1Z{b6*_75ou4Wq#8$gN%x7Y9^Nw5*b79^GjX7i!8gWr;?`sE+lwl?*FK-=GL%= ziF*#q+S6BNO8>oKltf3TK;oB@ta?G^mc36%Gs$+-=|A2us6?t zSeiSl^Xrs-Gkc9smQS00{L=~j>G?`}a`8TMbn;#sb1r)HQ$Vl8c-1!hr^|0;hMv~4 z;(p+}B;B^mAa6xzV9?2Lm$n(`Ki#^$op-O*p&7n%VS?(*qV2-W-(K{-T+wChYxwNM z$NHxDmvt9c{!H!jaJJ!|VIZV=q$BlwwQ;2JiTI^^HruT=+Lf^UkC?ZV_x57XW6Rl- zGf(q8lWVY&+$?u>hIiyduRU?%+nqY4I;?&FZ2zTufMG*fi*Ql1^%qdJ;OXk;vd$@? F2>_`VhjIV_ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..f80b324a8a29782a39dbc1373fdfc48b0ed99d17 GIT binary patch literal 1188 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 M)78&qol`;+0EPCXm;e9( literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..86748c3d06f6701ddb994d456e0a814cd1be3479 GIT binary patch literal 771 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfr06ir;B5V$MLtAOkE{3~bXgTfb(n}Ly`MIfd;!4-Ur!tdL z1Ix0fMTQsW1wZ%h%Da50d-j>PZ*r{v&a2^@`{YcGtG-lC!JqGQHtSo@6K{K7$<}u$ z^p(h5PfLgEB8Ms?yr0i3ano4gw5yDNN!Pb})=5jgoo7=|jr}Gr-g{1+tNHKBLr-7d z*R5Ic@c$k=r;wHd(ThscCS2UvbZ*T9X8T(Ixa$gxpB6|gd$8cjKlMM%lA^y_I@zn* z!e1|{n7sJeryy3j=DZy&z9sTMFEFdS-j-*~KjN^>{_#Y^f8`2^MOo8yCRi}PHQ*8Z z!DjhobL|J7R|x{&ChzPoR;#j%))M5XdVJ@!j7Q4F9f2pr&iY@7e`j$*QBCC8qS;lO z?}te~eLR(I=iakHYre3wmFbl$Tx58kcBaMQlez3QMT2Gg-ha6MiLXt+S?qQ1r>Q(5 zd>gsm9W-NESJ~+x`pDzS@=BITo7aaOD!y=5af4J=+PU4wwzA5z>0dGBf0}vQZAy8Q zV*MK@=I6h9us~@;%2k$cyW*a%DA2h2V^aICvvS-2 zA76KV+wAY*z6tYp8@l`MUvfy{^NySU8$a`hyj;$|QQ$_`0VAnkcjl#fS425NF6SO? z%qnP*-LiR3@Aa3n41X}qUUH3h$E?k(tS;yF`$p$VB`>>qnD2eY_B(rHZ)$E2mz-R` z@16DEdE7sf?$0>?C~SI9bgWQbsn=7LY|rZw-^!AAU(9lzwf6YU3EFQ=DFqf1zVp7eus3U-n|R{$LyeDznWVp*IP@@Ji@Cux nr87G&TwzOFcYWj3Pu%*GR-d2pb$LGn0|SGntDnm{r-UW|;1G4x literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbc885a8e5332ee8d68cf7fb27f88717ace57ca GIT binary patch literal 1693 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`Y;5Z2X6bC`>gZ%{ zXy|I>=;G|^=<4KRZf0ibV&G~9)9aF-T$-DjR|3}9J=oNjS)!)YE=ZwhX=7~s^aZ>M0R4~kf%h=vITxwwIt;4}$JpLPm}grAz1 zVyjf7WN#&kS0j}S+hNKR+Mm9uxh>8{)T`d8Vq z_b+nx#^rA>EuOmX!^5-x((aw9Nq=_sOwc*YiL2OWr&NjTQ8;&tE32`>kV&p7(z~v? zhOc3Rs@|)6s+V87tz6=NZL9k+-wzTkZ+g{(FHRDCe9>;1ip?C&C0^_6U0XOk+5a!q zbI`2}I~RS5w^=BC4?{_L=E4aRG8YOT;GcECRe<^SoLlBX%F^rjfAwlNx5U@E z{|tC>EwNQ+uG<0i0&c$xO>rMsmK@++&{X!* zmvb!}`+>L%OgzVYxBfnTvCrYtSH3kWyN=d>iYh%iadxZGMgd#)e20lg59D*R?Re_5 zk%c$JXZFD&L$A#yZ5jX~ zYrVCI=8k9SKEs9tM9zG{deZI&x-uQtlhjnwx$fBqjqb!fw`1M@ is5`><&-P!62N*W=OnAF`&lg=#h2iPy=d#Wzp$PzIAe6lT literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g.png new file mode 100755 index 0000000000000000000000000000000000000000..f54d21fbddb230d5a587b0d5306d69df17af9b6a GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OsiB#%v5TXd zld+Mpp`oj>rIU$^qpP{Gi-n_+g{83@Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|O^i# zYL$=GVUBvjvLx)%9is)VyBxA)1&S|R+2qm7?wO^HthJvaD=<0w3NGZONXRK zE=!Vf(@&lZ!4syx7sj|NlQk|(;&!;t;n4g^!NlTYWC+`mO`4kP92}$gkGyW&AwT`u zzkmNq6s~&u-TWaq&BI|Ib5g*b*aMH1^AnEEb@a+|eMU*gAcVP1mIJ4hPw{3WQ%c$*^*>!x^qe rn>TJe_;kX}8$T2dc$_~atZ;x~_M9Ap2||x^L1mVwtDnm{r-UW|e!#tL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..474f0756522118b85fc157f38db1dced28fb2961 GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8Og_DJ|tDB{X zld+MJp`oj>lYx=BlarC9i>s@XtGTl=Os{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|EaktaVzQ1|Nr*Pdl`gnbuPY$ zdG9WMxa#etRcgX5)+2vRdW{$KyUgTUYr~%6b-|>O zL6_<06OqT4qwkpb_BwRmXt-jh5OzTAeAAhoH9t2oPMF1iMBx{+fc}N6S9Mh`DWxfF z73}EccxJr7RpI)Z_9EHF9fBR)4UagFL>#O5`@>M-X`?^yrt?e<5eyx|jr(>oEa7L+ zWorG;tW;y#`twWJ=KZs#@f?X_^IN3Q-7t;Aq4|@7iN(jr5Vj?oG&R>bI7aawdEK}} zetO#37kknau6p|2{2@5a!(ktDQox?r1CN#EmwB^id3dfpac~F2tJyytxVaa8T;8C2 zu0iZ(Q}Dh0`=3nxAuoIQGADN%M|I{U=a>w& rBO0d4Dt4YZc8oohzbb4V10x#)duEbi;*Sf_pfbzT)z4*}Q$iB}Jww3O literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..5c7eaaeeffe685294e24731fa26d64fe84541bb2 GIT binary patch literal 1346 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSo8OlZ%0|tC^{Z zld+MJp`oj>g^`7&n}vm$vxT9hvx%VzOs{8NaYamna!D=9EK5ysE6UGR0Ee$t zCKmgR3=AwS4b069jGc@@{&uu5Fm*AtFm|Rfyg z^WI(jbc2{BP?7ZKO&=G$E`U_KXzA((7~#zsvZm7tjLAO4xHM@ed39_ z^*INz2b)=5DF-fd);`ZTQ|QDaoh4ChpJny98^s!Hin>0&)XnP(Rz8#d!jWrh2d~Fl z<|Njfs=%7EpPy2h6-?zj9KWzD#4T98I@%*8DS<6Wy75Lwf*o@dOVQanjq8FP(v3S9 zH0CwvIxb*We*E?E@rEhvcI=A3br?EW8!QB0%;t9Z#c)9>;D^1!q43}t{`scAS7)Ad zSd;odg=-T>Mkj-b2ES9Y@O;-)2d&wY9&w2*`RcGouH$!M=Cz)4*=#{`pG@hMPwZrQ zVy(b-^fs%F-KWG|B@5c7OzDy7;a;$BCjXWV0#fx{Hy-h1Ow_e_`uDeY+)Dm0C)qQ! z{xJAXeZA1m+hwzdtjAkb_5MXqj5D-KjtG|+IlR&l*xbY#aZ_;8iJY98fNu-ZpK=N$ ZFi3M1ypTHB$P6mgJYD@<);T3K0RYKv#-9KH literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..c65123d84ea51868786e1b8195f6d75c5e2126e9 GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DU=ZS9V_;xdb$jVt1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN|wHZnIhGIeuwv~)6XH8wP~urx4mb2Kq`wls9JG;nf-nSoWWiL0A|xuc1b zv5}FXp{ucliL-&5tA&ZBqpP!Zn-0(wZNyfgCmqK1FuV212d=#`h0J`=BozCcdm=w{Y_?qW~0tIr&Xy2_aAN&$PhfCzWm*torir3vs!-g*m^7!+sL@G z)?rP9uYT8gz4(1O3`?Fd8+QC-IKo|0TFTw&!*j+VOIbi#@JzZxx5K)d{7yRUeN@(&*igfM zWI@I5hU4z{4)jPL-YvywAup86f-kB4ueaZKe2Ea ZFkHA&_4m=8nj4^E&C}J-Wt~$(698EX&N%=8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_gsm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..2a86141ebf22167204629314d0b19b0d0e2edd85 GIT binary patch literal 1211 zcmeAS@N?(olHy`uVBq!ia0y~yV31~DVBq9nV_;x7d@B4X0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRd4wTRa-FfhFKba4!+xRvzh|9^Yty$swvgklsqxmWTjClU6OML?u5wsqs-&dU!|ExMBFKE9z;(sb=L?hiQX&rgczfGi zSx;}Bro%c`fqIvZk^&YCh0Hz7Tdqvt@t)Bbq9x!z$EMOKy0X%;%SPDD*CGCId!mwV z;-{})V>wg)F+F-s#UC#Kal92LJ1-g9E#kz`J8f#;1nJImk4N$4Fr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT68?trEmh5xxNm&iO^D3Z{C-y2%EH zh6-k8dWI&ZW@d&u3PuKoM*0Ru`UYmYh9*{~W>!Y#3Q(YAr(jc*l4cd;;s&*=C?(BS zDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMqOQA(O_ab;dfVufyAu`2bec=Y@6+;6mIX_pwBC$ZIIA zz^b}9q_QAYKPa_0zqBYhH7GSr8ObXA7J(EN`1)G;7iFer<|XF1++jn7Wu+7`s}yI2o82xGF*QrjQe6`gRI7`k=&tlvrRw zK`w3}COBP#(zu-hBJ-r?rPwMJDcRe-efrRnfq~((r;B4q#jT_t|Nq-FuiaR6+)7R0 z>>&o$@bz(~3_*V#)*NVHXuNgnmbk`PBMyW-<$yAFy!n<~_N=g~MYjbD`1aReaC(Pu!~UN#}+M zW9?V@lR<7uI)dp|+wz#3Lnl~H;12x%TfNOnP30SVM2(|vhQc8sSA{s16ub02#pjsv z1o;}?7zg|~$NuXT^OZ*o3Uv*Kg_ISp9^SL%;K%$D=8Ffl`%4sOggZUIvE-MusVOCUtT#E)xb7E1s@?F6*2UngFtGl*9l4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd689d176cb35e31cc31676f1153c878f0d94e0 GIT binary patch literal 962 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq}Wx)5S5wkseb5 zMUEdg)V{1_oR+iIRpnO3LUm2gMJpEERf^uC6lP@=wL#C#g5Jrj4z@GSN=JJwe72hTrGwv7?bmiq zXA>j}KC9iexyhaNrgXx=vp$Ue4w4p(d5uRONP54V%=E5tRz}kS4!Jo$tyo2yWYZaoQ*d^j4aNS8P4ZSST3cUba@fSEXH#m()w3O8~H3>Pw(f-t#Ypc~BMlrpe zr*sTg7y=JK(R+|Df?{iicaz0uJvxK!l`3?MGZ6V{m|R-wt`jE!DEB* zCU&Mc4k_uxYq3I09$$#F%i6oZr{tE~h2ZWVmsA~XPAL5D%v4v&kSjLYywgTit99Pl z#Xf$Iu9=y7GOKU9m9g{H_iJj4f2?kLQqq5E_Q~%}oQaz3rYl>uG|R+<-HWr0>O`B1 z1?PH7D)0U2cXP(Gc+r$gKc(^xIDa-UF*<+i)C=9e)s0&pnBAV8J0aSZ?U+lkO@(=7 zhxPlE+&|VIr1CYyH!hd?I_cx~1@DAj1?`P{AL&`^ApL69$8Vbg)Ni^7|EfB&(B+xm zOfklbXQO*+qW!K#vtB&WkTu&gq1m=^w&(IGwgJmlx`ce2Dl&1-x2d)ZNQnqDZYT5TkGHx#v=|r|7(8A5T-G@yGywnrrN8w6 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..b3eb6d9edc339a4d42bcab412b8eb146aebfc9b0 GIT binary patch literal 1601 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`;%4S*VeD*RWZ`0A zXy|HUVQ6V!;cRSa;$~)KWM*y#)9aF-T$-DjR|3}9J=oNjS)#c3W?ZwgMgIJx1}t8b@ZqYsK$q=<$I1-ZC^nBX)CN}qNLh=iY- zmtw0_q-1aRXN&(M1_q|Bo-U3d6}R?G^UV+r6gXaPK6}l5snz0N1ByOqw7R}s=*0c? zm9H(A98ZN&Qs6>?JyV`Nv7GnHb47rFh$DB`0*Z2M;JDDb4_{`!+j78-LlZkevpEFCr9WgW{i54oBv&pdw1F8Uu7)V>jwwc6*Q<+q(zvaFQdLj~LQ8VfhXe`9AYn93*3sd<-o zxzQHsM+@`UFYrsy8wxSR2mSXDP4;pXaymRqbS)<7f!KIdyPrhlrb-3hRPc8SWNk!jcf|9DI zU7VY|s@Sc(XvVpGw%-S?mx?Pyl7se6>p6Ni}+8-Lu_f2c-5+R}V?XMFAd71^c zt>660`@W65*3u_Tx7kV+^Mdc3Vh(WjSl*fR+VOsKaH4tsY>|UaL1A1a>pYgb-MaCe zV~6W*Mn2Uk%j&zXKCJ0{rED}|hvt4JrBA6ZRF>|YchFzw*u=dLlQLUNW_;PcaohiT z3klZ`#`;bZ-_B0xN?$+CAU$rUK|P0E^e6Yt4Mj?2%$a!$`K|?KiB0^)P%HX{bw#`A z@xpzH>tdE!9jiGL?Qnn7pR)<8RgIt3Z%98lFKET)qHhW87rHM*FW6pmr#ZIuoR&Se qeS*H@cgN^2tM@7Lty}&_D1m`_LF&`ktTi#9LfzBV&t;ucLK6Tz(P;qy literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..1abe466d6e4367f3ecdb039c8db816885fa380b4 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq|*g)5S5wf+1@{S|T_W zb@U%PcFbji;N8$*4~IM7zgmCnv5b4acikIRzM408jMLNp&7E1CCN%H4>J-rp(tU?E z3Ir7}m^sdUx%=Yt$(Mc=-dJOIdjbEp8Fl*uSB6YFn)GqP7yYSThuE&~;LAH0{yzOD z+kA!W3EQ}8+S4~2=9zb?PJXNH@={IpE6Zi~9Y|<7VCLeRtug)dA;If6_+4c`*vhnp z#fBzYmK+eyUv{U_?d^Wqdk*Vw9e<$EbJ*`|=B4+S6PXsC)tNLUo@u?rW90}5qXUwU z%^5u}Z{wc#TK*4%{({q6{wq!p%`WS9sCArjVD+&d49{9P?kskHsKzr}w4`L!jy1p3 zlvu7k|NL|JrnfmyQx*nDEZVnCsxf&V!;kR1!+RNidsVPMFa1+xdwN~ZpZvy2it7%$ zMl9Ve(tV&(EkftC)4vm`JDzRd+-jS%RHj!t=WV2|+(wQ&tDc`)I=AQA{5F=$NfAO5 zoG#@tz0&_VQ-1n^r5AXAn>rj?^doLXd?rqr*{L!`Flb+cjoTRm1HtQ$wPx;k z|9bltKfmicx4&MLop62q-gCFI*MENhX7lxX+Y$^in%N`*XI)KqU3-kjS$xTg{ZX}t zCK#>RXet%VzIfJQqk08_4b^+^)y;hW`Dcq(a)IiPi{BI#eI{`R-%-7B)qcso=nB^9 zw=NwsStci!Xw-DT%fCwPoq1wA25q(R@G=c62W@vUG#Q`N%P$l3nasw|LP>ld++Sr zd+^e^3(Jpc8Qc={OW=DFHDy9&veGxsShqDy=NDXW%Dd6ylwk49w|Kwmhu!}d^e)w5 zUD>=>zYffcN`GW0*_8@yu@f5UwZ*b8%w;?N6vWRGU)EH}sj^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`gZ%{ zXy|HW;bdmwYH4C%Y3}H3=;G)M)9aF-T$-DjR|3}9J=+-@<(X&zK>3U0TU;MA*cr(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zx{RExgP@qQ;VmIV@SoVJJY?hMH~eh($mt*O+Jb)W|voY^k3BEV!LAblUGNb zKd4j)?$KnEfAUE6hjEdhEh|&k`DTtT1vrD?ug~C2dC)9?)lCsS!nkAVqyB{YuK%80 z`C5ndgPIjys+5`)WYq4fs9${1;=Epuu6l=T!87?~S3IIv7k!g|_JFTDR!1y;VV<6P zhq)y4iG^0Yhh>kM#P7eg&|i0T&9a-7%@bnwOkQE;_DxUd$b}%aWw+kA$*Pye=&fP< zCCAs0y1XID5xqb`n_9d;=iTwFfR!iai zgQ9yj&o~wJZ%TTtyippo>a49`P@49VsFw9T`j7T$usa%Pug~Ig@QCiNGyd`Hsp#o| z;&or^oz{Jki@ma*PjyrHeAbO@Mzhrgo=rWy&fiP3tYzJT>I-{s-8-;u(eE|v5BT3$ mme}9AytTbdV0Bm>w*f=xg9<_J!%O~v%4knlKbLh*2~7Yarc6Qr literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbcfa0e40eb0e087829428a51a7d5f403d1569c GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U=ZS9V_;wq>HT|vfq{8}r;B5V$MLh%BR!@B ziX3-8d+L~qc3RF>SCv~GN*zm7Iv4bm_2yi>B-bR@(xnkBB(!=t(?W%=u0;x+a#gE0 zuy)V8WuCJ%Cq^y$?99Sx|I&ZO@2IJ{f98e6mxKM*_x{$u-}zi7cVWN@HlYJ78<=v~ zmP)BA$fs;rpTrSy=35Z=wuaIKD~~J3`ch}VT3k21ab<$U>r*@A+Y{d!9856Sx_kF- zk6*w3)+u_M>M@ufEEiy~cd&l(^Pu>}`|Z+88l3_dcO8h~cAP1o__~Fuu^~W*H}Zj)`se1V4ISp&W;tCgXI#Q$ zId%S;-(1_84G)~0J*7x&$Ex1Fyq9*)ocX}=2Af~=?gZ6}lb4o#eZ579<=DpuSH#6a z80t1JYJ9eUe^Re)a<%jcw(2dOaWiKuPFj71M`i03)X7qS4^3?Ama=}zr})ya_RT&#Z=VF#bj99e}?6J*QjYhNYy!~ zS(B$u?{?d2W|rq@wW%{(=0n@J7{SNVTAi)}KBpTQc82i@q%!8YJiC2A+Hq&e>ZJ9R zV$#-!7-M~WlS*%I!vvLex%W+4Qkb;4cUtyeJGT=Wzd|O=dB<60{4=gO zDs6x1mw>E=T3xXmv$jT0{`gvQPWKBR760lLx@CGzncr3_Og$(6ge}H|-_`i@nz;!U zzrCN_V|ll6uPIZ}YW0IE+Q*yACpYi-?0N0je&+Wd+BOMRp9<8Mte1YZZn56c#~))R zU18r57~Z^ndZU$RQS^oDs(h~VEoN3uHdL^x>^`=A>WQk&3RyfW1dTa!HrN*!y_~X1 z-fQ=?j#K-Dcuu}dxXJ9r{$DI8r*MhRf7N=1r0BR^hdv*UU|?Wi@O1TaS?83{1OQi9 B#ykK3 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..02d8244e9a9ba586417014050b41e5fd137b9d4f GIT binary patch literal 1616 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`Zs=m}>T2d>WZ`0F zXy|HU>0)T%;_7VaW@c(?Y~gAE)9aF-T$-DjR|3}9J=+-|YNX&zK>3U0SJ;?%2er(mNGiddwGh6x3^xPh49Gzm(db_$4upPH9q zt5l?9Zx^_2_bdhmrX!v%jv*Dd_Du8j2niH9{(Ntxv9RZrDURJ7g%?*j8AVBE_&O$V zHr`Zg61%B2%k{;%J1uLYc56q8a5cKhF9;BE32f{Z+se_S(Q|Q*qls+#z1QVmcw+VQ zQ;wbF`(yEZ-tUk9iuXUWaujgUdEF=?bG=B2Z9(wq!xy-X-RAEtaCv;Gq3;t{(S>zC znQWRee;>}c8KfiTUp;U70q<8!ReWbP?+-i0d$4+K_O*%&ugU{||7p0tVZp{5sUA+^ zUk=;IZ26`C_;+3M!hjQA>MUI1Z`_vl&t^JmwO0OO^4IKE{{lI;2a!Q6E zgwzD)bNNIvHBZn@C<;32>(oBcewlH($g6|RFCIO5gpRad*zrkdCcRq8K z1l!f_UMY6fq?|ufuC?9_uHc=Wpt2+ker; z40dDD4Rh|Ex!0S;a_f-HVjJO2SF&%KuKs_j-RAv-#}=_d$CEae?^=6Jbwk+cHdR4! zsc@|g{80;iPj6q~S^W6dMe%~r(}G`LZgAXbRQ5P3!mnL;)^U5ckPY+Vqx0AGnw@O`rX!CAeAPZ#-}x~Kf@j+Q-$y*l-_K;!>Q|2Pa7+@GEgWRGTk2P)$|UHx3vIVCg! E0HxA$vH$=8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_g.png new file mode 100644 index 0000000000000000000000000000000000000000..83296a53a5387507cba6fc46aabc72d5da78aec1 GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq|*j)5S5wBT;w&Tnl zhwE;zm@a$o7C(E(E%hzAn{OQojL7?SEFz zY0e>n6PxW6_#oV$bj{X*aHH3xN>zAY+Z%9nbsafVai#@c8{wOvVJ7cMS+ z6m;v_PwUdBWe&<`ns?6hd8W8Op7Uvn+3dH+5&rJ5^8E9hZ?3G}?BLor zyK?g!yt476kt>7h0CTf=M@BThK!zy!pvNiOzC< zZMBDcWTqV`%3K!IXj>%g;rKv=>3VV;m-hpSD`Cn3!dtY11GXM`ee5U8v?((}4%J=U zQXTv37-ww4dcG%_%`I|0&0RN^KbULXVX#6oBaG#g*POO+wcaU8OZgid=Wcn@`Sj!! z*L#x-C*2T!bI|n3zT%>#4}Ul1NAUSs&7HUJ)duyCUxV*A`OC>_e#;a3cB}E}t4t1$ zQ~y|E!}XRLBbP0l+XkKTwOz9 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_h.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf107d424ed3a1537d7f4f58d45395e902fc460 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U=ZS9V_;y=l%KPVfq_ZF)5S5wMs5G}bKEZ?WR zepUQv&#@y9#biSMPx#d`L+JVqV*!I_^399=K2JZL8ow}LhxX&{ql*e|{ra(G)75*8 z*IggfD(7+5yy{>1Uj0wwnp>BS9pvAh$Yu7hsr!JVOKM8M$`B#9?_Lj5BU%J2mKNV> z%r7`AQ7>qAhvkq$O3(ir#*K$~e{k3*NZL6@?4R3e8PV{*z%P7_`(^n9?{4HbI(Zyj zdtk%E{j0RgS*sR`@;xcqdHu_N&s3}V=hZj(zuWHcP<7A7pE`|~*cbY`))_pjzT(js z)+K+~~#kz+5x)#=B8rZ&Xz> zd5`?_xgNLrzEm@?DzXshy5OVf3WTFmy^|gb63P=jpyzMJL2yA(_*sj*^!*5eO6wM z>9ybm_3!KUeC=s(v=Q2~?Rb;_<6mF47aZB#ZFNoHAJYWo?uBLE2^$$07#KWV{an^L HB{Ts5hISm< literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_hp.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_sim2_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..6c34eabc74e9963fbf666fff5e0cee8d6b2a909d GIT binary patch literal 1573 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=ZS9V_;zTw8X51fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`Wa47%gZ%{ zXy|I>XlCH%V(Dn=Y;5T2Vru3H)9aF-T$-DjR|3}9J=+-`BgX&zK>3U0SJc-zdN;?YWrIu(fx=#M71KbB^sO-~RghA?Z0eW!DQj z)lW9}f3Gk$H_m^4cDAKCkF)zzjyGYyg>6b7rOL}N{7mG1=Xf~leYh>7=xP0A`LNqQ zue8>etXcdj|4^-lyL$TG*U@XQ6`udhl~K4?WO<^=A7%doTW{s8i~PGR<$}lViT^tO zulZ$v*ndWF^b?ye4uWk7V&9IRm1jA4E^TwpSx3q$aI8%XdXF==jq^pDyx8R@^wZ?O*?^lqU*z!gjBFUQo)asCv0$XX9mdK II;Vst051<$Bme*a literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png new file mode 100644 index 0000000000000000000000000000000000000000..31c09366236194ad98b9ee6d6411ffc58de14cf0 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD3~8P&jv*T7-(J|r+w8#Le6hUT zanTtjP0hrPH>boVW^7_`Rxor}z&)LlkJWWiS9J8Wzdv7xES1&o=wO#V+*cfYQ$^o+ zdXi4|UEQp`kv>NiCLg={Lh;1Xm62Pjs-*W-2E49gk6!eN(P|Zcif6~miwq15q9v{o zCC){ui6xo&c?uz!xv30>`i92(hKBzxt}AC?U{D1qNJ%V7wMqu5N@XxIFf`OPG|)9L z4KXybGO)BVGSW3Lw=ytzE1MsIq9HdwB{QuOw}v?m*Pk#jFvx&x2+mI{DNig)WpGT% lPfAsA%PdMQ&o9a@R&WkBE!_IpjDdlH!PC{xWt~$(696s#ddmO+ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9b752f7b9b30e976ff81d53cb0e620fcb39eb8 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD3~in+jv*T7uU;_ZV+<5&efWOw zOs1)RAyP{_I)a*gBNoJJn203^-g=qB)mh1<7-*w3^H}`dM^E;Dm-{#W!lw1fzhsil zL<~2Y*2qlYX6v1|^w6u>6Sq!Wy>q6@v;ACbUcF9hf92FHKJ#l*Yj5|uxn4S(9M2v5 z<@c>=O7vWpt&3+L?r+_GZ1p~C4sDUH7Xe&F3=9mSC9V-A&PAz-C7Jno3L%-fsSJkt zhQ|7ahW{?ED`#L}Pz5PSNi0dVN(QM)WiT=@G}JXT&^0g(F*LF=u(UEV(ls!*GB9{6 zn;(IqAvZrIGp!Q0hB*$`pD-{m$bf7J&QB{TPb^Aha7@WhN>y;nEJ`iUFUl@fa1J&t U-1^vzfq{X+)78&qol`;+0FXV8Hvj+t literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ade182839043215eefc071732d591fe02838c165 GIT binary patch literal 1341 zcmeAS@N?(olHy`uVBq!ia0y~yU=U_tU=ZS9V_;y|$@4Umfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L00+x?kz1gbnVDi`>||=;W@PE+>S*9- zXy|I>;pS{$>1bhKY-(f-)9aF-T$-DjR|3R6Y^Rf-hUp~ULPf4lmR3LY zg^GcNfw8I{CM_8vJDi&QOgh$Ht5@(iBJZHI^VHkBQTGc!>lN#7f6Xr(+$(uIiEak7`{O8iKp3TwVNTX)KNnWn6r&e*Nd}cFeYGaJGZ~AV) zb2mos`;nzj4l+#7di^=vI9;G-;onupO!prM_-vXGoIhi2%gZqN#YNW+CQZ7KFTQBS zC5_7_y)z^!QLrhYFx3hBI@;3b^ zpDPdUJCXEMg6FAh;IdzHmsA}4wX<87^Q23WR!aJm8!SH_%*+yEEKK|Cs2{fbr~EhN Z0}SmMZ3@}G2YEpSny0Iu%Q~loCIBie+ra<; literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_sim1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_null_sim1.png new file mode 100644 index 0000000000000000000000000000000000000000..782d5901a603e5319604a58f905463ee3f5a004f GIT binary patch literal 2887 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZS9V_;wivX0AQU|`@Z@Q5sCVBi)8VMc~o zb0ioTxcoDnodW_g@=NlIGx7@*Je{2t3X1a6GILTH7%Fbf4NeaUeko@A{oWTR?~aBk z-uXeI911~B-3=lW)wC2j1-v>G7v2;NJSgbu$|8MYK?ieRUqg>*pbk$L*A4b3ii`T1 z7k6}>`u(taarU)6-=CfRxAnT+^EIF6Za&X`fP-h6hjE~31J6n)Il%|b$B!I)_(ad4 zkxQk3L4ad(iem9!Wk!Y{bv8EIN(b2YF)&tK=H_5H;5++(flT{<{#Q;jV;CD+7!Q<8 zwD9I=5Mgkr>T_Dg;NZsCFn5MpFv9{ChJ@3}Nsk!z`d_XqfwBW;G*2^b|!= z#sw1@6ogYdTo^K}8P=Q+>vCm?Fklc#^FCt9a6^~Dz%x9}gJHvVh6CpWxHmCy@Guwz zcC>0Tuv9Z7oKRM-U}%}iAma8Z+~%Y9I)Ud}3=9=BH`(k|v2<;W=Flx<4-eOq(>UiT zt}SAg$dowCLGMuIOi80g6aELE&oD47m?$dvp!xIPigSGH&Yd&s+r}5K`)WVif2E|P z$N!$5UtQq9!0@o7?&3ck{moJh)@%*A{}!pfW66l)UQqhIJ8cuc!&Zg`FK>l^E&zp% z>%s{;Z{B?RRlW2-<2z;T_B?5z@zUB44-!AAH1T$!Q7D1{P2AF|M&KP-501b zG^BY>Dr8`Yb5YR?IknmTI0plR%YsI&4UW=Z4oc`8V3Rq>dgmbbp9HfOCzT_IoCKV> zQW|865;WH|Icc<=-5{%#pnt_d*5p87M%&~9KD|SsJNRr1_<|f5@}6kwVHngEq7dpK`^mP5$+A7hZP!HW z6AVU8f7K9uu`$EwcDcc^ih0ian&fve* zZ|8j6;J^zBcH<*C271R1J8iVk;hda&dZW@Bp4G>sHiWHV-re~%`TWLm7NJJh1Ds|o zksF(=e;xy-EZV5c3t~7at_ZGEXfX2@bn&d9yDJuk2%7ds zIjvo|EogmU`wC%`(pi>go5ei6m#$qj^|Dlkc*gh4^)E_x3ErJ5=QsUA_@&b?-Cs<9 z!ThD1hqq0%`FKaVhU9Dsc8PS!a*6dbe3nUG?v^|rVqk9gddBma{4?`IBeb?@)rd|! z#WmGys@ha(E&Y&{tCp?0w~9OTbLi=i{*`gTwd>qMje{SrK;JbSaI zOl$Xyzp}f#ZC9;aXz6V1WgNaa=<}2`d-lgO3V+Ng@#B21v3&aHx~_X7?=>H3N-s0< z*=d*>lf7!%^l1^RJyr*OP-5vS6kdq6v zwwXtT?KaOj37ey)h50tJ`p0j740Mh??BKjKacbi9hb(`Wtz*ZeXMk;uYYIuF7sXco%v@>=4;N2G%mhy z_=NL=z^51Ox#v$c$iBa(&fnR;F@5WEW&LFRiQ#LnZ`i)HeAV~F_u_Wn?26_;wtH-2 ze$VJ$Wc(TP1KUq*Kka`we_nj+edl`R|0(~g{$FHR-k{2u&fMAP*ci?9`$tuc;{HB+ ztJ|sHHr;&d*t1}#qo`wl)7qw|2iGcQoOm-~t>X9RGtNysm&w-}Q1{~61@^>eiQR|m zc+^|lTf^Jz`wBWDq%ImxH!Z(-$GP~v%P*H{F85}q8~R(W*Yz^hvRkE>Wpm4Xm&q>s zV|r z$7-5`Plunyln;&qS}VkQR6hxqtM+kK9+EwjuB3m_>|)0a=NK(HzfT@ozEzXnOx$By zsdChKsm{}#E$S;L?D66CxjWlxp4hB1g_teF#&s?BP3fuOY5UK1p0b>_dY<;#w`Vq= zx;?>s&incQ-wGWPdN^s@(l+mKUD=3dd)H)HZn7z?yv_AklvTSejBSn0j;?K5xmW#H zzYU+hu5Pbdm2Y-q+`&^#2e&e2zvd3*dfHn1`p)&YvHlVIk@vSI{%V^mZ715t`<-kZ0!@ZJyG z^7iXD*W3Ej&uZM>-Mr0t=i>b~JNBe5KY8w~wSCBvkS`&>Ld@P>y1O;;`j5Pe@1(2u zd^34-^>*~0?|AVz03cM-NkFK?p6J9zb(%{$HXSG((7}`$;?|X zn=VgI|8%}*?$o)pb$UPVB-~!Kt@?TLx%*lC`R{iLlsvrT`oH_R^&abUF`ssneA;yT zsc`s?@LB7v;&We>yt4T>`Lh4<-E(%&TDLPMd*{2Vy<4l(zQ2^7XMXPPm%WuA#r|Kr zI?vMf?%vN;`QMLz|9W5SZe5Z3-*cyT-z-;uw|0;Jp7<{gZyj$s-)+BYAN}vnjrVuz zvksIm_`**h1=JWq1e(mRXX6>KZf4Ysg?e#nhJ4?$)_C67>8)-3(|>cDHs^|y~5IwrU8WQDO|+?TN5Zx5E= zDVKe}_&&e?lNyD3jsF=xH+~Jiu>ALA$;p%dvoO#2{3qF1_cj9qgF>=LkS_y6l_~>6 zLo)-z&;JYz4KEoON(~qoUL`OvSj}Ky5YL|!f7FeEfuYFL#WAGf)|n}WdG7v2;NJSgbu$|8MYK?ieRUqg>*pbk$L*A4b3ii`T1 z7k6}>`u(taarU)6-=CfRxAnT+^EIF6Za&X`fP-h6hjE~31J6n)Il%|b$B!I)_(ad4 zkxQk3L4ad(iem9!Wk!Y{bv8EIN(b2YF)&tK=H_5H;5++(flT{<{#Q;jV;CD+7!Q<8 zwD9I=5Mgkr>T_Dg;NZsCFn5MpFv9{ChJ@3}Nsk!z`d_XqfwBW;G*2^b|!= z#sw1@6ogYdTo^K}8P=Q+>vCm?Fklc#^FCt9a6^~Dz%x9}gJHvVh6CpWxHmCy@Guwz zcC>0Tuv9Z7oKRM-U}%}iAma8Z+~%Y9I)Ud}3=9=BH`(k|v2<;W=Flx<4-eOq(>UiT zt}SAg$dowCLGMuIOi80g6aELE&oD47m?$dvp!xIPigSGH&Yd&s+r}5K`)WVif2E|P z$N!$5UtQq9!0@o7?&3ck{moJh)@%*A{}!pfW66l)UQqhIJ8cuc!&Zg`FK>l^E&zp% z>%s{;Z{B?RRlW2-<2z;T_B?5z@zUB44-!AAH1T$!Q7D1{P2AF|M&KP-501b zG^BY>Dr8`Yb5YR?IknmTI0plR%YsI&4UW=Z4oc`8V3Rq>dgmbbp9HfOCzT_IoCKV> zQW|865;WH|Icc<=-5{%#pnt_d*5p87M%&~9KD|SsJNRr1_<|f5@}6kwVHngEq7dpK`^mP5$+A7hZP!HW z6AVU8f7K9uu`$EwcDcc^ih0ian&fve* zZ|8j6;J^zBcH<*C271R1J8iVk;hda&dZW@Bp4G>sHiWHV-re~%`TWLm7NJJh1Ds|o zksF(=e;xy-EZV5c3t~7at_ZGEXfX2@bn&d9yDJuk2%7ds zIjvo|EogmU`wC%`(pi>go5ei6m#$qj^|Dlkc*gh4^)E_x3ErJ5=QsUA_@&b?-Cs<9 z!ThD1hqq0%`FKaVhU9Dsc8PS!a*6dbe3nUG?v^|rVqk9gddBma{4?`IBeb?@)rd|! z#WmGys@ha(E&Y&{tCp?0w~9OTbLi=i{*`gTwd>qMje{SrK;JbSaI zOl$Xyzp}f#ZC9;aXz6V1WgNaa=<}2`d-lgO3V+Ng@#B21v3&aHx~_X7?=>H3N-s0< z*=d*>lf7!%^l1^RJyr*OP-5vS6kdq6v zwwXtT?KaOj37ey)h50tJ`p0j740Mh??BKjKacbi9hb(`Wtz*ZeXMk;uYYIuF7sXco%v@>=4;N2G%mhy z_=NL=z^51Ox#v$c$iBa(&fnR;F@5WEW&LFRiQ#LnZ`i)HeAV~F_u_Wn?26_;wtH-2 ze$VJ$Wc(TP1KUq*Kka`we_nj+edl`R|0(~g{$FHR-k{2u&fMAP*ci?9`$tuc;{HB+ ztJ|sHHr;&d*t1}#qo`wl)7qw|2iGcQoOm-~t>X9RGtNysm&w-}Q1{~61@^>eiQR|m zc+^|lTf^Jz`wBWDq%ImxH!Z(-$GP~v%P*H{F85}q8~R(W*Yz^hvRkE>Wpm4Xm&q>s zV|r z$7-5`Plunyln;&qS}VkQR6hxqtM+kK9+EwjuB3m_>|)0a=NK(HzfT@ozEzXnOx$By zsdChKsm{}#E$S;L?D66CxjWlxp4hB1g_teF#&s?BP3fuOY5UK1p0b>_dY<;#w`Vq= zx;?>s&incQ-wGWPdN^s@(l+mKUD=3dd)H)HZn7z?yv_AklvTSejBSn0j;?K5xmW#H zzYU+hu5Pbdm2Y-q+`&^#2e&e2zvd3*dfHn1`p)&YvHlVIk@vSI{%V^mZ715t`<-kZ0!@ZJyG z^7iXD*W3Ej&uZM>-Mr0t=i>b~JNBe5KY8w~wSCBvkS`&>Ld@P>y1O;;`j5Pe@1(2u zd^34-^>*~0?|AVz03cM-NkFK?p6J9zb(%{$HXSG((7}`$;?|X zn=VgI|8%}*?$o)pb$UPVB-~!Kt@?TLx%*lC`R{iLlsvrT`oH_R^&abUF`ssneA;yT zsc`s?@LB7v;&We>yt4T>`Lh4<-E(%&TDLPMd*{2Vy<4l(zQ2^7XMXPPm%WuA#r|Kr zI?vMf?%vN;`QMLz|9W5SZe5Z3-*cyT-z-;uw|0;Jp7<{gZyj$s-)+BYAN}vnjrVuz zvksIm_`**h1=JWq1e(mRXX6>KZf4Ysg?e#nhJ4?$)_C67>8)-3(|>cDHs^|y~5IwrU8WQDO|+?TN5Zx5E= zDVKe}_&&e?lNyD3jsF=xH+~Jiu>ALA$;p%dvoO#2{3qF1_cj9qgF>=LkS_y6l_~>6 zLo)-z&;JYz4KEoON(~qoUL`OvSj}Ky5YL|!f7FeEfuY9J#WAGf)|x3B`3@*>xNsM~ zxp%*0=lTzeUnWUsW)x@4^qBHkPUz^FZBsRz|Ah#-IkeZLcgIX;IB3MTPvDZV$3}PK z8C@O+j4V>G{o2pLz|&yO;E^ZiUWTuUz2OWD3~`<=jv*T7lM^Ia>QWe}Xi&D$; ci?WLqoP$jZw>~ywU|?YIboFyt=akR{01FXvw*UYD literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png new file mode 100644 index 0000000000000000000000000000000000000000..95c56ede38a556b681a95fb86d782ac39f620637 GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD3(YA_ISj*sSl z@I*9bPs8(XV(Y#!KTNS}`T8@X}cw`8p2|CVM#rJ^9KzUs>H7)t4Vq49HMp z`KPkkC1a%~gR``-*2(P#!H+TwPCO7_)XpTUtZcPb*!rENuI=Hoa_`suW;DybDE?uB zlocxj1A}OZYeb22QEFmIW`3SRNM>#-gQ32mvA&_bP0l+XkK**SVQ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..11b9a93aaa0a78323cb3ad5b876e7ec58798a54c GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD3=2J7978nDubs4!ugO5f^}O~P zUyoA{j=i{GU!eGB)BlHT@(+?)jvU-!kWe_GaodC$S9ah1eyKSBvQra_r{%tdO-gdB zc<*00B7L8WulZXi(WQj2r8_k28E`vVdy6wXwO2YN4PiBt?su4I;!J#T8r z-=VC|cVKS!{u50PI>p`9&fN)k-Bu^ezJ-TpOZRQXy6V1|m-UtJ|JQe!)G}1$$^8?2 z=90|7z#v-U8d2h0l$uzQnV+W+l9`*zV5o0stZ!)e@8Y_01_lOIkb;!Nl2of?kg8M$ zBLhQ2T|)z11Je*gV=Gf5D`Qh#19K|_gAIoFD^N7#=BH$)RpQogFem*80|SE$$cEtj vw370~qErUQl>DSr1-Hzi)bjkI>|zDyVAH~_kIfhu7#KWV{an^LB{Ts5Fl3nh literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png new file mode 100644 index 0000000000000000000000000000000000000000..0f85ca0d7380669d1c76e0ff8bc33b91846b3aeb GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZS9VPIhRc++e)0|Nt7lDE4H!~gdFGy54B z7&r?&B8wRqxP?HN@zUM8KOn)f0>^ZiUWTuUz2OWD45^+jjv*T7-%i-g+hD-sGM`y@ zNkMmng0;ewzwDle*(L-ms&NtaihFK7_q`ql@j4UQFJbd)$h2^E3UzN|o$!2If`<28}n5K1I=xo1c=IR*74~hnCt%1_lNhkPX54X(i=}MX3yqDfvmM j3T~N2spa`a*~JRZ!KQ^Kfnz#MFT=mdnTiYyjQ2cU978;gzrDQQ`)Z=d@sHO( z@7=y7sC~hPU0jN-0p2aq9Ty%w&wk6D|7^jFnVq6>GbJlmeS1#*ciP*Wr3$__tbguJ~^7xpDYTRd(3y&>cGu{lk;wK zuA61B?(g}#OhuuwauzEWEjlTYFt@+8HiaySW@qd5im2co<-er#OXKyA4OlRF5 z(wa2)tooZ}ars-;b)Sqc+3^WwM%uM+`a#z{6u(o&BeTiNB45ojx4xZX;XUK zc+N#l?M=ecPlG~NDiq%e{Oq>W?ab}xPKob7bqSbgW^P;aXw!pM&x6JKtkY%A|GnL1 zWSTCUGMCKa(;8k&X}8d@2eSs9t=8kk!d7}zu1 zw?xs9o1c=IR*74KUu=3S0|SE$$cEtjw370~qErUQl>DSr1-Hzi)bjkI>|zDyVAH~_ TkIfhu7#KWV{an^LB{Ts5EZ;l$ literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..5ed365cb371dfd99dfeb4fe04065d708077fcd21 GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjPE>M978;gzrEt$;hQLN{NwrR zcYDvKWO+UIKbDrVQ02c-&WxU;Dyp6**&@%J3R4kV9w8vD<71Yl93&MP84+>vkitd@ zu`4;p*zV4p{qym>>xcFp*Lfm$?R&Y|``@o$-d_K_@|<+gN)rwR@4x>{?#?(Svho_2 zX6Kqp=bSnJA8ccrHc>NrWzMzdG6Jc)zHmJA5$%}zSjf38H^}gDqxLe^z(+HZe@zLo zEx+0_;rT!9b*C+@rMG|eI>+s$XEphHj=?357zXp)BWt3=Jiba4MP6lGZjgFJI=ZxC z`-GZamw3 zeV@2IOX}(+ah1urB|WOH$sp?7GUM%hPsDI20s$<;tveGj?z8{TleCk!##-gQ32mvA&_1TcT*l%}>cptHiCrFE+iEfq_8=WJ7R%T1k0gQ7VIDN`6wR if?H-$YI%N9cCmtUuxa7e$7T!+3=E#GelF{r5}E+XVL*KV literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..5b22d20ce8f01aea50877c4efa6c499069d38451 GIT binary patch literal 779 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjPE^N978;gzrEt$;hQLN{Nwq` z_h0uPJd>igc;_j;)WnpaBuBB}q{se|6Iy#ken-w(n&Ub}CvB0*CgHM_=H4k2b5fMl z{!2L*roXGyeYewSN_E8j`>!hJ&-+|Ezy7_af~%IV%85(QW-=_g@nvh!r}Tiw!JJ9& zxQtp0p2ojX-F0S0fV0w~<4hOXFOBM3CGubyLL44=zr7QE>|8d*>uKSFx8pu!-bB7-GMA$la8txvF8Y~ zsxrQQGfi^yb&GS|B8`G97md_wzP(t!J%0OxuEGH0zxsFq@|vG;in)7@ zAgif=w_>x;Rl|!LBvY1sR$W=S`abXWJ4LSLw_;w2-JB|OJ^hTWwLnRiQ18>3>)Cz0 zyF{f!cxGM9yrOqeX?aM^A*axOStFg`?7d39cbHC3{d#MSyGTyZ$C$e{w|ykaqBUko zr@mjhE9KR<8!vVj$NhRSbyf4b9oeqR2D%-yOVqY&|EeuLxWrSrEhP4{lm0UiNoQtt zeYIC2I$I-@3ZvE^wpzoU@1y2hB24kc>mgL zy>iRX=3l;Re~YKxOkMh?X~z81UjL15Zo8GWdhND<-u4WJ|0nybp4lJAz`!6{;u=xn zT$Gwvl9`{U5R#dj%3!E(XsmB&`0wJnas~zlRgi*|#FA92WRR*<1|tJQLtO()T|?6l zLqjV=GbKfnz#MFT>{O6Iu)mjC`Ihjv*e$-(IoxVh$8J`tg2^ zfD?=2jm`&rn>eRGWD2^GnW}h3XwBuUTy-Gf$t^0z=bb#&ls(dxnJnKe z^KSm(-QV|h@XXW^($r2-oE#bda#QGvi{I5(t^ws_F8|| zSv5IZbgHyO!=Xy+kVh9Mhder)y?c9CPfv+RQ>L{@@aIeCt_O);y?ima!{^MbMO-@{ z+*lYg!K(D~mx5hFZ*KozS#D}Iry+a3TKC7}ax1nk@xF57$Mo9_U*{^v6@J>${6&5itFo>48MwB=gr6!hS=I1GdWag$a80s4u>l+&WyST0#6pkPT zDTyViR>>e$sSHL2hK9NZmb!+fA%=!lhGteqCb|aZRt5(44EHTjH00)|WTsW(*5DVL z-pathAOo@?I6tkVJh3R1!7(L2DOJHOvnaJZzbLy{!8zEpaO-0;1_lNOPgg&ebxsLQ E0DKzCO8@`> literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..f85047725b6397ecf0839bae54931d86b53056bd GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjMbhljv*e$-(K06E#fF~>|y#d zG5^GPGj)gizyH3M*yOe}$W!2z{7N5HujAnsPFHs?__cgm3S;-R zk1Hn4DGi+PXWR6|?6&NKdev{%txiZe9$mZf>Gz6v0wH-n61J{fvm?`c|I8FNy;U(E z?`hTjdNTV^u6WMG$GOk?+}EvsQ<)?@XJbl;R(^Ab zPnrH|;_jA>vf5&6Z*S{Oow&#PdS2n9?ggLD6x%-kI-$rZN9`jJ7yq^(*dtHY1A}OZYeb22QEFmIW`3SRNM>#-gQ32m zvA&_1 zTcT*l%}>cptHiCrFE+iEfq_8=WJ7R%T1k0gQ7VIDN`6wRf?H-$YI%N9cCmtUuxa7e S$7T!+3=E#GelF{r5}E+jK?_d+ literal 0 HcmV?d00001 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 new file mode 100755 index 0000000000000000000000000000000000000000..b261c1e35ea00b34efa69b243e3433a11874cb97 GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjEbHvjv*e$-(IoxQgLKB`Z50N z4^bVxB&``UUTNAi$Te$r&3s=-;mzrN*p%ZxZ zM$N9yNy5Lw_S~GfPxmVG_Vo2Vw~rR~T7Or)`|i=~+&`sxXS?msi5<=o*!pIX&FUkmF*~)2 zIk)HS-{Ey9y_z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKOzH8wMGG_-Vab+mLg zG;}p`G&ePJGIln1c5*gyakemm>2=9ZF3nBND}m`vLFjeGsTY(KK*3?CYG zsHSC!;QRw#0@@n`v=5%T7jEGg@MrqzU%qpu7DftBd^0nNz3$E1GxzS6TW{Vip1D>u za`)Y^wPD>I7kaNO&-`NgyS~SCw(rx!T72`F^QC_=jn%DuQ`16s5 zukC)OYtU{+hX3mo9{=rkMbS%GT@w1p| z5%LpP2(2|zaeH~2IXgjWPh;x0`dSe&7un6%g}EPb=1f)0n>z8@@1s4{^DTu6xZkar z89lRQ%cLF51squqSl?V~G!u?!MTE}RB-Pxu+oU6%V_0uF>)6Jq^E>UQ zIeQbPIRD^%+%)?I_rzU<=Jix$m Wxq4M~z0eI%nda&0=d#Wzp$P!7i11AS literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_hp.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_hp.png new file mode 100755 index 0000000000000000000000000000000000000000..4172082efebcf0e9ec802d1a6ac9cdb77267cece GIT binary patch literal 1325 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;V_;z5GFP6>z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@uDKjLZB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfOYv3bSNU`o!<)vrh_&^OdG0C@@G*W3bMU;IjQbK$Cs zOM+4n?!{_waY$uBs(w&vaeir0a%xa&nli{u1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@;c$Su&z%uKN|G&ePKc6M=db+mLg zG;}p`v~+W_G%`1FHg$2bFmbYg>2=9ZF3nBND}m`vf$McOz^NCM6hOgY<&s*IS(cjO zR+OKs0QRy~CT_R5;4}}aHwC9#TwHPL)wffy(Fa8=Qbfaqf?V7{OmLb6rB6ErM8Z$a zOR-fdQnI&W+i__L0|VniPZ!6Kid%1{oz-J;6lq{Wxw^;MAtJ)VKc0wb5;nv$`;)0GWF>k!^#atrJoqqp5YZtf5f?`VyC0Q znO8gSZ06FqKZj9r2J>r^t;~LotR@F_ZZI$>h`*`)ZYg`=L)40G*BqPcgHAtB^)_i8MziZ~f#H2sWfF`Qbtk41vvc}&giR3qg~Pyy!Y>gTe~DWM4f DbVTC5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..52569edd7e9ca1697e57b106547c16a5bd4d72b8 GIT binary patch literal 1584 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9nX>SXC+ zY+-3)Xy|I<oyGc&~ss@EB>UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11Yhr_KdH!b7D#I zVxGA#1$PBsoFZ>H>E41n3Ud^0yil}t?MqhgogDISiGQig@dy6%?^hRkA2Qg&b7}Fs z%X|20*rwEpwo3A_9r``_}BOE_Mr??`F9b+@Cz zTV)mdJ6?;EnX6?bG>+Kx2OC#Ccwp9H<*HN`;G6mM?FHYoh}h+Zc02NT{Bk&69TPlq zY>UO}Q?ohp9~vnoJ<5G|xbsZZk?c%z5m+vKSv>Z!Ew zoUqVihsO?iJSMGM8U+JZH<&HYn49XMG+Sed_WJ{i`kzgoRJ&)r`hDf=^NtjECclzo y+86Bbs6gfT++{VZ1Ld60=!f_UX^QM;;$hh7zw%?o7N2BL8Sd%o=d#Wzp$P!?p+idm literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..034a68220b9761b4829b0e54ed60d49d475a4ec7 GIT binary patch literal 1688 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9noyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11Yh*G>D{jtI8oT% zR#WQpuDCu; zel&3df3Tpu<|{cb)|m7}6~0==>+3sw7rF0ouVMdwPdHkNIitx#zO#IWvB36~73Y}s zM83*|-xd9`k^kxRBZlj11@nIV3-$VKv*5K~$M!Sknz>rSF5fC|UA^I0Eg4+XdwRc- z%>wEbHzEcZW_-gb7bo%Da%j-(o#MY-c>6^*&=(u0Pm-R0^H{6jQ{=)9Dh->%( zIhV_U2OIU6*cI+6vQJey;Tu@OlB3Gx(9Zfr)ajQ~VfzHH5^lb2{4dXVDshD;Xd1xeiv%zILNj|7U#{LOfdyX64HfXvm+}RKW=Z!^s2pA9QRhfiCalq z$i->4y2`o6bB(7=FQ{JP^K)3uv`y6Wb!4MLkekxpPkb@)pMLwbmadwwt}k?b--DfZ z%zBx)>(V(J7c1v{zflmr`0lad{{f|rDJy>{A7JSIbM%1IYtLh#y28`d&t;ucLK6UC CU3O6b literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_0_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed366e8b49ea2e3096472716a5363135ddc383b GIT binary patch literal 1590 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 CzjlQH literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..175020cb7a3837cf8747380b363598136e21e9db GIT binary patch literal 1590 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9nXkh4MVq|P$ zY+-3?Xy|IoyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhK$!sm=AXHZYdGG7W)|J zm2pq4=2uUgT zXJ-lV^-VkPmB^eBuU-71-K|G`((l{{l08=s@;x?AX8r1G^85j}x*>~=z?Zj=xo0w) zi-^BwIkLOy=%@OM?vHYJtCQAb=`9ix@MmQ)3=~n0*}Br;xN25$JFmjGLY)WyY*O}c zsd@Bx9yFMuvS`b~v$9tv=X^BUvR}2&wpHS%e%7T0kz5h!dz!z=9C@R8MpgLOX$$Ge zTUd@1zGvU5maous#;3%4iiP2X(^2M?MGl(x96Sv+ggge}hDGZQac^?p21%3P2X8D#!V z(d^jKz_@!ZF5KaQg2MU5{C+87nrmM-7wTX5uKB{-*TFrxdUn9Sj+R@#zYPu^;>ut> z<13kLqbK+D>xaXZrpFpLO|M(!Fm+?$$D~^iUG8lw(0+9FQU&A3a^B4o{;hcKk=UCs z*~4!VhwtZ>BUTrz0wkDo6>}3=eL@ekEy$47pXd@6=<)nsW2F4q^CG`p;{ErruZwMc zu5^6LG>#ut7;Q{K58Fe*mQp7$9bY&aiEgi)78&qol`;+ E0B>GNH~;_u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..10e733a90850f26f96a3271465f653da9656ea9f GIT binary patch literal 1696 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9n>f~bR=IZ2V zY+-3?Xy|HUX<}yNYH8uoyGc&~ss@D>)UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhfA^7(wfmD6_TTFHmHYAeloz^-4EDz9fBctW^6Ph`=$EVNzYbWGM66kGR`RoW z{QRaBRux`PoB&aams1~f`*qCkTy6M${)Pp!rJ8T3*Qu;? zjt#I=lH>Y)LA200@OyyP10!zb!WYFm?kQjEyBr?ryIV#+_27C?VeHm@hzIZ0ym##h9|PWRq^?# zs&`+-qHOZ@69FNb>pJ>(+BE*E4%nw#a7s++fz(Id>H3jpWF6x@4^_;%_@hg5?zPw* z_JUs?&kz#0zW4rvSw;^9WPbQ4L`c}qU8C7`PRgRi*}(ruwjkhS^A!=*?uK3uhK!93>zq8oHS*+xI?K)-EK{6o+2`^w zDCen^fG@L&@Vv}pEPZP07hZ0`MOzz${-c5YAPOVt__&?{XY!i1r>SthPXstPV;LYn*EucEX M)78&qol`;+05Cj=UH||9 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_1_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..295e678c94a80b385b280c4446244f84b76c2fb2 GIT binary patch literal 1678 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_2_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..d347e534a04766b71e7c3fe189fd46f69a3f754e GIT binary patch literal 1680 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9n>}c+6=w@VL zY+-3?Xy|HUX>90XVc~4z=w{~X;^OEG)9aa6T#}fVoC>oyGc&~ss@EK^UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhHNBqi;#%UKUTDx1c zUT)YOkjN$O>71o;f?Z+LGes#KGkbwn{f?haPxW?b%dSl;e}87(acLWOt50v;cE}UG?tG&ir%iF1Fz-ud}omG7B&(Z78 z6;^T16RJOC?ecWrqSzTu!8L(jzKTj;VfCw0{jtdSk^7^xQ-9TUUaUK)z}NY{^LBvv zRR50ShwOY@YgVkNRuCho7`S0l|-zpuh&lSp_u|D`#h+2othb^l&Hh(i-_CsoV zeY!>2^y?=gLNwQP^zXE3{#6~YPqXmUG^Gb(A9<(iN1my5jE_9T(suDj*UUNBYIoQR ze|daUNZ|Tj`vl$o3mMv~#j%DF<+@s8=c%rdVB8K0%B^nc3!wkb{i_|2rbHQo7u!f{pcfOl#vbDCDz?Ji%(;iq`{J&aQho>$!H3+kDwQCl}3Y?1-Kae9c7mR!r;V84a=KY3l1zpY$rn zNiY48l5Cykd|+aLi;Cap2LF_Gy1lQh3)KU^I|ruw9$0wn%Q~lDi-lh8dwZCLU44P@ z1wZ-NE8 z6}#4Thw1EA7L04TZiK0ac^j5CTcm7aumuX%5nRpn4UH0!Y%rpK1sv|sI{an^LB{Ts57*Ta1 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4e28ef149a13a7097b1505969494e0a818968f GIT binary patch literal 1599 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 S%(tzedc)Jz&t;ucLK6VkM}=Mh literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_3_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..976d87e8e0f5edfcb417d4e533a6c60f64bb1917 GIT binary patch literal 1577 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%0Ai z{dj7|YhL~htaD0~KR7C%5c{jN({? zRgN9G#AD_@MQ=+o`&Y~8J$!HT`;z??-Trk)nJfzBy0L6e^Ea6zZ@AAK6;_KVG*e6E z?09^SzsUFLDPy-ZwN0vBUOYXI!?~xbR&JX;Jt*kMtd2R6i%xLeaK2fx;G$EvQ(C8z za)R+hh8Teh=^QV)yIwDRb2IY#{-$1*HH+)oKleXC{6Yxn#s~pwzh_X>PDN zpMu${M=P}QmDaR&cXV`auVhd+>YjA%tK-h;FMg+dnX0xxedFFzjrs_ux6^88BqXqy zFoiAaxhR)9UAg+KuDCsy^8kzU8)=Zh7pS z;D@`SDtzGucNRX1?)@T>^v~Hey)u#IOnW>d8^f>r>z{kF)GYv&^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9n=4R<;>E`Ta zY+-3?Xy|IoyGc&~ss@D~-UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhP00RTl2~QWtkcwMxqBiDTc97^>{3f@8kxBo8*Ib7SD$K@_2}=!@Nb3gg zHobYuB_W&r1rKvAgUj4YT}uP+imx~&Y+}>+Q@750{+i8y@88^MQ853D=JU@#AN~Gv z_wWDMN3Dqw#Rl%lZhy;u6npWA1xa!4gcC!`SbGE4eSfuj9^>zLn}9UwlH zzvK5IJ0I7YH7lxBLM`>i{?=;TpJtKjEm$!1N8jmiooCY)tk+3oI-F5+*2nL)-JSUy zzdq)0cD%lqU*J1+13zDlo`6o@ym@(DNt@XE6efK$SsoqtOZc+>h3AYr@`GR4Jr;2d zKOpCFIq_iQIVNj`dwT3sl}`8umaycgGC8!fei3#0Lhxa}1e(*E*C%U3g7n z#l{&Yb?>~hk-gdAyT9b@XHm<==lS9i1N$A0gr3mMp2e4Y?v=m-ujPh}yYr6t#hf}J z-M+`n>*LvDWoOzNoELU@%z4H*|HPdLsq2;>6BoT(zUbVn2Ik(Ev8`X+Rj)ALZs+9l zb5KusdNE>(_}01eL<$qGEwdL1xO7eAzPH_+AMckHn5Sn)Rx*Cv-d5;Ud#^a|t$Y)= z61R|x(`bB*U3Pnlj&y~O9|u$pO`sORg#Mui|ZrM(~cV&;AR-Pc;WYQFk;q3in| z?7U;v%fwxm&eynDIcIy`j@1|Q9`CGQu}i@y{EuJ)L*bvJ2ljNVWC7I`p00i_>zopr E0Q-7=G5`Po literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_r_signal_4_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..92d6840bac66beff09ea6d6bd6da600494d8050a GIT binary patch literal 1543 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86>gMR`Xzc1_ zY+-3)Xy|HUX<*{yW@zH*Z02Na;p%D$)9aa6T#}fVoC>oyGc&~ss@D;(UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhR1_Hg>-!4dt=w0x7BcSn?^F^EKUdP0v+wN{$ zJf}f!VYSMvPlDcucu%ngSTxS`+APtO?0@Houaf=C&LeYoyn0-j_9o0jlbOHz%~X?o z`TuGMcAR9|CSfSNK;_IKfupyM=uDKa*srkY)+3Gz#yyPp(vF>x0WyZ0COvwEXM3mr8>V{dbo7dCy&zR9hY2CF+_7|(yKdc0ucvWPd2zfM24 zQTfb7={2%X%F@@idL5Aaz_;E$@Qh)y-dux^eX9#Iy>~7>S#5vBwA9&(-7B2wTtn=o zX*rwks7dO&h6qkPtLx>**uG?zpY|8W(}!jzy}1&0z;6}9m%sxaiYZ4#%AKZNT<|h_ zC*R6t(k-*n5A_@pOycv^3e#!fW=wAOp7x|_f>430OYeofor^3?Z#8=M%@NnEI>sS; z$2IV|%MrPkn$5D-TPjW)_itX3==o(sQ+r$GvKi8=8BTgIACq`jcG}C+f6ypVfAo;`3)8hYhr7$-jZSoKJsNzKPyN-i z1C5ED?^?$7LiPpgnsp5e7iGrg1iEx( zEXjU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9nV(Mz)YUyfb zY+-3?Xy|I<=xSo-VrcGWVQOwoyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGXoP7b3;Q{V_g1*=uIIf%=GOPZ1h2i11YhyHgC+? zFja8bIh`+@3Qyg26sEE>OjTcC(^$AAnkdfihTl*ua0$oppV{(!5mi~MHDD4*;2pd(st86Q~Rd3W-aV8yq^@+!5qkF1vQ zDLp#PBgxCI$yT`N<@-4r2~mQ*wJ)X2Eta>43)+5>xTW?zY7X5|A+SM!miYlfB zh9!FKQCV&%xcPWYMUNXFQ_#`VHH{0d%zWQE`RL-cg;%Om@(-E1UFW;;e!{IYE#EvV zcCc3Wd^@GKrf8qkE0xPXm3)~NMK+u$eU)+9zqfLuN_vl?d`x3&dWTES;yFeWI#xSx z)>>}p^RbmlgdlU>cSd$|PN?#y%#vkJ{V+v&iGllh zt-H*=kIq1>^{7nftf+;3&-BzogT+Q6@aI! KpUXO@geCwZpJIvt literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..ec1d1049881124791509c7af4554e3dd30c4108b GIT binary patch literal 1459 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3HZgT|GO@65 zGH`Y^G;}q#Fm^R{b98hwba68=bu=)C>GjMjE=kNwPKDWZolTK%k78iIW%Lc~oD26a_;Fzw>k zJKz;$y2jOH!YYZZpfm%yZ>vAZO{u#p(e&+rXoPQ7@wb^;o_e-fYJ7I(mc@Z-#hq2o zHH&h@W151bR1H2nV{BYyeCnCv^XNMc`?9YT#2v_uT68FOqE$45olCp1lauCbwr8ge z>$16R8ml+V`{uc>J?>7jVM&>(OLh3n>{Xxpqa>ZHHa~qq#i*yN KpUXO@geCx#y90dy literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..9f1de41ca85b2c60acce0f1d58a5215c30322d54 GIT binary patch literal 1648 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86Xl80);cV&R zWZ-OOXy|I}XlQ0?Y3$-^YG~qSVs2~z)9aa6T#}fVoC>oyGc&~ss@EB>UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yhgv_ppkT`EwS-TUo9k8Et|Q)8`$9bKHXph7 zXltmW!GQ=bmdyzR!L8 zwQ4V?c&^rZ?%(_B*Edd;@xCJT;lkDfVhzO!*Onf5){uW-k#}$*+Yhdg*i{=nA1Hq~ zqWbAWLvq4l)36%uJq5k*wl_}8u6?8W;n-F--LEA_eif;02sL`J#Cwug)fMq?Yj(f+ zzJq0(OQ@mwqW@nlSj_n61hQK#ey8euf9A$FuQ&QF-`wfjYJWIuYn9M<_rvSC_d9nx z`ZCXN6xHVT<@u&=#``#;!7)F3|LGfBlK-e&DE;9k_T|2M!r4{xN+TiXw3o^e$LuYINJ+_0YYdcp_acisx!Unb{Vt6al4Kg#Xz_SD~3 z8?JaHTnRam8_6HQ)E2+}eoEf=srk1K#04`)ZPd&yIIJfn+02(*<5ywhW7zlnfc5Mt zRv&alJ)N#zW8E&Qe1Y@r!6m6jmoI*`e@)5$Y#q)f$0_*-76#ewz8erQgNV4a9MWbzV}Q^FV)0tN?oudX>n-j<(}2LKRS#) z{!nOQ`Sspi>hJUltw|ax+JbD7M=sRHTNUn~^r_BxPTlEB?z5AwEsqM3d^+P-7f)Hv zvMcq=ReEgRzTec!yX`c??K4TP!OG%M!uu!sFVep1yueRJY>m5DzQ_ixANdPc&hRn~W$333FE*8X_>-Ht<8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..b5222fcd516104c3332bdbec06f28d4fc394b2ee GIT binary patch literal 1648 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86U~Xn$YG~%_ zWZ-OOXy|I}||*O)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh#(@m#I-+`sqLuWy_x<9$Ww!-cH}#2Shdt}Q+AtRervBJbcrwjW#}v8y(EK2ZK} zMD^2$hUA39reQVQdkT8rZEu{GUHeA$!?CSwx?f9<{3=r05Nh;biT5P0sw?8(*6e=s zeFw`nmrz6VMgPBAu$b}B31qig{7%*R{>+VUUT^eUzPZ!4)&6kS)+(Xz?uXZN?|1HY z^ktskD5}lv%kxd$jQ4RwgJXX7{?j+MB>z#lQ2N77?8|-igtModgqd$&Ws_#m3f7&I zo%KIcx{ir+*|Fltx3(Y7JmabgUi(VbxnVu)^@I<;@4OYdzf8`#R=I|8ew5qa?Ww=7 zHeB&YxDs+AHrZ`ZDl*LrQ$%9;Iizjq z{Grgq^6S03)Zgh9T9Y(Xv<2BDk6fsYw<_E}=~JEYoVwGM+-E0UTOJi6`EwogO$ajg!fPMU!;B2d4Zpd*cx}Qe31=WKk^r@oZ)lA zX`gPaVRCF~U+H(RV8#6}st>%BRMr>mdK II;Vst08bZn{Qv*} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..b12b0edd37b8c970c16cb888b6a84591aeb10a50 GIT binary patch literal 1760 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86VPa@zVr*#Y zWZ-OSXy|I}XlZ2WXl7w*;p}Q;;AZIz)9aa6T#}fVoC>oyGc&~ss@DXsUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yhb14ZtpOxN9VA#_``Kw2(K@Cg>3BW{~++&pX2^i+@go1{T% zz;e+Lv!hX6(gH3q`#%ZKQCm6pko<<`1nrM8Hu<$S>61>@q|W4SS1~p>et&N7_dB1L z8P4?!f0dD)8hfMk?ozgEYa$n|W19Y2?1tC}PK)^E2lN<@A1Isa^-<;nW5(5$$HN-0 zA6RQO(Ve-1^-i~KeN$D>&N%NRTqWDhXv zESURwR-9A7)M<|xBtJ25sIwk2hN_FgN<=|Lf(1zguNIm)_Jf64}V2 zo0dD}q1E=24XeGcc2yW%LXl#3az=qa_>G5O1V=?8v#dzY$+ ziY@aNnSZn3N?SzgIgWeRXZSP89n4pM&i9LT!+hms-3QL6@#uOB$UO+Uy;5Dr(ejU8 zgK<~hxeiQJieLx?@!IYc0ewOS?srw`}@U` zzWLIOvrpN2SeT!G$9%pk<)O<{$4LRUW|!F3$i3+LmcS-?y}*3!zti5|pV=MvU-XCR zjap{y-WS}%q%Iv6Kjfk zzY8h{Z@j!d_lN6}pJhF}>O-ddJH6yxx7n)SwX42*C9g_i|2xTimC)6FQY&u#<1k=| Xb$tDQn{en?P@UuH>gTe~DWM4fsPUrB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..f333138a307ab32da69af5a529b4ab4fc0adda94 GIT binary patch literal 1760 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86YHI1^V&G)r zWZ-OJXy|I}Xl!ocWaemYY3yifU}k0s)9aa6T#}fVoC>oyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yhb14ZtpOxN9VA#_``Kw2(K@Cg>3BW{~++&pX2 z^i+@go1{T%z;e+Lv!hX6(gH3q`#%ZKQCm6pko<<`1nrM8Hu<$S>61>@q|W4SS1~p> zet&N7_dB1L8P4?!f0dD)8hfMk?ozgEYa$n|W19Y2?1tC}PK)^E2lN<@A1Isa^-<;n zW5(5$$HN-0A6RQO(Ve-1^-i~KeN$D>&N z%NRTqWDhXvESURwR-9A7)M<|xBtJ25sIwk2hN_FgN<=|Lf(1zguNI zm)_Jf64}V2o0dD}q1E=24XeGcc2yW%LXl#3az=qa_>G5O1V z=?8v#dzY$+iY@aNnSZn3N?SzgIgWeRXZSP89n4pM&i9LT!+hms-3QL6@#uOB$UO+U zy;5Dr(ejU8gK<~hxeiQJieLx?@!IYc0ewO zS?srw`}@U`zWLIOvrpN2SeT!G$9%pk<)O<{$4LRUW|!F3$i3+LmcS-?y}*3!zti5| zpV=MvU-XCRjap{y-WS} z%q%Iv6KjfkzY8h{Z@j!d_lN6}pJhF}>O-ddJH6yxx7n)SwX42*C9g_i|2xTimC)6F fQY&u#<1k=|b$tDQn{en?P@UuH>gTe~DWM4fA7`V4 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..12f8875805fe443745761a7e30d4bce3e3565f24 GIT binary patch literal 1459 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3a5XSDurzgY zGH`Y^G;}p~vNUmYc6ByzG%_|ZH!?7S>GjMjE=kNwPKDWZolTK%k78iIW%Lc~oD26a_;Fzw>k zJKz;$y2jOH!YYZZpfm%yZ>vAZO{u#p(e&+rXoPQ7@wb^;o_e-fYJ7I(mc@Z-#hq2o zHH&h@W151bR1H2nV{BYyeCnCv^XNMc`?9YT#2v_uT68FOqE$45olCp1lauCbwr8ge z>$16R8ml+V`{uc>J?>7jVM&>(OLh3n>{Xxpqa>ZHHa~qq#i*yN KpUXO@geCy^KLYUp literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..9b03d1852051d3c1c5ca83c210e192597bcb76e7 GIT binary patch literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCG5aCJ6!Gj}p@ zF)=iBHFh#JHFL5wHZd|VGc`1KHi7B&%quQQ%u7y%*_#Qr7p&I|uU;$XqSVBa{GyQj z{2W*c2*}7U$uG{xFHmp}HdD|D&&*57FE7>vMGrXatz1%zGRsm^+=}vZ6~N(Zm5J4U zLjH#6O(7@D^z9UE^g)RODY3wWf?V7{OmMmerExn2MCM7&OR-fdQnI(>-qXF4fr0Ua zr;B4q#jQ8f_j?@<5IHtEisipfVW9wfsi2X?5`{-fLE;BJZ~0zOwQDqKQn2#)%~4h$ z`sm4uvdxok99;M!=@$ zt-5Hof1XSFb)7t+k)qAWoyFVdQ&MBb@0P{8k4gdfE literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..ffdc80f9d8545075e9152608b7e49f2a470b0153 GIT binary patch literal 1589 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e.png new file mode 100755 index 0000000000000000000000000000000000000000..281afe08a4c1d9fb7dbcd2a46703a1f965ca7d7f GIT binary patch literal 1370 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9n=xXZbW@%vJ zWZ-OOXy|I}Xk_B->gsCfYV7P}oyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh}%WQgJKk&;S4ShYMJAwisFH=;S!q9y2+k{)_1yob1CS_=Y5Tk z5!lYVol9!U{AZ4zuW$G`Lw5^HikzRXR)FkQ$*6Qerueq5;~@*ya@8qa{V&TUC(Qcj z?S(Rhr+25Fp059%ElAI0sbFlZn^Yy2h_m%VL$jP+x;YMe_&RtqZ(e-E^5}a>-v6~M zN$OGG7o;;zzHMt&m188p&a++4WX0d{eoi&f0S$Nb+dMmHoiAQnmE#K}>(0rG=z*jXeO0~7oqf6oZ8>Quc z&1cviWA&|@wPjn!JUM1j0qKRTY`O>IlRigCZP-!Yzr6ImXNzRd1*N;Ke2hO@Bl@Qb z2WAN|1uvXxaF@Y$Qj+P`TlFI1-w!-_>ZSVGQ7%ieW7hm@hGw#}_P^+4FXf+=#2}Es Y;I+~E;{Qz(IY6bIr>mdKI;Vst0Md%sv;Y7A literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..083889e9ff691731e04c590bea6e157f7fac1e2e GIT binary patch literal 1370 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?zP+vl9-pA3bQv8WG_Uo3tqie&PAz-CHX}m z`T04p6cCV+Uy@&(kzb(T9Bihb5uTZsl3!k|35p(Y*ju@z7G;*DrnnX5=PH21*D4d6 z{pN)H4bhuIPMGQ2DcI;lF7>ir*?Kbk3o z$@zIse!jlp;|$#`EGcq+zFGmYTP35?1)1X8x{ik|Sj$zXboIY1mz*%`qqi5z z6rSFlc6z%0d$u4wm!*QSv2Ie8Tq4fa3k}V3cIoCg?BVO+&AfT>4a=kNC3*kXvLvZT zeP58yIQh1%RaK6W06WiiIg=HCr(51>V=G#admz#DnIP|x$tyAy3@hL0ZTN9qt&V@j z_bDqMu$3p>u6Ncvc4pyGE9tGgawi_ewYPk`KSA?d>H=TYz$n$$MvpFq^KX=v|23as zdyLh$Zq}A<9rNUvMFpf6va;zOj8FO;A+=#gegE>(`<^Y5Jr|Vjw(>FlXpQKfDjb+4 z#1y=6s=-|b+et~LTW{5ih<`uux=(4P2>QTcAl<&F6*2UngA8-*`ELa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..c3efed13f571a445c8c909376983beedcbd2ed11 GIT binary patch literal 1509 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86?&fUaXzpa< zWZ-OWXy|HeVPfj)Y;11kVqj=$Y2@k#)9aa6T#}fVoC>oyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yhm8@tMdl@DWC4P`E>7Zkb%A;p#Vh1-W z?bx1hd_kFL$eRU=I}|!1?Eg1;Ti-q?pCGVnTGhNeic_xadG>Vgk@ANVCYhOA?)*Nl zJg&EHzx}dgl~mPjI@&==k7tQyiOsmy8^Kq>q*kJ2#%a>nl#w$ z9y!dQ*T{QbKXq;L+OXH$?Pm_WlukIlEmyrIT82@y|FiLd^q_;Ya~XO%ICGdP7pTnG zY}GR5QdrIcr_hFpFB!VGMx7Nov7J}uNNM9amOXuEFSDKvH<@-yG&SVJLa{T!SMM=B ziBx3uad{(iV2%10L+{A@j;ntfq>=o1nCu!ZTXBHnD*Us3i-S-pO zue`GF*L`4drp4yb$HtkTMVQXSDYm3XJpWq%e`S)l%IlRIgjY|iENR#7fRb{~!72_`Wq)|LvyLY1p_!`QQXe+k2AQ&hO^h->IE@eAmP! zv$^6DrcaM(bvFI`s6{L>b>Sk>?}tCtA1dnq7R9Y;ubkq(@zd#bHzdza_d0U!Zo8B{ a6AwcLd)}IR$0z>>6}+CVelF{r5}E)|(Jw9l literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..3fab702985a28433c59ec104d70a4924be19265b GIT binary patch literal 1509 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86VQFgaoyGc&~ss@D>)UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yhm8@tMdl@DWC4P`E>7Zkb%A;p#Vh1-W z?bx1hd_kFL$eRU=I}|!1?Eg1;Ti-q?pCGVnTGhNeic_xadG>Vgk@ANVCYhOA?)*Nl zJg&EHzx}dgl~mPjI@&==k7tQyiOsmy8^Kq>q*kJ2#%a>nl#w$ z9y!dQ*T{QbKXq;L+OXH$?Pm_WlukIlEmyrIT82@y|FiLd^q_;Ya~XO%ICGdP7pTnG zY}GR5QdrIcr_hFpFB!VGMx7Nov7J}uNNM9amOXuEFSDKvH<@-yG&SVJLa{T!SMM=B ziBx3uad{(iV2%10L+{A@j;ntfq>=o1nCu!ZTXBHnD*Us3i-S-pO zue`GF*L`4drp4yb$HtkTMVQXSDYm3XJpWq%e`S)l%IlRIgjY|iENR#7fRb{~!72_`Wq)|LvyLY1p_!`QQXe+k2AQ&hO^h->IE@eAmP! zv$^6DrcaM(bvFI`s6{L>b>Sk>?}tCtA1dnq7R9Y;ubkq(@zd#bHzdza_d0U!Zo8B{ a6AwcLd)}IR$0z>>6}+CVelF{r5}E*(RWFAC literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc6d0e0ba9a270c3014a3d4176fcb6bc46cca35 GIT binary patch literal 1685 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86VqoOzX5?gK zWZ`ONXy|HUVQAs%YUpI*oyGc&~ss@D*&UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*US%a+<^-^EC)!h2yn#cAsCHTx}2^H}^v(x3@k(=9UlKRT-)$UXam>yzj?UE$x8GT7O^SFL(c?c`s=Hz&<5 zN1^jO+Yg5p_6N=n3?-}C=jcWr*nS}O0l&0&t=7>{r)}AFa04XUhB*N`6uwIC%r>9{!rX zk7>bD``K++*D=~Z{NuGys6eiwHCc48}=^q5PIKPA#G8=gk?$L zd;Y>+-#ZIGA1R8Rek_h*x5d0@o4n3R>TF#X8B1)WT7T#C-ib};HWA3QpTzjAg_ zoMnwt!rU+BCf7}bgxr~vUnIE9%e}d*A+XC^&$BvEXoI^8@5Q~$u0^vvexzJJ-&?tG zQ5w(1gT)%JI0XymU750VlWbH4%Lp!?;n^Gz9>c~0+s@#*;K!d|Zx$G63+Sy(X6Z4jR9qSgNP(~%>MyL{`X z<%>k_OD_1R`usHK_7>6I3g@;JKVkX8QO)@`^Lpi0&L(fAjPmwrTTUeSWgFM9yfP_uR+QEPv8iI~Sjv^Ihlp qI^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86V(MsNU}S}IgZ0PLl=xE>y)9aa6T#}fVoC>oyGc&~ss@EK^UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I* z24-$g7srr_TW_NF=U;XZ+2%ac`#%%Ye+TVUCPq)y87C(>Svy3Yn6NN)k@QJ6;lvXG zVpa+hZn>2#U&LpB#L4v+d&8;t3kFVFGtBs`M*jP9xBC6L z!rJ@gYgD(-?0L5KLAk>VeY_W$s?&{lHRS@!|`+-~3~YJD?h)V3S;{&vBH8bIrq>jD^xIRu2V^OxskEpy(9( z-1J#Q`t|P|xkvUL=(|`i@<{(y_MdkOcDtSScYn)0ct7!RUW3EBQwRKf)FzhdShI6Q z1?zl_jQJm+Q6_3w1mbs zi`~927TI_0@zuG#Ye!9~_Y@Vw4QGuqO`SpuPtO;$>D}n8u||7K`9-^s9$m*u^^W#- zPwy!^xYlgSxpk@LqE0Ty(!WW$+JaA5IUnnGS6^pjcX@YQGw_i>gou!XtK$OoH)bJR zIY#%JSycY@?U*iTaolT`)a%;<96qLOVv%ONYt~2v^Lfgo9=YJyx9aZnDRyq(4mq~P zg#0M{s>8+dO=6|o6|)H{%U9a@NF3>?oVO(H%Yp}$6LuZ-h)FPAI(e(p>c?xQsddWK%=})cRGjl-ubrSCckX=E++!R$$0F`!PPg}*)YP-W zdl|p*nn)(y#^A{=Mdp{Ep0wZ!$^G@XW^u=7S?BBbRBh&L@Q&ETed%V|zhahMJbNd6 zTT!^q*fnkPi53+>`_@M{v@U2}cvE&p>%u#iHNCD0kwIJD^-grTq_IRjuCY@7?01vf zDf89sxxUXkw!>roOhcwR)%GKS7r*SDRuC?H`}o%X0b4y)!hb6tU|5^?AV>K}sV1np N@pScbS?83{1OSTLppXCn literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g.png new file mode 100755 index 0000000000000000000000000000000000000000..651ea7b8d45b97aa1ce7ff4e3f2f7032a1ac88d3 GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9n>SAi{=w#^X zWZ-OIXy|I}Xlm@_Vqs=voyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhrwY z0s{k+o~MgrNX4x?5&ONJ0!6-w^O>DczBA{F>I>e)3j(?ex43re1uhoYqP@lKWt7X4 zfaECxE?;ijA5=^KD;^VbbRYBcgRV7pTZ^y0YvjLw`SjyWq{nr8jfLK1^aZI(0jDf!BuI-HR{&uPr+Eq)%5Ng^@Sr9?yhD9t^1qT1_)~ zmmE4EykXhn1wVN$X8&W%I+dPzZjtM22R+RhmO*>j6QcjH^!AE{2Hp7bYl3O&ynilz zr?x7&yb-!_xwJ`d#qyfzrdktw7W}uq^l3i3(ZmOGMVqe5Sw#d?MMOV}?liJV<9~74 z$w%?&mubJRY{^~u={CEb%GGqiXE)C6_~&2J$16B>llQk}H*c_=u8R0|eOCIhF!c}h zN|LWDzJ$1*OvqlKe!SNrdg+XH@wyKjecD$m7{y=yvEN=Wxw2fv?(8RhQ9-@^qIXN* zT}uvq`fFm%;?q{yPXE83XT)|B(= uPRl<_Oxnf%#q|4ios9-@f!=?(3>fM!G;m*QZ~q4>kv(1gT-G@yGywpBz(O4W literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..5942471029aaa02836a9f3d1c32ba33e942fd4ec GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86=4NVU?r7-h zWZ-OQXy|I}=wxZ+Wa;Q+Ztmu0>F8nv)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yhuju(k z=F3m^v55H2PHsOiGn0ANub0z)pO#39Uen+>Sx5Bj3h{Z7aTovU9|?M+wJ3Sr`@if- zh7ab}E_kzX>CGIm50jXUPTkI3;I$!l_u`BHYm1IO>C;t6VdRau$1`D(2Se(DR?|%0 zC5H|OZ&>zt!B1X`+5Z@`PNip_TjcuMK~HmrWzb&sgy=sky}e?gK{vkqnqZnb@1ING zsjW&bZ-j1KE^X3VvAkxwsn*1v1^=xteVWg1H1UC4(Wa|%RuKVJ5z&vLJB@78_+MOh z@=<*HW!mp6TXI)^y3MYqay4D>*^P5M{`r^m@d{4e zlH}`(FCnfc6S5bmAMdq@UOHo4yzT=>pZ3)XM)8+_?6((8t}IuvJNrprR8Vif=-twH z*OEh@{+d{`__S5F)Bo>hnid*Yty|@>m&M3Z&((?f`&GqvM}qGBTk&D@lJqnMuUP$^ z=YzIY7;~D>bid+$Lr;BO1;=?ECuNZdE-I&I78^vYD_yg?vgUZ_l>frA7xsL-HRZgz t)AG*}lXkIxG5vmBXQM$}p!Xjx1BUtw4cyn-+y8+|WKUN=mvv4FO#mcRL45!K literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..9699a3abcf97632a829468160c0148f0c3e50764 GIT binary patch literal 1646 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 GLK6U0Y-}a~ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..1422d93606a67c73559a9622c0f90681f80a753e GIT binary patch literal 1360 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA(bu}|HcXlyw zGH@|7G;}q#v@mdTG&DDMc6D^IaI-Xq>GjMjE=kNwPKDW2n7*cWT&h))rhXW+qf_a>27 zKr!cARh4puyK`iW(yn@+P(AYefH;TYu^TFD-*WSNR!!RCzrT3jmR^mnEvu4mZ!o#ceLI7(HbZ|yHWc`OZtV!jI}PU%NDAJ&N^?Ec;(14mleF+mFmyBSRE5K zW}Z6x=*t0P-_6zu3%PeR9#s;5VHxDLOu1d|#|E8AVvpI1{LVVP`aJiruFl`DhjcWX z&vwg{3GVReHErE>MC~EZyM(Rx^HsEGC!E+fU&dk6x%MfqF1`BqeM8u`EB_UFEn3+l z)@SjFa|LghoTa3t9r9uEk_((R2i>lAZ_WrY4-uLcV0QciM|5fFT&IOb^FsWzHOmy7 ztfS6$n`*C0Z0U3ha{cyzH}3VcUmKG`)R!3bZTT}TL^IC&WT}`~MSpCh^Y7+2ZdK>5 z6bpQERnfgXEndDd>9$gdMUUC)|C`oTT{8J~(prZ1^-n{+|Ht<|^=@EfP;UrkKIY7> Q4JzY2UHx3vIVCg!073uW82|tP literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_gsm_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..0ef879b64ed26c0e67b93f3e5eba86533c261c9b GIT binary patch literal 1360 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCBkFtv0sH8XT| zGH`J;G;}p~v@kGsv$QmJvNSPvb}_Jk>GjMjE=kNwPKDW%3Lsl_SesR`7CHsz2*ubxhcp zdFt$=F9(c$H(Mtxi5bYZ>0xKMnQ%AK&-XyMd8Gy&;(Sm@~UJ PsEqS;^>bP0l+XkK^gG@- literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc663d775bec91073358fcc467ec3d7edbb1b3f GIT binary patch literal 1678 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 Mp00i_>zopr0ONO_-T(jq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9943613ab35be6659e45b42a863ad3e1582a8f3a GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCc+-KD0__pC>mb#(LQ|{Jlf+}9mw;Omj`p-F1lH_^GQ^q-DX9HjIMhp3- zu;;enhI`AzW^x;JK4vwZaZg*h$nmO3+i{yi3(EA|bMy|_n3T^v{4HLz@wVTxoyVkg zzW9lCX5W5hxvGaRPIzsZ&|%GehWFlcC>7Ne_dONpmf`vC@Ll49sIbi8#Fq5Cd8>RD z|G)3deCg@LD@Xku+qlB3;%|4n^b+}bX2*u4)4MA3O3TyNlq~<4(GfUv7S=wSUcZK zDQ}ul!M*7FQF~{`pRii}C_!07b4wr@Bcsh*Umm^Vpg{nf6Ob1nW9R-D=K zhv2Tror--n`g`|sBb-VWI~DfcExU;xAXtav*zYG&a+Ki@KM{GQm2&oQ?mjM zyV+*B?KnB7DL$m5d`|A-#W(sS1R0bmhLnB=SLtR755CbzS14}Do zV_gFaD+2?~oR5Mi8glbfGSez?YltxPT+6_~AOo@?I6tkVJh3R1!7(L2DOJHOvnaJZ czbLy{!8zEpaO-0;1_lNOPgg&ebxsLQ0AdqM5dZ)H literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..8ff5ac893d90fc7c966ca2de3e1b2129854b2bd9 GIT binary patch literal 1505 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3c62s$axyY@ zGH`Y^G;}p~GGjMjE=kNwPKDWrMDsFQz~dxm=E4j&lkxDnrg>u0FuJL5Zo@m*;9!n>DjtgSvxg@~b&QQBB$fQ?DI+ zx}w-EVpE=}qwp#wn9eri7l__>e=YJ>!jp<=qLKvP|Izj+qqS z5iMru=G;1C0kcu0&K}12q#&0?XLe56%$ee>;PTp7Wg5!(2HXM4Q(&eF_2IR(XA8MiJ-Csa>M zUn!^J6|{7Ps`j0{#JP&M0;+=VGg&*@1j{;mJuX&R<22Rr&Rq9&?Z>CGfByN);qmt1 zede?YvrV0Rwy12E>-6NDA04x^FzkU?uFna{jb*!QZ@&M2p7(G^>qXXi=KMj9(~2T( zo_y5e?$GyMetBDJ``S&i8A*6Y%+G{O+~2cw$N3xUj-Pct zQ9W^Wnm3bkvTNR5dGDn`?h0RcRF2JS%-He${fYnoH(GAiXJlhoExiAn_RS^xL4~fT LtDnm{r-UW|!tWyt literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..655edc3a4c592825dbe5de091e4898098b27e861 GIT binary patch literal 1723 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86=wj;T=3?aP zWZ-OOXy|He;cRZ?Y~o~MX5#4V;$mV3)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhU_9vf&druB?;-nTc1f~^oWV2`@GqC zBVy(DwP9J0rcP&0PX2Q`Hhtx7kLK1b0Xs#uHQayk=4Z`2#+&kb-yeDJd$Y;<&A$BS zXU~}Let0rPD5%h-c~`;Wixy!?vy%Fvm?y0gJk9jJafjEDX^qG%7hr$QND#c`_u$x?s0UkBtq-|H{6n(LeM>Ca`Isb0Cu?Y+uu zZ`gjGct!JpXu-wlZo-rA9$%&=Yi#gR_u=+F-_r;CI@TS&_Q~=8TgLF(OcTS6xrv+D z5~^2q7MDJ>*FD+ikaDW#-0KRaoF6wG^KZr4R&r!;JjwFeckZ`K%G9?fW{cW|HT&LN z{BQT;@2eTR1f9DyCvV^7F@fXoy7GvWy7#xY<#pao<$ZCwgKP5avOw=yTV5tye)f1- zcV!H_-0zt|{Wac4JrDJ*Wxn@Jb&=x3gF8-j{jK{Sr#5+~egD7Dv)*lAI_-dk*3)X) z=7SHe6maP|MA9<^0N=yro7CETvMSE{-Ye7V)~G3;drEk#MQ~e7#AX%gAhpCgfn#%)=%sAF*}pMDM~JJy zrPakTZli(cVa2=hUh4PG@7@`?Fu+ts%6o6v@ghx6D|P2Kg_`A86+WH$b%rTI@4XW9wZ6sPyzF0H iKmTvv-*C*Ik&R)3+>L!EI_;Z5)rqI8pUXO@geCxR2%Xpf literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..e151a7e2f7568039f0dd52ed1f7d241057c3e027 GIT binary patch literal 1738 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 N=IQF^vd$@?2>`e-(y0Id literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..51761046ed1cb470c537868a377313d71874b789 GIT binary patch literal 1838 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86VQ6XUV(en+ zWZ-OJXy|I}oyGc&~ss@DRqUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh#zeNI8jUS(&ayci&6X*KdTr~DJ&o{@ zk-0Tv$MhL$dOwO+H+vdh+_+IfJo)OBvw@KbE1P-rQeP!L@_POG*!M4|pEF+n-T3U$ zbQ{e(d+*eq-+TY}p7Z6r@^W%*O%{vlVs}KXJvU{B&<2-SmLNyvY0P#E9~A_xd2^V% z9izIIH*g!!9}Zq?MdUL)7jVDCd_&jl%wEm+Hm3vLuqa8-batBwl}&T-|DC?`>*fS zOV;bxb9AN}giTOvo}Mso^R=Rax!G$PCeEyKojBveOpj364)(7rw%^&T);oW5MAwv! zyzKw-XWwm|YdA-2qmYqEnyN{khTQXp?{Ap}cJQI^Ft3`hi&SIp-Mc zMYto?giIHlx_7STkc-#j^HZj}_O0eT6yVtNDk-QxcG4yh{wS$kA;GyT)z0{s3SR$x zIi;@NEP1Zb?&ES7Zcn#NlI_*33RTjv{{F3_c=9pb2P>y**<7mJ;4#DWnvm2Q4-*xe z8Eum}-@JW$_k7xB{x?7Dw-@QZFa8oZ>3!Lk-+!%}4?a-rsI1Gijti8X9BTF5)oP7@ z#I>}x{CDr(+1XoId^jqgA!e?!baATT`L9l1+n+u4=SsG*_FrnWNrL~UFFU**H!6OUcGbSd)6 z<>wVPb(iw#Kb*we?+_{g(Q`VGy$upywXRf;_89p~&zW=sZ-UeH>9Y-V2aOW*i z-8&=jWYkRl#@a<@ZBr(BE!}l8rKpZey0hMF*0Miy^cLFZJN57L+ITWrZ6XCiG6!H|NZZ`pMOlBk&WS9D|>}C>&qBW4d&_U=d#Wz Gp$Pzz^~Tiz literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..1c929281ea0ea13bd1e79ce86ac44c624cf934a3 GIT binary patch literal 1515 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3G;lR{GO{#x zGH`Y^G;}p~GBGjMjE=kNwPKDWB&I*;0-mPPJ~a#DrX>#S1>FzgXltTVbKAfNoD&uGiv4{90S; zCvho2Y=jR;V$FGi>-%c-&^NDn_K>Vw=rAP+G&rr zrf$BuZYTe*s`&F!2JderwIymeKFyC1v0zYAGPrPP!dinnavykN7*|OIvxi(Ti0RvG za#P>wr8Zf#b8@?KhRmXkxdr!X#I|tCFn-K? zW?`JhkSP|D-pF=j$%X>qeJ2)qxODD3GLtRHj$_f+T!!Ngi>B{%bl-MqQL;0~*Ed@K z#Xin4@q0QUaiZ1v?_L2M3Xc5;a@Q}~m)hg4`M~YSp;Ep5<^`)S%?adZz36tiZ63qs zzjwS#1p}uTxvEA!EBgGJ=VIGBrsW6rh<^{U?zr?rhEqE@O`!bKi=3ByaeI$HXIIE# z{U;OgrD*f5md;5}E-g+AI#N2<`1;ABm_^U{=a^-iNVRXveXlOmDQLgyz}M5wyA-w; z?W{cUSTs+;_U7pjt^X$5|J=(l)7LpI^>Ou{Q1{{;&-Kg?&%B(n@IlSd2bUK$mSnFl zto^QRRhQPjRo_r?e*Cjl$q&`$OE;g^SKr$rnx|ALr*9nIv3@tlt)Crzv9}%u`u=n+ zp0}~*^z`NW5+7NkUsT@ UqSu-_0Z{Sl>FVdQ&MBb@04Y``G5`Po literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..7ebf56c85f688ea1df70289b1e7d2d528e2b9272 GIT binary patch literal 1481 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3FfnvAFgG@I zGH@|9G;}p~a&&cdGjOwTu{1HWurxD->GjMjE=kNwPKDW&@{+&EIOLyn*%br-uj<-6_mm5D9|ouF7A0WKQOS~ zsosf;_4_{->#{A8yQg$HU;iOz(U|S)bxEzYLp;u}s%Y|;m(}NYuFSc;P2}5(5UqXB zr+F=%Iqz!L*1D%Ym!}9_x-YT%g5{P+DoMO-+ouVhQ{b*@5_vvHD0qQti`MQf&&=FA zB`+v3UtRdsv)K0FuDk0x1KO-^=4{h=!pjmgE7*5Mo8{q-#=ZsK8HdlCcCm-dTzKsB zc^+2*{R!tjZ(ESW;_&4!-$LyS;}cus`XuFkuDX2jVSx04C%4!`7Chb%!+e415Mv4N zTc2Y7qlecr={olL?K^Nf-y>j3vVf^e`wH*NY8A|H&lTyLAJ5qNbw?RjaTb@++p8CJ zw}>CJoocw9XWjH!7i5-jmS%9R%(b||{i8-Q;CILO31ZLsrxvVKeAU#e`A+o2-Mant ziILaT`R*TT`^Ct{zUqybDbwufOODLHe_WrXMtIUr=U;L^Ywler{hMtdVbkNbI3?tC zbWB%n-or)AyMpr@UNB5hxYV)hvcn%f-^+f+Gtb0oP4zmrI8XFoqul!!Nqb-3VU>Nr zmd~no&RpW&%A@nxFLbV2)t}i@xo;^;)l#N}xv|DAd;8|Bp1kX=T-G@yGywpkpd0`I literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..d7819349b5ad2af11cb690148741dfae0ca75c76 GIT binary patch literal 1671 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9n=wfPSU}WL! zWZ>**Xy|I}=w|HV?B-%%VQlH@VrFCp)9aa6T#}fVoC>oyGc&~ss@DmxUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11YhA+oPFRH^eEC`-fR&_00z|`>iL;wm5nE z%^AMadw%Y#yl=j{@nFJ+MM)P^Y+nYWNP^t>L>9>ih0=!_p|3-Rw5Ox(?RAUz&cOZgeCsh|yVV zX^3CXuLCno*Zr~7KVmjBbd9gYzH+&aSVlWz{t&g@6Sn^P_W((U;Ok#k zJ*eXho#y*+hUF>N2et*V#~h323$JGk$cyn^{R}Ym}KaGXO+dI-fuVLgEi`S zO2aiY7EiX1y`O6$wf@)NeN$Yy^$thE>n+*2f>mN4F=hj!ecP-c5q{8vnM@1-H zyz<%1sHqO?j@|iiQx-}O}QNR(&~a442s nex+fJ{;dD@e>}D7StS_W?l_@0i`PCKR5f_I`njxgN@xNA%k_Dp literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..71aa042a743c4a3aa33e65e9d0de5c9157e9ddde GIT binary patch literal 1683 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nV(MsW=4fK# zWZ>**Xy|HeVc}}*=;~tTXl!6oyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11YhOybM@JkziaQ$&M#x$8kOsDbkWIOg-R18G&Uw4cu=Rl(S^+C_)QhB+;? z=&0cX%>}DPk{uP8bylj#F+N}{a5N3w!y6Oi`!2X)=`Fi5$%x?G=Ca2x?H+qeCOu!# z;5ao%tGvJJknQTon>Y23Jev{P55j7IEClIfH4@X@!Vaj{m+3Sls{ItR|NE zb4_6UpCvhqTwdpWI}jy(plgkA$)?8YSt>@{ub0F;sG3--_Dmx7S^f1Td!#-@YU|H< zAF0LdwEOX%vKw!v+$eq4aOqy9%Fi#ZNe^^y3HGGEoaV>=dI!gymrIvqF@<**H!gZ~ z^sYVA#g$rOT&>a@Bi^KG|BN>m+q@%Vx4d-d#)v&Zdeid*@3k+9II}(f=DL){cfTAL z=`t_9YsR{C50zpdcGdEW+C}`Vd`9M4(oX3U)nrBX8m)sfAFu1 z>mRPXzTe$RdDGrQ%G-1c9GibnJ6yQF?04Ah(#Q#1wbnA#|Fge%co;1|rDwQnit>#W zzG^!(zb$>4$F^>JfVzf>=cK#cS3Z2dkn-;M50@?cNw@zwPUd_U8ZY)qa>{nXn(}~yY(IVxr*za{jQyHSxR8T_b%mK z?}|3huAgH$yOC*Dv&B-jl-i4b{y+2&`l)?@;o|li(~R@Eib2(cr>mdKI;Vst02FS6 Ar~m)} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..3091f56d6bd5501ed8bd6e2f2796758e07eac61f GIT binary patch literal 1803 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86Xl7vM=w@Q! zWZ>**Xy|I}XklRBY-r-@=;&tRXyRrL)9aa6T#}fVoC>oyGc&~ss@EK^UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11YhQ$XwC?}-vd*xU2q$BwcawV^wysx%d zvzuA|=G~h<&t`vrR{h?0&)c%wkB==oA!Q-f-8=P0%W0lcsTsx68(klm8a!4@+I&E4 z!y~ouIc#xEiRNz&o$;pfDn&zKi@I3fg zHNm|wA+?x6c@c9sgJ=hjW!frcP4`$scJ8GNZp)Z5UY113C+*2TFt=H10khfu_ixpIeCd+VzwOc2w_^{x&Lr{Y zJgJYK68q)yEI+~S15R;4hki9YGUVU0$mT;r+INNY3EJPZ<<2Txo57S<1#V9L4C({^b?wyG5C!MsBWQ9jR) zi#)0KZ}3)LzrgUMN;+@$W6xB}re<6J(>5D7W^Jv~7U8=4PW`|1u_Vt~CD%G{ zgsr~1&RnY3cT#!3NOxhO_GuOA@3#AWoIc+BWZ~U(>26T>>eumhPvo~n>1uW_>p2{? zb@KCb=1tz`qs}hda>jjQM0f5VmB`Z~T%zA4*9q|z{61yyoo(;rH_caOx;?mZ+rE8S zja_H=@(344;S*brOrT#@_4~+)r96%cu4x|hy|`Is=j^uExnU-gE*$C1Q4bQn|M&A# zdE;V7_9JB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..60344ddb025fa3267cc2050d965c26d7265b3264 GIT binary patch literal 1796 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86Vs30=;OJ)J zWZ>**Xy|I}WZ~py>FDBOZsca-?CNR()9aa6T#}fVoC>oyGc&~ss@E8=UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziOqg97biCpCpTv!T>ggWO(7@D^z9UE^g)RODY3wWf?V7{OmMmerExn2MCM7&OR-fd zQnI(R&oI8kz`$(c>EaktaqCT_eb1!;iRb={UGy?sIaLIF&pSF<%~0wtG)y(sD>E!C zc#!mn&rn5gMM7ludjFpHB?q{`7ruaj%%YPG{@)>i=ZD z6@G8;{onh(|E^mvKKK0di3Vnk*AL8E#_FXbw#gxuX~|(X9sVCY9&MdBG7rclSo^H3 z;QAn_(4N_UlyP@McA`+f#skv_YMUpA%f9|v)&4>8R$e)S_1duPJ&pDk*{(=_*Jr5X zvRku;QNbnTKyCwzMzzf5jSW-Qugq|0kz#Oq#<0L-w(r%$73GZnec6p-vH$wsEDztY zziDGg$ZE%yV>6nB+}6HMn)7-^!$*g`O1?e6{5&%Cjx=9c!5^_XZ0mi;B}$z)xW)hF z^WSZqZ1%M~LQ+Y@RaIuarrdMJ`4`yb{LA^D`1rUkf8?n2g;jam&d(A1@2i`-D^8x6 zdNbk6b%U)+-SZN+Y;;aiXL!#TULj+0+u|diSY)@r%q!74JIWS?D(vu)Sktlc%M70X z-`NTdPrjcNsWl@-w)5{+M}x@TSGSjYyqxk$@K9{UwpSln{>l{GXI^gH5O2sXlMkd{#~K!2Du5ht^1|c*=6%b zOg59OmG$wxeAMP0!@S&}R#vxFo>%TAibh1;RSLPnV=gSg*Un$O^NzCmzw_QlURh+` z?Z0Iv)%(s@ZSrxA_kwzYi(gIiQ;}X5{!gOy(eAg~`kFS~`E&Bq+Jgxnip*vgMsA4^ zxTrPNE1bLa(C(Kdr_TQ5*p@M|H~x4=q?6*o(%Dv=-B(u4zIN|G`YS$<*mKW6#|wA5 z%z6HZ(=0GRqG)Zv68;s%S8uJ2(3!`)@W(VCHUCfNxVj^zPi*44rYrn=t^e!0t^3qg zuFWy~tvuB$xA2*Xtx}t2su9=LF1GEB-+6q@S=UZ&a|(9e)a`Nf(#w)~k)xaKI^OXb literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..b6689b5904b81b5e8cb876deb5fc4d27858a9f06 GIT binary patch literal 1489 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..e049773ee3e76432ff7a6048c539b936ce857bae GIT binary patch literal 1438 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..3c33f6d592c6a791803b52fc8c7365b31af3cc94 GIT binary patch literal 1693 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86TGFXX<_VSU}o+F)9aa6T#}fVoC>oyGc&~ssuyG{ZoO8{MX8A; z`9&f5`8lu@5Rj2yl3$#WU!dR|Y^IQ>DwvT=z|gmQeuG#1-ZC^nBa5`O5=74h|H6kmtw0_q-1YbRx;%v z0|V1pPZ!6Kid%1@PW#<<5b0gH+wV8)(s%};)r+=q3av>ztgN%(?V{NpOYfG3r?aoV z-g=r-}XOdc^oHapwe?ls7v)(jMDm#e|kDrInQV^ zN^8(>ynUef!Jfvxc#-|zr}`C0`c)nOv9R{Rva}k(pEA#%b>@0*k!`NF4g6xeOx=q8 zUb5X9_0I2X74a?X51b#c8*O8sb0+e@_5-XBLIu5Rm5zn-OMI{Jy>%#Yx5RIjDvLT{ z!}w!@a{dLS7DZ={{Y%cYYZZ8B{2^SBX_r)>*hXEMElVRGh35RfV)0G#*ops(+!C29 z#CP<3OpBG;&uqi8j={gMZe;+c1#eCNTWOKv?n3>!28_ni_nD+`#09E!GAqR~Kj)v? zVDj#-+B!|4?JsOL#)L23Xqv!&Jh=O~Zs4UO4uboac|=|^7C6+cVO?`Xc} z{}r0;LvlJNg&a_wak3IWKbkaH@vI^iPWa zkIb3QH=QFw^{?q!)2$sx0uM{vlAn|wtr2uU;h5_5CAR9EH&hq>dU0=`l4Y-I%%+#m zkJ-cr8vlCnKvSf2eusr`)+w)hd}oag&l0)hDX`#m*~QLK-@7*s-LNR*>v8VZR8oz7 z#<*|dOVKYe_Zv3{-RF0WPh_g%oK}AAY5(L$Qd0x^yXs~pB(iQ{>hl%SlwEK4()rO|J18=vYbaxFKFMK4c-wOxgX_NxBEG?Z;-wyUp_ZjQu&68k&>s%nFSWx z__pxrlv$_AW|S+5xiMW6aeY10QRw8N338R})Ba}dJN+iOcHSSgxxaf}Cq3W6#<)Mu z>Cp<~=eE8(S9{tV-}rxFRzzF`(yRAG3!`njxgN@xNA=Mr>h literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc774bef3e9a6705967ab2936f85e03e86e3632 GIT binary patch literal 1769 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..b3a322cab7edd194eedf605a47b69563987838e9 GIT binary patch literal 1730 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?g3|)>SSzS=IR8~>zP+vl9-pA3bQv8WG`5+i5p(MR?bDKi6!|( zA^G_^uoMuGkzbNuoRMFk;2dnGpb?&#my%yztO<%9aM)Y9q!wkCrKY$Q<>xAZ!`CVk zoBig5{0-5YLQa_J+bP)SgAxZ)Vu1+-xwwIt;B*a2<8}&&%#)gzVyjf7WN+s`@%2*% z2BuG*E{-7;x86khW(Yfq$KGWn|5!G7L%`elV&_~ zX8yg|@Auw3^6T$E4-wsis~^YciE9}uCiPh{pK(3Mu*Tw%>-!+*`)z8>~YLR zQ@%yW++dovSVhk8fo8$c58iQ=Yra>{ zui0F6xcQHIaNc(AI)G)KTgs)-FJxV$ts1C1zmhcn=4<) zR-W0P%+1kxK(DngNgzna@!dk-w2qIr_(DHwd=QFwR4BLl!YiZIK|wML*33+3)onWb zQK}>~=hgo71F8OBrv-YpcCMT3&gY?cXA@iQ7FA!lT(ep$M|+mM$_FOAHKH;eTW<1f zbrG50@@$@a(6dL3{yai24@C1GKEia-;r5=q_Z1s&i#)p%_snC~?^UVSuC&f)-_2&z zapm-!w9S>rGygu%mfI{Ky7znAyol9TcP(7?>TZeE+uu#C&o(~$b18H})t%R0cYK+@ z!DCTcbyo1>gSL0)l{{NH`MLgzm964?^QPZE#ASBGsE(f_C_VJ!mEZf_k3F(cb~53cU-s`mzHIUw%TnLa ziEmXWL@o_TxpDOQB*#*vS6L3mL5KRE^Zm2lj1=Ik?YCyu@mw?*)^On`WQ0*NwZ= q#H6LHD6!rA;Q#+W9;f_gkzi>1bw^?m!{bs=t>WqG=d#Wzp$PzNmZF6K literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..5ac30c8e2572d9395f65bf573c265d9d4d3d7a0d GIT binary patch literal 1719 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 KT-G@yGywn~&hnA~ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_gsm_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_gsm_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..7f3f307c944269cc2ad4b5fb4df074ab290477b7 GIT binary patch literal 1411 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3akDTpHZ(DF zGH`J=G;}p~bTV>sv~+Z`uy8SPc5^m?>GjMjE=kNwPKDW6gF# z%)r37+0(@_q~cc6pa1{unYTJdL`YoB(wB4(N|}D|=2MBJ)nRLs5|Sk38rVCu8)rzX z87#47>(SLy2<1BRy>SO`M`S{gj`J1gISyL9Qr?elT-m^5$iLCiHiYrWr5{%weZ6sY zb$Dz;h{hEIi5tvER&U+9HT~jEXHJJ0<|CVqyhuFwSaU*pn$ynJjX!h*v>k0knieX)-0#)yd`dvz>qR5_MdEw~fuz`tbi$yTRA^Zk z-XqDpQDI80SR~VnlLk`91XfI8n;Fl4L~6>6qedQFtZoXTEJt`9);RMTcYc#F;5_G| z?c(4dDbf60W5ayG7n<=3cUg}7y27Iql*AJv)nxOK>8MDfxPDwn{r`V^eF6g~_KU4- z$mnNGPBS%mCZX~1MzH1NPwQRV3uHy;zy(N}!F`MXPn#%Jw*kJsgTijGxc9y%41;?yrV zr!SOq{O-fLFfv+DXjuJ(-v O6^ov(elF{r5}E*v@94Y$ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..40096e83ab4ea6055a4bb17462818b685dc9baea GIT binary patch literal 1678 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86Zt7xa>||tS zWZ`ONXy|IoyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*)-`DVgwbO-_sZ4pIRVIfDYkyl>w}X58c5cyyH)e@& zs3a`?;&SA)a|p+C{%QINnKwP2Ny#o*eX*kE?Z$NT(=snlJg%%TRZo9+XQS|v%v}!x zWgVTF$_iwKCtud^*?!w}+xOpp_g{BCxLGOb)QooCj;UWQnf5>a*U*{e6xFDuCnzsa z-ub@MT&LvEil2M^_c&`5ToOLW|5o_D)UE3Wf4{h`QYLzFUX;!2SDy5fyj#JOWi9Y6H6ubE?+!@p7gFvr{DmVZO{ z9Q&#p=Dy%q&XxUvzlu{1$qLo)5->37*wk0_Y=P`yq5Oq^4nMe2-7)dM%h|)Sk0KxW z9+{oH^e@jx(Zb0;`2H^En%kg#Bwa(^`Hbwr%|3@z4&D9HvZM9Wvb4z+Cy(5A`ae@> z!tuTFXH4}9nVzSf{yOba*=!4k>eP=*G`*%u%s9F}b=tHZotBQGOMMXrWlZh7Q+_eN zQaAmxkSln~CZ@a%cekj|$(TGNBk4hz@1xG3DMn0sn$iyJOvj`YlNas~oR)a(YS-jH zu?6;}Ej|atR_99}+fr=SXO{G$!tL3%XF&&+98h&%vu72DMarUM1@9v^Tb@;QDtj^g z*q(^V#>Wai7`fa{S6a7WPSL{5_G>#2-%`1hI^jTRbwSeU3FhAfq@SN_bbZ0;`sB%J zn}gCbCoZn6Rg4RKwJ+<{98QU;5%)@$+dH-zS}oMuT{rW=L)I@$RgC}L8GYOT8Qs@7 zRdam8Bj=;jh3_@a3ZC%fhGj7mThHM+zZMl9+@qh!f85=Y^ODr0|(P$WIMmCEPt>i{w#lM>8|sW=TH3|VX$t4e}>=(>);y}R)^}YYtPH_ o`p)^Menr$W@i+(TKY|Gin>@~ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..5a04863315b03977bc4f7bc60928a2acf0453c5e GIT binary patch literal 1750 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86Ze(a+Y-nm~ zWZ`ONXy|IY-s6XY~ki)VPN74)9aa6T#}fVoC>oyGc&~ss@DXsUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*0AEZ@Dkde`#p#+$3Z z9X9wfXXfn?zt3SGtQEfWD;xH@Ip4hhvgF@iF_ULmLQZWKtDDxGNEiRn_B+>Y)hQ?D zjxgn#^uO_(s?Kuu9`n9Wv=%X$^2Ot^qjbymmYXyF%~mL}On(@ovPL+K!=K~4F~dN*6QYz_z#$)DEp&$uPLh4qm1kK*5qJ#Q36cB*c9?)5$A*sAte%r9PM(Nvsh@LK-R79ky4zaG6?c9g4N1P-w_s1k&U-?? z@`QK2@K?&0J-tm&FaEC3Q5Cjrk!owzR%qq^G+WJlJR(sb*RgL!o9}CWJ zaq(PzKHe3_i8FOzzr zvQ<9({2qsd{)ti!xy+tLRu|hjn?(%uCtT@a6tUqBGMDHqUbF1Wr?8A^lGmzgHi|F82^)rp$vu6-J3Q8O<^(Pf z(QQ&nn||^1rrs@lLTp@0OHQ;c;;D{wy`bdvwzbLOM8@=bm;VjjD|&)TifVQ~x6v&L zIzIE`J?rN>@1D)!-~V~e^BC8;%DaCBa`-HI{q$dQrqqh*rw^^Vc#3=0>nEF5pOi5; zCi(B$(Y1+E{mbX1iN&&SZ7XNq} zq47@e!4#nfmg*a)`iafRW?Xiq=cm%0<^0i==?-}kXZgOpx?lHADtzONug^Hn-enBC zGRN=cw%fnt*8N(?a3}Uz;g?sc-(Oz(!^uD+}jse&&;y_VtJ4Gh!dOl!c#lk z3KxZ3W{%yUmU8hx`p!MQM-P-A<0zjieQa40ckO~B!u=Y;KiI#eZLa!#j$4a?fkCvy zHKN41C^fMpGe1uuBr`Xa!BF4OQs2;sBUOGS0|SF9NI^k%6I+u7RPh zp=F4HnU#U1m9ep|frXWUfo9G}K@<(S`6-!cmAExT7<#T{U|^5|*$|wcR#Ki=l*-_k mlAn~S;FejGTAp8&U98|7Y+AVWu^9sc1B0ilpUXO@geCwBU3-xL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..12a75c698b1e1777b677807b2bd50a60d8f57d12 GIT binary patch literal 1535 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3b~UjyGqW^s zGH`Y^G;}q#a56M@adUPuHZn3aGIKJ9>GjMjE=kNwPKDW&+A>QkuiDCcu61gp7r{to9q`8~kNdjAji?*uuTUWR+{cLdR|e z@trT&eICefSi3vMOFQ?qTZ`DMbLUq7eq?F2=p~DrIA8vr@B3z!@A)q0zVhLgi4=zK~82mg{v+V z?U$)M#c@_>p~wa!jqTkLJ7dB&*f7j~qQxk=|NeiKCn_5aG@c}FtbJnQqqc>44&&;> zZ!U)WFo!6Gs5VKRSo8RS>Y7ZYqaG<5)1UrmC>7?|_&JyPc|-Y>yq(?YVOO&yRnf#Otx7)obIlGl9EjnmSK9{O|@}`{C_z>&rJr==9b4@8s8P zeby1(7s^&wD>r*>hu(UtN1vBEE!-f=)%vc+?*1i}{cGfs_NcD>I%CF?!q}y!zHYYI znvv*cW3rE@$~-lUZ@KAg=S>^P|?(B{YwVa^jCZLd^9Lu=Pxe?9$d+U2~k z>eE(*6^c`%7oXBp3Vc%YYs0D-hqkQ=1{E*LcIzwfEt_Z<*6&Bb&$Ni*wiJ~s=~ZiN!&9ly^t re9h*%(AT!H(C62Gd$ZJUiU$}PH=R>#%DU75Dv~{2{an^LB{Ts5hPE^{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..078f837a4a146c7ad4ece3e526beb6a84e91cf96 GIT binary patch literal 1765 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86WNz+aVr=N> zWZ-OOXy|He;bvgrYUyn3W@zAQ;$i{U>zP+vl9-pA3bQveGsOz3*AlN@E9aur#FG4? zko^1{SPBTp$S=t+&d4uNa1J(8&`yLTehg;sgh!E$wD4%#5BL6EAm7o_}6f;Z0EON7c#O-<;d@{`SqE z&t}Ia8qJKTkTKi*&tm@hcrAm8n;mi+D=V4Bn5wy-J>tA!bt8L&?>xDqs}t5Acx3Z* zhUgoKH*Ee-6dP=rcORA3wqx3TTKew$=BX8{lfNI3`xLgo)6VwjpGRyrd{Z2>{U>!@ zSus6gb6W4g{Y*LBp+|qs`L}q#T*UIrH``wFzH+d;QoH>&@Auz-`6V_!{k<`2ZCHzD zm;LIG6?+zyD?Pr>vi~^SqfPv5&HaZTUdZ%V%-L<*=$ZCSbHj_;SKC>FBainp++~d~ zjr=R#>2mJX*Ig+di#fTimx!%y$egHkaHCAA-^`E7ZUp5z17yezEA< z)yW) zv!1&?JHGANZUKYsw_{JGZFW5z|Lj8L6627xi=ndfx!$e+_flz&-}8Aor`z2&y=u*0 zIYDL19jl|3rx>;dn5QX*+^E=jLAS9;@TtD_t+(Ie)?c^YaQkiB z|L->MMJER@^6J~0UZ!m3s~ zZOuyA!+Uo7ubi;{MRiMmdZ_+&h70QZ@7L!}&F%LPWLz0qsbv+lq%QEyi|I*!LYDj# zS^e(v%P*WZO&deM7n`*`)td5QZdkKNN?E$tfs{`Y5&`>q+(HdrcR%~jU$54i&&0!U X&*mNDfvg9sKoyUttDnm{r-UW|d!nL{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..f4a0cc24f03574eca06ca2dc699bb6767ba773cc GIT binary patch literal 1783 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nX6fW)?&jp` zWZ-OSXy|HeY2fJM>}Kw4V&>#xWNzvN)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh%^{>%aDQb@=)e`}%)1d{W6%z8}|%-#3SC$&>|mHt*WCYxTxVm*8^#6?tN! ze~*59dU|@def_^DOT65LU);FsaEjG;jqr;XTq^q%CPcNm%AQ!f&SC3&&D{TcMMEwB z{CySbxT?gYk?*xbQI5L6;iOeE8sc3`(nV)k39wZjlhAS({Gp<-_tDBZD*6#F1|_G0?R6_LE6_THoymv-o5nc)q=E@UBy$lqC5_Kx+bTww&htM+mZ&w)gd+i{#0JI?w@n*e@_pO$ybRj z0*>#5N*-x_(qz?-+vD-;!$arS@nUAHX8WGmvB+><1nbGUj>7L$Cah63R85xn@bTEE zoB#j)UF^wvzD3ou(aS1emq61q@c_?ozpFDQT{HiyptAqj`}_M%vVT4>k%+o@=##I; zwmqyN%vm!HoR}9)_VCZF5tw5AXZF;|GaK6)SXVA!IC`pjfwJ{Rk?$Xt2~Sz;61F(Z zEBuM@{wpuz-`Kp_l9z3ycs2Oxg|Ie-X@9=Ttu5hEJsfN^|EEg+zXu`@7H*s`a91pY zwVMCc!O#m4Ax>GnZyZ-0Ie1n*V7HJM$Az*a4LN_q+NXkh|MW&jbnwYC_w=c)QDGJp zTd;HK?h6vT*(WzY+g-9G?1c4-TQe^_sT7Nj`+ZKe^*npUO5S>iacHYT-G@yGywn$XR53K literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..20581f703207bbd867ff73355c914a2381618112 GIT binary patch literal 1897 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nXlQI<;9_9v zWZ-OSXy|I}11kV>TKX@ZtUy`)9aa6T#}fVoC>oyGc&~ss@DXsUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhN9G|H&F|$O z(KEHFZ{p_KB^Xmak@elV(@_`N0veUyIH^CGnV06h?W@gCnd(aGbCqT1X3A7ONPPbI z=I-y`?c(=;pSv_@B}bab?l|Ulr-f}yn`fN~JiOp;8uK;&Ut(L%`W&!w6nAVtBhs~Y z!FtENX{QXOU)a1@F|(_k^^4_;+N0B}zHSWB+R7^L_pVT;q^PPY>e2)CG{?hS=h+>u zzhPUG!z0qj;?TSxFQ9&IvRfZRYKF$K1I~g0ERz|(x-P!xAp6*sskSIedQ0%r?*{Yd z1=g9i1sNJK%1zQ>x%*^mOIKlDAnO*>DcYM3%*bXD4GOf`;J$a!ywW)$Qi5GCHd>1Q z$)9+`RX50pYlgf{%0e%Vxl1ZiHs2KdQQ>U!p=47v!}KKqYgSg|NdFd@Agvh^-hnQk+yd?ioSygiK)27+ z!<{Mz^483g{o)rM|L66Ex9!`+FWP^X>wmt)xuh{KTJ)4rQ%6Hv$L*8aJqwyjdgCOO zc5?(vFeN+=-hFEK+vm>(rd)GpmXK1K9_*>7p5lM>pkDEf6uxz-(V+*r(yb4z4u9v9 zQ8(l8v%slKz85xBKAUIrC^qzFewOV2qObSXC@v2PQF$WcZNNK?Rm*@|IM}%H>({Tx zqsy14X^C|&&^B1t!NK)#<;-l+O_QS4yT5(6q-|syB$S|??!ODNH z`M24hwbz|~dY1sxYA27xrH6ME1nx^%%ANgc<-Tn5qIHeamj-#7KP!H6;7Z2RJ)Bxk z#cn7VZ@l2tVcH~h(o$dl{rt?0oK{_PHAP;Ca;j-+O{q3NEOY0~-%gd=uWh$qzWMuI z_~ylt`FUBXzeJe0g+1){tE{tP3vDQRVy##A@8+ea7bGv=&*e6~!NVA%pubDfY|;b1 zv>K1KPh1t|NvvTywd?f@&;J>(%Op2U{E@y`Gu%i=%tImkWU}N>*{63^4m)i-QPy|J zc;%Gr>b2`a7XCf7V4`)Db}+|=@YWrlJ6O)&IC<{;P0x^Le{FWh7x(Kq##OR3A3Ybk z)55u?RZCRZ*0^lW-R%cwe-2<|c4BtfKKa4_`adsK_OnVbJmoQeuI@9n7F79py85}S Ib4q9e046x$YXATM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..b03871f85e9de85d355424128c544b677d082b01 GIT binary patch literal 1881 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86YGC5#Y+~u^ zWZ-OSXy|I}oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhBc!NX4x;k>~xT97XQMa!y^ejl*z~L)1og-iKSJw3vL|5;t3p>$sfH6??`@ z6~WTq{U@lsz35Vvoi+Q!*<|m@P9857%2Wy3?l3F**zj%dx3zP9u8U5;do<_QB=Ko? zkH4w;Tvuz{@%;JoCh?=suN?SUQ@7xNO26eR#*7=;2a*=ZJ2uBLm9dwwm)!DRSRwtz zHsh4Hr5VdE)?X*Qk2zI0fHh2w>UhVI#qOO|HpaF`}VBlwMzL|KEr># z=6*Kkl@gIm{Fx$6oS&kO9kJ8-2O| zCd)2{4^}&>Hd5K<}7l{Dw=SZ)!BBd}#kz@h5lt?b4o~9%|aF41G<~r$i?-pK)2z z8c@w*D%^eaTU&d3I}7{K<04#Ny4WU%@Sdt|O622w_IqneS(zCV?~h;ui9JtE%%{$< zYdyflGU>d2@9I8F?gegY>gxM@dwY8=dS1TY)+&|L&5$=)T$o3CWdXafQIK}6V2AoM z9|zBe1v})pT93uv@c6U&;uUR4F>aL!_fID4{*`=s*XXcQ--)uxhc;(T$!1t#W@uP= z|E%oVBO*+1LMz|dEIMRdw#mD=Ols;+lk@M4XP(h(NeC*4tcjVbZG7bV8uo?h&(`NO tY}&&r8X(A~&^MRm|NqD56@RK8VE7y$_sBMXX9K9R^K|udS?83{1OR|w-z5M5 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..9583d93f29f250cde1ceee2ea4693cf445112533 GIT binary patch literal 1552 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3G&6Fxv~+WG zGH`Y^G;}p~axye^adLEVGPQ7WHaE9~>GjMjE=kNwPKDWTG0S zU~=$uaSW-rmGtNTe|zSwju8bAUR_KImCNX`)z*zI6j z!vE@EsKfag46=1%9_0?Ute;%eLv%fQg#>0_IN+@C{U}qRu7LKWMbkNTx5Xr=nq5#{ zU{uXNgpI7)UHn*7|$ zzUprC68DZSxujp`RAOEX~799G}FEvKA&>@8T6 z=AWARZJ%hUV4_`ZOOkQqh6*o%S^WtKVj5`;k6yfTs5~vMkdc# zCfag^FpDu?(%Zn)67j+3+Kva>{Ta#|3K*)}W*(br$vx}vd8f~3wK6_=JFjYyT+r%a z8B!+}qI>4^_ks$I&)WSSugmom9oejyzSunLTKtqz`=0iKjbVKu2O6GeE$|dS>Fnlt ze~0U?eTCfI$!D2;Cd3^0@><%=v&;6F#VvX1BnE{849B#tuI{k^xf4`Id%F6$taD0e F0sy~UE*Jm+ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..e9313ecf65b6e72295128c778ef79be451148d30 GIT binary patch literal 1513 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3aCCArG&MAJ zGH@|9G;}p~GH^9GjMjE=kNwPKDWCK_iPd0GF5=pYqy!9+g1)Ot&E4) z>;-xr$X{5yJ7$+m`bufTs1ECD{ke^^Egv1%kch3=d2Xh4c}>lEOXIHQgAN<2mRx?> zd0lPt$(`>)^`_S!4G9&^Idoql`hw_|OqMVyp1jD|EW zC8Eqx>I-bPnCGq4j97dzz;Nk;Dg%k0;zCy8$+MkQHQG(@vNF$gFu(9m<+_JjfM%0a zpS_?+b46Q9lz77a%;7n>?B3^mWqXS^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nXliC=Vrc5- zWZ>**Xy|He>F8$ZXyjz!oyGc&~ss@D~-UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh?X+CnpM-O~1B z(bXIo|68WsyS%I3NoULPDKny9va4*DxvjfJ=|*?BJzwaB?)IzuTDK<}3irw{etV%& zezUdpy3e=2Kl^^~_EWdT7iGny{a+uunNzm*NKTJr7W;$b-Ux{gtPj#UZ>T*GPMED4 zzK8t>hd|`5t4-~y09b~-6D7Sf8*LueD5tDy2IV9@#*|P6R(shvj{ZjXxep-jE z6YG}EQ-UN7UojtBlezZ)dV$*q*Cc(O_WA4nc@e9x-fDek{H!r2<@?(*>r1b{?pu6x zT6lk`)>P&fDh{zCM};0%$?cMuC-hwBg3RB#|Hl&y3NC7xbnp0Jv>-)M#i5*Q0;kLO z#)R~XfApn#T7kpRdC9Y?0}qtwy_+n!Q$v(YwA-=k(FkRa*W9TP5@+Tsc!)?yK-D^r+k7k4Do^ z%NELP_ldi%v+Tj5tD#3$rERXf@wTjAhVS^L_h*G4P0R8yo8$l2kn8C7jftYHsYRdE zyZp1Z-kSZez~kw{o7WQ8x+r~A5bB)sa+ja(=ZDAFq~_GHu1)1~(e2jcJMeUH5rmngJb zVaI}&Lhr+`)AD;{&%D~?kfkia^Y2sDUg;^8FT;;qSZd<5V4C4U-3JkzcYT{47r)r7 zVN$75Evz~F{PWcuO&hi{ZJfLJ!V#A5t*YEVd6)FO4>zv94pMbP0l+XkKTXvh^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..91460b22d30ac576fd3d94d11f5a853ac5d07343 GIT binary patch literal 1729 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW? z;OuB<=xS`?YHVz2ZeeEOWa{K>W@rS{>zP+vl9-pA3bQv8WG_Uo6JEVm&PAz-CHX}m z`T04p6cCV+Uy@&(kzb(T9Bihb5uTZsl3!k|35p(Y*ju@z7G;*DrnnX5=PH21*D4c> z{U&BEPHrYnZq7!y{0-5YLQa_J+bP)SgAxZ)Vu1+-xwwIt;B*a2<8}&&%#)gzVyjf7 zWN(+e`e6hE1Jg%O7srr_TSkoXFj=ooVB{f>X(79QMd`tZff|c#z}B=f)fPJEnHMb&#>X)AgH6 zK~FyKYlMuzcHZq=Qd8zXbNqaL!^auATUb)${Cu?nWVcF2r3*5}w{;y4S+JI?PU-4@ z*)MX{KR+#Hn{bOSmz}Tw+TYdT>r?FO|JCqGC0}{nAG@!{Qp7`&`J-)Y?A^$SCzl(h z2uTXWCq29S(%7#&T-{h9HmRMZ@rss0*}+GF;S1RB2jBWvt-Y$~ z$M37Fn?l}aFv&*tiAcX-xEVY*;E$Zt?$sK-tNfWRY0o<~bJoRG>~q`HD|b2AF5>B# z%O$|J$#+4Lo`dPJCsxn2*WWn9eyU8-L{iG3Yi)JJmBUF{rWc$GDm8xVO!1y}ysqfO z)cc{uev6;ZaF;UqvQd=Hz9gPh#Fs z(;nzBAzI6>{@Ip6Pox3ZAzg+vPtor)yftsbh@Bhhg%kh^yI^}+0$!o6@AC7a0 too-ZJaN40HL^9KKv8B~VcVz~F1coH^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86WNhYSWM*LD zWZ>**Xy|I}Xld?Z>1JqTW^QV3Vs2&t)9aa6T#}fVoC>oyGc&~ss@EK^UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh>jv zw8`j`tMbshC%oi%*d+Uff?p&I<6PD_6~7J)H(0o!$yI9-zd@&OR(4C-3HjXATJ)mHZ%dTVVT(GJ&( z4enfY4_Z|vd`nWQ`df0+yRM^OCV8{IUHf>R(5@>c5$X;OoXsrvJEGJ#->$Fvdi%@Q z-7$S^8rivq`@(fZS)JJbR_H%otd_KNGV{On&+{uP=T%k|evPbln7QT5i|$3)r_TB% z-M_W_$J0Y=6Rblc5_Zg*e9L+bgZJv$otvT}PP0rp`Q-4Mv+UZTn|IFL!xwp`e=^@o z!P`MAuO!*ckJseBwyj^+;89qIhnbE1&t#FV@2jpWicI-6O=^G5^Xtn`JoZ|8DD`5C zUxc=4S*G6m88v~L(|4xYHJyq|dHnlgR9Aq-Lrag)LuFa8d%g zEwfZowRz_J{j)s%#Ic#dKN}==O*zAHMM!N2V~x05x$wifxgxz9CUGj!-67Z4<*Iz# zoquCt^9{53jHIU5i#JWsnXoG9fe->NonRpmv XrBs~GtW^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86YGiEcWMt^- zWZ>**Xy|I}Xy9V#Vs2nyZe(O?>SSgJ)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yhtfz}(NX4x;k>|6e97VnzPui+BtyhW5YxPS-N1GO3R?V+lc21Lv z>bGSvsc#A@^6C1me#EKTXXW0j%UUZ=Z@lX?wPA0?3)RkcjU(QC$M!XDPrT9N7M{-Q z&2IPY_?pQ-pY8p5uUhzbg29H!jhuVf&ZTWGR(-Z%#zHyfKViyZj5X{PYhB(jK4938 zqZ+=4{|A>xRA#>=$Mx!&Ye5=9M3-&&VYnH z^&CI6XKdJ%%Alyk9LM;m;j89x9X`d>Roc@II=M0^US{&Ref#z&k;i-4_Uv8F7-jOq zdei)SkN?f`_j2886S1OMPr`lmRi2*DJfasYug6SObGs`X6v_O^G3knUPvrKk_iSP& zM&z7#_*dR=^Qgtze6fwC8z#t3-C*2VF=y`FwFjO`KWi*E-pyX5wd+yDqlny14bG0wUIuDO%OQe`O zr3B44c<`z-kKth8p#_mX%Z^`pUcWKo&5IvDBIX=(Zc)6Z6>#l>`K&2Un)6#~rC(He z^OWCF(!9EYv-R-9{_O1Rm04R)Ep0m2U*InpnSY<(rV_Uw;;>nyWOw}(-eyL7h z%y=qF_t^JYOSK$c?2>;UT4UmpQ&_lh!pW3RHs@_V?fA9Ec7bnH>X*<9rdK`HAAYPb zOO4b!8`R3$w)*JGy@$CrY}s{FWA)Ttp9fE#Jn_|=etYZfx0|1o9!_GNvn9zb$J*BR z?whjRyY;4LKTGEB*|AjMWZU!T`W~l`!QZ1C9VO@fQJt(m>+G}Lt5<95bw8WYzE!C6 z$m9%@Upw!=FFswvGI#5VWBLoWnk?)%T->>;#Wm|{=vuQw`CQ2pqB>oa-1D~IK3V*c zWv+$?&(3KYmvmRHo3&%@x^-*{4F5k=?fqU+-RidHSb-zw<7r)gZ-rX#4p39sD!|qH z??=r()^l@yT|aVRX^7i`X@&=NAMG~UHJjyo`;rWog(sD7CN7bw+rMA2>(M06B$Jgor literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..50cd5b49e75e83b7d15bc21845b5226aa7f416ed GIT binary patch literal 1527 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCBkFm$yrGIch0 zGH@|9G;}q#G;%SrG%|8^wJ@=8HMDer>GjMjE=kNwPKDW{JG2{TNUIqv zv1RMg)l&%NI`X}72X9AYLXnR173Vn)TD(%;k8WJqz+=e2(a|=9@yMkgR~~)2admZg zIOECy1-sR2*XA~<#PKb0h!D`)BGqxZG3(yt8_t{#G0aCc9eI&>@ZrjU70WLiwO%lf zsdABUN9=-EQyOlxu*os))EDc>Zj6{HvUdkpf04|i%nd@a63z>rJmC7e#PGu9rjRcJ zn_o=Zr|IylRAHX`s^uGwNtkTwar6}MI((#e;mP;57lNxDk}f<^cX8!6tbH!zv#8tUXyagwk_fC%KN^c^7stDR;I`NevLPl7cJYH?;7ed!(V>k4Ii;BH?-QH zO)pt;sFBg%E~Zsw2~W?#YL#2(SJahe{|L66+?nqhdUSrAlvT~8daS{40$Z=Hfb>pAPA!RZ4#|Ri4fEJlL){kKv3A_4o&AiqMPe^F0}>TEmc%Boa%_Asb4?-R1?S!a zhZ^~hq%SMnm+IKnSbafC)^h(&2XDt2?dguIn?fCaMh2Weob+0bk3Y5UsbJ>cbE+yQ z9NZm(CUb?9J0`D{S-Fn+Xbh`{TcB;qlrO!}OI}NF-(Ya<%vqL`_k8y6OPsvqMsm;M gzZ(_V7?^k%j2G{@=&_sa6{sloboFyt=akR{0E}TJf&c&j literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e.png new file mode 100755 index 0000000000000000000000000000000000000000..8439cef1d08326c582559dfc5c52d3418a0d4f67 GIT binary patch literal 1478 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nXliL{Vrc2= zWZ-OOXy|HeY2jk#X5eb<;%esTWNK~>)9aa6T#}fVoC>oyGc&~ss@DatUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh%?Zx|h4N=I5t8g{Mv-QWvkLE@@pJx3^05_s`GIiyu9DH0SWj+lRhAJw3hK zzW(16mFo;iRhu&?7X{p`g#>r)o=+Zsad%Ljg zvcT2FB`qo{s*Pv$LdLkbdqvjPySF5oK0A2w^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nVq$6HVrl8* zWZ-OOXy|HeVQOIHV(esOYG`U~>||&H)9aa6T#}fVoC>oyGc&~ss@D;(UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh%95{U4b> znkj_I`FT#{?%2+>@m;~GapZI3jr<)`yWTp;Sl{XT&846xpZ7IF zMqoSdb}p$Y^Pf3>zP{n(4Bag(DRO?kS^=_KC8N>>nc~~Jj)yE*%T=dz^}p;Fx$2*v zmac>ETJDQZLeXw_{rFm;32`4o&Ryx5nfUm_ zOUL@BqO*TG+|)~n;N|`Ex4BUD?xjz!7A%{2D%#`E*-*H=BCc=^}-iMzHQYdChJTU>vVUCoaRzoxhLzDnbdDEuFD%;3S}-lv=Y z|NZSg*+F{3qkpYi_Pu0R{Av3C-@m1iT??y&SgO1pH!ryJ@cx=PXSQrAddbZ5EC^PrRVnGHD1BOn9_M*TOtDl03S5H?zmvv4FO#q3~HJ$(f literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..2e662e62e371e09cc338e2518dc8554a956df1bb GIT binary patch literal 1633 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..736c19192072c81dffe0be74c050d96410204268 GIT binary patch literal 1763 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86WMbiB;%01M zWZ`ONXy|IoyGc&~sqSwd`uU;$XqSVBa z{GyQj{2W*c2*}7U$uG{xFHmp}HdD|D&&*57FE7>vMGrXatz1%zGRsm^+=}vZ6~N(Z zm5IfE!v2QnO(7@D^z9UE^g)RODY3wWf?V7{OmMmerExn2MCM7&OR-fdQnI%zRkvNp zz`!i*>EaktaqCT#ZN9Lhz+U5pd_P$w{y8Y^WMV8+SyA}dA;@9DfmT%^txJjJ0f`f0 zT9|@d6jURYs4J!0xj46cW_EZeeq_o6kK-~`)7)0?-MiQJzT|A#mnX}2Z?4|8e7o`H z>ayDV9;f~_P|NDS!k(5`}f{zP$4@n=&@%SGquxrkyf^$OGIE`D}ThbNs zPZ#X#p0tg77t1^*Lo2SmC*Qq)$QpA<@{sVg?@bf@Cm!IMCo8bsZH3S`#~j68_Gd~V zrBTU!p=Gt*7hK+OzY+M$uJ~`!-b3%r9&OhCvOD9x&>vZ|cU&A#R`I;iIIXg&EA_d9 zqjs07UGHmouA_R&ZhRiRo26SO2LuV^Piy%n+%mm|^-%VY;@^BcZ|p>N>TX%?^+4vK z;W~bYXI;l)w32qsy7^)o|A5*JkdR5f99QlToPyaX07CkJHJncOkOJMTzRl) zuiBSb^(`0WUGG^<%MFd$w@bCllP71BPgGw(=$%jL4F1VE@?6>6Z*#YN7ft34xF`7N z;l9jHq437kX};34^k*&mx^PSUnq1AMJqn3?QVZW3J!m*_*Fx1xhUv2tlZGb8mzKM2 zUX7*CcBeZ$df!nk*=W3G$;u7;OdAg@Ja)k5^s+`#(c~`0&cz)Px1<+lm8&lGSF3)g z;CxQ|&yK2RtW4HDA^cgdJttjukyrbYbi~F#$ha!tgO11D1eJ3eXI=7)URXYVHS3Qr z+vamMdamKVYP#@9rt94s356f`Tb;|wm~`Uc^h$Acqjt%?*VPYIE_}OriLNozYr|>Z zH=LHAyhK6yRm`<^&TBf2(++fcDk*PYb9%B0S4i%!$2E&PKFc~^zb7f@cSBX@ChN-_ z>;INav2A`H)mJR8&s5m#nc_34!@lLw4Xq1W2DjhN2wiZuGs4>?AuwpmI~5P5!x~GD z$2BgtoAo|p+ethBI+1s_y@eC)f;pM$GFdtoFL_yhvLIae_VKO%1GajmEcxc%z{s#5 W??H~VmQxp~+VOPtb6Mw<&;$VQvz`F} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g.png new file mode 100755 index 0000000000000000000000000000000000000000..f3ffb3be17f44bb0429f09702adefe1e0af63094 GIT binary patch literal 1663 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..64cdc95a5d93ca9a2f14a9d7592da07c1e926888 GIT binary patch literal 1771 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..ed09e62d33de89319bf5febcb182050b73cb63aa GIT binary patch literal 1668 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86ZfRoVY-!Evo+?&R#^WMXas)9aa6T#}fVoC>oyGc&~ss@D>)UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*X3dsu6=4mjBe{i zm%S}<%GDhkjr9H>{3u?rP448Uwi-44$v1Cqx6jLOtUNh=?%eq4KYu*iYreT6P~_^I z)a@$;&)z;#?7*>J$#8Ah>09?+mgvnFZrWMnbVMLsTfzIQB~#twzY`{AZPs8e+3kKq z<&EGz0l8-nKHm6HegCpXfNoXz2WR#cUhm(^4_JToUHWEnDemcv?27^055(ti?a_@{ zvwq@s=NXC>ExTLH*SytTXqUtkFEovF|EU|VggIC3Ql61Kd+O9f-yZ&+^7Ue!)aCf? z{1tVF-hJ3o#{X4*>%Ti9h4GyA$0S|0ZG4&)aA8_%xBudrw7@sTKTiB#a_pw@A>BjC zKW3M%t)28?-UhE9J^!Y5A1ZFSt}(yqjPAi0vm~cP6Fc=a3-@Gk2)&o6%zhEC$+YwS z@6#c{%jP;)X6?4Scx#@}u8i|O^GsY%K4PBwe^zRyr#-u1ozE>nj$?caH>?Z0@A`K` zgMCO+*Q99&M8$k>A8PHp)W#;iBTk@lk%%g9W2r8KiDN>7f|0@w+>Q47en6Y4za#-9YjyHxu%qz+hIQ*{vGD@6q=s9cK z9K(jDbjMeW%7uMTr)=fY++wudP%&gXzp7vKr(+I)0;hSwY`F-l<=)OTj2? bw?G1e?aM=p?F1`5K=p#BtDnm{r-UW|>WzC! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..ca2472167a02b9e8c2616ed736c34d22bb3af4f0 GIT binary patch literal 1753 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86?(Ar3>}+ae zWZ`ONXy|HU;bP+AVqs`tY2@l`zP+vl9-pA3bQveGsOz3*ATB>E9aur#FG4? zko^1{SPBTp$S=t+&d4uNa1J(8&HEMTeY>Up-j=a?U0N4Bwn>c6Bg=} zI4ErGec|USyC7+y(qF~}pSY#mJXDK&{g#}*{Q2|e;x`w*$-dP1_ItzA%b(xvJ-_bp z@49n`Wc<9CrhUAv{>^W(!PlzToA>j!|Nr;Qblp{jUpy9k1@bR{ zsJgD2yLlH=T#JDf-`?Zr%6TJK~zw!5tnD~ zSc?C~N3M;nH^d)s{B2i!?7HXRd$Eg0O@ z*c>M6T_bedUZgM9tw*Lys%`fX?t&nJ{An%!I3Hy{Vk(q=Y`L%5*``T(d&{>F);WrH zhd(MFiMhICn%9hZX=ZkcdXFj`C#l34eiSpbnWYW7WxtE zwzuxHKEn5F@sa4`o7Q%o4&Ux#*x9H%%~M-&U03u!o|lUm&rD-!8dL>R*UwPW^88m^j z)b#aqPO&ft?FFJAY`9k3`f~iIo8WWnHobe&`{r!moARcqWZT^Ta~t@Q&6n6_%`3h( zeS_<T;&x^YzD|GfOnqc>pPv-mTpX<_Qzxn(` z{o$RA`3ihEo$Mi#dbZGE~kaoUOF`^RAdLX5pDv=k~GiuMd1$RKJl;OJn-$wlxzUFkVe9x_dK) zPvWtL{pm+_$z2V%zZkV^HNR$f#@hRotJcEAAwWt@{jB?*BfNiO4lkN$e_djiTgOGe z><I4cje9}ZmM0smbW~cbSB}Z;FjAfjbAE?e%9N4NVVv!MUPz$ z-q}A zTq)n5bF6F4Tg_RkmrmUNsxN=V&7%FA4&Q!rYuX9bz&`?ym)AZ%{9uCl>txrW>y15E zR)p`%H>qm!`Nt@BkauIlV)wlp=b!VPyLRI?rTX`6G4{s=LJDr?*~Z&%dc!sU#sur5 zCcajwYW+Kw6mtZzmCqD;-;{st{p#v9i^L`#`pde*jIH7NtJalS>*jMvZP@g1yGTZd z@Z-%=-`191oxCxv@aMGT(x;M@_PRZfm-aqfb!PI9y!=|hhj9l)bw=O%E z?!SFy+q3r2t=HQBPyS;b=^YhRwzBH_WslkMV!gbIGfnR-%1Ydo`Tlfy;nEJ`iUFUl@fa1J&t-1^vzfq{X+)78&qol`;+0H|_}vH$=8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g.png new file mode 100755 index 0000000000000000000000000000000000000000..61d2d85abb8dec0d89926ed6ff40fa137f93c84a GIT binary patch literal 1561 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3F|u%VvM@1p zGH`Y^G;}p~bTxN!wzM>HG&e9Yb~AT`>GjMjE=kNwPKDWB_nuxKsqOQD8Gx^D%3VBXEKX!=`zj+-l;S>3iD@KWVyvNPe} z3OX@=Lu37cb@x8K2;9x3{ySgSR0d#vbUaaGvNVjkBt!zrl6MQS6 zA1pkXa*3}vO!?(B2T|z`fwTJ#e>ag&eZ|>v+T&9Db9dJarO78_*qIvD_usEK(^<(c zdpI!YG~>f#wH9^#4SSQ%Nw|408?S2v^f$IGtp ztt_>=JL~%Ey&G=7U6!=*$K&jxT91!A+^-ZZF`h8}(TTjDDmz|Hn7>|6gln~2|MOE1 z3ud_gO#LdbSh;ht`w)4s52|Z|_Yu zk?MDl5m8oN-u2{|_YQNVzW6CW1;ZA09N9R}Sw}T~s^XSh0|~#14fkujCce9|>C9yI zsoz=3bkA|{tW+&1xqtR)Q7*&6;)3M+vKRK`GWI;)o)y39(*OS(4L6H3vN7<@x--pe Sd#4hpu=aHIb6Mw<&;$T1YC=l@ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..69fdc6218c14ad990e5f1fd661f6c077aa85f7d8 GIT binary patch literal 1792 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_default_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..a26b0835e4cb4bd9dad86a599d5a78f999b03262 GIT binary patch literal 1912 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86YGP(;U}|9I zWZ-OSXy|I}XyEMRWM*h+>So|#YV6_+)9aa6T#}fVoC>oyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhiV;)oTCs$4Z;#Dy;UmI{MA} z_WPRh{lD*WmzS14EqwgJ@@qomH1@0+*HindIE2b)CwfjeuOMhHDaQPh#pvm>fIaM= z1XZ3dlaXe+$yE77?ZX3ydyO`Rb4phAnM(Br|9Cj_bm)YsTeq5?Z41w7n8LH}KKswB z{QaR0A_AgII5s68Ha`9P_wS{S*Ee!itl&{PRLJcT5gR+Tsy0GvY89i~-hHcCXT5*A z?BmCe&lhRzlhRna=$KJO$CD7L){3?F-a0?}_~UVn-T!HiEzZw1?6FdFJ9)RsT}SNn z`E%#4{i)k8y82c#hwGz_XY=wp+!jlIxH3J#;6&t}rI+;&yL=Fc6k+6FEB(R3&Tbyt z;%{zlZhy+B-EA(^YFniG!NStgbME~4??2keZ(1s!Z8rO~gi*?hoiXdON|YC0XWHA< z`aM&OmwU_Yx9`Qp#S^2Yd?R!;=Lr@2Ho8t0Xg zaczw{yNxfZJ#}UUhl^X@^7_Q28o~a~@MQt(eHfcrten<&d#VV{E-o%U|K^_5j%Ou4 zek*PkHodokhHv4`yeI#Q-{ebmaG7hae!S>&8MBkRX5 zw(by~2X?-O?Ixx7uAWFS;?y`0uRPJ?LT28prLRIbBiZsN#7i~z9hK|pa$^6(JfrGL z;_QE0bR!a?Gai^#8TxLVXcc;7eKh|e?XUd}HXAdNrifcTP&4>?(auDu-gK7LB*6^| z)kXFflXYwPKIgS2DK1~JyYt~nsi#sBS0tpRt1q1IyXMWvxH8mevwUE>r1h)Lo_TEs z`kUVD3($Duz>)TQZ}gMofOTGi@tdWVywbV1g@Nmkn8Jc5k_QTM)PMY!ujlK%&&0#9 X{bP0l+XkKX@cSL literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_3g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..fd3dd306372ff2c839b4f35c6df64b084bcd6666 GIT binary patch literal 1580 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3barzyFf=i6 zGH`Y^G;}q#a5lAcb~ZDzaCI{`GjTSB>GjMjE=kNwPKDWEaktaVzQ1|Nr*PTOA`JBray@OS%W8Ouu*YsYKH1u(e4ENfL4m>>b*TGo;lF zme{iO=;|qiavk~JxP!MNGNDMv`HJ%#2Q6MH??*STY~V5E-?+E#Z`GmZ_3^@@A|e(a zR=R$?admY#YvUCk1-@3UxvY=;a&zBa^~gHaD8j+*)ap?5(!un7=F5fsO`E2cUy0SO zkDGhIuSf2SL^SIWy#W5Z%~b`W7mU>$+UK)gk`3^0w7JL`${nZQZS;TYQ+>Z{RfoZRJEx5^bs}t3InKHp z7;uXiI~10bF4&XWv+SK*=Qrb3@pq;Eg`7)y6df39n8ha6c09pTXx0~pR!{Z`wfs`W zHyor)I_Di-%*MQ@;^U%UzrVjvo$tKrN5(|1f^9YqOBJ?gxa-+WcpC1^Eij3}pzKtB zW@TN~?{B%Mx98vgkuh~oPZ_oEX)o9q))#W1;fdA)Pw|t^Zl3pdxbE6l$jzO6mf2@Q%z-bjrOiB>idejt hUi^1MfSG}jjiK|*D?Rsxj59#xx2LP0%Q~loCIBJqH5mW^ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g.png new file mode 100755 index 0000000000000000000000000000000000000000..eb38bbcae09bb7da63c67c30abdbdbe4c383587e GIT binary patch literal 1536 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3G&VOfHZ(ML zGH@|9G;}q#bar-fGB$THH*qv|b2M{->GjMjE=kNwPKDW_cU0h9f zc6{Jx5&prR^LpJhy{k)`JOnk~z1dsBrdI5gE7GI4C&sq;y{z2*;&VN1aqEx2w4HSF z$%Sm;&LivJg=&cGJCYLltmn>s3GD#3s4ymDUbgMi3}l^6UkE*#n*FDTX{N!_6HB)` zX8(|6o|SJlyZmig_3_6ab?UZ<39pIKJ3YhY#m)EM^H)3)Qd84zm0M7|rgEmrgxhb= z9ZA~gqc=TTB8`7NqpDCy{hzJ{5=Tr`E?CKLF=SM@_q0gXb@9dE_QQ!%sq3dDPja(a zT2f;1g(Kiu6l>Rp^Hn?97VNCrJ5SWL@b=3Rz5Zgh^$){ZmMWa}vT=I({m_Dl9)}z& ztCTGfI@MFXRByj6^KFp&y~eR`W6A2Ew=T=Bi14IsuGE&{yI-|8&V6Obudg#}=0^)% zJ-u(0Wx@R`3)gV1J$&$0$9Hp)?xSY|G^Tw0S>tD0uk*M;Dk;{${#c~)&f6I#epy>@ zW!uQ@zb^esSVG2QV)PopFB+FZh9fLZj7_3(W64niTeIjavKJZ~11cm0!Y^ zKT_UWu$8$fD8HeCO`&;1lGqeBqc%L;pM(6;T7Ck2P&&X zPVAVcUa?ecwUh(9+3dH6x(v^5pE5CSCBqE0>nc|__gPL)>sxi5jj1t~;jY8CM$?2p rE0~r%j<{a;#_Rw8<7qj2xD6PNEjuX{>QLJSDw923{an^LB{Ts5;_xz8 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..cb8fc4f5b9cc9d4e85e0d3a3339504990546cad4 GIT binary patch literal 1739 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86>11qT**Xy|HeX<+K=V&-ISX=G;M>f&e&)9aa6T#}fVoC>oyGc&~ss@D>)UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh2;SWo#!~$;>q`LZ-imJv&u83!U(dLtZ-&(ZTemRorkzeDTE-XMapS z81KL4X3jgNmEODWu1iD%^-O`^U|~Bwi54sqJr)IBC-{smZS1 zt2#0km-(=pE%{{m9 zU_!*t&6S6ChK8t0-`f69qV>^jmvTYY)T~Cs{_L%{UOz1GNWEAxdqbFoOrLYy*E$1< zfbNcOOk!@>VoC={bwI$j3WDAO7tK`~B^CX{17GE6)#gmseq@ z=CEBqa$%{+AxGWBhS|sW3GJHAaXmdCJs_jV~f7UNE%V{Ol8y)!#ilVh~YUqvYWLDR$1=f!_S zn2yf=Cb;X}yQhox1pI(a-;f<(GbnZeV2i^6`0-K+80LQ1#;J>gTe~ HDWM4fF;<`C literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_default_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..fe055c75ad831854d306f9f086e4f87a02ea1411 GIT binary patch literal 1759 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_4g_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..e16de169df97245393ce6b1e0bb8f8a49c8e6049 GIT binary patch literal 1551 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U=ZS9V_;wqsL=h(z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3GjOr6G&eML zGH@|9G;}p~G&FH`G%|5^F|%}ZGjMf;>GjMjE=kNwPKDWM4YB9r@n4gSR6xp-9L1it`)?EnX?_M>no);4$RixVP?a)uHC~@xr1aA{HN3 z9(}oSb@=*qOhF4BYQmzUZ?kyrk@0BUpb(N_DzKdS>Yn9G+wHhch20A*U;C%Bl*!t# zDx#o5OXQVi$w$5w%N^#uU`Y~RVWp~Iwy?21!jALAlslot>wcfoX7j4!Ipgx`sA%$2 zizAm4RILo!zA@Nxb#2}4ki(M{tbMIPE~)O{pPxsn%K|y$f2iy@Y1qu_o+H^jNnuJ` zr?m6r`_&VcJ0u14a|9Z;&DdAWsdj&Fb@`)yd3%fhpFAhzifxl%R^48GVNbHpa;L_R z?8_bA1Y2Idw|$Y8(wXJ`0Xb^iQ8`ncKYLpRJv`8$F2Bx6D2VOY16!fD=^^`fnf_Th z=j4&?i&iCF;n7jkspJUZI;V74XHwGlqut_HzrVl#zaaQ_wdGdZR-xnr5+2RR#5#KK zG_Z*Bq%YXW!R~Ord6JfLz&qK6H(c2c+|c}gN;&H9?<{_O-O1)fL3fyS4^2!yz&h=I zgPbMz7nT(p1XwQVZD4AN_~3JG2g8enZV3+$xO;8%-FSS#&&5o-`*%8cJI-iNcU;{R z>hLo%;QZmF*K&OPsdY~UGyk4bRXO3{?hrJY>%~E?j5Sl0ua+*Dv6|ti#;W$7N&5=B zOKKmBi5;7@bEd-0*)Ok~=S*UG$}!Dr@!yS#Yz$0144=}j)ZWzkmIx}MJzf1=);T3K F0RS#xFRuUq literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e.png new file mode 100755 index 0000000000000000000000000000000000000000..87e96cc848faf6ed152f186214d44b89e69f9b80 GIT binary patch literal 1499 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nXlPoyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh7a#JY9}$ObZnUtZ?Ag`-@T>x+KG+q1to zMK4|w)752~eo2eNizWKWwf^3w&4q@yeln`^f9kD#c_=X<;oa=d_iCTt`#sNKu3xE0 z?$qgzWAwHMBvmDGZ{^&vLhv)Qf5TKEL-r3GEgG$lq&_el(RjO2bOBRNpb$Uf4%V`j zE0ZKG7N~tcel~5hhgLr;Q={+%t;t>&;?{pRnCUZb;wqaMz3Y7{p5{#o7c^JO@U>6z zTfUmDxv_QXCXpj9fjtRJ=lQBlKJcUS*YnP=ReKFQ_TGA1b~xtNG`Gcphn>?31-g&2 z$SwKxw=Tg%YOmE?KjWp_j;_!+b-Ti5+lL$z{f5SAU*ioV)+mQtR+e7~=h(h2Y)y^b z{a710|IpQ;R`OC?v{k2a2_E+CO zc8~k-H+HMJ=Q8c)>u;Rq<-IZKZr=9{3z=y>ZjbNO>ifLgc&mDC*y}2znFTYqw4SIn zk(zoT{O;;ir*xA{_+2M({r>xJ*Ug-`hn9WIjwns+kmmexG;8auivFe7Crs(!`@uYQ z*NIAvsipm*3g4S0l?o0zc=hw`X!NR$ZMF=F=oFO=h%B%ktN?>3#sQB+RqxveSxb<}Pb6Mw< G&;$U(JtGkS literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..a2d0faa37eb360ffcc4cd6ea471c959cf70bc97a GIT binary patch literal 1509 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nVrgjRV(jYX zWZ-OOXy|HeX>RH0XkzYS?C54>VQgjw)9aa6T#}fVoC>oyGc&~ss@D~-UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhE9XssXrnPZpw|=YP0WCN0n{RmRY~&Pb~alvT|QB=PbLBO*cPH zpE*?`zE)C5?)S-at2uq@-2ZPVG7wt%^!(x4u0+U0=NZ-=CA7r~A^>1@Lk{$JmYxB9@gs=Vi{k#6z zAfCIEl`aHJ$+JA=`=9nSW!X~OlCL+sHDf3G{|Q=Nzwz^i%eVB@tg5=68_$1oR(=kX zjmfrG`Wq{Ccq8uYKYn@FdzC}MJ_qDJq$YUBcJL+sXpQKfDjb+4^n#H)_SYfpbq?oK z{68=G;c>Fc+#o*l^6m*q2Pf`{S(*4FnYH`r0ig@6i3|+NYtu~J)&FI%Ffj2j1Zd8c UiM$_j7gX?iy85}Sb4q9e0Bp=Tj{pDw literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..6b52c5f3e1946aa15eafea5a28dec26be86f921a GIT binary patch literal 1650 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86W@&CoyGc&~ss@DjwUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh%95{U4b>nkj_I`FT#{?%2+>@m;~GapZI34gS?CYhP{jp02l- zIjAY)(CS8uy-SxqwH00Sg5gn-&ZAEbe>&t0&A2u``bbMM^Qq9*? zg-J>p$I>P(dZ=!_Ud`aA?BBzu4tgw^w*Skg8Jq@f4t-3ba_>DgZQ}OTto#^p@zWiC zzq+thCDD5E`*^e_b#96Y51+nb0!!69oeRznf+o&5^!V!P@J;jW>+QbxM$bsrD2cu& z9I3Ub_UEUkkIv7xx6HhG@r_H7z|seDQ_32{?nKLE?*?CF&HfB|mkUGK;0^fYbDSAG)+J7~i~X zqiGkk=^pQy@LON>mP8b&=!a)X{EIl4WVwN*BvFFFVe`ZX7d!2x7#kRv8D^`WiJt!P RLm;RY@O1TaS?83{1OP51ap3>} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_e_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..477a5fe8df11fae3b34733856c61099b542be31f GIT binary patch literal 1643 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86WN2Y-?rQGl zWZ-OJXy|I}Xl&%{VrlB)Vr*n+Vrpm()9aa6T#}fVoC>oyGc&~ss@D~-UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11YhU@_L#{TB`?;F*7n)QQyMDR z1&aCA`#&;&G*bwZ^Yfg@-Lai%4JzZ}v zb5K*pq1BBRdzUVKYAd?t1;e8vokyP>{&dJ0nsIknH~!EOXlMGEr!^z8@awCqpBmR4 zPh(78!PMc~@TS@!Cnh-fvD3Q5O`A4Nb@1QHe~l|@f{d?_kWiWZ1MFVXM^YxpJs^{`~t_4joG3*4EZG-1o~! zz*A5p+1T^qfy0LvbM~xU{N~M@9+#}2-unGB8In1kXaqd`IB&|K$4^gBmvZo*`}pzW z-Pm)xVJnycI#hoNQe#3n$;|t8#^TW&oZfPuU;a> z<5T4napaPtuU5@36;;)62`Q;rxi>eZ{`j)M)x{+(Dk`dtXZ1qHxVU>o*4DeXB$_@u zc=F`TCyyRoa`ZLsJegeHc+~z{6T^(}Q#4Bte13j@bx?3{bZ4#>Z>L1{$49Q0+WF<9 zZr-@DBF}7ZclDDl+Xu&br8oco``dl8!{W%oe*TQ??Ac7eL$m+=`|G_~#QFOYjxST% zdV0SEA-aQV)iJ8!mZ>+bBE_lWUZLq1dVD;tw-uk<%o>hMO~ z*?&BkqeSSTrdk6352FoB^<3Hw{y42UeyUT$^do-(2UnbsuyF8#^i9hvgG`K#Z}a*z z-TI=pB%(k?KRin!FDGY@Oa#*|10IG2H$6VQI3nN6;LyOx;G?&~?tuQob)e$k)78&q Iol`;+0F>`$`Tzg` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim1_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim1_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..52726fef215f08459dcef1c59ca586710fffd9b2 GIT binary patch literal 1693 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9nV&UrQ=wxVY zWZ`OTXy|IvxY3yWd>}qaiX=-2q)9aa6T#}fVoC>oyGc&~ss@DjwUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*P#!NxzQSOrCzSlq}3)efWo*ePBH2%cPIazYp-9{UKB&{Crwxtml?+w(qmTzuaA{ZpD5t z!7fLk^Sew%a0~l`+y~M|-{dS}H#O)tbRQ6w_O8`B8oFKLdxhJrLy6TAzgd1+)J-#p zKc;R|ckt@NlZMj2?Y%#1wiMiNtk2Hk8*A4Uz7g)3_}|s{kktpP z4~oZTn`Zuz`k-9E`a|@2IM>vM%?GaEuyZynm-v2(Q`m6xN6`Y&+uB_!9~(QicYSvE za*+D2*O8s`h-H(tmp2__=>LFP)|l$r__}bIaM93r2<^M-FUlI+8q9Ba&s#G$99JRvuBOHlIS~ zn6@TvOZiVmPxlo4a5-T0GCyNoriw}*+p!A=J8W(*@?~5sGF@ikw>%evdn>eoz5lckd%AF(vx z&0W?prDUf254UCcFL%~4K3}r$ewSS~6Px6;@{3RVr$3gO8c?3Q->0B}$%;{3tuuu0 z_S4Qz=F-{!bna_xsyY7Pk-_uRoZDMOcPpIRR{VtJ3r98Q-^}ZkTREG&m69j9JYwof ze(vzxVfSsr=MLM23k`%eEYyhN=b7Xo*!ty$^@dmBpKa6Tzxw=SV~L#6I`6rUrCI)@ zv34##Ij7wI`8u`FGUxxcuS%?Z$YOFho{^2=-^O#Z*X`bP4pd=yy85}Sb4q9e0LTo4 AcmMzZ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..47422b3803e58a5e83529d8d8016c57cf8edf57e GIT binary patch literal 1763 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<9nVr<}KZei|h zWZ`OTXy|IswX69mI;b?3O)9aa6T#}fVoC>oyGc&~ss@DmxUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*rK@D{L2m^+ni^5|7T+Q@1UK^#OSFyWUd=a1h5hvGQ>lFBmv!%}oE|T4go&e7d^bD0#Ou56!yC#a$0yE+TD$B`{?@4ae#_qKtDJVuGp0I*J=n}%bMz~pa%gHD zQ%9I$P4eG(j@A~Neba5;Gnb#p)Ogu=tl5kspJTJ)-*CqlMW+r~dPk_A5s(v{*SKeG z%lF+HnY$NwKhP9dy!gWGH^1cK4yeviv`MVh=lChYx#q!5#=`6ttwi}FVwWls^qfMM zo4(t4>Ri6ytd817*+u^qj>K;Xx5!hr+wHW!`S zpwGw5IsXGR$|Mbo9I|HIRhZKllo}P2Me4TDE#-Z$D?ZMf?PnPG7fsN`DT&;d`jKtl(;h$REhl&S=-kYEJ{!_Fx3Kv62%Ws+GhO|#M!?n={hxc4&Xx1TR!=V|KIE5pQp+R# z=FjtjFN{i@ZY@5x^Bl`eU!~+pE`J0?j)ygdHKt8Z4r?q^P0H0^>YlWyG`&N`sLQG9 zjp&T8*J|81`+lqZw7B4HW>5E*nNms*rW<+4sQT{r<_tI8SR3=3KXkT>(N=pV9)_9k V9^_O+m)!tWJD#q7F6*2UngD>npdbJM literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g.png new file mode 100755 index 0000000000000000000000000000000000000000..b29d75ef12cabb19fa23d2e1ebd78b4535b9c9e8 GIT binary patch literal 1682 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 G&;$UOnTufn literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..5769b5865392573a64d485d7a962960c90960eb6 GIT binary patch literal 1809 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9nWNhwgXzXm^ zWZ-OMXy|I}WNBpX=wxARVqj)s=3-zD)9aa6T#}fVoC>oyGc&~ss@EK^UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh@E`GSAD?xK<{<`l1C9r6Mt~Zi##q9*&xTm<}KtS$n+!Poj=p2y&ED} z1lW!+YB$VaN&XeQa?1Mqg*r@PpO|9`<}z9^H#RK4eel$^lkE<#US{%M2r-|lC3d^{ z&Xq%x_bm(AvW-p5srpo34K=ObK68am8oK@7aH! z-ENE0ZVBBgzpg`Po8mI(SbGcpci%s5zqUZ+#?p)0NqQRuqC|xHCrNzN5bG}9`LgwH z@?ux*%A1pX)UI#vsg}@dO|f}YV8OCebV4`t!u_i>Tx`C5|E?dRHTCY|M#1JKsoVmK z7_4uU+UV%DGNnk(E9{!FUL`=Z^lH}E;=OU^lU5v0`teq)py2Cefu*_zZE;Npej5Fl zd|vdby<7VB?5$E?_5ZDZxM5nqAJ?6;M?d*kFI~9dQ>)~<^wh%RrBi}F>b^**c=Pl- z=XcYsk9a3?&C&n1)E$>8GC_x4EhRfw?-^I7pG}*5;)m2cg;QIXA2Q)yCRrUcW9hMV zI~K01x|?Itu{R==J;`sSI!jP-YF5&3m+X+qUpPd&LyflZ9PE4=KPhaB zlIyw^dZ)}CukDj)t}Wep{o#`2hGX3QWyTeGuYRd%EO5Wr?)FCI$A9_ymRs_SYz({n V`Hz(w$UFg6Ql74UF6*2UngBr1zC-{3 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_g_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..1487ca7613d2b3438a031893eeef93d738e9ecae GIT binary patch literal 1794 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86>}qUe>}+Q2 zWZ-OUXy|I}=wxJOVQS{=WaeUKZeeBs)9aa6T#}fVoC>oyGc&~ss@DjwUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yht@QPmy1d+?#LHA>3?CG z&g8IqC!M9Ir`%eq%et96)|4~k7%sfA3`nHw@|*v>sI3RX=sp1Dwt(Q&gNH*-AW{FxoB4f+S1jdwn>ePAqL zepzxeGy8#LzkMzF@cVCI#H-o2-)_r#V>Cl#ql%7;nCp?n%iV3P=APs7n0xNrIV)cM zXsO;~VpB669|gG_JN>aDW^#1n9ZrtFp{}}*F1{^Oo<4p0a+%|mJi5^i9n5_zUvn7g zxiUSmy!Wv5%=ODFy4Kb0|Nr>cuUn@V$*sP4ck6`*Q34B~}sGRcWZXBRc5W+(56xflswPWAgou$!_=bTDon)(W6KCJ6)7w*M`ju zxscQuw(8?i7Z&9ZH4(12>6>pp_jzZN&>5&88@XEZ`os>ld%7Oy&fUmOOHd{Z?PC+PZDqGRsgSoxYPDUV#Uzc7?f}LEmGm9ev9P4MYnh0^QJd%^=}E6nw~{-9~2 zXZz%6W|P>8)Hw$$=h-(faZS@SNi#qAzy3$^m46%t43DH=PpSR!b^`+g1B0ilpUXO@ GgeCz0hp+(v literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_gsm.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_gsm.png new file mode 100755 index 0000000000000000000000000000000000000000..e0f48e1bc5c6f8ba0011ffafa81f8d3543ff1f3c GIT binary patch literal 1454 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 d4#zXHF+|26o%v-UM^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86Veaf?Vr*t^ zWZ`ONXy|I<oyGc&~ss@Dv!UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$`x{)XsHAt%iA?G$YEL5Tw?vA~3aT--oRaJmMiaXSS>=1I*=(PWw|kN!LeRu&x!qP;(9__mlDeZ61l_| zDzY+ZcDhz66|pHvDb0~*;M%XSjK$q5?c!#WsJCz5&aEx~d1KXvtvD$BxFXa0^}d+q=IIR|4(o6ZZQq)t$+`PTS;$NkhLug>%{ z-qdQ5U-Msjp}^$h{$0;&pYd5TtJ<1YTu^&xo2a$mza2-cUxbA@hjfeQq2fc@6Sj*M z@4MZ#EqWP?UxS2jtKP=n$15187tH-I>FZv#C&DTln$o!+UE>Trq}ZXW^6@}S$EtOb zXEq*N7tY~(#4hpp3wy2))8ES0Z5Ny$yYjy4?`cooZz%lkpb)-v!(@}mC#0s$WoBKQ zHSLGRy829!-8~YP3Z^H-IKvmJ2b87yQck%%``_y7DRX=mE9UOP&gZy6V=mec(CvZQ+J(SMIr0#~W{Bcsf@>PVSg) z;3BOJXEtRX{@^-!i`|rO?OSzQCa4P?V;B4Wj)|}1PIu5E7exbo)rLuJ4*s`tUx-Ac z@B3}&@khF7y;8xXsV1V=w(AL6T#}fPelsK@(0G}|1dFbYg?o8IcQ4nd4Z6wQ&11Rx z5IyJlT%Zd&f}N=>QZS-_!yfn8e@8sIv=*gZvh&%H z#<_(hib-F&ahGrXlzfrEeaSO!9iP!I9M;$sJK^NE&u0W*7?m*HI(%%Wcr9nNccpfE z(m#%_t{PKB~_&%y4tF zUvaR*Ym=);s*7Om($?HXEsW7DLaNSUheX!)G<996YYX@yZ;y(?=vsH_w5e<{qpmT-WnSgSu}9!bZAN+^6hZind^}_Ym!*6rajlwMIMh< zze!xRwtnAH#t_9Dp(-C|SDn4-@N)MfkIF?0O6DdkIU*SN_)WcV*M&1vv=r`U_AGAU zd$i-_i`5p2I@#-zhMzozTx>+x{w_P=}nq`$Cqztt%#<7bmzGfr40^s!OjuI!xR z+}Z}c9k*w+yRQC`QWx{DZsCy`i{9*gT@*Nn&2fcZ@cqD>)3@yOUvqkEB9E!jLU+Gg zJGLqWFvf@r{aB>N^M0*_NFQV1yMHn<%)1zSy0%*htdj`~HQ4fQ|C0<3#g4*@r)O(- zxi=+lx;ZVmGF7rtq*Q__n7NAirT9YIoExmuOz-+>EIFZm>TSWEJyW;LPKmsH^aHn} zmCEw34|v}dd|9Ma9<{8*(1(em(@l2gC4t$dL7TjFn6LM;o>{OWA&nmgG-N> zGD@wyntev-M`!v6vva9iA8nG%W!RY1T4Tph&v<#od&4j4CKe0~45B5j5hcz=sfi_- z`FRQ-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3F?TaIaddHY zGH`Y^G;}p~vUD_bwlp?#c6K&0Fg0|7>GjMjE=kNwPKDWEaktaqCXFuQyYmh^()$GK+Rry!Z5P!X*#+FWlKO^FW5+7S5?=thE^eDJ~Zt zI2BBM!e21)!Li;6-rFx9YTezlVC!7%@&}e@TP80yjI)T@``+%J_4hsH>BmeZc$WO% z;pI?s`I*Y6m=Z?Hu3U&HN`OX+ZiS` zk9{s^e>=0})}Dt3M;+A8EGa6mJa@KO?&*G?P61In<{F0O4f%IE^X5hg{+r#v#QDSO z|Mf?jiF3qyn3jahcz!#Tdu!C&d7QBy=WdFbxbS0O(M;7%SzCVE6}>(*M^u_KaN+l^ zqe%;|zy6uL@rFx~^u!aKUMm}za{NB>1v-{DN+<9x$+0{<$&uNUTd{SDW6XT<=hhm} zR*K25amirUV0b<0?4^E*i3}MBbHlWctDMm}+R70f88PkYe72}%a|`)-Ij|ju6U}q{b;YEhLGzy12*}KQXQ;L?gi-% z4zn67OQiF;&+CO|yq{IXC2uViZV|4$ewKh$!)}3Yli;MBz{%$PYxkx{Y~6ApAw%b| zd$@|q;aKL?Zrs&-<1YLDEzMbS_T205GcMal`@D^AU}V_!YM--);lA6T0@u^k&t;uc GLK6V^B^^Nk literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..fe5ea012fcb4242c70ae36706cd588ff03b665f4 GIT binary patch literal 1869 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_3g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..7cdb571f9ee54c76080d0a737036e38ee9b1f83f GIT binary patch literal 1835 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 l-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3GBh=Jb9OXx zGH`Y^G;}q#G_kO7b9J->GjMjE=kNwPKDW7A zU=s9naSW-rbtinkH&da={@pr;P8$||i&AoL{>LaQ-Lz%p(i0gRQIDofYpTl-NO8Hq zy4I18*VJX#78b`#0zs26Ub?VA(B$^>lh!}V?siUJzL4L}ruP2#r@#O1Isg6lJ3qbY zr!Upt^7yo8-Oux{mSo;h-P*X&!nVNsfL%vjpigF@-(7{RO#hj3I-RzzN|ICHI@0L4 zxg{)kjd$H1%aC>cT|f4wyS|#9^t0w3dpS#s(j!W|e@T4&LXfaNIa7X2NVBIpumK7fiA23HS-`VOH!jr}NGoOXa z<-z7Z@%`?tg;5496M`7$y`NI5Q7+EzlQH}Kl($_WJ^hn%rk+@J@tOCDvs}ehvMMgE z^MdvGgNr_%Rqpk_qPkVGvt>aD!VK5L%J;mfR<;7}CtOWsX|A*!I~s+R$$c6X5?Q<<3D+*$FV>-t{u&9(Af^{SZX z$(M5)X8eUVXL*mjd)?1fbIO0a^rzpew+E)*PR-!^e&=c1PQxEAi%zUO@}Rkjd81>7 zWS;B?FJFV{iH|KG-V7DEwR_#1W5@fBnV!3PQe1~a_fT$^YnGPbwh2dPx8J*$yk?e` ziG)=5$BUwzXAiw)sC}kg9(MDp{P81Zx7XcIUi-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA3v~;#KFgG)F zGH@|9G;}p~axyb^GIn-0Ffy}rGcd4#>GjMjE=kNwPKDWz!6~!n+$p;6UVLxoce_`wzyCf}AGI@P zURJHr#0|Z_r?MKzoRhj^`GIATy-4&Yi{+sccD4Lx$#Y$}XH^7;2a{yN@w}$%BGH*9 zQu<4SR(3ykmt489YwPW|Trn~ku1XVY73Vc6w^)8*o0H_1KdmKVuFu{${=Ur#o=#fl zmaO?G6Vq3JPdIblcROXLk`I{=q<1hiJ=UADG|5ZIf0KQS)0acc4O4;~t==dte44fO z*O``gJC@1J@0c5hl`j3H{Wwu!YXt{=g^11&5afcC5+{~IcFAU{B2@lyDyov*L5fNtd`P! zTv`&>XYN@!O;NFgt^Bb|=yp-*%#!krS(*>mDL=imWJT))w(kr%H{XhKuq=5$vm|H1 lS-n@^XI!_BUh+-*0K>Yrl`gz*6F~(vgQu&X%Q~loCIH1b7mfe` literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default.png new file mode 100755 index 0000000000000000000000000000000000000000..39d3beee7100610a2cf375236fc1f110cec5738c GIT binary patch literal 1681 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 FCIF7bhJ*kB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_4g_default_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..c2452a91bf1457e6e2f52a70c1760b004b097d70 GIT binary patch literal 1787 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86Z0=@hXkuXI zWZ>**Xy|I}M+A;bi1&YG`B$)9aa6T#}fVoC>oyGc&~ss@D{+UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11Yh+y?hVPIg^_H=O!skrqf(zZj`QRLp;HTE*?MeI$j3MyjllQeQfa<<%Th~NmX zxE7@n6_L+%^sv*WwY?G>Hd>Z&2R;$-QEV!h5N#h{Fqx zRnHHsyCcB7(s@N31A9?&m%>*0t5yN0CiffGSFug`EMmiTK&rs)$_oG2Yxl1Q#6jLB{1t12v*EIIHR14KR<@^wL+_eNETCQ3_l}t)-26q z*^ME^LCYh5-f%kfd>wPxl)haoLZuou6Q*)C={y@ zdCquq*$I)|@}Fl4FWK;GyWnakMKet?8@Ixy_FoUr7KTWB>UhseQg}W|(~V2+)i*a! z=^Z^+=Bd2rj_Iu1e}2x@gvpxIPv<&T&-L-Hs= zZPze3&gQ*RZHbqE=9&=KZh=LApJh(+oVvhoaw9j7+OH)uuP{G|5wly{y24cC%l9co z4ln$zV|RZs*4%jez|%ENQ^gis(>TDs$8&d+S-W@H<7ul8oYh&pLC;{T(sS!Yywm#g zxRys*Up!TIJ^!ywWu58kw@25{aGks@^-Zq3er)!N=6A15j$LE@J?*TMS)G5)45p*Y z-f#0|Oue+d>*=9{&+|S#{v9IbJG(VXq4d{w|GM9+{9eoM^4ER#Lu}us&x>e+5*t+ui<$_bZb`o ze7mk>+tMKW#64x#R*t%@&+PA=(E9)X$M5T>^cmS09=>7F*xa4V4XTbjUHx3vIVCg! E0JKx98vp^B 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e.png new file mode 100755 index 0000000000000000000000000000000000000000..cd10b05f69383ba927a689675903e270958568ce GIT binary patch literal 1455 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86>0)Z=Xl!ok zWZ-OOXy|HeY2ajNVPs<9XliQgX5?Z3)9aa6T#}fVoC>oyGc&~ss@DXsUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhX|=`Wf-cnrg_(?o*Ef8UxZtei zki{)v%rD)~XsgP+q>N#shCybXoR}PQRhPU+E_2e;hf|I_{LB;vF&O zc57=M9%>a96BB#$wZ_19J3cG&A{-XVwc8GU|#CUP(^@h~i#R#&^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<9n;^u5-Y+>Z+ zWZ-OOXy|I}WZ`IF;c9AZ=xSi;Z0TeS)9aa6T#}fVoC>oyGc&~ss@D>)UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11YhNVV=vHM++Yr zRx8ALcC{^hV92a+k6D+qz5TevdfBV&LFy+opKQq5QS!g}cJ-KiywWRt z%4hrec|TUCp7rbdcTg%hrsuofoa7%rx|*lSp7m3x^LO{($oNt5n7RLtjJwVASbg%o zzqk={i{r?#DN-gkCOwK#__ms|?@m^_5G>{JilO98Q({B~&kIdXg;J?oyAmYC&_1%C+2B8=(wzJP&t;|a!kUi)8H|a!0F4zH;peUayI=c zyY)qHNkoB)ez;a;mgPp-uvO*4Y*lW>C6D@D7z7d+Zc1dCO=Uj90V+H_UHx3vIVCg! E0QuYl)Bpeg literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_e_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..59da70a129c584dd634fbce95e8e9c8746c76109 GIT binary patch literal 1569 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86W@KVyoyGc&~ss@DmxUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$^sGZ!Z}6DK!kBV7K5=uIIf%=GOPZ1h2i11YhbqT>kpy%e~+X8)bp>OiA`JTrUKZ71&FdK1M3=u|B#R zVz9ZlGSFAZjRja?4UZl^CZ{`2#!L4cg{>K*D2G`$P*e?2#Mi(1OIOWk$Ba+8KD zj4x)e9^UXl;zF>H!z+_5r3VdkY}met@K4yqb;Rb&hW;5g)7W(0-G7{Uw_NC<<^

^B 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..231d3c51b9e5d59aa98f9871eadd0d7a823b5565 GIT binary patch literal 1755 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g_fully_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_g_fully_roam.png new file mode 100755 index 0000000000000000000000000000000000000000..21d7c389157847feb4b9e5e7aeefc25406b6d671 GIT binary patch literal 1719 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U{K*;V_;x76n)Z{fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdynT4qQ@NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86>1t?dYU=Fb zWZ-OMXy|HeVPa1J#R)9aa6T#}fVoC>oyGc&~ss@EB>UMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh?_tUDU|2r)zIlD_3XY`613Rv-ema-6$PEsfp zdd9m!V0Hk@%Etz`4hh!@(T9rrmItxC+d7xw?+1gp`O9K9YS}JnuH@`ZwrXA_2bcAEsOWoUm^H3mc&GA!@Z;u^H)|V1o%N(vL>s=H z>v>A~LE4PzmYNTDKE5LHgvayq4&FP{E04MSvzwNYYu|8l!rk@joBLgsW<9ojR{r6s zbh+1>`&BFE?pLcnsI+HwMC#vfZQq`kYy4H0t!FNuexT{J#qI-| zQ&-I{32@L;(tfhj@XW(q%~hr1`5(8p7_aIVzRo;LEskG9ELuo7CBD`5uj}Xk?e_DZ c&Szj|*w=SCS^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=Oajm(XWOx+wEEu9QpjSUSgEDa3Y98JufEe+i)4V+wIW?<86Y+-5P=Imtb zWZ-OUXy|I}WMt}QY3b@}Y-;9WW@_L9)9aa6T#}fVoC>oyGc&~ss@DjwUMuIK)Wnkf zqLBRj99Rkn$jC3rFV4s>P;d@5Q_u*{%uC5HFV+M_4>;_tTvCfN%TiO^it=+6z~O6^ ziN$_rb3*=x=uIIf%=GOPZ1h2i11Yh$D7Da)0VO875&7KmQ7T4(O>B*&y_bK`rr`3H$-|9kRNUK~6w{q*ned*7?? z|L#4t`l?q~QfK>KhS1R3uli!$ZTF8aS|Vij(rkmMW|Be)?^X2&J}DiIS42bN8@xHr z#!pmW3la~kWh+};a_ogoEz6`pBYrDy_XDvD%j~6k>lOu-#BXo#(waK!w@e({tOLxO z*_1>Uvzj#6ZQw6qlK33DHmo}5sso3iMhL4>#XN@06*E5@#>p;ORn~jRD!J=;oquDq zujk5B0UhT;ni@l_zZvkgethkFO7!#{bHzS#5){1qt2-oCErKor5v70Eney(9JbD24L>fQGfqjX}uX56%?=G3`y#+YSY zSIONSt;~};-xxkMd2#rw#M>ydtc%fycrRY>e9L-P?B1sgF?U9_6YIKUzS+-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OEi)vdB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHFo#!jxrrY1(tE=~rn#)gI#mIelHjwa^LmWFPY22QRpGqCA(G;=g@b1`>v zGH`J=G;}q#urx4tHgGj{wJ>vbv2byM>GjMjE=kNwPKDWUIt*47)NX4zBKmY&RA9iRG)eZ|-Vy~pcwAzCEumQt?0}mO4b~@N_zPPwv!El-4 zJ9WJU%e@-E)GFjT_pMkcl|08`4%?Bb4my3l2Lrkdw<){#`9$xj_-L(A&7|iq*t2nU z`1)N8D+4lK95^7S5Vv;iTHEe6fN*#7?ZjkeEpUmBw6jj+%`TN^jVOv{U;f9>N zB4-w91GXebjo&((ST0OXH0eyw%?9%5Gf?Mu!GQ29s&^RZDi?QUVo-p00i_ I>zopr06$&g=l}o! literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_gsm_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_gsm_fully.png new file mode 100755 index 0000000000000000000000000000000000000000..c8aad28e7b70912a6b524334df7a59496ece3854 GIT binary patch literal 1403 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_sim2_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_sim2_4g.png new file mode 100644 index 0000000000000000000000000000000000000000..6fac79fef148a000179a5708bb13059d9db98576 GIT binary patch literal 1658 zcmeAS@N?(olHy`uVBq!ia0y~yU^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yem^-DCqp zLj^N4Jwp>yGc!XS1tSAPBYguSeFHOHLlY}gGbE!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bhzzHo!{ilG6OoS&;-kyxN_sAr&`n+x(6*u%voL8%C5 zU{zflQdy9yACy|0Us{x$8kCx*jARvli$Dqse0{C_i!#$Q^AdAh@{>z*Q}aqZU2K&q zatriQGE=OKO)bn#oeWJ~T#YPTO$-e!4V+wDjf{-UEX)l}oSn^KW?<86Y3%A|WaJFe zX=Z5XYGUbX=;UN-WNPZ{VqoIpvMGrXatz1%zGRsm^+=}vZ6~N(Z zm5IfE!v2QnO(7@D^z9UE^g)RODY3wWf?V7{OmMmerExn2MCM7&OR-fdQnI&WTAmTh zz`(T1)5S5Q;?|oP*8Yzj1db=mnLdOHE@>Z7B({(Gyu{ zcf``hg*j*+Ly(=Lh*wE#e%P$3ZCBq_{E?Y^aFy?cIgMqRCO;r(k~QNQx!0lt4;_eGLt>oLyLlFwoC*!|3En%Dz%22+##8!8_R_bjc|Q1^ zP}%g7D`9TQc1g+gF-#&+?02Q&{)wHo{IHBQ?LiE~%N!{wxg)F+l2ZNL4o?nbPoB9W zHl_0r;|{lJE$j=F_t-HX71a;?-@xY>f26#lZnCN4euvo$7*{k4edF7uzR`NtuiKU4 zmv~dndPP-dZPJO|;Sv5^=h0HDX=`4lon5CRd4nNWVBK!9XIpX>{dm2jcJ(QjHda09 zDGW#JO3w>@pB?jFlfj)OtLJxuXwu($d!Gf4uk7zQ6&N+!JBqU`(zvhwvE1U`CU;5i z+pT?!K0cd{oMB$ja>f7UucD$Zu9_Ezn0k1w?@C@XK_>lVo?ctWLZh^4oF7=XEd3ED zIzPC9yWGp1-$HHy`wPaZ2Dt^cX-6+qB;DXv=P6A3e5?6cdAl~XN)lIv;? zbntqeS#!$RfVc0;i3k3x#dR)6Yz+ErHvKTm_2#Mv#usK^=HZzpy5PJ6|A+gmJ61<- z;p6sE`W)e*U&9twYhs`DYo5uz^rv=dSG;>8uk9^Z8f}>`x4`Kfnz#MFT=mdnTiYy44XY&978;gzrDQI&&g4s?P2%MDa=N{@c>irt%jn2BvD5%=^0ak-#5KkKx*XGgCM`;@e)eDUP1izfQp zUikdVM%9L8aHn?@!2oE?{V4{dw{e1_lPv64!_l=c3falFa-(g^c8tNJv=o*-Y7#dj_SXvnw=^B_@85q2k&5uCQ zkei>9nO2Eg!yJd}AScLxYzWRzD=AMbN@Z|N$xljEaLX)8Ezd8?E>>_3HZ9!x*o=XJ Ofx*+&&t;ucLK6VkE2pLa literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..5a313c514889d13a8584b95c72fc91c23a3e756a GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjPjl?jv*e$-(KD8#q223_Ave0 zU6CkHuE32GIFxR6D%^O!j3C(M!L4l<%oLnwv4Z4PkP-s zqx5rg?kjWDul>O6dv?9|O`byazMppr=81^7=vrsIAEoUW(ssG*G_y>7$iToLTH+c};#`!PSdy8arx22v zo62CQZ)mJR0bmhLqlCd16>2t5JMv?14}C-BV7Y? zD+7bKviT7x8glbfGSez?YnbD3{RsmDgAB-q;QX|b^2DN42FH~Aq*MjB%%art{G#k) Z1?OPX!mW?Z7#J8BJYD@<);T3K0RRA`*WCaB literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png new file mode 100644 index 0000000000000000000000000000000000000000..373a4a4e01747e41b73bc25ded403645a42101f5 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYy3@bfd978;gzn!>|uPK1X)nER- z;e!(iR|LftOLKG1u50-J*8D~I4nZH;9!AL?F=6)mH*YO7U#{t*H1WOSiS?p!6DIdZ z=Q-V(Cu<}B#@DeaXagJ9IS#9%ehm)J3Ku5u@#Y@aiuSUy@-o{yTh%YXC`+d6(TbB7 z+UK8Lm*mRraC*`zc@?(ptn6tPOmhCG<_J&UJ^$(EdCJ!v=hoa>QWe}Xi&D$;i?WLqoP$jZw>~ywU|?YIboFyt=akR{ E01T~`kN^Mx literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png new file mode 100644 index 0000000000000000000000000000000000000000..d299daf0bad8bbb1f6a4bbc064657a5d38d594c1 GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYy42L~k978;gzrD24i`h}6_2K(G zA;DV4==q1jKQ!vruq9qNl%TEBs!-;2E!I4FqJmONm}={TKX32+d|vP_U}cEb|K=Yb zEB_h4lxmN^)N-xrduwK(dFeZs{k0~uD+?C>o~u_PH@EhZZ_Mi>@BXPNyV_WmuG#)= zS>gLj0a`0GUu^pDD9c)O)03@J)~>l-ke#V!y`jY1EaqBjqN-$z<0h^2-+orl#QJp3 z9Ctrn5}BdeyhQeN*u6Jx2R7e3d%XQ7bG2}&Rt5W^n`TeveQw{%z`!6{;u=xnT$Gwv zl9`{U5R#dj%3!E(XsmB&`0wJnas~zlRgi*|#FA92WRR*<1|tJQLtR4yT?5k)Lt`sb zBP(N5T?2C~1A`5Q_bX5|S?=U~&qt&hzZ7#J8lUHx3vIVCg!0J*WTz5oCK literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfdb7b41d91fd2616f275b969a69e0990488ce9 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYyjM|eOl4?(w^-3+KMlYvs;be{5QG%;~*Vx1aK7suk{$ zvI>cg&Z;Qd-1`60x%Zt-GjE?g#=9tb^OWe5?%!TSs;;uBKEu1bP`*xB``{^+=V9NP zs|>E1ew`qH_Ti$0yrk5mdBxh6RZRC>%3uA744gH$@!L)I_d2HnELfyk3>X*~L`z&F zN}P*Q6H7Al^Atidb5j`%^$m^n4GsTYTvyJ(z@Q3Jkdj!EYLyI9mC9gbU}&goXrOCg z8e(W{Wol$)Y^rNuZe?Jw!SH?siiX_$l+3hB+!_w%q#t2mV2}aX5S*V@Ql40p%HWui lpOmWLmRXcqo?nz*tl%7MTDbMG83O|YgQu&X%Q~loCIA&s;u!z{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8125ab785ffb9d5beaf8db50ca44dd48fa347e GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K*;VPIfbVE0;pfq{W3$=lt9;eUJonf(k5 z44efXk;M!Q+(IDCcKfnz#MFT=mdnTiYy42wKn978;gzrC#%`{!$sxg zWlksNoNeSed*Q;#v-cGL{}=w*;lL6mUj9N!a*pOz*2cDWi>fRCiXDyfH`s`6DBe2z z9ryg^^80@0FR-3Gw!rX)hw6QqyOHnLmB+36y>+e1YRi3_-UaJ(ExLDHD0V_ltbyP2 zq}ku6mc;YD*kUEa`}5=WHMzO()%@ly*?PV5iQSZV*Wb^JJq3D?)?Uxr8ufPSFUIN+ zN$*Qn0<;+z7(`24BTAf$QWHxu^Yau!GILWI4D}6-^$iXGU0herz`&piQjn5Zl4_L< zQkBYJWMF8hYiOWrU>ag*Y-MU>Wo)KvU~Xk#(0KFcQxpxk`6-!cmAEy0XsL~4U|^5| y*$|wcR#Ki=l*-_klAn~S;FejGTAp8&U98|7Y+AVWu^9sc1B0ilpUXO@geCx$Bcg5q literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable/stat_sys_signal_in_auto_mirrored.xml b/packages/SystemUI/res/drawable/stat_sys_signal_in_auto_mirrored.xml new file mode 100644 index 000000000000..90ca7312a447 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_signal_in_auto_mirrored.xml @@ -0,0 +1,32 @@ + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_signal_inout_auto_mirrored.xml b/packages/SystemUI/res/drawable/stat_sys_signal_inout_auto_mirrored.xml new file mode 100644 index 000000000000..c42811462674 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_signal_inout_auto_mirrored.xml @@ -0,0 +1,32 @@ + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_signal_out_auto_mirrored.xml b/packages/SystemUI/res/drawable/stat_sys_signal_out_auto_mirrored.xml new file mode 100644 index 000000000000..ce58d6c207e6 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_signal_out_auto_mirrored.xml @@ -0,0 +1,32 @@ + + + + diff --git a/packages/SystemUI/res/layout/mobile_signal_group.xml b/packages/SystemUI/res/layout/mobile_signal_group.xml index a20ec8e7623d..436f4a4540a5 100644 --- a/packages/SystemUI/res/layout/mobile_signal_group.xml +++ b/packages/SystemUI/res/layout/mobile_signal_group.xml @@ -1,5 +1,10 @@ - - - - - + android:layout_height="wrap_content" + > + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml old mode 100644 new mode 100755 index d17601c1c054..4cd6d04ec3ca --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -70,6 +70,13 @@ android:layout_width="wrap_content" android:alpha="0.0" /> + + + "4G" "LTE" "CDMA" - "漫游中" + "数据漫游" "EDGE" "WLAN" "无 SIM 卡。" diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 7f03c5d8e19e..77576e7b9607 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -145,7 +145,7 @@ "4G" "LTE" "CDMA" - "漫遊中" + "數據漫遊" "Edge" "Wi-Fi" "沒有 SIM 卡。" diff --git a/packages/SystemUI/res/values/arrays.xml b/packages/SystemUI/res/values/arrays.xml index bf0cba22ab0c..f4b14a308dd8 100644 --- a/packages/SystemUI/res/values/arrays.xml +++ b/packages/SystemUI/res/values/arrays.xml @@ -1,5 +1,8 @@ + + + + array/telephony_data_type_sim1 + array/telephony_data_type_sim1 + array/telephony_data_type_sim1 + + + + + 0 + + drawable/stat_sys_data_fully_connected_g + + drawable/stat_sys_data_fully_connected_e + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_1x + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_1x + + drawable/stat_sys_data_fully_connected_h + + drawable/stat_sys_data_fully_connected_h + + drawable/stat_sys_data_fully_connected_h + + 0 + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_g + + drawable/stat_sys_data_fully_connected_3g + + 0 + + + + + + + + + + + + + drawable/stat_sys_data_fully_connected_3g + + drawable/stat_sys_data_fully_connected_4g + + drawable/stat_sys_data_fully_connected_4g_plus + + + + + + 0 + + string/accessibility_data_connection_gprs + + string/accessibility_data_connection_edge + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_cdma + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_cdma + + string/accessibility_data_connection_3.5g + + string/accessibility_data_connection_3.5g + + string/accessibility_data_connection_3.5g + + 0 + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_lte + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_3.5g + + string/accessibility_data_connection_gprs + + string/accessibility_data_connection_3g + + 0 + + + + + string/accessibility_data_connection_3g + + string/accessibility_data_connection_4g + + + + + + array/data_activity_sim1 + array/data_activity_sim1 + array/data_activity_sim1 + + + + array/telephony_data_activity_unknown_sim1 + array/telephony_data_activity_g_sim1 + array/telephony_data_activity_e_sim1 + array/telephony_data_activity_2g_sim1 + array/telephony_data_activity_3g_sim1 + array/telephony_data_activity_4g_sim1 + array/telephony_data_activity_h_sim1 + array/telephony_data_activity_hp_sim1 + array/telephony_data_activity_1x_sim1 + array/telephony_data_activity_lte_sim1 + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + 0 + drawable/stat_sys_signal_in_auto_mirrored + drawable/stat_sys_signal_out_auto_mirrored + drawable/stat_sys_signal_inout_auto_mirrored + 0 + + + + + + + + + + + + + array/telephony_siganl_strength_sim1 + array/telephony_siganl_strength_sim1 + array/telephony_siganl_strength_sim1 + + + + + array/telephony_siganl_strength_roaming_sim1 + array/telephony_siganl_strength_roaming_sim1 + array/telephony_siganl_strength_roaming_sim1 + + + + array/telephony_signal_strength_g_sim1 + array/telephony_signal_strength_e_sim1 + array/telephony_signal_strength_3g_sim1 + array/telephony_signal_strength_4g_sim1 + array/telephony_signal_strength_h_sim1 + array/telephony_signal_strength_hp_sim1 + array/telephony_signal_strength_1x_sim1 + array/telephony_signal_strength_cdma_sim1 + array/telephony_signal_strength_umts_sim1 + + + + + + + + + + array/telephony_signal_strength_g_roaming_sim1 + array/telephony_signal_strength_e_roaming_sim1 + array/telephony_signal_strength_3g_roaming_sim1 + array/telephony_signal_strength_4g_roaming_sim1 + array/telephony_signal_strength_h_roaming_sim1 + array/telephony_signal_strength_hp_roaming_sim1 + array/telephony_signal_strength_1x_roaming_sim1 + array/telephony_signal_strength_cdma_roaming_sim1 + array/telephony_signal_strength_umts_roaming_sim1 + + + + + + + + + + array/signal_strength_g_normal_sim1 + array/signal_strength_g_fully_sim1 + + + + array/signal_strength_g_normal_roaming_sim1 + array/signal_strength_g_fully_roaming_sim1 + + + + array/signal_strength_e_normal_sim1 + array/signal_strength_e_fully_sim1 + + + + array/signal_strength_e_normal_roaming_sim1 + array/signal_strength_e_fully_roaming_sim1 + + + + array/signal_strength_3g_normal_sim1 + array/signal_strength_3g_fully_sim1 + + + + array/signal_strength_3g_normal_roaming_sim1 + array/signal_strength_3g_fully_roaming_sim1 + + + + array/signal_strength_4g_normal_sim1 + array/signal_strength_4g_fully_sim1 + + + + array/signal_strength_4g_normal_roaming_sim1 + array/signal_strength_4g_fully_roaming_sim1 + + + + array/signal_strength_h_normal_sim1 + array/signal_strength_h_fully_sim1 + + + + array/signal_strength_h_normal_roaming_sim1 + array/signal_strength_h_fully_roaming_sim1 + + + + array/signal_strength_hp_normal_sim1 + array/signal_strength_hp_fully_sim1 + + + + array/signal_strength_hp_normal_roaming_sim1 + array/signal_strength_hp_fully_roaming_sim1 + + + + array/signal_strength_1x_normal_sim1 + array/signal_strength_1x_fully_sim1 + + + + array/signal_strength_1x_normal_roaming_sim1 + array/signal_strength_1x_fully_roaming_sim1 + + + + array/signal_strength_cdma_normal_sim1 + array/signal_strength_cdma_fully_sim1 + + + + array/signal_strength_cdma_normal_roaming_sim1 + array/signal_strength_cdma_fully_roaming_sim1 + + + + array/signal_strength_umts_normal_sim1 + array/signal_strength_umts_fully_sim1 + + + + array/signal_strength_umts_normal_roaming_sim1 + array/signal_strength_umts_fully_roaming_sim1 + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + drawable/stat_sys_signal_0_fully + drawable/stat_sys_signal_1_fully + drawable/stat_sys_signal_2_fully + drawable/stat_sys_signal_3_fully + drawable/stat_sys_signal_4_fully + + + + + string/accessibility_no_phone + string/accessibility_phone_one_bar + string/accessibility_phone_two_bars + string/accessibility_phone_three_bars + string/accessibility_phone_signal_full + + + + + + drawable/stat_sys_signal_null + drawable/stat_sys_signal_null + drawable/stat_sys_signal_null + + + + + + drawable/stat_sys_no_sims + drawable/stat_sys_no_sims + drawable/stat_sys_no_sims + + + + + array/signal_strength_g_normal_sim2 + array/signal_strength_g_fully_sim2 + + + array/signal_strength_g_normal_roaming_sim2 + array/signal_strength_g_fully_roaming_sim2 + + + array/signal_strength_e_normal_sim2 + array/signal_strength_e_fully_sim2 + + + array/signal_strength_e_normal_roaming_sim2 + array/signal_strength_e_fully_roaming_sim2 + + + array/signal_strength_3g_normal_sim2 + array/signal_strength_3g_fully_sim2 + + + array/signal_strength_3g_normal_roaming_sim2 + array/signal_strength_3g_fully_roaming_sim2 + + + array/signal_strength_4g_normal_sim2 + array/signal_strength_4g_fully_sim2 + + + array/signal_strength_4g_normal_roaming_sim2 + array/signal_strength_4g_fully_roaming_sim2 + + + array/signal_strength_h_normal_sim2 + array/signal_strength_h_fully_sim2 + + + array/signal_strength_h_normal_roaming_sim2 + array/signal_strength_h_fully_roaming_sim2 + + + array/signal_strength_hp_normal_sim2 + array/signal_strength_hp_fully_sim2 + + + array/signal_strength_hp_normal_roaming_sim2 + array/signal_strength_hp_fully_roaming_sim2 + + + array/signal_strength_1x_normal_sim2 + array/signal_strength_1x_fully_sim2 + + + array/signal_strength_1x_normal_roaming_sim2 + array/signal_strength_1x_fully_roaming_sim2 + + + array/signal_strength_cdma_normal_sim2 + array/signal_strength_cdma_fully_sim2 + + + array/signal_strength_cdma_normal_roaming_sim2 + array/signal_strength_cdma_fully_roaming_sim2 + + + array/signal_strength_umts_normal_sim2 + array/signal_strength_umts_fully_sim2 + + + array/signal_strength_umts_normal_roaming_sim2 + array/signal_strength_umts_fully_roaming_sim2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + array/signal_strength_g_normal_sim3 + array/signal_strength_g_fully_sim3 + + + array/signal_strength_g_normal_roaming_sim3 + array/signal_strength_g_fully_roaming_sim3 + + + array/signal_strength_e_normal_sim3 + array/signal_strength_e_fully_sim3 + + + array/signal_strength_e_normal_roaming_sim3 + array/signal_strength_e_fully_roaming_sim3 + + + array/signal_strength_3g_normal_sim3 + array/signal_strength_3g_fully_sim3 + + + array/signal_strength_3g_normal_roaming_sim3 + array/signal_strength_3g_fully_roaming_sim3 + + + array/signal_strength_4g_normal_sim3 + array/signal_strength_4g_fully_sim3 + + + array/signal_strength_4g_normal_roaming_sim3 + array/signal_strength_4g_fully_roaming_sim3 + + + array/signal_strength_h_normal_sim3 + array/signal_strength_h_fully_sim3 + + + array/signal_strength_h_normal_roaming_sim3 + array/signal_strength_h_fully_roaming_sim3 + + + array/signal_strength_hp_normal_sim3 + array/signal_strength_hp_fully_sim3 + + + array/signal_strength_hp_normal_roaming_sim3 + array/signal_strength_hp_fully_roaming_sim3 + + + array/signal_strength_1x_normal_sim3 + array/signal_strength_1x_fully_sim3 + + + array/signal_strength_1x_normal_roaming_sim3 + array/signal_strength_1x_fully_roaming_sim3 + + + array/signal_strength_cdma_normal_sim3 + array/signal_strength_cdma_fully_sim3 + + + array/signal_strength_cdma_normal_roaming_sim3 + array/signal_strength_cdma_fully_roaming_sim3 + + + array/signal_strength_umts_normal_sim3 + array/signal_strength_umts_fully_sim3 + + + array/signal_strength_umts_normal_roaming_sim3 + array/signal_strength_umts_fully_roaming_sim3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @drawable/stat_sys_signal_0_3g + @drawable/stat_sys_signal_0_4g + @drawable/stat_sys_signal_1_3g + @drawable/stat_sys_signal_1_4g + @drawable/stat_sys_signal_2_3g + @drawable/stat_sys_signal_2_4g + @drawable/stat_sys_signal_3_3g + @drawable/stat_sys_signal_3_4g + @drawable/stat_sys_signal_4_3g + @drawable/stat_sys_signal_4_4g + @drawable/stat_sys_signal_0_3g_fully + @drawable/stat_sys_signal_0_4g_fully + @drawable/stat_sys_signal_1_3g_fully + @drawable/stat_sys_signal_1_4g_fully + @drawable/stat_sys_signal_2_3g_fully + @drawable/stat_sys_signal_2_4g_fully + @drawable/stat_sys_signal_3_3g_fully + @drawable/stat_sys_signal_3_4g_fully + @drawable/stat_sys_signal_4_3g_fully + @drawable/stat_sys_signal_4_4g_fully + + + + @drawable/stat_sys_signal_0_3g_default + @drawable/stat_sys_signal_0_4g_default + @drawable/stat_sys_signal_1_3g_default + @drawable/stat_sys_signal_1_4g_default + @drawable/stat_sys_signal_2_3g_default + @drawable/stat_sys_signal_2_4g_default + @drawable/stat_sys_signal_3_3g_default + @drawable/stat_sys_signal_3_4g_default + @drawable/stat_sys_signal_4_3g_default + @drawable/stat_sys_signal_4_4g_default + @drawable/stat_sys_signal_0_3g_default_fully + @drawable/stat_sys_signal_0_4g_default_fully + @drawable/stat_sys_signal_1_3g_default_fully + @drawable/stat_sys_signal_1_4g_default_fully + @drawable/stat_sys_signal_2_3g_default_fully + @drawable/stat_sys_signal_2_4g_default_fully + @drawable/stat_sys_signal_3_3g_default_fully + @drawable/stat_sys_signal_3_4g_default_fully + @drawable/stat_sys_signal_4_3g_default_fully + @drawable/stat_sys_signal_4_4g_default_fully + diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index d420e11b0f35..bf42da509664 100755 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -116,6 +116,35 @@ true + + false + + + false + + + false + + + false + + + 0 + + + false + 5000 diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 0de5105485dc..88869d9e9919 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -196,8 +196,9 @@ public class CellularTile extends QSTile { @Override public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, String typeContentDescription, - String description, boolean isWide, int subId) { + int qsType, boolean activityIn, boolean activityOut, int dataActivityId, + int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon, + String typeContentDescription, String description, boolean isWide, int subId) { if (qsIcon == null) { // Not data sim, don't display. return; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 599e575a0e24..93ad4924ff69 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -71,8 +71,8 @@ public class SignalClusterView private int mEthernetIconId = 0; private int mLastEthernetIconId = -1; private boolean mWifiVisible = false; - private int mWifiStrengthId = 0; - private int mLastWifiStrengthId = -1; + private int mWifiStrengthId = 0, mWifiActivityId = 0; + private int mLastWifiStrengthId = -1, mLastWifiActivityId = -1; private boolean mIsAirplaneMode = false; private int mAirplaneIconId = 0; private int mLastAirplaneIconId = -1; @@ -83,10 +83,12 @@ public class SignalClusterView private int mIconTint = Color.WHITE; private float mDarkIntensity; private final Rect mTintArea = new Rect(); + private int mNoSimsIcon; ViewGroup mEthernetGroup, mWifiGroup; View mNoSimsCombo; ImageView mVpn, mEthernet, mWifi, mAirplane, mNoSims, mEthernetDark, mWifiDark, mNoSimsDark; + ImageView mWifiActivity; View mWifiAirplaneSpacer; View mWifiSignalSpacer; LinearLayout mMobileSignalGroup; @@ -177,6 +179,7 @@ public class SignalClusterView mWifiGroup = (ViewGroup) findViewById(R.id.wifi_combo); mWifi = (ImageView) findViewById(R.id.wifi_signal); mWifiDark = (ImageView) findViewById(R.id.wifi_signal_dark); + mWifiActivity = (ImageView) findViewById(R.id.wifi_inout); mAirplane = (ImageView) findViewById(R.id.airplane); mNoSims = (ImageView) findViewById(R.id.no_sims); mNoSimsDark = (ImageView) findViewById(R.id.no_sims_dark); @@ -226,6 +229,13 @@ public class SignalClusterView @Override protected void onDetachedFromWindow() { + mVpn = null; + mEthernetGroup = null; + mEthernet = null; + mWifiGroup = null; + mWifi = null; + mWifiActivity = null; + mAirplane = null; mMobileSignalGroup.removeAllViews(); TunerService.get(mContext).removeTunable(this); mSC.removeCallback(this); @@ -259,6 +269,7 @@ public class SignalClusterView boolean activityIn, boolean activityOut, String description) { mWifiVisible = statusIcon.visible && !mBlockWifi; mWifiStrengthId = statusIcon.icon; + mWifiActivityId = getWifiActivityId(activityIn, activityOut); mWifiDescription = statusIcon.contentDescription; apply(); @@ -266,8 +277,9 @@ public class SignalClusterView @Override public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, String typeContentDescription, - String description, boolean isWide, int subId) { + int qsType, boolean activityIn, boolean activityOut, int dataActivityId, + int mobileActivityId, int stackedDataId, int stackedVoiceId, + String typeContentDescription, String description, boolean isWide, int subId) { PhoneState state = getState(subId); if (state == null) { return; @@ -278,6 +290,10 @@ public class SignalClusterView state.mMobileDescription = statusIcon.contentDescription; state.mMobileTypeDescription = typeContentDescription; state.mIsMobileTypeIconWide = statusType != 0 && isWide; + state.mDataActivityId = dataActivityId; + state.mMobileActivityId = mobileActivityId; + state.mStackedDataId = stackedDataId; + state.mStackedVoiceId = stackedVoiceId; apply(); } @@ -347,6 +363,43 @@ public class SignalClusterView return null; } + + private int getWifiActivityId(boolean activityIn, boolean activityOut) { + if (!getContext().getResources().getBoolean(R.bool.config_showWifiActivity)) { + return 0; + } + int activityId = 0; + if (activityIn && activityOut) { + activityId = R.drawable.stat_sys_wifi_inout; + } else if (activityIn) { + activityId = R.drawable.stat_sys_wifi_in; + } else if (activityOut) { + activityId = R.drawable.stat_sys_wifi_out; + } + return activityId; + } + + private int getNoSimIcon() { + int resId = 0; + final String[] noSimArray; + Resources res = getContext().getResources(); + + if (!res.getBoolean(R.bool.config_read_icons_from_xml)) return resId; + + try { + noSimArray = res.getStringArray(R.array.multi_no_sim); + } catch (android.content.res.Resources.NotFoundException e) { + return resId; + } + + if (noSimArray == null) return resId; + + String resName = noSimArray[0]; + resId = res.getIdentifier(resName, null, getContext().getPackageName()); + if (DEBUG) Log.d(TAG, "getNoSimIcon resId = " + resId + " resName = " + resName); + return resId; + } + private PhoneState inflatePhoneState(int subId) { PhoneState state = new PhoneState(subId, mContext); if (mMobileSignalGroup != null) { @@ -401,6 +454,11 @@ public class SignalClusterView mLastWifiStrengthId = -1; } + if (mWifiActivity != null) { + mWifiActivity.setImageDrawable(null); + mLastWifiActivityId = -1; + } + for (PhoneState state : mPhoneStates) { if (state.mMobile != null) { state.maybeStopAnimatableDrawable(state.mMobile); @@ -460,6 +518,10 @@ public class SignalClusterView setIconForView(mWifiDark, mWifiStrengthId); mLastWifiStrengthId = mWifiStrengthId; } + if (mWifiActivityId != mLastWifiActivityId) { + mWifiActivity.setImageResource(mWifiActivityId); + mLastWifiActivityId = mWifiActivityId; + } mWifiGroup.setContentDescription(mWifiDescription); mWifiGroup.setVisibility(View.VISIBLE); } else { @@ -467,9 +529,9 @@ public class SignalClusterView } if (DEBUG) Log.d(TAG, - String.format("wifi: %s sig=%d", + String.format("wifi: %s sig=%d act=%d", (mWifiVisible ? "VISIBLE" : "GONE"), - mWifiStrengthId)); + mWifiStrengthId, mWifiActivityId)); boolean anyMobileVisible = false; int firstMobileTypeId = 0; @@ -505,6 +567,13 @@ public class SignalClusterView mWifiSignalSpacer.setVisibility(View.GONE); } + if (mNoSimsVisible && mNoSims != null && mNoSimsDark != null) { + if (mNoSimsIcon == 0) mNoSimsIcon = getNoSimIcon(); + if (mNoSimsIcon != 0) { + mNoSims.setImageResource(mNoSimsIcon); + mNoSimsDark.setImageResource(mNoSimsIcon); + } + } mNoSimsCombo.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE); boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode @@ -576,6 +645,11 @@ public class SignalClusterView private ViewGroup mMobileGroup; private ImageView mMobile, mMobileDark, mMobileType; + private int mDataActivityId = 0, mMobileActivityId = 0; + private int mStackedDataId = 0, mStackedVoiceId = 0; + private ImageView mDataActivity, mMobileActivity, mStackedData, mStackedVoice; + private ViewGroup mMobileSingleGroup, mMobileStackedGroup; + public PhoneState(int subId, Context context) { ViewGroup root = (ViewGroup) LayoutInflater.from(context) .inflate(R.layout.mobile_signal_group, null); @@ -588,6 +662,14 @@ public class SignalClusterView mMobile = (ImageView) root.findViewById(R.id.mobile_signal); mMobileDark = (ImageView) root.findViewById(R.id.mobile_signal_dark); mMobileType = (ImageView) root.findViewById(R.id.mobile_type); + mMobileActivity = (ImageView) root.findViewById(R.id.mobile_inout); + + mDataActivity = (ImageView) root.findViewById(R.id.data_inout); + mStackedData = (ImageView) root.findViewById(R.id.mobile_signal_data); + mStackedVoice = (ImageView) root.findViewById(R.id.mobile_signal_voice); + + mMobileSingleGroup = (ViewGroup) root.findViewById(R.id.mobile_signal_single); + mMobileStackedGroup = (ViewGroup) root.findViewById(R.id.mobile_signal_stacked); } public boolean apply(boolean isSecondaryIcon) { @@ -602,6 +684,37 @@ public class SignalClusterView mMobileType.setImageResource(mMobileTypeId); mLastMobileTypeId = mMobileTypeId; } + + mDataActivity.setImageResource(mDataActivityId); + Drawable dataActivityDrawable = mDataActivity.getDrawable(); + if (dataActivityDrawable instanceof Animatable) { + Animatable ad = (Animatable) dataActivityDrawable; + if (!ad.isRunning()) { + ad.start(); + } + } + + mMobileActivity.setImageResource(mMobileActivityId); + Drawable mobileActivityDrawable = mMobileActivity.getDrawable(); + if (mobileActivityDrawable instanceof Animatable) { + Animatable ad = (Animatable) mobileActivityDrawable; + if (!ad.isRunning()) { + ad.start(); + } + } + + if (mStackedDataId != 0 && mStackedVoiceId != 0) { + mStackedData.setImageResource(mStackedDataId); + mStackedVoice.setImageResource(mStackedVoiceId); + mMobileSingleGroup.setVisibility(View.GONE); + mMobileStackedGroup.setVisibility(View.VISIBLE); + } else { + mStackedData.setImageResource(0); + mStackedVoice.setImageResource(0); + mMobileSingleGroup.setVisibility(View.VISIBLE); + mMobileStackedGroup.setVisibility(View.GONE); + } + mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription); mMobileGroup.setVisibility(View.VISIBLE); @@ -623,6 +736,8 @@ public class SignalClusterView (mMobileVisible ? "VISIBLE" : "GONE"), mMobileStrengthId, mMobileTypeId)); mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE); + mDataActivity.setVisibility(mDataActivityId != 0 ? View.VISIBLE : View.GONE); + mMobileActivity.setVisibility(mMobileActivityId != 0 ? View.VISIBLE : View.GONE); return mMobileVisible; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java old mode 100644 new mode 100755 index 5fab79692135..03815bb88e77 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -63,6 +63,7 @@ public class NavigationBarView extends LinearLayout { View mCurrentView = null; View[] mRotatedViews = new View[4]; + int mBarSize; boolean mVertical; boolean mScreenOn; @@ -183,6 +184,7 @@ public class NavigationBarView extends LinearLayout { mDisplay = ((WindowManager) context.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay(); + mBarSize = context.getResources().getDimensionPixelSize(R.dimen.navigation_bar_size); mVertical = false; mShowMenu = false; mGestureHelper = new NavigationBarGestureHelper(context); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java old mode 100644 new mode 100755 index f7b258f62f09..d7411cc70a08 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -88,6 +88,7 @@ import android.view.ThreadedRenderer; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewParent; import android.view.ViewStub; import android.view.ViewTreeObserver; @@ -362,6 +363,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, int mMaxAllowedKeyguardNotifications; + // carrier label + private TextView mCarrierLabel; + private boolean mShowCarrierInPanel = false; boolean mExpandedVisible; private int mNavigationBarWindowState = WINDOW_STATE_SHOWING; @@ -869,6 +873,23 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, initSignalCluster(mStatusBarView); initSignalCluster(mKeyguardStatusBar); + mCarrierLabel = (TextView)mStatusBarWindow.findViewById(R.id.carrier_label); + final boolean showCarrierLabel = mContext.getResources().getBoolean( + R.bool.config_showCarrierLabel); + mShowCarrierInPanel = showCarrierLabel && (mCarrierLabel != null); + if (DEBUG) Log.v(TAG, "carrierlabel=" + mCarrierLabel + " show=" + mShowCarrierInPanel); + if (mShowCarrierInPanel) { + mCarrierLabel.setVisibility(mShowCarrierInPanel ? View.VISIBLE : View.INVISIBLE); + } + + // make sure carrier label is not covered by navigation bar + if (mCarrierLabel != null && mNavigationBarView != null) { + MarginLayoutParams mlp = (MarginLayoutParams) mCarrierLabel.getLayoutParams(); + if (mlp != null && mlp.bottomMargin < mNavigationBarView.mBarSize) { + mlp.bottomMargin = mNavigationBarView.mBarSize; + mCarrierLabel.setLayoutParams(mlp); + } + } mFlashlightController = new FlashlightController(mContext); mKeyguardBottomArea.setFlashlightController(mFlashlightController); mKeyguardBottomArea.setPhoneStatusBar(this); @@ -1875,6 +1896,21 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateNotifications(); } + protected void updateCarrierLabelVisibility() { + if (!mShowCarrierInPanel) return; + + final boolean makeVisible = mStackScroller.getVisibility() == View.VISIBLE + && mState != StatusBarState.KEYGUARD; + + if ((mCarrierLabel.getVisibility() == View.VISIBLE) != makeVisible) { + if (DEBUG) { + Log.d(TAG, "making carrier label " + (makeVisible?"visible":"invisible")); + } + + mCarrierLabel.setVisibility(makeVisible ? View.VISIBLE : View.INVISIBLE); + } + } + @Override protected void setAreThereNotifications() { @@ -4134,6 +4170,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateStackScrollerState(goingToFullShade, fromShadeLocked); updateNotifications(); checkBarModes(); + updateCarrierLabelVisibility(); updateMediaMetaData(false, mState != StatusBarState.KEYGUARD); mKeyguardMonitor.notifyKeyguardState(mStatusBarKeyguardViewManager.isShowing(), mStatusBarKeyguardViewManager.isSecure()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index 3142ddfe9fb7..16b3ba133b61 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -123,16 +123,19 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon, - final int statusType, final int qsType,final boolean activityIn, - final boolean activityOut, final String typeContentDescription, - final String description, final boolean isWide, final int subId) { + final int statusType, final int qsType, final boolean activityIn, + final boolean activityOut, final int dataActivityId, final int mobileActivityId, + final int stackedDataIcon, final int stackedVoiceIcon, + final String typeContentDescription, final String description, final boolean isWide, + final int subId) { post(new Runnable() { @Override public void run() { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType, - activityIn, activityOut, typeContentDescription, description, isWide, - subId); + activityIn, activityOut, dataActivityId, mobileActivityId, + stackedDataIcon, stackedVoiceIcon, + typeContentDescription, description, isWide, subId); } } }); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java old mode 100644 new mode 100755 index ac3246d5ff6b..8b0ed802556e --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.policy; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.net.NetworkCapabilities; import android.os.Looper; import android.telephony.PhoneStateListener; @@ -57,6 +58,12 @@ public class MobileSignalController extends SignalController< // @VisibleForDemoMode final SparseArray mNetworkToIconLookup; + private boolean mLastShowSpn; + private String mLastSpn; + private String mLastDataSpn; + private boolean mLastShowPlmn; + private String mLastPlmn; + // Since some pieces of the phone state are interdependent we store it locally, // this could potentially become part of MobileState for simplification/complication // of code. @@ -67,6 +74,12 @@ public class MobileSignalController extends SignalController< private MobileIconGroup mDefaultIcons; private Config mConfig; + private final int STATUS_BAR_STYLE_ANDROID_DEFAULT = 0; + private final int STATUS_BAR_STYLE_CDMA_1X_COMBINED = 1; + private final int STATUS_BAR_STYLE_DEFAULT_DATA = 2; + private final int STATUS_BAR_STYLE_DATA_VOICE = 3; + private int mStyle = STATUS_BAR_STYLE_ANDROID_DEFAULT; + // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't // need listener lists anymore. public MobileSignalController(Context context, Config config, boolean hasMobileData, @@ -87,7 +100,14 @@ public class MobileSignalController extends SignalController< mNetworkNameDefault = getStringIfExists( com.android.internal.R.string.lockscreen_carrier_default); - mapIconSets(); + if (config.readIconsFromXml) { + TelephonyIcons.readIconsFromXml(context); + mDefaultIcons = !mConfig.showAtLeast3G ? TelephonyIcons.G : TelephonyIcons.THREE_G; + } else { + mapIconSets(); + } + + mStyle = context.getResources().getInteger(R.integer.status_bar_style); String networkName = info.getCarrierName() != null ? info.getCarrierName().toString() : mNetworkNameDefault; @@ -101,7 +121,9 @@ public class MobileSignalController extends SignalController< public void setConfiguration(Config config) { mConfig = config; - mapIconSets(); + if (!config.readIconsFromXml) { + mapIconSets(); + } updateTelephony(); } @@ -208,6 +230,9 @@ public class MobileSignalController extends SignalController< @Override public void notifyListeners(SignalCallback callback) { + if (mConfig.readIconsFromXml) { + generateIconGroup(); + } MobileIconGroup icons = getIcons(); String contentDescription = getStringIfExists(getContentDescription()); @@ -241,9 +266,14 @@ public class MobileSignalController extends SignalController< showDataIcon &= mCurrentState.isDefault || mCurrentState.iconGroup == TelephonyIcons.ROAMING || dataDisabled; + showDataIcon &= mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT; int typeIcon = showDataIcon ? icons.mDataType : 0; + int dataActivityId = showMobileActivity() ? 0 : icons.mActivityId; + int mobileActivityId = showMobileActivity() ? icons.mActivityId : 0; callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon, - activityIn, activityOut, dataContentDescription, description, icons.mIsWide, + activityIn, activityOut, dataActivityId, mobileActivityId, + icons.mStackedDataIcon, icons.mStackedVoiceIcon, + dataContentDescription, description, icons.mIsWide, mSubscriptionInfo.getSubscriptionId()); } @@ -252,6 +282,15 @@ public class MobileSignalController extends SignalController< return new MobileState(); } + @Override + public int getCurrentIconId() { + if (mConfig.readIconsFromXml && mCurrentState.connected) { + return getIcons().mSingleSignalIcon; + } else { + return super.getCurrentIconId(); + } + } + private boolean hasService() { if (mServiceState != null) { // Consider the device to be in service if either voice or data @@ -309,6 +348,11 @@ public class MobileSignalController extends SignalController< } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) { updateDataSim(); notifyListenersIfNecessary(); + } else if (action.equals(Intent.ACTION_LOCALE_CHANGED)) { + if (mConfig.showLocale) { + updateNetworkName(mLastShowSpn, mLastSpn, mLastDataSpn, mLastShowPlmn, mLastPlmn); + notifyListenersIfNecessary(); + } } } @@ -328,27 +372,85 @@ public class MobileSignalController extends SignalController< } } + private String getLocalString(String originalString) { + return android.util.NativeTextHelper.getLocalString(mContext, originalString, + com.android.internal.R.array.origin_carrier_names, + com.android.internal.R.array.locale_carrier_names); + } + + private String getNetworkClassString(ServiceState state) { + if (state != null && (state.getDataRegState() == ServiceState.STATE_IN_SERVICE || + state.getVoiceRegState() == ServiceState.STATE_IN_SERVICE)) { + int voiceNetType = state.getVoiceNetworkType(); + int dataNetType = state.getDataNetworkType(); + int chosenNetType = + ((dataNetType == TelephonyManager.NETWORK_TYPE_UNKNOWN) + ? voiceNetType : dataNetType); + return networkClassToString(TelephonyManager.getNetworkClass(chosenNetType)); + } else { + return ""; + } + } + + private String networkClassToString (int networkClass) { + final int[] classIds = { 0, // TelephonyManager.NETWORK_CLASS_UNKNOWN + com.android.internal.R.string.config_rat_2g, + com.android.internal.R.string.config_rat_3g, + com.android.internal.R.string.config_rat_4g }; + String classString = null; + if (networkClass < classIds.length) { + classString = mContext.getResources().getString(classIds[networkClass]); + } + return (classString == null) ? "" : classString; + } + /** * Updates the network's name based on incoming spn and plmn. */ void updateNetworkName(boolean showSpn, String spn, String dataSpn, boolean showPlmn, String plmn) { + mLastShowSpn = showSpn; + mLastSpn = spn; + mLastDataSpn = dataSpn; + mLastShowPlmn = showPlmn; + mLastPlmn = plmn; if (CHATTY) { Log.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn + " dataSpn=" + dataSpn + " showPlmn=" + showPlmn + " plmn=" + plmn); } + if (mConfig.showLocale) { + if (showSpn && !TextUtils.isEmpty(spn)) { + spn = getLocalString(spn); + } + if (showSpn && !TextUtils.isEmpty(dataSpn)) { + dataSpn = getLocalString(dataSpn); + } + if (showPlmn && !TextUtils.isEmpty(plmn)) { + plmn = getLocalString(plmn); + } + } + if (showPlmn && showSpn && !TextUtils.isEmpty(spn) && !TextUtils.isEmpty(plmn) + && plmn.equals(spn)) { + showSpn = false; + } + String networkClass = getNetworkClassString(mServiceState); StringBuilder str = new StringBuilder(); StringBuilder strData = new StringBuilder(); if (showPlmn && plmn != null) { str.append(plmn); strData.append(plmn); + if (mConfig.showRat) { + str.append(" ").append(networkClass); + strData.append(" ").append(networkClass); + } } if (showSpn && spn != null) { if (str.length() != 0) { str.append(mNetworkNameSeparator); } str.append(spn); + if (mConfig.showRat) str.append(" ").append(networkClass); } if (str.length() != 0) { mCurrentState.networkName = str.toString(); @@ -360,6 +462,7 @@ public class MobileSignalController extends SignalController< strData.append(mNetworkNameSeparator); } strData.append(dataSpn); + if (mConfig.showRat) strData.append(" ").append(networkClass); } if (strData.length() != 0) { mCurrentState.networkNameData = strData.toString(); @@ -375,7 +478,7 @@ public class MobileSignalController extends SignalController< */ private final void updateTelephony() { if (DEBUG) { - Log.d(mTag, "updateTelephonySignalStrength: hasService=" + hasService() + Log.d(mTag, "updateTelephony: hasService=" + hasService() + " ss=" + mSignalStrength); } mCurrentState.connected = hasService() && mSignalStrength != null; @@ -384,6 +487,13 @@ public class MobileSignalController extends SignalController< mCurrentState.level = mSignalStrength.getCdmaLevel(); } else { mCurrentState.level = mSignalStrength.getLevel(); + if (mConfig.showRsrpSignalLevelforLTE) { + int dataType = mServiceState.getDataNetworkType(); + if (dataType == TelephonyManager.NETWORK_TYPE_LTE || + dataType == TelephonyManager.NETWORK_TYPE_LTE_CA) { + mCurrentState.level = getAlternateLteLevel(mSignalStrength); + } + } } } if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) { @@ -411,19 +521,230 @@ public class MobileSignalController extends SignalController< mCurrentState.networkName = mServiceState.getOperatorAlphaShort(); } + if (mConfig.readIconsFromXml) { + mCurrentState.voiceLevel = getVoiceSignalLevel(); + } + notifyListenersIfNecessary(); } + private boolean isDataDisabled() { return !mPhone.getDataEnabled(mSubscriptionInfo.getSubscriptionId()); } + private void generateIconGroup() { + final int level = mCurrentState.level; + final int voiceLevel = mCurrentState.voiceLevel; + final int inet = mCurrentState.inetCondition; + final boolean dataConnected = mCurrentState.dataConnected; + final boolean roaming = isRoaming(); + final int voiceType = getVoiceNetworkType(); + final int dataType = getDataNetworkType(); + + int[][] sbIcons = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH; + int[][] qsIcons = TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH; + int[] contentDesc = AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH; + int sbDiscState = TelephonyIcons.TELEPHONY_NO_NETWORK; + int qsDiscState = TelephonyIcons.QS_TELEPHONY_NO_NETWORK; + int discContentDesc = AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]; + int dataContentDesc, dataTypeIcon, qsDataTypeIcon, dataActivityId; + int singleSignalIcon, stackedDataIcon = 0, stackedVoiceIcon = 0; + + final int slotId = getSimSlotIndex(); + if (slotId < 0 || slotId > mPhone.getPhoneCount()) { + Log.e(mTag, "generateIconGroup invalid slotId:" + slotId); + return; + } + + if (DEBUG) Log.d(mTag, "generateIconGroup slot:" + slotId + " style:" + mStyle + + " connected:" + mCurrentState.connected + " inetCondition:" + inet + + " roaming:" + roaming + " level:" + level + " voiceLevel:" + voiceLevel + + " dataConnected:" + dataConnected + + " dataActivity:" + mCurrentState.dataActivity + + " CS:" + voiceType + + "/" + TelephonyManager.getNetworkTypeName(voiceType) + + ", PS:" + dataType + + "/" + TelephonyManager.getNetworkTypeName(dataType)); + + // Update data icon set + int chosenNetworkType = ((dataType == TelephonyManager.NETWORK_TYPE_UNKNOWN) + ? voiceType : dataType); + TelephonyIcons.updateDataType(slotId, chosenNetworkType, mConfig.showAtLeast3G, + mConfig.show4gForLte, mConfig.hspaDataDistinguishable, inet); + + // Update signal strength icons + singleSignalIcon = TelephonyIcons.getSignalStrengthIcon(slotId, inet, level, roaming); + if (DEBUG) { + Log.d(mTag, "singleSignalIcon:" + getResourceName(singleSignalIcon)); + } + + dataActivityId = (mCurrentState.dataConnected && slotId >= 0) ? + TelephonyIcons.getDataActivity(slotId, mCurrentState.dataActivity) : 0; + + // Convert the icon to unstacked if necessary. + int unstackedSignalIcon = TelephonyIcons.convertMobileStrengthIcon(singleSignalIcon); + if (DEBUG) { + Log.d(mTag, "unstackedSignalIcon:" + getResourceName(unstackedSignalIcon)); + } + if (singleSignalIcon != unstackedSignalIcon) { + stackedDataIcon = singleSignalIcon; + singleSignalIcon = unstackedSignalIcon; + } + + if (mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED) { + if (!roaming && showDataAndVoice()) { + stackedVoiceIcon = TelephonyIcons.getStackedVoiceIcon(voiceLevel); + } else if (roaming && dataActivityId != 0) { + // Remove data type indicator if already shown in data activity icon. + singleSignalIcon = TelephonyIcons.getRoamingSignalIconId(level, inet); + } + } + + // Clear satcked data icon if no satcked voice icon. + if (stackedVoiceIcon == 0) stackedDataIcon = 0; + + contentDesc = TelephonyIcons.getSignalStrengthDes(slotId); + sbDiscState = TelephonyIcons.getSignalNullIcon(slotId); + if (DEBUG) { + Log.d(mTag, "singleSignalIcon=" + getResourceName(singleSignalIcon) + + " dataActivityId=" + getResourceName(dataActivityId) + + " stackedDataIcon=" + getResourceName(stackedDataIcon) + + " stackedVoiceIcon=" + getResourceName(stackedVoiceIcon)); + } + + // Update data net type icons + if (dataType == TelephonyManager.NETWORK_TYPE_IWLAN) { + // wimax is a special 4g network not handled by telephony + dataTypeIcon = TelephonyIcons.ICON_4G; + qsDataTypeIcon = TelephonyIcons.QS_DATA_4G; + dataContentDesc = R.string.accessibility_data_connection_4g; + } else { + dataTypeIcon = TelephonyIcons.getDataTypeIcon(slotId); + dataContentDesc = TelephonyIcons.getDataTypeDesc(slotId); + qsDataTypeIcon = TelephonyIcons.getQSDataTypeIcon(slotId); + } + if (roaming) { + dataTypeIcon = TelephonyIcons.ROAMING_ICON; + qsDataTypeIcon = TelephonyIcons.QS_DATA_R; + } + if (DEBUG) { + Log.d(mTag, "updateDataNetType, dataTypeIcon=" + getResourceName(dataTypeIcon) + + " qsDataTypeIcon=" + getResourceName(qsDataTypeIcon) + + " dataContentDesc=" + dataContentDesc); + } + mCurrentState.iconGroup = new MobileIconGroup( + TelephonyManager.getNetworkTypeName(dataType), + sbIcons, qsIcons, contentDesc, 0, 0, sbDiscState, qsDiscState, discContentDesc, + dataContentDesc, dataTypeIcon, false, qsDataTypeIcon, + singleSignalIcon, stackedDataIcon, stackedVoiceIcon, dataActivityId); + } + + private int getSimSlotIndex() { + int slotId = -1; + if (mSubscriptionInfo != null) { + slotId = mSubscriptionInfo.getSimSlotIndex(); + } + if (DEBUG) Log.d(mTag, "getSimSlotIndex, slotId: " + slotId); + return slotId; + } + + private boolean showMobileActivity() { + return (mStyle == STATUS_BAR_STYLE_DEFAULT_DATA) + || (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT); + } + + private int getVoiceNetworkType() { + if (mServiceState == null) { + return TelephonyManager.NETWORK_TYPE_UNKNOWN; + } + return mServiceState.getVoiceNetworkType(); + } + + private int getDataNetworkType() { + if (mServiceState == null) { + return TelephonyManager.NETWORK_TYPE_UNKNOWN; + } + return mServiceState.getDataNetworkType(); + } + + private int getVoiceSignalLevel() { + if (mSignalStrength == null) { + return SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + } + boolean isCdma = TelephonyManager.PHONE_TYPE_CDMA == TelephonyManager.getDefault() + .getCurrentPhoneType(mSubscriptionInfo.getSubscriptionId()); + return isCdma ? mSignalStrength.getCdmaLevel() : mSignalStrength.getGsmLevel(); + } + + private boolean showDataAndVoice() { + if (mStyle != STATUS_BAR_STYLE_CDMA_1X_COMBINED) { + return false; + } + int dataType = getDataNetworkType(); + int voiceType = getVoiceNetworkType(); + if ((dataType == TelephonyManager.NETWORK_TYPE_EVDO_0 + || dataType == TelephonyManager.NETWORK_TYPE_EVDO_0 + || dataType == TelephonyManager.NETWORK_TYPE_EVDO_A + || dataType == TelephonyManager.NETWORK_TYPE_EVDO_B + || dataType == TelephonyManager.NETWORK_TYPE_EHRPD + || dataType == TelephonyManager.NETWORK_TYPE_LTE + || dataType == TelephonyManager.NETWORK_TYPE_LTE_CA) + && (voiceType == TelephonyManager.NETWORK_TYPE_GSM + || voiceType == TelephonyManager.NETWORK_TYPE_1xRTT + || voiceType == TelephonyManager.NETWORK_TYPE_CDMA)) { + return true; + } + return false; + } + + private boolean show1xOnly() { + int dataType = getDataNetworkType(); + int voiceType = getVoiceNetworkType(); + if (dataType == TelephonyManager.NETWORK_TYPE_1xRTT + || dataType == TelephonyManager.NETWORK_TYPE_CDMA) { + return true; + } + return false; + } + + private int getAlternateLteLevel(SignalStrength signalStrength) { + int lteRsrp = signalStrength.getLteDbm(); + int rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + if (lteRsrp > -44) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (lteRsrp >= -97) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_GREAT; + else if (lteRsrp >= -105) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_GOOD; + else if (lteRsrp >= -113) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_MODERATE; + else if (lteRsrp >= -120) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_POOR; + else if (lteRsrp >= -140) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + if (DEBUG) { + Log.d(mTag, "getAlternateLteLevel lteRsrp:" + lteRsrp + " rsrpLevel = " + rsrpLevel); + } + return rsrpLevel; + } + + protected String getResourceName(int resId) { + if (resId != 0) { + final Resources res = mContext.getResources(); + try { + return res.getResourceName(resId); + } catch (android.content.res.Resources.NotFoundException ex) { + return "(unknown)"; + } + } else { + return "(null)"; + } + } + @VisibleForTesting void setActivity(int activity) { mCurrentState.activityIn = activity == TelephonyManager.DATA_ACTIVITY_INOUT || activity == TelephonyManager.DATA_ACTIVITY_IN; mCurrentState.activityOut = activity == TelephonyManager.DATA_ACTIVITY_INOUT || activity == TelephonyManager.DATA_ACTIVITY_OUT; + if (mConfig.readIconsFromXml) { + mCurrentState.dataActivity = activity; + } notifyListenersIfNecessary(); } @@ -460,6 +781,7 @@ public class MobileSignalController extends SignalController< } mServiceState = state; mDataNetType = state.getDataNetworkType(); + updateNetworkName(mLastShowSpn, mLastSpn, mLastDataSpn, mLastShowPlmn, mLastPlmn); updateTelephony(); } @@ -498,17 +820,35 @@ public class MobileSignalController extends SignalController< final int mDataType; final boolean mIsWide; final int mQsDataType; + final int mSingleSignalIcon; + final int mStackedDataIcon; + final int mStackedVoiceIcon; + final int mActivityId; public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc, int sbNullState, int qsNullState, int sbDiscState, int qsDiscState, int discContentDesc, int dataContentDesc, int dataType, boolean isWide, int qsDataType) { + this(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState, + qsDiscState, discContentDesc, dataContentDesc, dataType, isWide, + qsDataType, 0, 0, 0, 0); + } + + public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc, + int sbNullState, int qsNullState, int sbDiscState, int qsDiscState, + int discContentDesc, int dataContentDesc, int dataType, boolean isWide, + int qsDataType, int singleSignalIcon, int stackedDataIcon, + int stackedVoicelIcon, int activityId) { super(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState, qsDiscState, discContentDesc); mDataContentDescription = dataContentDesc; mDataType = dataType; mIsWide = isWide; mQsDataType = qsDataType; + mSingleSignalIcon = singleSignalIcon; + mStackedDataIcon = stackedDataIcon; + mStackedVoiceIcon = stackedVoicelIcon; + mActivityId = activityId; } } @@ -522,6 +862,8 @@ public class MobileSignalController extends SignalController< boolean carrierNetworkChangeMode; boolean isDefault; boolean userSetup; + int dataActivity; + int voiceLevel; @Override public void copyFrom(State s) { @@ -536,6 +878,8 @@ public class MobileSignalController extends SignalController< airplaneMode = state.airplaneMode; carrierNetworkChangeMode = state.carrierNetworkChangeMode; userSetup = state.userSetup; + dataActivity = state.dataActivity; + voiceLevel = state.voiceLevel; } @Override @@ -552,6 +896,8 @@ public class MobileSignalController extends SignalController< builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode) .append(','); builder.append("userSetup=").append(userSetup); + builder.append("voiceLevel=").append(voiceLevel).append(','); + builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode); } @Override @@ -565,6 +911,7 @@ public class MobileSignalController extends SignalController< && ((MobileState) o).airplaneMode == airplaneMode && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode && ((MobileState) o).userSetup == userSetup + && ((MobileState) o).voiceLevel == voiceLevel && ((MobileState) o).isDefault == isDefault; } } 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 348e0b003997..26989138594a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -45,8 +45,10 @@ public interface NetworkController { boolean activityIn, boolean activityOut, String description); void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, String typeContentDescription, - String description, boolean isWide, int subId); + int qsType, boolean activityIn, boolean activityOut, int dataActivityId, + int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon, + String typeContentDescription, String description, + boolean isWide, int subId); void setSubs(List subs); void setNoSims(boolean show); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index 8b4fa4e15eed..fe5452f8d7c8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -218,6 +218,7 @@ public class NetworkControllerImpl extends BroadcastReceiver filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); + filter.addAction(Intent.ACTION_LOCALE_CHANGED); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); mContext.registerReceiver(this, filter, null, mReceiverHandler); mListening = true; @@ -389,6 +390,10 @@ public class NetworkControllerImpl extends BroadcastReceiver } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { // Might have different subscriptions now. updateMobileControllers(); + } else if (action.equals(Intent.ACTION_LOCALE_CHANGED)) { + for (MobileSignalController controller : mMobileSignalControllers.values()) { + controller.handleBroadcast(intent); + } } else if (action.equals(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)) { mLastServiceState = ServiceState.newFromBundle(intent.getExtras()); if (mMobileSignalControllers.size() == 0) { @@ -852,6 +857,10 @@ public class NetworkControllerImpl extends BroadcastReceiver boolean alwaysShowCdmaRssi = false; boolean show4gForLte = false; boolean hspaDataDistinguishable; + boolean readIconsFromXml; + boolean showRsrpSignalLevelforLTE; + boolean showLocale; + boolean showRat; static Config readConfig(Context context) { Config config = new Config(); @@ -863,6 +872,14 @@ public class NetworkControllerImpl extends BroadcastReceiver config.show4gForLte = res.getBoolean(R.bool.config_show4GForLTE); config.hspaDataDistinguishable = res.getBoolean(R.bool.config_hspa_data_distinguishable); + config.readIconsFromXml = res.getBoolean(R.bool.config_read_icons_from_xml); + config.showRsrpSignalLevelforLTE = + res.getBoolean(R.bool.config_showRsrpSignalLevelforLTE); + config.showLocale = + res.getBoolean(com.android.internal.R.bool.config_monitor_locale_change); + config.showRat = + res.getBoolean(com.android.internal.R.bool.config_display_rat); + return config; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java index dce889f831da..511ad2bf6cb6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java @@ -36,8 +36,9 @@ public class SignalCallbackAdapter implements SignalCallback { @Override public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, String typeContentDescription, - String description, boolean isWide, int subId) { + int qsType, boolean activityIn, boolean activityOut, int dataActivity, + int mobileActivity, int stackedDataIcon, int stackedVoiceIcon, + String typeContentDescription, String description, boolean isWide, int subId) { } @Override 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 d91b3329d1ac..a3b5fe7263c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -1,4 +1,6 @@ /* + * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * Not a Contribution. * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,6 +18,14 @@ package com.android.systemui.statusbar.policy; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.telephony.SignalStrength; +import android.telephony.TelephonyManager; +import android.util.Log; +import android.util.SparseArray; + import com.android.systemui.R; import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGroup; @@ -68,6 +78,20 @@ class TelephonyIcons { R.drawable.stat_sys_signal_4_fully } }; + //Default roaming icons with R indicator + static final int[][] TELEPHONY_SIGNAL_STRENGTH_ROAMING_R = { + { R.drawable.stat_sys_signal_0_default_roam, + R.drawable.stat_sys_signal_1_default_roam, + R.drawable.stat_sys_signal_2_default_roam, + R.drawable.stat_sys_signal_3_default_roam, + R.drawable.stat_sys_signal_4_default_roam }, + { R.drawable.stat_sys_signal_0_default_fully_roam, + R.drawable.stat_sys_signal_1_default_fully_roam, + R.drawable.stat_sys_signal_2_default_fully_roam, + R.drawable.stat_sys_signal_3_default_fully_roam, + R.drawable.stat_sys_signal_4_default_fully_roam } + }; + //CarrierNetworkChange static final int[][] TELEPHONY_CARRIER_NETWORK_CHANGE = { { R.drawable.stat_sys_signal_carrier_network_change_animation, @@ -231,6 +255,403 @@ class TelephonyIcons { static final int QS_ICON_1X = R.drawable.ic_qs_signal_1x; static final int QS_ICON_CARRIER_NETWORK_CHANGE = R.drawable.ic_qs_signal_carrier_network_change_animation; + static final int DATA_TYPE_UNKNOWN = 0; + static final int DATA_TYPE_G = 1; + static final int DATA_TYPE_E = 2; + static final int DATA_TYPE_2G = 3; + static final int DATA_TYPE_3G = 4; + static final int DATA_TYPE_4G = 5; + static final int DATA_TYPE_H = 6; + static final int DATA_TYPE_HP = 7; + static final int DATA_TYPE_1X = 8; + static final int DATA_TYPE_LTE = 9; + + static final int SIGNAL_STRENGTH_TYPE_G = 0; + static final int SIGNAL_STRENGTH_TYPE_E = 1; + static final int SIGNAL_STRENGTH_TYPE_3G = 2; + static final int SIGNAL_STRENGTH_TYPE_4G = 3; + static final int SIGNAL_STRENGTH_TYPE_H = 4; + static final int SIGNAL_STRENGTH_TYPE_HP = 5; + static final int SIGNAL_STRENGTH_TYPE_1X = 6; + static final int SIGNAL_STRENGTH_TYPE_CDMA = 7; + static final int SIGNAL_STRENGTH_TYPE_UMTS = 8; + + static final boolean DEBUG = true; + static final int DEFAULT_SUB = 0; + static final int INET_TYPE_NUM = 2; + static final int SIGNAL_LEVEL_NUM = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; + static final String TAG = "TelephonyIcons"; + static final String NS = "com.android.systemui"; + + static String[] mDataTypeArray, mDataTypeGenerationArray; + static String[] mDataTypeDescriptionArray, mDataTypeGenerationDescArray; + static String[] mDataActivityArray; + static String[] mSignalStrengthArray, mSignalStrengthRoamingArray; + static String[] mSignalNullArray; + static String[] mSignalStrengthDesc; + + static int[] mSelectedDataTypeIcon; + static int[] mSelectedQSDataTypeIcon; + static String[] mSelectedDataTypeDesc; + static int[] mSelectedDataActivityIndex; + static int[] mSelectedSignalStreagthIndex; + static SparseArray mStacked2SingleIconLookup; + + private static Resources mRes; + private static boolean isInitiated = false; + + static void readIconsFromXml(Context context) { + if (isInitiated) { + log(TAG, "readIconsFromXml, already read!"); + return; + } + + mRes = context.getResources(); + try { + mDataTypeArray = mRes.getStringArray(R.array.multi_data_type); + mDataTypeDescriptionArray = mRes.getStringArray( + R.array.telephony_data_type_description); + mDataTypeGenerationArray = mRes.getStringArray( + R.array.telephony_data_type_generation); + mDataTypeGenerationDescArray = mRes.getStringArray( + R.array.telephony_data_type_generation_description); + mDataActivityArray = mRes.getStringArray(R.array.multi_data_activity); + mSignalStrengthArray = mRes.getStringArray(R.array.multi_signal_strength); + mSignalStrengthRoamingArray = mRes.getStringArray( + R.array.multi_signal_strength_roaming); + mSignalNullArray = mRes.getStringArray(R.array.multi_signal_null); + mSignalStrengthDesc = mRes.getStringArray(R.array.signal_strength_description); + initStacked2SingleIconLookup(); + } catch (android.content.res.Resources.NotFoundException e) { + isInitiated = false; + log(TAG, "readIconsFromXml, exception happened: " + e); + return; + } + + if (mSelectedDataTypeIcon == null + && mDataTypeArray.length != 0) { + mSelectedDataTypeIcon = new int[mDataTypeArray.length]; + } + if (mSelectedQSDataTypeIcon == null + && mDataTypeArray.length != 0) { + mSelectedQSDataTypeIcon = new int[mDataTypeArray.length]; + } + if (mSelectedDataTypeDesc == null + && mDataTypeArray.length != 0) { + mSelectedDataTypeDesc = new String[mDataTypeArray.length]; + } + if (mSelectedDataActivityIndex == null + && mDataActivityArray.length != 0) { + mSelectedDataActivityIndex = new int[mDataActivityArray.length]; + } + if (mSelectedSignalStreagthIndex == null + && mSignalStrengthArray.length != 0) { + mSelectedSignalStreagthIndex = new int[mSignalStrengthArray.length]; + } + isInitiated = true; + } + + static void initStacked2SingleIconLookup() { + mStacked2SingleIconLookup = new SparseArray<>(); + TypedArray stackedIcons = mRes.obtainTypedArray(R.array.stacked_signal_icons); + TypedArray singleIcons = mRes.obtainTypedArray(R.array.single_signal_icons); + + mStacked2SingleIconLookup.clear(); + for (int i = 0; i < stackedIcons.length() && i < singleIcons.length(); i++) { + mStacked2SingleIconLookup.put(stackedIcons.getResourceId(i,0), + singleIcons.getResourceId(i,0)); + } + stackedIcons.recycle(); + singleIcons.recycle(); + log(TAG, "initStacked2SingleIconLookup: size=" + mStacked2SingleIconLookup.size()); + } + + static int getSignalNullIcon(int slot) { + if (mSignalNullArray == null) { + return 0; + } + String resName = mSignalNullArray[slot]; + log(TAG, "null signal icon name: " + resName); + int resId = mRes.getIdentifier(resName, null, NS); + return resId; + } + + static void updateDataType(int slot, int type, boolean showAtLeast3G, + boolean show4GforLte, boolean hspaDistinguishable, int inet) { + log(TAG, "updateDataType " + + String.format("slot=%d, type=%d, inetCondition=%d", + slot, type, inet) + + " showAtLeast3G=" + String.valueOf(showAtLeast3G) + + " show4GforLte=" + String.valueOf(show4GforLte) + + " hspaDistinguishable=" + String.valueOf(hspaDistinguishable)); + + String resName = mDataTypeArray[slot]; + int resId = mRes.getIdentifier(resName, null, NS); + String[] dataTypeArray = mRes.getStringArray(resId); + + log(TAG, "data type item name: " + resName + " id:" + resId); + + switch (type) { + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + if (!showAtLeast3G) { + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = 0; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedDataActivityIndex[slot] = 0; + mSelectedSignalStreagthIndex[slot] = 0; + break; + } else { + // fall through + } + case TelephonyManager.NETWORK_TYPE_EDGE: + if (!showAtLeast3G) { + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_E; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedDataActivityIndex[slot] = DATA_TYPE_E; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_E; + break; + } else { + // fall through + } + case TelephonyManager.NETWORK_TYPE_UMTS: + case TelephonyManager.NETWORK_TYPE_TD_SCDMA: + mSelectedDataActivityIndex[slot] = DATA_TYPE_3G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_3G; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_UMTS; + break; + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + if (hspaDistinguishable) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_H; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_H; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_H; + } else { + mSelectedDataActivityIndex[slot] = DATA_TYPE_3G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + mDataTypeGenerationArray[0], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_3G; + mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G; + + } + break; + case TelephonyManager.NETWORK_TYPE_HSPAP: + if (hspaDistinguishable) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_HP; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_H; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_HP; + } else { + mSelectedDataActivityIndex[slot] = DATA_TYPE_3G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + mDataTypeGenerationArray[0], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_3G; + mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G; + } + break; + case TelephonyManager.NETWORK_TYPE_CDMA: + if (!showAtLeast3G) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_1X; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_1X; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_CDMA; + break; + } else { + // fall through + } + case TelephonyManager.NETWORK_TYPE_1xRTT: + if (!showAtLeast3G) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_1X; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_1X; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_1X; + break; + } else { + // fall through + } + case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through + case TelephonyManager.NETWORK_TYPE_EVDO_A: + case TelephonyManager.NETWORK_TYPE_EVDO_B: + case TelephonyManager.NETWORK_TYPE_EHRPD: + mSelectedDataActivityIndex[slot] = DATA_TYPE_3G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_3G; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G; + break; + case TelephonyManager.NETWORK_TYPE_LTE: + case TelephonyManager.NETWORK_TYPE_LTE_CA: + if (show4GforLte) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_4G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + mDataTypeGenerationArray[1], null, NS); + if ( type == TelephonyManager.NETWORK_TYPE_LTE_CA) { + //Select 4G+ icon. + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + mDataTypeGenerationArray[2], null, NS); + } + mSelectedQSDataTypeIcon[slot] = QS_DATA_4G; + mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[1]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_4G; + } else { + mSelectedDataActivityIndex[slot] = DATA_TYPE_LTE; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_LTE; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_4G; + } + break; + case TelephonyManager.NETWORK_TYPE_GPRS: + case TelephonyManager.NETWORK_TYPE_GSM: + if (!showAtLeast3G) { + mSelectedDataActivityIndex[slot] = DATA_TYPE_G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + dataTypeArray[type], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_G; + mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type]; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_G; + } else { + mSelectedDataActivityIndex[slot] = DATA_TYPE_3G; + mSelectedDataTypeIcon[slot] = mRes.getIdentifier( + mDataTypeGenerationArray[0], null, NS); + mSelectedQSDataTypeIcon[slot] = QS_DATA_3G; + mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0];; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G; + } + break; + default: + mSelectedDataActivityIndex[slot] = DATA_TYPE_UNKNOWN; + mSelectedDataTypeIcon[slot] = 0; + mSelectedQSDataTypeIcon[slot] = 0; + mSelectedDataTypeDesc[slot] = ""; + mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_G; + break; + } + log(TAG, "updateDataType " + String.format( + "mSelectedDataTypeIcon[%d]=%d, mSelectedDataActivityIndex=%d", + slot, mSelectedDataTypeIcon[slot], mSelectedDataActivityIndex[slot])); + } + + + static int getQSDataTypeIcon(int slot) { + return mSelectedQSDataTypeIcon[slot]; + } + + static int getDataTypeIcon(int slot) { + log(TAG, "getDataTypeIcon " + String.format("sub=%d", slot)); + return mSelectedDataTypeIcon[slot]; + } + + static int getDataTypeDesc(int slot) { + return mRes.getIdentifier(mSelectedDataTypeDesc[slot], null, NS); + } + + static int getDataActivity(int slot, int activity) { + log(TAG, String.format("getDataActivity, slot=%d, activity=%d", + slot, activity)); + + String[] dataActivityArray = mRes.getStringArray( + mRes.getIdentifier(mDataActivityArray[slot], null, NS)); + String[] selectedTypeArray = mRes.getStringArray(mRes.getIdentifier( + dataActivityArray[mSelectedDataActivityIndex[slot]], null, NS)); + + return mRes.getIdentifier(selectedTypeArray[activity], null, NS); + } + + static int getSignalStrengthIcon(int slot, int inet, int level, boolean roaming) { + log(TAG, "getSignalStrengthIcon: " + String.format( + "slot=%d, inetCondition=%d, level=%d, roaming=%b", slot, inet, level, roaming)); + + String[] signalStrengthArray, selectedTypeArray; + + signalStrengthArray = mRes.getStringArray(mRes.getIdentifier(!roaming ? + mSignalStrengthArray[slot] : mSignalStrengthRoamingArray[slot], null, NS)); + log(TAG, String.format("signalStrengthArray.length=%d", signalStrengthArray.length)); + + selectedTypeArray = mRes.getStringArray(mRes.getIdentifier( + signalStrengthArray[mSelectedSignalStreagthIndex[slot]], null, NS)); + log(TAG, String.format("selectedTypeArray.length=%d", selectedTypeArray.length)); + + String[] inetArray = mRes.getStringArray( + mRes.getIdentifier(selectedTypeArray[inet], null, NS)); + log(TAG, String.format("inetArray.length=%d", inetArray.length)); + + return mRes.getIdentifier(inetArray[level], null, NS); + } + + + static int convertMobileStrengthIcon(int stackedIcon) { + if (mStacked2SingleIconLookup == null) { + return stackedIcon; + } + int index = mStacked2SingleIconLookup.indexOfKey(stackedIcon); + if (index >= 0) { + return mStacked2SingleIconLookup.get(stackedIcon); + } + return stackedIcon; + } + + static int getStackedVoiceIcon(int level) { + int retValue = 0; + switch(level){ + case SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN: + retValue = R.drawable.stat_sys_signal_0_2g; + break; + case SignalStrength.SIGNAL_STRENGTH_POOR: + retValue = R.drawable.stat_sys_signal_1_2g; + break; + case SignalStrength.SIGNAL_STRENGTH_MODERATE: + retValue = R.drawable.stat_sys_signal_2_2g; + break; + case SignalStrength.SIGNAL_STRENGTH_GOOD: + retValue = R.drawable.stat_sys_signal_3_2g; + break; + case SignalStrength.SIGNAL_STRENGTH_GREAT: + retValue = R.drawable.stat_sys_signal_4_2g; + break; + default: + break; + } + return retValue; + } + + static int getRoamingSignalIconId(int level, int inet){ + return TELEPHONY_SIGNAL_STRENGTH_ROAMING_R[inet][level]; + } + + static int[] getSignalStrengthDes(int slot) { + int[] resId = new int[SIGNAL_LEVEL_NUM]; + for (int i = 0; i < SIGNAL_LEVEL_NUM; i++) { + resId[i] = mRes.getIdentifier(mSignalStrengthDesc[i], null, NS); + } + return resId; + } + + private static void log(String tag, String str){ + if (DEBUG) { + Log.d(tag, str); + } + } + static final int QS_ICON_DATA_DISABLED = R.drawable.ic_qs_data_disabled; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java index b890a3006e56..bb5e74c4d685 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java @@ -27,6 +27,7 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.AsyncChannel; import com.android.settingslib.wifi.WifiStatusTracker; +import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; @@ -77,8 +78,10 @@ public class WifiSignalController extends @Override public void notifyListeners(SignalCallback callback) { // only show wifi in the cluster if connected or if wifi-only + boolean visibleWhenEnabled = mContext.getResources().getBoolean( + R.bool.config_showWifiIndicatorWhenEnabled); boolean wifiVisible = mCurrentState.enabled - && (mCurrentState.connected || !mHasMobileData); + && (mCurrentState.connected || !mHasMobileData || visibleWhenEnabled); String wifiDesc = wifiVisible ? mCurrentState.ssid : null; boolean ssidPresent = wifiVisible && mCurrentState.ssid != null; String contentDescription = getStringIfExists(getContentDescription()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java index 19cb24322095..655a6daf8088 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java @@ -102,8 +102,8 @@ public class CallbackHandlerTest extends AndroidTestCase { int qsType = R.drawable.ic_qs_signal_1x; boolean wide = true; int subId = 5; - mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription, - description, wide, subId); + mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, 0, 0, 0, 0, + typeDescription, description, wide, subId); waitForCallbacks(); ArgumentCaptor statusArg = ArgumentCaptor.forClass(IconState.class); @@ -118,7 +118,11 @@ public class CallbackHandlerTest extends AndroidTestCase { ArgumentCaptor subIdArg = ArgumentCaptor.forClass(Integer.class); Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(), qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(), - outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(), + outArg.capture(), ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + typeContentArg.capture(), descArg.capture(), wideArg.capture(), subIdArg.capture()); assertEquals(status, statusArg.getValue()); assertEquals(qs, qsArg.getValue()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 38cac1e74031..d6c58012ec7f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -279,6 +279,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase { iconArg.capture(), ArgumentCaptor.forClass(Integer.class).capture(), typeIconArg.capture(), dataInArg.capture(), dataOutArg.capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), ArgumentCaptor.forClass(String.class).capture(), ArgumentCaptor.forClass(String.class).capture(), ArgumentCaptor.forClass(Boolean.class).capture(), @@ -305,6 +309,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase { ArgumentCaptor.forClass(Integer.class).capture(), ArgumentCaptor.forClass(Boolean.class).capture(), ArgumentCaptor.forClass(Boolean.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), + ArgumentCaptor.forClass(Integer.class).capture(), ArgumentCaptor.forClass(String.class).capture(), ArgumentCaptor.forClass(String.class).capture(), ArgumentCaptor.forClass(Boolean.class).capture(), -- GitLab From b99261ab27fff4d9b7a81b8be28e5dd48963ce35 Mon Sep 17 00:00:00 2001 From: Wileen Chiu Date: Fri, 18 Dec 2015 16:40:47 -0800 Subject: [PATCH 104/185] SystemUI: Provide correct resource type - The value stored for when the network class is unknown is 0. when getting the resource for this value, which doesn't exist, resulting in a crash. - Store an empty string for when the network class is unknown, which is also the default value. Change-Id: I1c10dfe18b7dd78e798c2b5a89ca2974136b7e84 CRs-Fixed: 953821 --- core/res/res/values/config.xml | 1 + core/res/res/values/symbols.xml | 1 + packages/Keyguard/src/com/android/keyguard/CarrierText.java | 3 ++- .../systemui/statusbar/policy/MobileSignalController.java | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 8733541704f4..038274046e14 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2575,6 +2575,7 @@ false + "" 2G 3G 4G diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 0578801a9c19..41bcff9a8667 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2664,6 +2664,7 @@ + diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index f027014f69ba..105efda54360 100755 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -491,7 +491,8 @@ public class CarrierText extends TextView { } private String networkClassToString (int networkClass) { - final int[] classIds = { 0, // TelephonyManager.NETWORK_CLASS_UNKNOWN + final int[] classIds = + {com.android.internal.R.string.config_rat_unknown, com.android.internal.R.string.config_rat_2g, com.android.internal.R.string.config_rat_3g, com.android.internal.R.string.config_rat_4g }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 8b0ed802556e..933f659f651d 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -393,7 +393,8 @@ public class MobileSignalController extends SignalController< } private String networkClassToString (int networkClass) { - final int[] classIds = { 0, // TelephonyManager.NETWORK_CLASS_UNKNOWN + final int[] classIds = + {com.android.internal.R.string.config_rat_unknown, // TelephonyManager.NETWORK_CLASS_UNKNOWN com.android.internal.R.string.config_rat_2g, com.android.internal.R.string.config_rat_3g, com.android.internal.R.string.config_rat_4g }; -- GitLab From bc5d740774f64970752f98a986e4374ac8d11fff Mon Sep 17 00:00:00 2001 From: Venkatraman Nerellapalli Date: Wed, 30 Mar 2016 13:14:05 +0530 Subject: [PATCH 105/185] Telephony(MSIM): Do not display rat string Do not display rat string along with operator name in statusbar & data usage screens for specific service providers. Change-Id: I27bc2d6088839ec1b70690b4d5e5e72a516f72de CRs-Fixed: 987377 --- .../src/com/android/keyguard/CarrierText.java | 5 +++-- .../statusbar/policy/MobileSignalController.java | 14 +++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index 105efda54360..68f769449643 100755 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -28,6 +28,7 @@ import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.method.SingleLineTransformationMethod; @@ -156,8 +157,6 @@ public class CarrierText extends TextView { boolean anySimReadyAndInService = false; boolean showLocale = getContext().getResources().getBoolean( com.android.internal.R.bool.config_monitor_locale_change); - boolean showRat = getContext().getResources().getBoolean( - com.android.internal.R.bool.config_display_rat); CharSequence displayText = null; List subs = mKeyguardUpdateMonitor.getSubscriptionInfo(false); @@ -167,6 +166,8 @@ public class CarrierText extends TextView { CharSequence networkClass = ""; int subId = subs.get(i).getSubscriptionId(); State simState = mKeyguardUpdateMonitor.getSimState(subId); + boolean showRat = SubscriptionManager.getResourcesForSubId(mContext, + subId).getBoolean(com.android.internal.R.bool.config_display_rat); if (showRat) { ServiceState ss = mKeyguardUpdateMonitor.mServiceStates.get(subId); if (ss != null && (ss.getDataRegState() == ServiceState.STATE_IN_SERVICE diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 933f659f651d..9e253f454aa0 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -435,13 +435,21 @@ public class MobileSignalController extends SignalController< && plmn.equals(spn)) { showSpn = false; } + boolean showRat = mConfig.showRat; + int[] subId = SubscriptionManager.getSubId(getSimSlotIndex()); + if (subId != null && subId.length >= 1) { + showRat = SubscriptionManager.getResourcesForSubId(mContext, + subId[0]).getBoolean(com.android.internal.R.bool.config_display_rat); + } String networkClass = getNetworkClassString(mServiceState); + Log.d(mTag, "networkClass=" + networkClass + " showRat=" + showRat + + " slot=" + getSimSlotIndex()); StringBuilder str = new StringBuilder(); StringBuilder strData = new StringBuilder(); if (showPlmn && plmn != null) { str.append(plmn); strData.append(plmn); - if (mConfig.showRat) { + if (showRat) { str.append(" ").append(networkClass); strData.append(" ").append(networkClass); } @@ -451,7 +459,7 @@ public class MobileSignalController extends SignalController< str.append(mNetworkNameSeparator); } str.append(spn); - if (mConfig.showRat) str.append(" ").append(networkClass); + if (showRat) str.append(" ").append(networkClass); } if (str.length() != 0) { mCurrentState.networkName = str.toString(); @@ -463,7 +471,7 @@ public class MobileSignalController extends SignalController< strData.append(mNetworkNameSeparator); } strData.append(dataSpn); - if (mConfig.showRat) strData.append(" ").append(networkClass); + if (showRat) strData.append(" ").append(networkClass); } if (strData.length() != 0) { mCurrentState.networkNameData = strData.toString(); -- GitLab From cfd88000aa4efc90353a4f7dcbfdce962dfdab7f Mon Sep 17 00:00:00 2001 From: c_jyuan Date: Tue, 7 Jun 2016 10:22:00 +0800 Subject: [PATCH 106/185] framework: Add permission dialog Add permission pop UI for CTA test. Change-Id: Iead5facfc9d2437a8682870e699e5c0fba71b44f --- core/java/android/app/AppOpsManager.java | 28 +- .../layout/permission_confirmation_dialog.xml | 75 +++++ core/res/res/values-zh-rCN/arrays.xml | 35 +++ core/res/res/values/arrays.xml | 4 + core/res/res/values/strings.xml | 5 + core/res/res/values/symbols.xml | 9 + .../com/android/server/AppOpsService.java | 259 ++++++++++++++++-- .../android/server/BasePermissionDialog.java | 90 ++++++ .../server/BluetoothManagerService.java | 21 ++ .../com/android/server/PermissionDialog.java | 137 +++++++++ .../server/PermissionDialogReqQueue.java | 91 ++++++ .../server/pm/PackageManagerService.java | 13 + 12 files changed, 741 insertions(+), 26 deletions(-) mode change 100644 => 100755 core/java/android/app/AppOpsManager.java create mode 100755 core/res/res/layout/permission_confirmation_dialog.xml create mode 100755 core/res/res/values-zh-rCN/arrays.xml mode change 100644 => 100755 core/res/res/values/arrays.xml mode change 100644 => 100755 services/core/java/com/android/server/AppOpsService.java create mode 100755 services/core/java/com/android/server/BasePermissionDialog.java mode change 100644 => 100755 services/core/java/com/android/server/BluetoothManagerService.java create mode 100755 services/core/java/com/android/server/PermissionDialog.java create mode 100755 services/core/java/com/android/server/PermissionDialogReqQueue.java mode change 100644 => 100755 services/core/java/com/android/server/pm/PackageManagerService.java diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java old mode 100644 new mode 100755 index 8e9e284700cf..3f17f26a1155 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -239,8 +239,12 @@ public class AppOpsManager { public static final int OP_GET_ACCOUNTS = 62; /** @hide Control whether an application is allowed to run in the background. */ public static final int OP_RUN_IN_BACKGROUND = 63; + /** @hide CHANGE_WIFI_STATE . */ + public static final int OP_CHANGE_WIFI_STATE = 64; + /** @hide BLUETOOTH_ADMIN . */ + public static final int OP_BLUETOOTH_ADMIN = 65; /** @hide */ - public static final int _NUM_OP = 64; + public static final int _NUM_OP = 66; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = "android:coarse_location"; @@ -338,6 +342,12 @@ public class AppOpsManager { /** @hide Get device accounts. */ public static final String OPSTR_GET_ACCOUNTS = "android:get_accounts"; + /** @hide CHANGE_WIFI_STATE . */ + public static final String OPSTR_CHANGE_WIFI_STATE + = "android:change_wifi_state"; + /** @hide BLUETOOTH_ADMIN . */ + public static final String OPSTR_BLUETOOTH_ADMIN + = "android:bluetooth_admin"; private static final int[] RUNTIME_PERMISSIONS_OPS = { // Contacts @@ -449,6 +459,8 @@ public class AppOpsManager { OP_TURN_SCREEN_ON, OP_GET_ACCOUNTS, OP_RUN_IN_BACKGROUND, + OP_CHANGE_WIFI_STATE, + OP_BLUETOOTH_ADMIN, }; /** @@ -520,6 +532,8 @@ public class AppOpsManager { null, OPSTR_GET_ACCOUNTS, null, + OPSTR_CHANGE_WIFI_STATE, + OPSTR_BLUETOOTH_ADMIN, }; /** @@ -591,6 +605,8 @@ public class AppOpsManager { "TURN_ON_SCREEN", "GET_ACCOUNTS", "RUN_IN_BACKGROUND", + "CHANGE_WIFI_STATE", + "BLUETOOTH_ADMIN", }; /** @@ -662,6 +678,8 @@ public class AppOpsManager { null, // no permission for turning the screen on Manifest.permission.GET_ACCOUNTS, null, // no permission for running in background + android.Manifest.permission.CHANGE_WIFI_STATE, + android.Manifest.permission.BLUETOOTH_ADMIN, }; /** @@ -734,6 +752,8 @@ public class AppOpsManager { null, // TURN_ON_SCREEN null, // GET_ACCOUNTS null, // RUN_IN_BACKGROUND + null, // OP_CHANGE_WIFI_STATE + null, // OP_BLUETOOTH_ADMIN }; /** @@ -805,6 +825,8 @@ public class AppOpsManager { false, // TURN_ON_SCREEN false, // GET_ACCOUNTS false, // RUN_IN_BACKGROUND + false, // OP_CHANGE_WIFI_STATE + false, // OP_BLUETOOTH_ADMIN }; /** @@ -875,6 +897,8 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, // OP_TURN_ON_SCREEN AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_ALLOWED, // OP_RUN_IN_BACKGROUND + AppOpsManager.MODE_ALLOWED, //OP_CHANGE_WIFI_STATE + AppOpsManager.MODE_ALLOWED, //OP_BLUETOOTH_ADMIN }; /** @@ -949,6 +973,8 @@ public class AppOpsManager { false, false, false, + false, //OP_CHANGE_WIFI_STATE + false, //OP_BLUETOOTH_ADMIN }; /** diff --git a/core/res/res/layout/permission_confirmation_dialog.xml b/core/res/res/layout/permission_confirmation_dialog.xml new file mode 100755 index 000000000000..472602b24bd6 --- /dev/null +++ b/core/res/res/layout/permission_confirmation_dialog.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/values-zh-rCN/arrays.xml b/core/res/res/values-zh-rCN/arrays.xml new file mode 100755 index 000000000000..bb2cb2a99a16 --- /dev/null +++ b/core/res/res/values-zh-rCN/arrays.xml @@ -0,0 +1,35 @@ + + + + + + 尝试打开WLAN + 尝试打开蓝牙 + + diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml old mode 100644 new mode 100755 index e190bd13f5d2..11e815c3df53 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -234,5 +234,9 @@ @string/unpin_target @string/app_info + + Trying to enable WLAN + Trying to enable BT + diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 61bb31d7cb8a..5a859bd01134 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4394,4 +4394,9 @@ China Mobile China Unicom China Telecom + other permissions + Remember + Permission + Allow + Deny diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 41bcff9a8667..c8ff8238f0e4 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -213,6 +213,10 @@ + + + + @@ -1106,6 +1110,9 @@ + + + @@ -1375,6 +1382,7 @@ + @@ -1474,6 +1482,7 @@ + diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java old mode 100644 new mode 100755 index b5b0cd86f397..943e47f92e15 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -37,6 +37,7 @@ import android.app.ActivityManager; import android.app.ActivityThread; import android.app.AppGlobals; import android.app.AppOpsManager; +import android.app.Dialog; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; @@ -47,6 +48,8 @@ import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; +import android.os.Message; +import android.os.Looper; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; @@ -71,11 +74,13 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.Preconditions; import com.android.internal.util.XmlUtils; +import com.android.server.PermissionDialogReqQueue.PermissionDialogReq; import libcore.util.EmptyArray; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; +import android.os.SystemProperties; public class AppOpsService extends IAppOpsService.Stub { static final String TAG = "AppOps"; @@ -87,6 +92,7 @@ public class AppOpsService extends IAppOpsService.Stub { Context mContext; final AtomicFile mFile; final Handler mHandler; + final Looper mLooper; boolean mWriteScheduled; boolean mFastWriteScheduled; @@ -156,12 +162,16 @@ public class AppOpsService extends IAppOpsService.Stub { public long time; public long rejectTime; public int nesting; + public PermissionDialogReqQueue dialogReqQueue; + private boolean remember; public Op(int _uid, String _packageName, int _op) { uid = _uid; packageName = _packageName; op = _op; mode = AppOpsManager.opToDefaultMode(op); + dialogReqQueue = new PermissionDialogReqQueue(); + remember = false; } } @@ -239,6 +249,7 @@ public class AppOpsService extends IAppOpsService.Stub { public AppOpsService(File storagePath, Handler handler) { mFile = new AtomicFile(storagePath); mHandler = handler; + mLooper = Looper.myLooper(); readState(); } @@ -476,6 +487,10 @@ public class AppOpsService extends IAppOpsService.Stub { } } + private boolean isStrictOpEnable() { + return SystemProperties.getBoolean("persist.sys.strict_op_enable", false); + } + @Override public void setUidMode(int code, int uid, int mode) { if (Binder.getCallingPid() != Process.myPid()) { @@ -487,7 +502,14 @@ public class AppOpsService extends IAppOpsService.Stub { synchronized (this) { final int defaultMode = AppOpsManager.opToDefaultMode(code); - + if(isStrictOpEnable()){ + if (mode == AppOpsManager.MODE_IGNORED) { + Op op; + String packageName = mContext.getPackageManager().getNameForUid(uid); + op = getOpLocked(code, uid, packageName, true); + op.remember = false; + } + } UidState uidState = getUidStateLocked(uid, false); if (uidState == null) { if (mode == defaultMode) { @@ -1016,8 +1038,10 @@ public class AppOpsService extends IAppOpsService.Stub { private int noteOperationUnchecked(int code, int uid, String packageName, int proxyUid, String proxyPackageName) { + PermissionDialogReq req = new PermissionDialogReq(); synchronized (this) { Ops ops = getOpsRawLocked(uid, packageName, true); + final int defaultMode = AppOpsManager.opToDefaultMode(code); if (ops == null) { if (DEBUG) Log.d(TAG, "noteOperation: no op for code " + code + " uid " + uid + " package " + packageName); @@ -1034,35 +1058,56 @@ public class AppOpsService extends IAppOpsService.Stub { op.duration = 0; final int switchCode = AppOpsManager.opToSwitch(code); UidState uidState = ops.uidState; - // If there is a non-default per UID policy (we set UID op mode only if - // non-default) it takes over, otherwise use the per package policy. - if (uidState.opModes != null && uidState.opModes.indexOfKey(switchCode) >= 0) { - final int uidMode = uidState.opModes.get(switchCode); - if (uidMode != AppOpsManager.MODE_ALLOWED) { - if (DEBUG) Log.d(TAG, "noteOperation: reject #" + op.mode + " for code " - + switchCode + " (" + code + ") uid " + uid + " package " - + packageName); - op.rejectTime = System.currentTimeMillis(); - return uidMode; + if (isStrictOpEnable() && (code == AppOpsManager.OP_CHANGE_WIFI_STATE + || code == AppOpsManager.OP_BLUETOOTH_ADMIN)) { + final Op switchOp = switchCode + != code ? getOpLocked(ops, switchCode, true) : op; + if (Looper.myLooper() == mLooper) { + return switchOp.mode; + } + if (op.remember == true) { + if (uidState.opModes == null) { + return defaultMode; + } else if(uidState.opModes.get(code) == AppOpsManager.MODE_ALLOWED){ + return uidState.opModes.get(code); + }else{ + req = askOperationLocked(code, uid, packageName, switchOp); + } + } else { + req = askOperationLocked(code, uid, packageName, switchOp); } } else { - final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, true) : op; - if (switchOp.mode != AppOpsManager.MODE_ALLOWED) { - if (DEBUG) Log.d(TAG, "noteOperation: reject #" + op.mode + " for code " - + switchCode + " (" + code + ") uid " + uid + " package " - + packageName); - op.rejectTime = System.currentTimeMillis(); - return switchOp.mode; + // If there is a non-default per UID policy (we set UID op mode only if + // non-default) it takes over, otherwise use the per package policy. + if (uidState.opModes != null && uidState.opModes.indexOfKey(switchCode) >= 0) { + final int uidMode = uidState.opModes.get(switchCode); + if (uidMode != AppOpsManager.MODE_ALLOWED) { + if (DEBUG) Log.d(TAG, "noteOperation: reject #" + op.mode + " for code " + + switchCode + " (" + code + ") uid " + uid + " package " + + packageName); + op.rejectTime = System.currentTimeMillis(); + return uidMode; + } + } else { + final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, true) : op; + if (switchOp.mode != AppOpsManager.MODE_ALLOWED) { + if (DEBUG) Log.d(TAG, "noteOperation: reject #" + op.mode + " for code " + + switchCode + " (" + code + ") uid " + uid + " package " + + packageName); + op.rejectTime = System.currentTimeMillis(); + return switchOp.mode; + } } + if (DEBUG) Log.d(TAG, "noteOperation: allowing code " + code + " uid " + uid + + " package " + packageName); + op.time = System.currentTimeMillis(); + op.rejectTime = 0; + op.proxyUid = proxyUid; + op.proxyPackageName = proxyPackageName; + return AppOpsManager.MODE_ALLOWED; } - if (DEBUG) Log.d(TAG, "noteOperation: allowing code " + code + " uid " + uid - + " package " + packageName); - op.time = System.currentTimeMillis(); - op.rejectTime = 0; - op.proxyUid = proxyUid; - op.proxyPackageName = proxyPackageName; - return AppOpsManager.MODE_ALLOWED; } + return req.get(); //this method could not added to the synchronized } @Override @@ -1285,6 +1330,14 @@ public class AppOpsService extends IAppOpsService.Stub { } } + private void scheduleWriteNowLocked() { + if (!mWriteScheduled) { + mWriteScheduled = true; + } + mHandler.removeCallbacks(mWriteRunner); + mHandler.post(mWriteRunner); + } + private Op getOpLocked(int code, int uid, String packageName, boolean edit) { Ops ops = getOpsRawLocked(uid, packageName, edit); if (ops == null) { @@ -2288,6 +2341,162 @@ public class AppOpsService extends IAppOpsService.Stub { return packageName; } + final class AskRunnable implements Runnable { + final int code; + final int uid; + final String packageName; + final Op op; + final PermissionDialogReq request; + + public AskRunnable(int code, int uid, String packageName, Op op, + PermissionDialogReq request) { + super(); + this.code = code; + this.uid = uid; + this.packageName = packageName; + this.op = op; + this.request = request; + } + + @Override + public void run() { + PermissionDialog permDialog = null; + synchronized (AppOpsService.this) { + op.dialogReqQueue.register(request); + if (op.dialogReqQueue.getDialog() == null) { + permDialog = new PermissionDialog(mContext, + AppOpsService.this, code, uid, packageName); + op.dialogReqQueue.setDialog(permDialog); + } + } + if (permDialog != null) { + permDialog.show(); + } + } + } + + private PermissionDialogReq askOperationLocked(int code, int uid, String packageName, Op op) { + PermissionDialogReq request = new PermissionDialogReq(); + mHandler.post(new AskRunnable(code, uid, packageName, op, request)); + return request; + } + + private void printOperationLocked(Op op, int mode, String operation) { + if (op != null) { + int switchCode = AppOpsManager.opToSwitch(op.op); + if (mode == AppOpsManager.MODE_IGNORED) { + if (DEBUG) Log.d(TAG, operation + ": reject #" + mode + " for code " + + switchCode + " (" + op.op + ") uid " + op.uid + " package " + + op.packageName); + } else if (mode == AppOpsManager.MODE_ALLOWED) { + if (DEBUG) Log.d(TAG, operation + ": allowing code " + op.op + " uid " + + op.uid + + " package " + op.packageName); + } + } + } + + private void recordOperationLocked(int code, int uid, String packageName, + int mode) { + Op op = getOpLocked(code, uid, packageName, false); + if (op != null) { + printOperationLocked(op, mode, "noteOperartion"); + if (mode == AppOpsManager.MODE_IGNORED) { + op.rejectTime = System.currentTimeMillis(); + } else if (mode == AppOpsManager.MODE_ALLOWED) { + op.time = System.currentTimeMillis(); + op.rejectTime = 0; + } + } + } + + public void notifyOperation(int code, int uid, String packageName, + int mode, boolean remember) { + verifyIncomingUid(uid); + verifyIncomingOp(code); + ArrayList repCbs = null; + int switchCode = AppOpsManager.opToSwitch(code); + synchronized (this) { + recordOperationLocked(code, uid, packageName, mode); + Op op = getOpLocked(switchCode, uid, packageName, true); + if (op != null) { + // Send result to all waiting client + if (op.dialogReqQueue.getDialog() != null) { + op.dialogReqQueue.notifyAll(mode); + op.dialogReqQueue.setDialog(null); + } + + if (remember) { + op.remember = true; + writeUidStateMode(code, uid, mode); + ArrayList cbs = mOpModeWatchers.get(switchCode); + if (cbs != null) { + if (repCbs == null) { + repCbs = new ArrayList(); + } + repCbs.addAll(cbs); + } + cbs = mPackageModeWatchers.get(packageName); + if (cbs != null) { + if (repCbs == null) { + repCbs = new ArrayList(); + } + repCbs.addAll(cbs); + } + //if (mode == getDefaultMode(op.op, op.uid, op.packageName)) { + // If going into the default mode, prune this op + // if there is nothing else interesting in it. + //pruneOp(op, uid, packageName); + //} + scheduleWriteNowLocked(); + } + } + } + if (repCbs != null) { + for (int i = 0; i < repCbs.size(); i++) { + try { + repCbs.get(i).mCallback.opChanged(switchCode, uid, packageName); + } catch (RemoteException e) { + Log.w(TAG, "repCbs.get(i).mCallback.opChanged() error ", e); + } + } + } + } + + private void writeUidStateMode(int code, int uid, int mode) { + final int defaultMode = AppOpsManager.opToDefaultMode(code); + UidState uidState = getUidStateLocked(uid, false); + if (uidState == null) { + if (mode == defaultMode) { + return; + } + uidState = new UidState(uid); + uidState.opModes = new SparseIntArray(); + uidState.opModes.put(code, mode); + mUidStates.put(uid, uidState); + scheduleWriteLocked(); + } else if (uidState.opModes == null) { + if (mode != defaultMode) { + uidState.opModes = new SparseIntArray(); + uidState.opModes.put(code, mode); + scheduleWriteLocked(); + } + } else { + if (uidState.opModes.get(code) == mode) { + return; + } + if (mode == defaultMode) { + uidState.opModes.delete(code); + if (uidState.opModes.size() <= 0) { + uidState.opModes = null; + } + } else { + uidState.opModes.put(code, mode); + } + scheduleWriteLocked(); + } + } + private static String[] getPackagesForUid(int uid) { String[] packageNames = null; try { diff --git a/services/core/java/com/android/server/BasePermissionDialog.java b/services/core/java/com/android/server/BasePermissionDialog.java new file mode 100755 index 000000000000..bf442d6b942d --- /dev/null +++ b/services/core/java/com/android/server/BasePermissionDialog.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.android.server; + +import android.app.AlertDialog; +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.view.KeyEvent; +import android.view.WindowManager; +import android.widget.Button; +import com.android.internal.R; + +public class BasePermissionDialog extends AlertDialog { + public BasePermissionDialog(Context dialogCon) { + super(dialogCon, com.android.internal.R.style.Theme_Dialog_AppError); + getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + WindowManager.LayoutParams permInfo = getWindow().getAttributes(); + permInfo.setTitle("Permission Dialog"); + getWindow().setAttributes(permInfo); + setIconAttribute(R.attr.alertDialogIcon); + } + + public boolean dispatchKeyEvent(KeyEvent event) { + if (mState) { + return true; + } + return super.dispatchKeyEvent(event); + } + + public void onStart() { + super.onStart(); + setEnabled(false); + mInfoHandler.sendMessage(mInfoHandler.obtainMessage(0)); + } + + private Handler mInfoHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == 0) { + mState = false; + setEnabled(true); + } + } + }; + + private void setEnabled(boolean setState) { + Button btn = (Button) findViewById(R.id.button1); + if (btn != null) { + btn.setEnabled(setState); + } + btn = (Button) findViewById(R.id.button2); + if (btn != null) { + btn.setEnabled(setState); + } + btn = (Button) findViewById(R.id.button3); + if (btn != null) { + btn.setEnabled(setState); + } + } + + private boolean mState = true; +} diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java old mode 100644 new mode 100755 index 3b49d113ad86..4087e26f050d --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -35,6 +35,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.content.pm.UserInfo; +import android.content.pm.PackageManager.NameNotFoundException; import android.database.ContentObserver; import android.os.Binder; import android.os.Handler; @@ -56,6 +57,8 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; +import android.app.AppOpsManager; +import android.os.SystemProperties; class BluetoothManagerService extends IBluetoothManager.Stub { private static final String TAG = "BluetoothManagerService"; @@ -615,6 +618,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { return true; } + private boolean isStrictOpEnable() { + return SystemProperties.getBoolean("persist.sys.strict_op_enable", false); + } + public boolean enable() { if ((Binder.getCallingUid() != Process.SYSTEM_UID) && (!checkIfCallerIsForegroundUser())) { @@ -624,6 +631,20 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); + if(isStrictOpEnable()){ + AppOpsManager mAppOpsManager = mContext.getSystemService(AppOpsManager.class); + String packageName = mContext.getPackageManager().getNameForUid(Binder.getCallingUid()); + + if ((Binder.getCallingUid() > 10000) + && (packageName.indexOf("android.uid.systemui") != 0) + && (packageName.indexOf("android.uid.system") != 0)) { + int result = mAppOpsManager.noteOp(AppOpsManager.OP_BLUETOOTH_ADMIN, + Binder.getCallingUid(), packageName); + if (result == AppOpsManager.MODE_IGNORED) { + return false; + } + } + } if (DBG) { Slog.d(TAG,"enable(): mBluetooth =" + mBluetooth + " mBinding = " + mBinding + " mState = " + mState); diff --git a/services/core/java/com/android/server/PermissionDialog.java b/services/core/java/com/android/server/PermissionDialog.java new file mode 100755 index 000000000000..fba5bdcc17ca --- /dev/null +++ b/services/core/java/com/android/server/PermissionDialog.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.android.server; + +import android.os.Message; +import android.os.Handler; +import android.widget.TextView; +import android.widget.CheckBox; +import android.view.WindowManager; +import android.view.View; +import android.content.res.Resources; +import android.content.pm.PackageManager; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.app.AppOpsManager; + +public class PermissionDialog extends BasePermissionDialog { + private final int mDef; + private final String inputPackage; + private final AppOpsService opsServ; + private final static String TAG = "PermInfo"; + private View viewId; + private int inputId; + private CheckBox checkSta; + private Context contId; + final CharSequence[] mOpLabels; + static final int IGNORED_REQ = 0x4; + static final int IGNORED_REQ_TIMEOUT = 0x8; + static final long TIMEOUT_WAIT = 15 * 1000; + static final int ALLOWED_REQ = 0x2; + + public PermissionDialog(Context contextId, AppOpsService opsService, + int defInf, int idInfo, String packageName) { + super(contextId); + opsServ = opsService; + inputPackage = packageName; + contId = contextId; + mDef = defInf; + Resources rId = contextId.getResources(); + inputId = idInfo; + mOpLabels = rId.getTextArray( + com.android.internal.R.array.app_ops_labels); + setCancelable(false); + setButton(DialogInterface.BUTTON_POSITIVE, + rId.getString(com.android.internal.R.string.allow_button), + myHandle.obtainMessage(ALLOWED_REQ)); + setButton(DialogInterface.BUTTON_NEGATIVE, + rId.getString(com.android.internal.R.string.deny_button), + myHandle.obtainMessage(IGNORED_REQ)); + setTitle(rId.getString(com.android.internal.R.string.permission_title)); + WindowManager.LayoutParams paraDef = getWindow().getAttributes(); + paraDef.setTitle("Permission: " + getAppName(inputPackage)); + paraDef.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR + | WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; + getWindow().setAttributes(paraDef); + viewId = getLayoutInflater().inflate( + com.android.internal.R.layout.permission_confirmation_dialog, null); + TextView textId = (TextView) viewId.findViewById( + com.android.internal.R.id.permission_text); + checkSta = (CheckBox) viewId.findViewById( + com.android.internal.R.id.permission_remember_choice_checkbox); + TextView textRem = (TextView) viewId.findViewById( + com.android.internal.R.id.permission_remember_choice_text); + checkSta.setVisibility(View.INVISIBLE); + textRem.setVisibility(View.INVISIBLE); + + String appName = getAppName(inputPackage); + if (appName == null) + appName = inputPackage; + textId.setText(appName + ": " + mOpLabels[mDef-64]); + setView(viewId); + myHandle.sendMessageDelayed(myHandle.obtainMessage(IGNORED_REQ_TIMEOUT), TIMEOUT_WAIT); + } + + private final Handler myHandle = new Handler() { + public void handleMessage(Message mess) { + int runSet; + boolean keepIt = checkSta.isChecked(); + switch (mess.what) { + case ALLOWED_REQ: + runSet = AppOpsManager.MODE_ALLOWED; + break; + case IGNORED_REQ: + runSet = AppOpsManager.MODE_IGNORED; + break; + default: + runSet = AppOpsManager.MODE_IGNORED; + keepIt = false; + } + opsServ.notifyOperation(mDef, inputId, inputPackage, runSet, keepIt); + dismiss(); + } + }; + + private String getAppName(String inputName) { + PackageManager packMan = contId.getPackageManager(); + ApplicationInfo runInfo = null; + try { + runInfo = packMan.getApplicationInfo(inputName, PackageManager.GET_DISABLED_COMPONENTS + | PackageManager.GET_UNINSTALLED_PACKAGES); + } catch (final NameNotFoundException e) { + return null; + } + if (runInfo != null) { + return (String) packMan.getApplicationLabel(runInfo); + } + return null; + } +} diff --git a/services/core/java/com/android/server/PermissionDialogReqQueue.java b/services/core/java/com/android/server/PermissionDialogReqQueue.java new file mode 100755 index 000000000000..64a7885e5edd --- /dev/null +++ b/services/core/java/com/android/server/PermissionDialogReqQueue.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2015-2016, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.android.server; + +import java.util.ArrayList; +import java.util.List; + +public class PermissionDialogReqQueue { + public PermissionDialog getDialog() { + return mDialog; + } + + public void setDialog(PermissionDialog mDialog) { + this.mDialog = mDialog; + } + + public final static class PermissionDialogReq { + public void set(int res) { + synchronized (this) { + mHasResult = true; + mResult = res; + notifyAll(); + } + } + + public int get() { + synchronized (this) { + while (!mHasResult) { + try { + wait(); + } catch (InterruptedException e) { + } + } + } + return mResult; + } + + boolean mHasResult = false; + int mResult; + } + + private PermissionDialog mDialog; + private List mResultList; + + public PermissionDialogReqQueue() { + mDialog = null; + mResultList = new ArrayList(); + } + + public void register(PermissionDialogReq res) { + synchronized (this) { + mResultList.add(res); + } + } + + public void notifyAll(int mode) { + synchronized (this) { + while (mResultList.size() != 0) { + PermissionDialogReq res = mResultList.get(0); + res.set(mode); + mResultList.remove(0); + } + } + } +} diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java old mode 100644 new mode 100755 index 9fe7b59a1595..0885dda2c7e3 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -309,6 +309,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import android.os.SystemProperties; /** * Keep track of all those APKs everywhere. @@ -1965,6 +1966,14 @@ public class PackageManagerService extends IPackageManager.Stub { res.removedInfo.args.doPostDeleteLI(true); } } + //Show permission control menu after installation + if(isStrictOpEnable()){ + Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS); + intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); + intent.putExtra("hideInfoButton", true);// used by the start activity + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //outside of Activity context need :FLAG_ACTIVITY_NEW_TASK . + mContext.startActivity(intent); + } } // If someone is watching installs - notify them @@ -1979,6 +1988,10 @@ public class PackageManagerService extends IPackageManager.Stub { } } + private boolean isStrictOpEnable() { + return SystemProperties.getBoolean("persist.sys.strict_op_enable", false); + } + private void grantRuntimePermissionsGrantedToDisabledPrivSysPackageParentLPw( PackageParser.Package pkg) { if (pkg.parentPackage == null) { -- GitLab From b5068d6f3abf397e9bba621e805e18545d52ec6c Mon Sep 17 00:00:00 2001 From: c_jyuan Date: Tue, 14 Jun 2016 17:51:46 +0800 Subject: [PATCH 107/185] Permission: Fix permission description issue. Update permission description, make it correct and clear in permission center Change-Id: I34d8e81532c806f6c3c7661ae6714cc7dd0cd657 --- core/res/res/values-zh-rCN/strings.xml | 35 +++++++++++++++----------- core/res/res/values/strings.xml | 29 +++++++++++---------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 9cdbaea781fa..43e6761e2f0e 100755 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -249,11 +249,11 @@ "通讯录" "访问您的通讯录" "位置信息" - "获取此设备的位置信息" + "获得设备所在位置信息" "日历" "访问您的日历" "短信" - "发送和查看短信" + "短信" "存储空间" "访问您设备上的照片、媒体内容和文件" "麦克风" @@ -261,7 +261,7 @@ "相机" "拍摄照片和录制视频" "电话" - "拨打电话和管理通话" + "电话" "身体传感器" "访问与您的生命体征相关的传感器数据" "检索窗口内容" @@ -296,9 +296,9 @@ "允许应用读取您的设备收到的小区广播消息。小区广播消息是在某些地区发送的、用于发布紧急情况警告的提醒信息。恶意应用可能会在您收到小区紧急广播时干扰您设备的性能或操作。" "读取订阅的供稿" "允许应用获取有关当前同步的 Feed 的详情。" - "发送和查看短信" + "发送短信" "允许该应用发送短信。此权限可能会导致意外收费。恶意应用可能会未经您的确认而发送短信,由此产生相关费用。" - "读取您的讯息(短信或彩信)" + "读取您的讯息(短信/彩信)" "允许该应用读取您平板电脑或SIM卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。" "允许应用读取您的电视或 SIM 卡上存储的短信。此权限会允许应用读取所有短信,而不论短信内容是什么或是否属于机密内容。" "允许该应用读取您手机或SIM卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。" @@ -336,7 +336,7 @@ "允许该应用读取您平板电脑上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定个人通信的频率。此权限可让应用保存您的联系人数据,而恶意应用可能会在您不知情的情况下分享联系人数据。" "允许应用读取您的电视上存储的联系人相关数据,包括您与特定联系人通话、发送电子邮件或通过其他方式进行通信的频率。此权限可让应用保存您的联系人数据,而且恶意应用可能会在您不知情的情况下分享联系人数据。" "允许该应用读取您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定个人通信的频率。此权限可让应用保存您的联系人数据,而恶意应用可能会在您不知情的情况下分享联系人数据。" - "修改您的通讯录" + "写入/删除您的通讯录" "允许该应用修改您平板电脑上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定联系人通信的频率。此权限可让应用删除联系人数据。" "允许应用修改您的电视上存储的联系人相关数据,包括您与特定联系人通话、发送电子邮件或通过其他方式进行通信的频率。此权限可让应用删除联系人数据。" "允许该应用修改您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定联系人通信的频率。此权限可让应用删除联系人数据。" @@ -344,7 +344,7 @@ "允许该应用读取平板电脑的通话记录,包括有关来电和外拨电话的数据。此权限可让应用保存您的通话记录数据,而恶意应用可能会在您不知情的情况下分享通话记录数据。" "允许应用读取您的电视的通话记录,包括有关来电和外拨电话的数据。此权限可让应用保存您的通话记录数据,而恶意应用可能会在您不知情的情况下分享通话记录数据。" "允许该应用读取手机的通话记录,包括有关来电和外拨电话的数据。此权限可让应用保存您的通话记录数据,而恶意应用可能会在您不知情的情况下分享通话记录数据。" - "写入通话记录" + "写入/删除通话记录" "允许该应用修改平板电脑的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。" "允许应用修改电视的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。" "允许该应用修改手机的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。" @@ -360,7 +360,7 @@ "允许该应用添加、删除、更改您可在手机上修改的活动,包括朋友或同事的活动。此权限可让该应用冒充日历所有者发送消息,或在所有者不知情的情况下修改活动。" "获取额外的位置信息提供程序命令" "允许该应用使用其他的位置信息提供程序命令。此权限使该应用可以干扰GPS或其他位置信息源的运作。" - "访问确切位置信息(以 GPS 和网络为依据)" + "精确位置(基于GPS)" "允许该应用通过全球定位系统(GPS)或网络位置信息源(例如基站和WLAN)获取您的精确位置信息。您必须在设备上开启这些位置信息服务,应用才能获得位置信息。应用会使用此类服务确定您的位置,这可能会消耗更多电量。" "访问大致位置信息(以网络为依据)" "允许该应用获取您的大致位置信息。这类位置信息来自于使用网络位置信息源(例如基站和WLAN)的位置信息服务。您必须在设备上开启这些位置信息服务,应用才能获得位置信息。应用会使用此类服务确定您的大概位置。" @@ -374,7 +374,7 @@ "允许该应用使用相机拍摄照片和视频。此权限可让该应用随时使用相机,而无需您的确认。" "控制振动" "允许应用控制振动器。" - "直接拨打电话号码" + "拨打电话" "允许该应用在您未执行操作的情况下拨打电话号码。此权限可能会导致意外收费或呼叫。请注意,此权限不允许该应用拨打紧急电话号码。恶意应用可通过拨打电话产生相关费用,而无需您的确认。" "使用即时通讯通话服务" "允许应用自行使用即时通讯服务拨打电话。" @@ -412,13 +412,13 @@ "允许应用更改绑定网络连接的状态。" "查看WLAN连接" "允许该应用查看WLAN网络的相关信息,例如是否启用了WLAN以及连接的WLAN设备的名称。" - "连接WLAN网络和断开连接" + "打开WLAN" "允许该应用与WLAN接入点建立和断开连接,以及更改WLAN网络的设备配置。" "允许接收WLAN多播" "允许该应用使用多播地址接收发送到WLAN网络上所有设备(而不仅仅是您的平板电脑)的数据包。该操作的耗电量比非多播模式要大。" "允许应用使用多播地址接收发送到 WLAN 网络中所有设备(而不仅仅是您的电视)的数据包。该操作的耗电量比非多播模式要大。" "允许该应用使用多播地址接收发送到WLAN网络上所有设备(而不仅仅是您的手机)的数据包。该操作的耗电量比非多播模式要大。" - "访问蓝牙设置" + "打开蓝牙" "允许应用配置本地蓝牙平板电脑,并允许其查找远程设备且与之配对。" "允许应用配置本地蓝牙电视,并允许其查找远程设备且与之配对。" "允许应用配置本地蓝牙手机,并允许其查找远程设备且与之配对。" @@ -463,13 +463,13 @@ "允许该应用修改某个帐号的同步设置。例如,此权限可用于在“联系人”应用与某个帐号之间启用同步。" "读取同步统计信息" "允许该应用读取某个帐号的同步统计信息,包括同步活动历史记录和同步数据量。" - "读取您的USB存储设备中的内容" + "读取内部存储" "读取您的SD卡中的内容" - "允许应用读取您USB存储设备中的内容。" + "允许应用读取存储设备。" "允许应用读取您SD卡的内容。" - "修改或删除您的USB存储设备中的内容" + "写入/删除内部存储" "修改或删除您的SD卡中的内容" - "允许应用写入USB存储设备。" + "允许应用写入存储设备。" "允许应用写入SD卡。" "拨打/接听SIP电话" "允许该应用拨打和接听SIP电话。" @@ -1664,4 +1664,9 @@ 中国移动 中国联通 中国电信 + 其他权限 + 永远记住 + 权限 + 允许 + 拒绝 diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 5a859bd01134..3f3c4032217f 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -601,7 +601,7 @@ SMS - send and view SMS messages + SMS Storage @@ -621,7 +621,7 @@ Phone - make and manage phone calls + Phone Body Sensors @@ -734,14 +734,14 @@ Allows the app to get details about the currently synced feeds. - send and view SMS messages + send SMS messages Allows the app to send SMS messages. This may result in unexpected charges. Malicious apps may cost you money by sending messages without your confirmation. - read your text messages (SMS or MMS) + read your text messages (SMS/MMS) Allows the app to read SMS messages stored on your tablet or SIM card. This allows the app to read all @@ -883,7 +883,7 @@ knowledge. - modify your contacts + modify/delete your contacts Allows the app to modify the data about your contacts stored on your tablet, including the @@ -922,7 +922,7 @@ may share call log data without your knowledge. - write call log + write/delete call log Allows the app to modify your tablet\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log. @@ -988,8 +988,7 @@ with the operation of the GPS or other location sources. - access precise location (GPS and - network-based) + access precise location (GPS) Allows the app to get your precise location using the Global Positioning System (GPS) or network @@ -1039,7 +1038,7 @@ Allows the app to control the vibrator. - directly call phone numbers + call phone Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. @@ -1149,7 +1148,7 @@ connected Wi-Fi devices. - connect and disconnect from Wi-Fi + enable WLAN Allows the app to connect to and disconnect from Wi-Fi access points and to make changes to device @@ -1170,7 +1169,7 @@ not just your phone. It uses more power than the non-multicast mode. - access Bluetooth settings + enable Bluetooth Allows the app to configure the local Bluetooth tablet, and to discover and pair with remote @@ -1287,20 +1286,20 @@ Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. - read the contents of your USB storage + read the contents of your internal storage read the contents of your SD card - Allows the app to read the contents of your USB storage. + Allows the app to read the contents of your internal storage. Allows the app to read the contents of your SD card. - modify or delete the contents of your USB storage + write/delete internal storage modify or delete the contents of your SD card - Allows the app to write to the USB storage. + Allows the app to write to the internal storage. Allows the app to write to the SD card. -- GitLab From de543bc3b812d4b1ea8f4592bf64ae8cc2b2f3d3 Mon Sep 17 00:00:00 2001 From: Matadeen Mishra Date: Sat, 30 Apr 2016 15:28:56 +0530 Subject: [PATCH 108/185] BT: Set persiste Bluetooth State during enable timeout case Use case: When enable timeout occurs during S&S testing and Bluetooth state is moved from Turning On to Off. Steps: Changes related to enable timeout case, to test the changes, S&S testing can be done. Failure: Changes done to handle Bluetooth enable timeout case when Bluetooth state changes from Turning On to Off. Root cause: Setting Bluetooth Persist state to handle the enable timeout case so that Bluetooth doesnot self enable after enable timeout case is handled. Fix: Setting the Bluetooth Persist State to Off when enable timeout occurs. CRs-Fixed: 1006444 Change-Id: I17b3b05020eb7469666e6d8c88c86df7764b4024 --- core/java/android/bluetooth/BluetoothAdapter.java | 7 ++++--- .../java/com/android/server/BluetoothManagerService.java | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 17e00d1be2cf..9c9b8340aca2 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -2084,6 +2084,8 @@ public final class BluetoothAdapter { } synchronized (mProxyServiceStateCallbacks) { + Log.d(TAG, "onBluetoothServiceDown: Sending callbacks to " + + mProxyServiceStateCallbacks.size() + " clients"); for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){ try { if (cb != null) { @@ -2091,11 +2093,10 @@ public final class BluetoothAdapter { } else { Log.d(TAG, "onBluetoothServiceDown: cb is null!!!"); } - } catch (Exception e) { - Log.e(TAG,"",e); - } + } catch (Exception e) { Log.e(TAG,"",e);} } } + Log.d(TAG, "onBluetoothServiceDown: Finished sending callbacks to registered clients"); } public void onBrEdrDown() { diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 4087e26f050d..aa648a4b3604 100755 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -1141,8 +1141,13 @@ class BluetoothManagerService extends IBluetoothManager.Stub { recoverBluetoothServiceFromError(); } if ((prevState == BluetoothAdapter.STATE_TURNING_ON) && - (newState == BluetoothAdapter.STATE_BLE_ON) && + (newState == BluetoothAdapter.STATE_OFF) && (mBluetooth != null) && mEnable) { + persistBluetoothSetting(BLUETOOTH_OFF); + } + if ((prevState == BluetoothAdapter.STATE_TURNING_ON) && + (newState == BluetoothAdapter.STATE_BLE_ON) && + (mBluetooth != null) && mEnable) { recoverBluetoothServiceFromError(); } // If we tried to enable BT while BT was in the process of shutting down, -- GitLab From 59fe09b050e7d976df8e8958d8968c668e4efc0d Mon Sep 17 00:00:00 2001 From: Lalit Kansara Date: Sun, 3 Jul 2016 00:28:30 +0530 Subject: [PATCH 109/185] Revert "Revert "Revert "Revert "Add some View methods overrides and WebViewDelegate interfaces."""" . Change-Id: I038a9d59be29d0113f7e7abd5ab406d8511c714c --- api/system-current.txt | 2 ++ core/java/android/webkit/WebView.java | 11 +++++++++++ core/java/android/webkit/WebViewProvider.java | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index 481a9e640b08..d1c03942229f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -48971,7 +48971,9 @@ package android.webkit { public static abstract interface WebViewProvider.ViewDelegate { method public abstract boolean dispatchKeyEvent(android.view.KeyEvent); + method public abstract android.view.View findFocus(android.view.View); method public abstract android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); + method public abstract android.os.Handler getHandler(android.os.Handler); method public abstract void onActivityResult(int, int, android.content.Intent); method public abstract void onAttachedToWindow(); method public abstract void onConfigurationChanged(android.content.res.Configuration); diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index ecace32b51da..f54edf14bbe1 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -32,6 +32,7 @@ import android.net.http.SslCertificate; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.StrictMode; @@ -2642,6 +2643,16 @@ public class WebView extends AbsoluteLayout mProvider.getViewDelegate().onFinishTemporaryDetach(); } + @Override + public Handler getHandler() { + return mProvider.getViewDelegate().getHandler(super.getHandler()); + } + + @Override + public View findFocus() { + return mProvider.getViewDelegate().findFocus(super.findFocus()); + } + /** * Receive the result from a previous call to {@link #startActivityForResult(Intent, int)}. * diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index 94d231c45b98..e5b65e7b07d0 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -28,6 +28,7 @@ import android.graphics.drawable.Drawable; import android.net.http.SslCertificate; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; import android.os.Message; import android.print.PrintDocumentAdapter; import android.view.DragEvent; @@ -386,6 +387,10 @@ public interface WebViewProvider { public void onFinishTemporaryDetach(); public void onActivityResult(int requestCode, int resultCode, Intent data); + + public Handler getHandler(Handler originalHandler); + + public View findFocus(View originalFocusedView); } interface ScrollDelegate { -- GitLab From facebfa8c17bc6a6d57f1eaabeff41fd9fd37e0e Mon Sep 17 00:00:00 2001 From: jinfaw Date: Fri, 1 Jul 2016 10:11:54 +0800 Subject: [PATCH 110/185] Framework: Add regional carrier bootanimation Add regionalization carrier bootanimation to system bootanimation process Change-Id: I1df06fcaf6e3c7581cb9e77698e0b59c6a384e08 CRs-Fixed: 1025803 --- cmds/bootanimation/Android.mk | 3 +- cmds/bootanimation/BootAnimation.cpp | 44 ++++++++++++++++++++++++---- cmds/bootanimation/BootAnimation.h | 7 +++++ 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk index 7c8842ca0231..7a119bd32d22 100644 --- a/cmds/bootanimation/Android.mk +++ b/cmds/bootanimation/Android.mk @@ -23,7 +23,8 @@ LOCAL_SHARED_LIBRARIES := \ libEGL \ libGLESv1_CM \ libgui \ - libtinyalsa + libtinyalsa \ + libregionalization LOCAL_MODULE:= bootanimation diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index c597ed2cc61e..c5a3239875ef 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -57,9 +57,12 @@ #include "BootAnimation.h" #include "AudioPlayer.h" +#include + #define OEM_BOOTANIMATION_FILE "/oem/media/bootanimation.zip" #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip" #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip" + #define EXIT_PROP_NAME "service.bootanim.exit" namespace android { @@ -224,6 +227,35 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame) return NO_ERROR; } + +// Get bootup Animation File +// Parameter: ImageID: IMG_OEM IMG_SYS IMG_ENC +// Return Value : File path +const char *BootAnimation::getAnimationFileName(ImageID image) +{ + const char *fileName[3] = { OEM_BOOTANIMATION_FILE, + SYSTEM_BOOTANIMATION_FILE, + SYSTEM_ENCRYPTED_BOOTANIMATION_FILE }; + + // Load animations of Carrier through regionalization environment + if (Environment::isSupported()) { + Environment* environment = new Environment(); + const char* animFile = environment->getMediaFile( + Environment::ANIMATION_TYPE, Environment::BOOT_STATUS); + ALOGE("Get Carrier Animation type: %d,status:%d", Environment::ANIMATION_TYPE,Environment::BOOT_STATUS); + if (animFile != NULL && strcmp(animFile, "") != 0) { + return animFile; + }else{ + ALOGD("Get Carrier Animation file: %s failed", animFile); + } + delete environment; + }else{ + ALOGE("Get Carrier Animation file,since it's not support carrier"); + } + + return fileName[image]; +} + status_t BootAnimation::readyToRun() { mAssets.addDefaultAssets(); @@ -285,14 +317,14 @@ status_t BootAnimation::readyToRun() { bool encryptedAnimation = atoi(decrypt) != 0 || !strcmp("trigger_restart_min_framework", decrypt); - if (encryptedAnimation && (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0)) { - mZipFileName = SYSTEM_ENCRYPTED_BOOTANIMATION_FILE; + if (encryptedAnimation && (access(getAnimationFileName(IMG_ENC), R_OK) == 0)) { + mZipFileName = getAnimationFileName(IMG_ENC); } - else if (access(OEM_BOOTANIMATION_FILE, R_OK) == 0) { - mZipFileName = OEM_BOOTANIMATION_FILE; + else if (access(getAnimationFileName(IMG_OEM), R_OK) == 0) { + mZipFileName = getAnimationFileName(IMG_OEM); } - else if (access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) { - mZipFileName = SYSTEM_BOOTANIMATION_FILE; + else if (access(getAnimationFileName(IMG_SYS), R_OK) == 0) { + mZipFileName = getAnimationFileName(IMG_SYS); } return NO_ERROR; } diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h index d49e1ec837b9..f6846e85ea77 100644 --- a/cmds/bootanimation/BootAnimation.h +++ b/cmds/bootanimation/BootAnimation.h @@ -87,6 +87,13 @@ private: ZipFileRO* zip; }; + /** + *IMG_OEM: bootanimation file from oem/media + *IMG_SYS: bootanimation file from system/media + *IMG_ENC: encrypted bootanimation file from system/media + */ + enum ImageID { IMG_OEM = 0, IMG_SYS = 1, IMG_ENC = 2 }; + const char *getAnimationFileName(ImageID image); status_t initTexture(Texture* texture, AssetManager& asset, const char* name); status_t initTexture(const Animation::Frame& frame); bool android(); -- GitLab From e447405f4db3b12985771d58883f4620ffb5bc94 Mon Sep 17 00:00:00 2001 From: Matadeen Mishra Date: Thu, 13 Aug 2015 21:37:25 +0530 Subject: [PATCH 111/185] Bluetooth: Handle BT state change Add foreground flag to state change intent. Fix for few profiles not syncing with the BT adapter state in multiple BT on/off test case. CRs-fixed: 1036876 Change-Id: Ice042a21f08566cadc9540aa75cde726b2e86575 --- .../core/java/com/android/server/BluetoothManagerService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index aa648a4b3604..50dc7326f5e5 100755 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -1513,6 +1513,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { intent.putExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, prevState); intent.putExtra(BluetoothAdapter.EXTRA_STATE, newState); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); mContext.sendBroadcastAsUser(intent, UserHandle.ALL, BLUETOOTH_PERM); } } -- GitLab From 29db56b5c3434bd25a79e9db5a155190b536f59b Mon Sep 17 00:00:00 2001 From: c_jyuan Date: Mon, 4 Jul 2016 15:07:55 +0800 Subject: [PATCH 112/185] Permission: Fix permission description issue. Update permission description, make it correct and clear in permission center. Change-Id: I07578527c5d813b77331c744ca4d7d781b644abb --- core/res/res/values-zh-rCN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 43e6761e2f0e..7383ffd4b866 100755 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -468,7 +468,7 @@ "允许应用读取存储设备。" "允许应用读取您SD卡的内容。" "写入/删除内部存储" - "修改或删除您的SD卡中的内容" + "写入/删除您的SD卡中的内容" "允许应用写入存储设备。" "允许应用写入SD卡。" "拨打/接听SIP电话" -- GitLab From cb37ff9339d0f9a8f7e480a10e8d158d7cb8c9f1 Mon Sep 17 00:00:00 2001 From: Devi Sandeep Endluri V V Date: Wed, 15 Jun 2016 18:23:55 +0530 Subject: [PATCH 113/185] server: implement NatStarted and NatStopped in NetPluginDelegate use natStarted and natStopped hooks in NetworkManagementService to start V6 tethering. Change-Id: I8293507f96cdfac28959a7bff622df1596727ab3 CRs-Fixed: 1024593 --- .../com/android/server/NetPluginDelegate.java | 26 +++++++++++++++++++ .../server/NetworkManagementService.java | 3 +++ 2 files changed, 29 insertions(+) diff --git a/services/core/java/com/android/server/NetPluginDelegate.java b/services/core/java/com/android/server/NetPluginDelegate.java index df36fec95c8f..3aeb5bb9d1ef 100644 --- a/services/core/java/com/android/server/NetPluginDelegate.java +++ b/services/core/java/com/android/server/NetPluginDelegate.java @@ -77,6 +77,32 @@ public class NetPluginDelegate { return ret_val; } + public static void natStarted(String intIface, String extIface) { + if (LOGV) Slog.v(TAG, "natStarted() E"); + if(!loadTetherExtJar()) return; + try { + tetherExtensionClass.getMethod("natStarted", String.class, String.class).invoke( + tetherExtensionObj, intIface, extIface); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "Error calling natStarted Method on extension jar"); + } + if (LOGV) Slog.v(TAG, "natStarted() X"); + } + + public static void natStopped(String intIface, String extIface) { + if (LOGV) Slog.v(TAG, "natStopped() E"); + if(!loadTetherExtJar()) return; + try { + tetherExtensionClass.getMethod("natStopped", String.class, String.class).invoke( + tetherExtensionObj, intIface, extIface); + } catch (Exception e) { + e.printStackTrace(); + Log.w(TAG, "Error calling natStopped Method on extension jar"); + } + if (LOGV) Slog.v(TAG, "natStopped() X"); + } + public static void setQuota(String iface, long quota) { if (LOGV) Slog.v(TAG, "setQuota(" + iface + ", " + quota + ") E"); if(!loadTetherExtJar()) return; diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 9bde75718f97..d02fb53ec4c9 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -94,6 +94,7 @@ import com.android.internal.util.HexDump; import com.android.internal.util.Preconditions; import com.android.server.NativeDaemonConnector.Command; import com.android.server.NativeDaemonConnector.SensitiveArg; +import com.android.server.NetPluginDelegate; import com.android.server.net.LockdownVpnTracker; import com.google.android.collect.Maps; @@ -1410,6 +1411,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub } catch (SocketException e) { throw new IllegalStateException(e); } + NetPluginDelegate.natStarted(internalInterface,externalInterface); } @Override @@ -1420,6 +1422,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub } catch (SocketException e) { throw new IllegalStateException(e); } + NetPluginDelegate.natStopped(internalInterface,externalInterface); } @Override -- GitLab From 5a9a2d95802d83b6dc909fae36e8e1aa1bf9366f Mon Sep 17 00:00:00 2001 From: Arthur Shuai Date: Tue, 10 Nov 2015 13:21:14 +0800 Subject: [PATCH 114/185] Backup: add backup shared mode default backup agent didn't support -shared mode backup. add to support user storage backup. Change-Id: I7bdab0650a7936336660eb2218dde4c3574f8781 --- core/java/android/app/backup/BackupAgent.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java index bc8280681e4a..44b1487f0825 100644 --- a/core/java/android/app/backup/BackupAgent.java +++ b/core/java/android/app/backup/BackupAgent.java @@ -634,8 +634,11 @@ public abstract class BackupAgent extends ContextWrapper { // Pull out the domain and set it aside to use when making the tarball. String domainPath = FullBackup.getBackupScheme(this).tokenToDirectoryPath(domain); if (domainPath == null) { - // Should never happen. - return; + if (startingPath == null) { + return; + } else { + domainPath = startingPath; + } } File rootFile = new File(startingPath); -- GitLab From a694b103f43a3570fb18a92614d6d6585ac3c493 Mon Sep 17 00:00:00 2001 From: jianzhou Date: Fri, 8 Apr 2016 16:37:17 +0800 Subject: [PATCH 115/185] UsbManager: Add the support of USB charging only function Add one function of USB charging mode without adb function enabled. Change-Id: I8046607a1c9eb8ba9bf7ac8338dd165a72b738c4 CRs-Fixed: 997842 --- core/java/android/hardware/usb/UsbManager.java | 8 ++++++++ .../usb/java/com/android/server/usb/UsbDeviceManager.java | 4 +++- services/usb/java/com/android/server/usb/UsbService.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) mode change 100644 => 100755 core/java/android/hardware/usb/UsbManager.java mode change 100644 => 100755 services/usb/java/com/android/server/usb/UsbDeviceManager.java mode change 100644 => 100755 services/usb/java/com/android/server/usb/UsbService.java diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java old mode 100644 new mode 100755 index f9a7d192b5bb..9afae31e7747 --- a/core/java/android/hardware/usb/UsbManager.java +++ b/core/java/android/hardware/usb/UsbManager.java @@ -244,6 +244,14 @@ public class UsbManager { */ public static final String USB_FUNCTION_ACCESSORY = "accessory"; + /** + * Name of the charging USB function. + * Used in extras for the {@link #ACTION_USB_STATE} broadcast + * + * {@hide} + */ + public static final String USB_FUNCTION_CHARGING = "charging"; + /** * Name of extra for {@link #ACTION_USB_PORT_CHANGED} * containing the {@link UsbPort} object for the port. diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java old mode 100644 new mode 100755 index df9242dc0aa1..8cada7719371 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -528,7 +528,9 @@ public class UsbDeviceManager { } private String applyAdbFunction(String functions) { - if (mAdbEnabled) { + //Not enable adb when it s charging mode + if (mAdbEnabled && + !UsbManager.containsFunction(functions, UsbManager.USB_FUNCTION_CHARGING)) { functions = UsbManager.addFunction(functions, UsbManager.USB_FUNCTION_ADB); } else { functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_ADB); diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java old mode 100644 new mode 100755 index d6dbe90584f5..d6f6b82dc97a --- a/services/usb/java/com/android/server/usb/UsbService.java +++ b/services/usb/java/com/android/server/usb/UsbService.java @@ -313,6 +313,7 @@ public class UsbService extends IUsbManager.Stub { case UsbManager.USB_FUNCTION_MTP: case UsbManager.USB_FUNCTION_PTP: case UsbManager.USB_FUNCTION_RNDIS: + case UsbManager.USB_FUNCTION_CHARGING: return true; } -- GitLab From 9aaece4e4094e55bc82af4a2bf734d56827c32c4 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Sugguna Date: Tue, 5 Jul 2016 13:31:51 +0530 Subject: [PATCH 116/185] IMS: Rectify the capability mask for add participant Properly set the add participant capability mask. Change-Id: Ie6ca67146bc6d2623bd366b04bf33c2ed24c3d51 CRs-Fixed: 1037530 --- telecomm/java/android/telecom/Connection.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index a646d42a6c10..3e2433d53147 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -235,13 +235,6 @@ public abstract class Connection extends Conferenceable { */ public static final int CAPABILITY_CAN_PAUSE_VIDEO = 0x00100000; - /** - * Add participant in an active or conference call option - * - * @hide - */ - public static final int CAPABILITY_ADD_PARTICIPANT = 0x02000000; - /** * For a conference, indicates the conference will not have child connections. *

@@ -301,9 +294,16 @@ public abstract class Connection extends Conferenceable { */ public static final int CAPABILITY_VOICE_PRIVACY = 0x02000000; + /** + * Add participant in an active or conference call option + * + * @hide + */ + public static final int CAPABILITY_ADD_PARTICIPANT = 0x04000000; + //********************************************************************************************** - // Next CAPABILITY value: 0x04000000 + // Next CAPABILITY value: 0x08000000 //********************************************************************************************** /** -- GitLab From 1e5c3b5a5dbf900e5b48ecfe62d00a7ea445a2d1 Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Thu, 19 Nov 2015 01:25:04 +0530 Subject: [PATCH 117/185] Reduce the delay during headset removal AudioService currently waits for one second delay for device switch after headset removal. This is to avoid any fake interrupts during removal. But, codec already waits for fake interrupts before actually triggering the removal interrupt. So, the delay is more during device switch from headset to speaker. Change reduces the delay by 300msec in AudioService as codec is handling the fake removal interrupts. Change-Id: I9d5dc1a82b85c0be8aaef3b65286450dfed13d35 --- services/core/java/com/android/server/audio/AudioService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index deb6bc187637..3995e538edb2 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5210,7 +5210,7 @@ public class AudioService extends IAudioService.Stub { 0, null, 0); - delay = 1000; + delay = 700; } } -- GitLab From af0b39b0cdcd94544781155fb6ccf68a6b2a8275 Mon Sep 17 00:00:00 2001 From: Venkata Jagadeesh Date: Fri, 20 May 2016 13:08:35 +0530 Subject: [PATCH 118/185] Don't remove bonding device from cached device list during inquiry Use case: DUT unable to start auto connect after pairing to remote devices Steps: 1. pair with remote device 2. unpair remote device. 3. Pair again to same remote from available devices list and initate inquiry same time Failure: DUT unable to start auto connect after pairing to remote device Root Cause: As bonding device is removed from cached device list,a new cached device entry is created after bonding with auto connection variable reset. Fix: This issue fixed by deleting only non bonded and non bonding devices during inquiry. Change-Id: I9d1c399292420fa2e321a4f6410e672a2abcc423 CRs-Fixed: 1033953 --- .../settingslib/bluetooth/CachedBluetoothDeviceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java index a9f4bd31e42b..409f32b12172 100755 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java @@ -118,7 +118,7 @@ public final class CachedBluetoothDeviceManager { public synchronized void clearNonBondedDevices() { for (int i = mCachedDevices.size() - 1; i >= 0; i--) { CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); - if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { + if (cachedDevice.getBondState() == BluetoothDevice.BOND_NONE) { mCachedDevices.remove(i); } } -- GitLab From e0a7652fdc1097c78371c418695b17dde4d5ebdc Mon Sep 17 00:00:00 2001 From: Sunil Dutt Date: Thu, 2 Jun 2016 19:18:22 +0530 Subject: [PATCH 119/185] Introduce WIFI_AP_STATE_RESTART which aims to restart SoftAP Implement WIFI_AP_STATE_RESTART state which aims to restart SoftAP. CRs-fixed: 1034612 Change-Id: Ifaba2ff9dc178bf4f9633f0bf255a68b58b2439b --- wifi/java/android/net/wifi/WifiManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index d02fcd82a3ce..27cb405c692b 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -321,6 +321,12 @@ public class WifiManager { @SystemApi public static final int WIFI_AP_STATE_FAILED = 14; + /** + * Wi-Fi AP is in restarting state + * @hide + */ + public static final int WIFI_AP_STATE_RESTART = 15; + /** * If WIFI AP start failed, this reason code means there is no legal channel exists on * user selected band by regulatory -- GitLab From e4c27ec44db356dd459b41350dadeda27424e1df Mon Sep 17 00:00:00 2001 From: Sravanthi Palakonda Date: Fri, 17 Jun 2016 19:30:02 +0530 Subject: [PATCH 120/185] wifi: Enhance WiFi Configuration to also include sim number. For EAP SIM/AKA/AKA` authentication to happen on a specific SIM , the SIM number has to be also a part of Wi-Fi configuration . This commit ensures the same. Change-Id: I3239c534bd8d221dc0af0174304427491a1d586b CRs-Fixed: 1030715 --- .../java/android/net/wifi/WifiConfiguration.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 9d0c20ce4c5d..6f20267d237b 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -69,6 +69,8 @@ public class WifiConfiguration implements Parcelable { /** {@hide} */ private String mPasspointManagementObjectTree; + /** {@hide} */ + public static final String SIMNumVarName = "sim_num"; /** * Recognized key management schemes. @@ -446,6 +448,12 @@ public class WifiConfiguration implements Parcelable { @SystemApi public String lastUpdateName; + /** + * @hide + * sim number selected + */ + public int SIMNum; + /** * @hide * Status of user approval for connection @@ -1350,6 +1358,7 @@ public class WifiConfiguration implements Parcelable { creatorUid = -1; shared = true; dtimInterval = 0; + SIMNum = 0; } /** @@ -1511,6 +1520,10 @@ public class WifiConfiguration implements Parcelable { if (this.preSharedKey != null) { sbuf.append('*'); } + sbuf.append('\n').append(" sim_num "); + if (this.SIMNum > 0 ) { + sbuf.append('*'); + } sbuf.append("\nEnterprise config:\n"); sbuf.append(enterpriseConfig); @@ -1907,6 +1920,7 @@ public class WifiConfiguration implements Parcelable { creationTime = source.creationTime; updateTime = source.updateTime; shared = source.shared; + SIMNum = source.SIMNum; } } @@ -1977,6 +1991,7 @@ public class WifiConfiguration implements Parcelable { dest.writeInt(noInternetAccessExpected ? 1 : 0); dest.writeInt(shared ? 1 : 0); dest.writeString(mPasspointManagementObjectTree); + dest.writeInt(SIMNum); } /** Implement the Parcelable interface {@hide} */ @@ -2048,6 +2063,7 @@ public class WifiConfiguration implements Parcelable { config.noInternetAccessExpected = in.readInt() != 0; config.shared = in.readInt() != 0; config.mPasspointManagementObjectTree = in.readString(); + config.SIMNum = in.readInt(); return config; } -- GitLab From 2107ff27ac15d4dfe8dbbe9c964165f234fd9f30 Mon Sep 17 00:00:00 2001 From: Zhibin Wang Date: Tue, 5 Jul 2016 18:35:14 -0700 Subject: [PATCH 121/185] Support url match of "www." behind Chinese character. Change-Id: If023bfcfaf17847a34e81e53f803d41abd719464 CRs-Fixed: 1029380 --- core/java/android/util/Patterns.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/util/Patterns.java b/core/java/android/util/Patterns.java index 0a452dbc39a1..db0c8c56688d 100644 --- a/core/java/android/util/Patterns.java +++ b/core/java/android/util/Patterns.java @@ -305,6 +305,7 @@ public class Patterns { /* A word boundary or end of input. This is to stop foo.sure from matching as foo.su */ private static final String WORD_BOUNDARY = "(?:\\b|$|^)"; + private static final String WORD_BOUNDARY_WWW = "(?:\\b|$|^|www\\.)"; private static final String USER_INFO = "(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" @@ -355,14 +356,18 @@ public class Patterns { private static final String RELAXED_DOMAIN_NAME = "(?:" + "(?:" + IRI_LABEL + "(?:\\.(?=\\S))" +"?)+" + "|" + IP_ADDRESS + ")"; + private static final String CJK_UNIFIED = "[" + + "\u4E00-\u9FFF" + + "]"; /** * Regular expression to match strings that do not start with a supported protocol. The TLDs * are expected to be one of the known TLDs. */ private static final String WEB_URL_WITHOUT_PROTOCOL = "(" - + WORD_BOUNDARY + + WORD_BOUNDARY_WWW + "(? Date: Thu, 30 Jul 2015 18:39:07 +0530 Subject: [PATCH 122/185] PhoneWindowManager: Changes for WFD and UIBC. This change includes the below gerrits: # This is a combination of 3 commits # The first commit's message is: PhoneWindowManager: Changes for WFD. - WFD now sends WIFI_DISPLAY_VIDEO intent to set UI orientation. - PhoneWindowManager to listen for WFD intents. - Display on WFD should be same as seen on the HDMI, so set the orientation to HDMI orientation Change-Id: I446ab768200f9b9f59759e52071bcaca7d6f836c # This is the 2nd commit message: framework: update WFD session orientation based on UIBC rotation User Input Back Channel (UIBC) support in Wifi Display stack allows the sink to send control/commands/preferences to the source e.g. touch, keyboard/mouse entry, or orientation/rotation. PhoneWindowManager needs to listen for UIBC rotation intents and update the preferred rotation when WFD is active. Note: HDMI rotation lock overrides WiFi Display UIBC rotation. Change-Id: I1869b21c3c03b5b36c5381933b50dfbfeca88db6 # This is the 3rd commit message: PhoneWindowManager: Changes for WiFi Display to comply with Android CDD Remove definition of Intent action for ACTION_WIFI_DISPLAY_VIDEO from Intent.java and make it local to PhoneWindowManager. Change-Id: I91a6d302e19705080ccc109ee6532c6d43f58165 Change-Id: I03e2ca995c520519b29eb30a1a52959c0992f77e --- .../server/policy/PhoneWindowManager.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index a4408fc0a22a..bc7e955ef6ec 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -252,6 +252,19 @@ public class PhoneWindowManager implements WindowManagerPolicy { .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build(); + /** + * Broadcast Action: WiFi Display video is enabled or disabled + * + *

The intent will have the following extra values:

+ *
    + *
  • state - 0 for disabled, 1 for enabled.
  • + *
+ */ + + private static final String ACTION_WIFI_DISPLAY_VIDEO = + "org.codeaurora.intent.action.WIFI_DISPLAY_VIDEO"; + + // The panic gesture may become active only after the keyguard is dismissed and the immersive // app shows again. If that doesn't happen for 30s we drop the gesture. private static final long PANIC_GESTURE_EXPIRATION = 30000; @@ -720,6 +733,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; + boolean mWifiDisplayConnected = false; + int mWifiDisplayCustomRotation = -1; private class PolicyHandler extends Handler { @Override @@ -1735,6 +1750,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManagerFuncs.registerPointerEventListener(mSystemGestures); mVibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); + + /* Register for WIFI Display Intents */ + IntentFilter wifiDisplayFilter = new IntentFilter(ACTION_WIFI_DISPLAY_VIDEO); + Intent wifidisplayIntent = context.registerReceiver( + mWifiDisplayReceiver, wifiDisplayFilter); mLongPressVibePattern = getLongIntArray(mContext.getResources(), com.android.internal.R.array.config_longPressVibePattern); mVirtualKeyVibePattern = getLongIntArray(mContext.getResources(), @@ -6077,6 +6097,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + + BroadcastReceiver mWifiDisplayReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(ACTION_WIFI_DISPLAY_VIDEO)) { + int state = intent.getIntExtra("state", 0); + if(state == 1) { + mWifiDisplayConnected = true; + } else { + mWifiDisplayConnected = false; + } + mWifiDisplayCustomRotation = + intent.getIntExtra("wfd_UIBC_rot", -1); + updateRotation(true); + } + } + }; + // Called on the PowerManager's Notifier thread. @Override public void startedGoingToSleep(int why) { @@ -6498,10 +6536,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { // enable 180 degree rotation while docked. preferredRotation = mDeskDockEnablesAccelerometer ? sensorRotation : mDeskDockRotation; - } else if (mHdmiPlugged && mDemoHdmiRotationLock) { + } else if ((mHdmiPlugged || mWifiDisplayConnected) && mDemoHdmiRotationLock) { // Ignore sensor when plugged into HDMI when demo HDMI rotation lock enabled. // Note that the dock orientation overrides the HDMI orientation. preferredRotation = mDemoHdmiRotation; + } else if (mWifiDisplayConnected && (mWifiDisplayCustomRotation > -1)) { + // Ignore sensor when WFD is active and UIBC rotation is enabled + preferredRotation = mWifiDisplayCustomRotation; } else if (mHdmiPlugged && mDockMode == Intent.EXTRA_DOCK_STATE_UNDOCKED && mUndockedHdmiRotation >= 0) { // Ignore sensor when plugged into HDMI and an undocked orientation has -- GitLab From d8443803fa4ae3d98272ad9e29906920df32013c Mon Sep 17 00:00:00 2001 From: Wileen Chiu Date: Fri, 18 Sep 2015 15:17:54 -0700 Subject: [PATCH 123/185] Show 3G data icon for TD-SCDMA network type - The data annunciator on the UI shows up as "G" instead of "3G" - Map the 3G telephony icon to network type TD-SCDMA Change-Id: I63a0e54aab7fda2bcc6f098bb0b43799aad2f6c2 CRs-Fixed: 886804 --- .../systemui/statusbar/policy/MobileSignalController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 9e253f454aa0..287a3b8a3ed0 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -187,6 +187,7 @@ public class MobileSignalController extends SignalController< mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_B, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EHRPD, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_UMTS, TelephonyIcons.THREE_G); + mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_TD_SCDMA, TelephonyIcons.THREE_G); if (!mConfig.showAtLeast3G) { mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_UNKNOWN, -- GitLab From 902b3d653cdd52600247ed291375ada50af84270 Mon Sep 17 00:00:00 2001 From: c_jyuan Date: Mon, 11 Jul 2016 14:37:24 +0800 Subject: [PATCH 124/185] Add missing STORAGE_INTERNAL permission for BackupRestoreConfirmation BackupRestoreConfirmation acitivity does not show 'allow' button, because 'getPasswordType' func check "Manifest.permission.STORAGE_INTERNAL", so add missing STORAGE_INTERNAL permission. Change-Id: Ica631b7edd2529e52d6661cef6ee6e468f1f38ed --- packages/BackupRestoreConfirmation/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 packages/BackupRestoreConfirmation/AndroidManifest.xml diff --git a/packages/BackupRestoreConfirmation/AndroidManifest.xml b/packages/BackupRestoreConfirmation/AndroidManifest.xml old mode 100644 new mode 100755 index 8141fa72e56f..db8ebc190beb --- a/packages/BackupRestoreConfirmation/AndroidManifest.xml +++ b/packages/BackupRestoreConfirmation/AndroidManifest.xml @@ -21,6 +21,7 @@ + Date: Wed, 13 Jul 2016 14:21:29 +0800 Subject: [PATCH 125/185] SystemUI:Fix hotspot icon issue Not showing hotspot icon in status bar while hotspot enabled due to not able to find hotspot icon resource. Add hotspot icon resource in hotspot change callback function. Change-Id: Ie382130338d66d48d1a68aa4dc5fca0159240fc2 CRs-Fixed: 1028024 --- .../android/systemui/statusbar/phone/PhoneStatusBarPolicy.java | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java old mode 100644 new mode 100755 index d9dd9e243b94..880dc74754cd --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -450,6 +450,8 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro private final HotspotController.Callback mHotspotCallback = new HotspotController.Callback() { @Override public void onHotspotChanged(boolean enabled) { + mIconController.setIcon(mSlotHotspot, R.drawable.stat_sys_hotspot, + mContext.getString(R.string.accessibility_status_bar_hotspot)); mIconController.setIconVisibility(mSlotHotspot, enabled); } }; -- GitLab From 8ddb32bd929f984cae4bb7cd3e41a3b0545df564 Mon Sep 17 00:00:00 2001 From: Sashidhar Ganiga Date: Mon, 18 Jan 2016 16:19:53 +0530 Subject: [PATCH 126/185] Fix for reboot on connecting to TV through HDMI. In LocalDisplayAdapter there is a code flow possibility for activeColorTransform to be null, when the HAL does not support color transforms. The Fix covers this code flow path to ensure no framework reboot occurs due to NullPointerException, even if the color transforms feature is not supported. CRs-Fixed: 957125 Change-Id: Ifbadcc8f55e37ba78acc549198df0f0876bd0560 --- .../java/com/android/server/display/LocalDisplayAdapter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 7b16ea61eb74..ebba35491725 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -192,6 +192,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { for (int j = 0; j < colorTransforms.size(); j++) { if (colorTransforms.get(j).getColorTransform() == info.colorTransform) { existingMode = true; + if (i == activeDisplayInfo) { + activeColorTransform = colorTransforms.get(j); + } break; } } -- GitLab From 2799b3922bf3952d1671c3feef0178917ae8a033 Mon Sep 17 00:00:00 2001 From: Prashant Shrivastava Date: Mon, 4 Jul 2016 12:29:46 +0530 Subject: [PATCH 127/185] frameworks/base: Addition of Changes for ZeroBalance feature --Addition of code to receive broadcast from ZeroBalanceHelper application for executing command to write block/unblock rule to Iptable --Addition of ZeroBalanceHelper file to be accesible by other modules to notify ZeroBalanceHelper application about update on change of SIM balance --Addition of rule to allow browser uid when rest all applications are in blocked state. --Addition of feature flag to control the zerobalance feature. Change-Id: Idb47f46e6e86397e582c2fda1dbe7dd9d5e1624e CRs-Fixed: 1033837 --- core/java/android/net/ZeroBalanceHelper.java | 100 ++++++++++++++++++ core/res/res/values/config.xml | 7 ++ core/res/res/values/symbols.xml | 3 + .../server/NetworkManagementService.java | 36 +++++++ 4 files changed, 146 insertions(+) create mode 100644 core/java/android/net/ZeroBalanceHelper.java diff --git a/core/java/android/net/ZeroBalanceHelper.java b/core/java/android/net/ZeroBalanceHelper.java new file mode 100644 index 000000000000..36b18d04360e --- /dev/null +++ b/core/java/android/net/ZeroBalanceHelper.java @@ -0,0 +1,100 @@ +/* + ** Copyright (c) 2015-16, The Linux Foundation. All rights reserved. + + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above + ** copyright notice, this list of conditions and the following + ** disclaimer in the documentation and/or other materials provided + ** with the distribution. + ** * Neither the name of The Linux Foundation nor the names of its + ** contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + + ** THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + ** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + ** BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + ** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + ** OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + ** IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package android.net; + +import android.app.ActivityThread; +import android.content.Context; +import android.content.Intent; +import android.os.SystemProperties; +import android.os.UserHandle; +import android.util.Log; + +import com.android.internal.R; + + +/** @hide */ +public final class ZeroBalanceHelper { + + public static final String BACKGROUND_DATA_PROPERTY = "sys.background.data.disable"; + public static final String BACKGROUND_DATA_BROADCAST = "org.codeaurora.background.data"; + public static final String TAG = "ZeroBalance"; + + private static int sRedirectCount = 0; + private static int sRedirectMaxCount = 3; + + private Context mContext = null; + + public ZeroBalanceHelper() { + mContext = ActivityThread.currentApplication(); + } + + public void setBgDataProperty(String enabled) { + Intent intent = new Intent(); + intent.setAction(BACKGROUND_DATA_BROADCAST); + intent.putExtra("enabled", enabled); + mContext.sendBroadcast(intent); + } + + public String getBgDataProperty() { + String isBgDataPropertySet = SystemProperties.get(BACKGROUND_DATA_PROPERTY, "false"); + if(Boolean.valueOf(isBgDataPropertySet)) { + sRedirectCount = 0; + } + return isBgDataPropertySet; + } + + private String getConfiguredRedirectURL() { + String redirectURL = mContext.getResources().getString( + com.android.internal.R.string.operator_config_url); + Log.d(TAG, "Returning the configured redirect URL : " + + redirectURL); + return redirectURL; + } + + public synchronized void setHttpRedirectCount(String url) { + String redirectUrl = getConfiguredRedirectURL(); + if (redirectUrl != null && url.contains(redirectUrl)) { + sRedirectCount++; + Log.d(TAG, "http:sRedirectCount="+sRedirectCount); + if (sRedirectCount >= sRedirectMaxCount) { + Log.d(TAG,"http:Background Data will be disabled" ); + setBgDataProperty("true"); + sRedirectCount = 0; + } + } else { + Log.d(TAG,"http: resetting the counter "); + sRedirectCount = 0; + } + } + + public boolean getFeatureConfigValue() { + return mContext.getResources().getBoolean(R.bool.config_zero_balance_operator); + } +} diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 038274046e14..46d850f25dbb 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2579,4 +2579,11 @@ 2G 3G 4G + + + + + + + false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index c8ff8238f0e4..194640474234 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2686,4 +2686,7 @@ + + + diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index d02fb53ec4c9..1cbac69fe4de 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -47,8 +47,11 @@ import static com.android.server.NetworkManagementService.NetdResponseCode.TtyLi import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED; import android.annotation.NonNull; import android.app.ActivityManagerNative; +import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.INetd; import android.net.INetworkManagementEventObserver; @@ -90,6 +93,7 @@ import android.util.SparseIntArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IBatteryStats; import com.android.internal.net.NetworkStatsFactory; +import com.android.internal.R; import com.android.internal.util.HexDump; import com.android.internal.util.Preconditions; import com.android.server.NativeDaemonConnector.Command; @@ -349,6 +353,13 @@ public class NetworkManagementService extends INetworkManagementService.Stub } else { prepareNativeDaemon(); } + //Registering the receiver for Zerobalance blocking/unblocking + if (mContext.getResources().getBoolean(R.bool.config_zero_balance_operator)) { + final IntentFilter restrictFilter = new IntentFilter(); + restrictFilter.addAction("org.codeaurora.restrictData"); + mContext.registerReceiver(mZeroBalanceReceiver, restrictFilter); + } + if (DBG) Slog.d(TAG, "ZeroBalance registering receiver"); } private IBatteryStats getBatteryStats() { @@ -2786,4 +2797,29 @@ public class NetworkManagementService extends INetworkManagementService.Stub public void removeInterfaceFromLocalNetwork(String iface) { modifyInterfaceInNetwork("remove", "local", iface); } + + private BroadcastReceiver mZeroBalanceReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + boolean isBlockAllData = false; + if(intent != null + && intent.getAction().equals("org.codeaurora.restrictData")) { + isBlockAllData = intent.getBooleanExtra("Restrict",false); + Log.wtf("ZeroBalance", "Intent value to block unblock data"+isBlockAllData); + } + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + // silently discard when control disabled + // TODO: eventually migrate to be always enabled + if (!mBandwidthControlEnabled) return; + try { + Log.wtf("ZeroBalance", "before calling connector Intent" + +"value to block unblock data"+isBlockAllData); + mConnector.execute("bandwidth", + isBlockAllData ? "blockAllData" : "unblockAllData"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + }; } -- GitLab From 6a4dfa59ebd17206b596e56d9a794fce75c36b2d Mon Sep 17 00:00:00 2001 From: Mao Jinlong Date: Wed, 1 Jun 2016 17:44:27 +0800 Subject: [PATCH 128/185] Add support for power off alarm 1. Only install power off alarm apps; Power off alarm should be least affected when it is firing. There should be no other applications with notifications and sounds(eg. phone application and message application). So when it is alarm boot, we should only install necessary applications for power off alarm and system's boot-up. We need to ensure that power off alarm works on both normal status and encrypt status. 2. Use file in persist folder to save alarm status and instance time; We need to distinguish power off alarm from other applications which use RTC_POWEROFF_WAKEUP alarm type. And it should also work when vold.decrypt property is trigger_restart_min_framework or "1". As in this state, android system only has temporary data partition. File in persist folder can be used in any status. Change-Id: I7f85a2a7e1d06b69ddb74f376435518314105500 --- core/java/android/app/AlarmManager.java | 90 +++++++++++++++++++ .../android/content/pm/PackageParser.java | 53 ++++++++++- core/res/res/values/arrays.xml | 13 +++ core/res/res/values/symbols.xml | 2 + .../android/server/AlarmManagerService.java | 45 ++++++++-- .../server/am/ActivityManagerService.java | 18 ++++ .../server/pm/PackageManagerService.java | 27 +++++- .../server/policy/PhoneWindowManager.java | 10 +++ .../android/server/power/ShutdownThread.java | 14 +++ .../java/com/android/server/SystemServer.java | 6 ++ 10 files changed, 268 insertions(+), 10 deletions(-) diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index b00a4adc2325..602e1f104517 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -33,6 +33,9 @@ import android.util.Log; import libcore.util.ZoneInfoDB; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; /** @@ -115,6 +118,42 @@ public class AlarmManager { */ public static final int RTC_POWEROFF_WAKEUP = 5; + /** + * File to save value to indicate that power off alarm is set + * @hide + */ + public static final String POWER_OFF_ALARM_SET_FILE = + "/persist/alarm/powerOffAlarmSet"; + /** + * File to indicate that if power off alarm is handled in + * encryption status. + * @hide + */ + public static final String POWER_OFF_ALARM_HANDLE_FILE = + "/persist/alarm/powerOffAlarmHandle"; + /** + * File to save instance time which will handle in encryption status. + * @hide + */ + public static final String POWER_OFF_ALARM_INSTANCE_FILE = + "/persist/alarm/powerOffAlarmInstance"; + /** + * @hide + */ + public static final String POWER_OFF_ALARM_SET = "1"; + /** + * @hide + */ + public static final String POWER_OFF_ALARM_NOT_SET = "0"; + /** + * @hide + */ + public static final String POWER_OFF_ALARM_NOT_HANDLED = "0"; + /** + * @hide + */ + public static final String POWER_OFF_ALARM_HANDLED = "1"; + /** * Broadcast Action: Sent after the value returned by * {@link #getNextAlarmClock()} has changed. @@ -1040,6 +1079,57 @@ public class AlarmManager { } } + + /** + * Read value from power off alarm files + * + * @hide + */ + public static String readPowerOffAlarmFile(String fileName) { + BufferedReader reader = null; + String line = null; + try { + reader = new BufferedReader(new FileReader(fileName)); + line = reader.readLine(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + return line; + } + + + /** + * Write value to power off alarm files + * + * @hide + */ + public static void writePowerOffAlarmFile(String fileName, String value) { + FileWriter writer = null; + try { + writer = new FileWriter(fileName, false); + writer.write(value); + writer.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + /** * An immutable description of a scheduled "alarm clock" event. * diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 4da77f4b35c9..c0f868b3952e 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -24,6 +24,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.app.ActivityManager; +import android.content.Context; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; @@ -161,6 +162,8 @@ public class PackageParser { private static final String TAG_PACKAGE = "package"; private static final String TAG_RESTRICT_UPDATE = "restrict-update"; + private Context mContext; + // These are the tags supported by child packages private static final Set CHILD_PACKAGE_TAGS = new ArraySet<>(); static { @@ -254,6 +257,7 @@ public class PackageParser { private String[] mSeparateProcesses; private boolean mOnlyCoreApps; private DisplayMetrics mMetrics; + private boolean mOnlyPowerOffAlarmApps; private static final int SDK_VERSION = Build.VERSION.SDK_INT; private static final String[] SDK_CODENAMES = Build.VERSION.ACTIVE_CODENAMES; @@ -426,6 +430,11 @@ public class PackageParser { mMetrics.setToDefaults(); } + public PackageParser(Context context) { + this(); + mContext = context; + } + public void setSeparateProcesses(String[] procs) { mSeparateProcesses = procs; } @@ -443,6 +452,10 @@ public class PackageParser { mMetrics = metrics; } + public void setOnlyPowerOffAlarmApps(boolean onlyPowerOffAlarmApps) { + mOnlyPowerOffAlarmApps = onlyPowerOffAlarmApps; + } + public static final boolean isApkFile(File file) { return isApkPath(file.getName()); } @@ -797,6 +810,27 @@ public class PackageParser { } } + + /* + * Check if the package belongs to power off alarm packages + */ + private boolean isPowerOffAlarmPackage(String packageName) { + if (mContext != null) { + String[] packageArray = + mContext.getResources().getStringArray(R.array.power_off_alarm_apps); + if(packageArray.length ==0) { + Slog.w(TAG, "power off alarm app array is empty " + packageName); + return false; + } else { + List tempList = Arrays.asList(packageArray); + if (tempList.contains(packageName)) { + return true; + } + } + } + return false; + } + /** * Parse all APKs contained in the given directory, treating them as a * single package. This also performs sanity checking, such as requiring @@ -808,8 +842,15 @@ public class PackageParser { */ private Package parseClusterPackage(File packageDir, int flags) throws PackageParserException { final PackageLite lite = parseClusterPackageLite(packageDir, 0); + // When mOnlyPowerOffAlarmApps is true, only parse power off alarm packages + if (mOnlyPowerOffAlarmApps) { + if (!isPowerOffAlarmPackage(lite.packageName)) { + throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, + "Not a powerOffAlarmApp: " + packageDir); + } + } - if (mOnlyCoreApps && !lite.coreApp) { + if (!mOnlyPowerOffAlarmApps && mOnlyCoreApps && !lite.coreApp) { throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, "Not a coreApp: " + packageDir); } @@ -867,7 +908,15 @@ public class PackageParser { @Deprecated public Package parseMonolithicPackage(File apkFile, int flags) throws PackageParserException { final PackageLite lite = parseMonolithicPackageLite(apkFile, flags); - if (mOnlyCoreApps) { + // When mOnlyPowerOffAlarmApps is true, only parse power off alarm packages + if (mOnlyPowerOffAlarmApps) { + if (!isPowerOffAlarmPackage(lite.packageName)) { + throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, + "Not a powerOffAlarmApp: " + apkFile); + } + } + + if (!mOnlyPowerOffAlarmApps && mOnlyCoreApps) { if (!lite.coreApp) { throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, "Not a coreApp: " + apkFile); diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 11e815c3df53..f1c0e4c211a8 100755 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -239,4 +239,17 @@ Trying to enable BT + + android + com.android.location.fused + com.android.settings + com.android.defcontainer + com.android.poweronalert + com.android.shell + com.android.deskclock + com.android.providers.media + com.android.inputdevices + com.android.providers.settings + + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 194640474234..7378a27a7ffd 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1911,6 +1911,8 @@ + + diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 288ad25d41d7..25fbaa34fc65 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -28,6 +28,7 @@ import android.app.IAlarmManager; import android.app.IUidObserver; import android.app.PendingIntent; import android.content.BroadcastReceiver; +import android.content.ContentUris; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -120,6 +121,11 @@ class AlarmManagerService extends SystemService { final LocalLog mLog = new LocalLog(TAG); + private static final String DESKCLOCK_PACKAGE_NAME = "com.android.deskclock"; + + private static final String ENCRYPTING_STATE = "trigger_restart_min_framework"; + private static final String ENCRYPTED_STATE = "1"; + AppOpsManager mAppOps; DeviceIdleController.LocalService mLocalDeviceIdleController; @@ -393,13 +399,14 @@ class AlarmManagerService extends SystemService { return alarms.get(index); } - long getWhenByElapsedTime(long whenElapsed) { + Alarm getAlarmByElapsedTime(long whenElapsed) { + Alarm alarm = null; for(int i=0;i< alarms.size();i++) { if(alarms.get(i).whenElapsed == whenElapsed) { - return alarms.get(i).when; + alarm = alarms.get(i); } } - return 0; + return alarm; } boolean canHold(long whenElapsed, long maxWhen) { @@ -1733,7 +1740,6 @@ class AlarmManagerService extends SystemService { final int N = mAlarmBatches.size(); for (int i = 0; i < N; i++) { Batch b = mAlarmBatches.get(i); - long intervalTime = b.start - SystemClock.elapsedRealtime(); if (b.isRtcPowerOffWakeup()) { return b; } @@ -1895,12 +1901,37 @@ class AlarmManagerService extends SystemService { mLastWakeupSet = SystemClock.elapsedRealtime(); setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); } + + boolean isEncryptStatus = false; + String cryptState = SystemProperties.get("vold.decrypt"); + if (ENCRYPTING_STATE.equals(cryptState) || ENCRYPTED_STATE.equals(cryptState)) { + isEncryptStatus = true; + } + + // Set RTC_POWEROFF type alarm to kernel if (firstRtcWakeup != null && mNextRtcWakeup != firstRtcWakeup.start) { mNextRtcWakeup = firstRtcWakeup.start; - long when = firstRtcWakeup.getWhenByElapsedTime(mNextRtcWakeup); - if (when != 0) { - setLocked(RTC_POWEROFF_WAKEUP, when); + Alarm alarm = firstRtcWakeup.getAlarmByElapsedTime(mNextRtcWakeup); + if (alarm != null) { + // use packageName to check if the alarm is set from deskclock app + // (power off alarm) + String packageName = alarm.packageName; + if (DESKCLOCK_PACKAGE_NAME.equals(packageName)) { + AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, + AlarmManager.POWER_OFF_ALARM_SET); + if (!isEncryptStatus) { + AlarmManager.writePowerOffAlarmFile( + AlarmManager.POWER_OFF_ALARM_INSTANCE_FILE, "" + alarm.when); + } + } else { + AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, + AlarmManager.POWER_OFF_ALARM_NOT_SET); + } + setLocked(RTC_POWEROFF_WAKEUP, alarm.when); } + } else if (firstRtcWakeup == null){ + AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, + AlarmManager.POWER_OFF_ALARM_NOT_SET); } if (firstBatch != firstWakeup) { nextNonWakeup = firstBatch.start; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0759b4bd4c84..86b083ce7504 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -533,6 +533,9 @@ public final class ActivityManagerService extends ActivityManagerNative private static final String INTENT_REMOTE_BUGREPORT_FINISHED = "android.intent.action.REMOTE_BUGREPORT_FINISHED"; + private static final String ACTION_POWER_OFF_ALARM = + "org.codeaurora.alarm.action.POWER_OFF_ALARM"; + // Delay to disable app launch boost static final int APP_BOOST_MESSAGE_DELAY = 3000; // Lower delay than APP_BOOST_MESSAGE_DELAY to disable the boost @@ -3910,6 +3913,15 @@ public final class ActivityManagerService extends ActivityManagerNative return intent; } + /** + * If system is power off alarm boot mode, we need to start alarm UI. + */ + void sendAlarmBroadcast() { + Intent intent = new Intent(ACTION_POWER_OFF_ALARM); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT); + } + boolean startHomeActivityLocked(int userId, String reason) { if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { @@ -13228,6 +13240,12 @@ public final class ActivityManagerService extends ActivityManagerNative } startHomeActivityLocked(currentUserId, "systemReady"); + // start the power off alarm by boot mode + boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); + if (isAlarmBoot) { + sendAlarmBroadcast(); + } + try { if (AppGlobals.getPackageManager().hasSystemUidErrors()) { Slog.e(TAG, "UIDs on the system are inconsistent, you need to wipe your" diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 0885dda2c7e3..40dda08fd381 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -108,6 +108,7 @@ import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerNative; +import android.app.AlarmManager; import android.app.IActivityManager; import android.app.ResourcesManager; import android.app.admin.IDevicePolicyManager; @@ -533,6 +534,7 @@ public class PackageManagerService extends IPackageManager.Stub { final Context mContext; final boolean mFactoryTest; final boolean mOnlyCore; + private boolean mOnlyPowerOffAlarm = false; final DisplayMetrics mMetrics; final int mDefParseFlags; final String[] mSeparateProcesses; @@ -2264,6 +2266,28 @@ public class PackageManagerService extends IPackageManager.Stub { mSettings.addSharedUserLPw("android.uid.shell", SHELL_UID, ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); + File setFile = new File(AlarmManager.POWER_OFF_ALARM_SET_FILE); + File handleFile = new File(AlarmManager.POWER_OFF_ALARM_HANDLE_FILE); + boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); + if (isAlarmBoot) { + mOnlyPowerOffAlarm = true; + } else if (setFile.exists() && handleFile.exists()) { + // if it is normal boot, check if power off alarm is handled. And set + // alarm properties for others to check. + if (!mOnlyCore && AlarmManager + .readPowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_HANDLE_FILE) + .equals(AlarmManager.POWER_OFF_ALARM_HANDLED)) { + SystemProperties.set("ro.alarm_handled", "true"); + File instanceFile = new File(AlarmManager.POWER_OFF_ALARM_INSTANCE_FILE); + String instanceValue = AlarmManager + .readPowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_INSTANCE_FILE); + SystemProperties.set("ro.alarm_instance", instanceValue); + + AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_HANDLE_FILE, + AlarmManager.POWER_OFF_ALARM_NOT_HANDLED); + } + } + String separateProcesses = SystemProperties.get("debug.separate_processes"); if (separateProcesses != null && separateProcesses.length() > 0) { if ("*".equals(separateProcesses)) { @@ -6897,9 +6921,10 @@ public class PackageManagerService extends IPackageManager.Stub { private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags, long currentTime, UserHandle user) throws PackageManagerException { if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile); - PackageParser pp = new PackageParser(); + PackageParser pp = new PackageParser(mContext); pp.setSeparateProcesses(mSeparateProcesses); pp.setOnlyCoreApps(mOnlyCore); + pp.setOnlyPowerOffAlarmApps(mOnlyPowerOffAlarm); pp.setDisplayMetrics(mMetrics); if ((scanFlags & SCAN_TRUSTED_OVERLAY) != 0) { diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index bc7e955ef6ec..f47c0cdeafbf 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2998,6 +2998,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { + " canceled=" + canceled); } + // If the boot mode is power off alarm, we should not dispatch the several physical keys + // in power off alarm UI to avoid pausing power off alarm UI. + boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); + if (isAlarmBoot && (keyCode == KeyEvent.KEYCODE_HOME + || keyCode == KeyEvent.KEYCODE_SEARCH + || keyCode == KeyEvent.KEYCODE_MENU + || keyCode == KeyEvent.KEYCODE_APP_SWITCH)) { + return -1; + } + // If we think we might have a volume down & power key chord on the way // but we're not sure, then tell the dispatcher to wait a little while and // try again later before dispatching. diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index 38070f6fc961..00c7ce995922 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -18,6 +18,7 @@ package com.android.server.power; import android.app.ActivityManagerNative; +import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.IActivityManager; @@ -508,6 +509,19 @@ public final class ShutdownThread extends Thread { uncrypt(); } + + // If it is alarm boot and encryption status, power off alarm status will + // be set to handled when device go to shutdown or reboot. + boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); + String cryptState = SystemProperties.get("vold.decrypt"); + + if (isAlarmBoot && + ("trigger_restart_min_framework".equals(cryptState) || + "1".equals(cryptState))) { + AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_HANDLE_FILE, + AlarmManager.POWER_OFF_ALARM_HANDLED); + } + rebootOrShutdown(mContext, mReboot, mReason); } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 30ec21d6302c..bb87a4f27b8c 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -447,6 +447,12 @@ public final class SystemServer { } else if (ENCRYPTED_STATE.equals(cryptState)) { Slog.w(TAG, "Device encrypted - only parsing core apps"); mOnlyCore = true; + } else if (SystemProperties.getBoolean("ro.alarm_boot", false)) { + // power off alarm mode is similar to encryption mode. Only power off alarm + // applications will be parsed by packageParser. Some services or settings are + // not necessary to power off alarm mode. So reuse mOnlyCore for power off alarm + // mode. + mOnlyCore = true; } if (RegionalizationEnvironment.isSupported()) { -- GitLab From 802ed607804ac80aa81f65841fe5344bbc55ae35 Mon Sep 17 00:00:00 2001 From: Mao Jinlong Date: Thu, 14 Jul 2016 15:37:45 +0800 Subject: [PATCH 129/185] AlarmManagerService : add mLock to avoid race conditions Add lock to avoid race conditions when trying to access batches in AlarmManagerService. CRs-Fixed: 1038575 Change-Id: I4c214833aa8c893c2e11a9037ddbe07112223409 --- .../core/java/com/android/server/AlarmManagerService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 25fbaa34fc65..1a251bf545e5 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -2648,9 +2648,11 @@ class AlarmManagerService extends SystemService { } } else { - // Just in case -- even though no wakeup flag was set, make sure - // we have updated the kernel to the next alarm time. - rescheduleKernelAlarmsLocked(); + synchronized (mLock) { + // Just in case -- even though no wakeup flag was set, make sure + // we have updated the kernel to the next alarm time. + rescheduleKernelAlarmsLocked(); + } } } } -- GitLab From 8da16915186cea93bca867a9725acb226ac3d98f Mon Sep 17 00:00:00 2001 From: Digish Pandya Date: Tue, 22 Dec 2015 15:27:43 +0530 Subject: [PATCH 130/185] Remove opaque check in preparing dirty region Since preserve swap is enabled, we need to clear the color buffer when the scissor rect is prepared for a new process. This prevents garbage being present from the previous process in the color buffer. @Topic::CR952255:Undefined region corruption fix @Buganizer: 20151458 @Upstreaming: https://android-review.googlesource.com/#/c/146272/ CRs-Fixed: 952255 Change-Id: Icd12ae388077b8c9ed329c37314e896500078543 --- libs/hwui/OpenGLRenderer.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index b68240ac7519..db5d22b6382e 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -172,15 +172,13 @@ void OpenGLRenderer::discardFramebuffer(float left, float top, float right, floa } void OpenGLRenderer::clear(float left, float top, float right, float bottom, bool opaque) { - if (!opaque) { - mRenderState.scissor().setEnabled(true); - mRenderState.scissor().set(left, getViewportHeight() - bottom, right - left, bottom - top); - glClear(GL_COLOR_BUFFER_BIT); - mDirty = true; - return; + mRenderState.scissor().setEnabled(true); + mRenderState.scissor().set(left, getViewportHeight() - bottom, right - left, bottom - top); + glClear(GL_COLOR_BUFFER_BIT); + if (opaque) { + mRenderState.scissor().reset(); } - - mRenderState.scissor().reset(); + mDirty = true; } bool OpenGLRenderer::finish() { -- GitLab From 6597fa6fc873a7d9bfee2ea68ce5168b90772875 Mon Sep 17 00:00:00 2001 From: qqzhou Date: Tue, 14 Jun 2016 17:29:16 +0800 Subject: [PATCH 131/185] base: fix native crash in system_server Currently PackageManagerService uses multi-thread to scan packages to speed up, when scan each package, it sometimes will call SELinux's restorecon, then libselinux uses global variable fc_sehandle to selabel_lookup and write in compile_regex, so it's not thread-safe, so will cause invalid address with possibility. From backtrace, the final crash happens in pcre_exec. Add one lock in NativeLibraryHelper to make restorecon safe. Change-Id: I2f00b4d66d968642f1726c28f4f6dc766c1cdad7 CRs-Fixed: 1002406, 1027381 --- .../android/internal/content/NativeLibraryHelper.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/content/NativeLibraryHelper.java b/core/java/com/android/internal/content/NativeLibraryHelper.java index f479f4feca35..f5b948f42e00 100644 --- a/core/java/com/android/internal/content/NativeLibraryHelper.java +++ b/core/java/com/android/internal/content/NativeLibraryHelper.java @@ -62,6 +62,8 @@ public class NativeLibraryHelper { // that the cpuAbiOverride must be clear. public static final String CLEAR_ABI_OVERRIDE = "-"; + private static final Object mRestoreconSync = new Object(); + /** * A handle to an opened package, consisting of one or more APKs. Used as * input to the various NativeLibraryHelper methods. Allows us to scan and @@ -275,8 +277,12 @@ public class NativeLibraryHelper { throw new IOException("Cannot chmod native library directory " + path.getPath(), e); } - } else if (!SELinux.restorecon(path)) { - throw new IOException("Cannot set SELinux context for " + path.getPath()); + } else { + synchronized (mRestoreconSync) { + if (!SELinux.restorecon(path)) { + throw new IOException("Cannot set SELinux context for " + path.getPath()); + } + } } } -- GitLab From 05f47f4425ca895f6834b8071f648ddcbfe3224f Mon Sep 17 00:00:00 2001 From: Lalit Kansara Date: Mon, 25 Jul 2016 14:47:04 +0530 Subject: [PATCH 132/185] Revert "Don't allow contact sharing by default for device not recognized as carkit." This reverts commit ccbe7383e63d7d23bac6bccc8e4094fe474645ec Change-Id: Iebeaab7368b98b7424a65d94a22966a2c588054c --- .../settingslib/bluetooth/CachedBluetoothDevice.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index b07e0dd1af58..068f2111319f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -830,12 +830,7 @@ public final class CachedBluetoothDevice implements Comparable Date: Tue, 19 Jul 2016 11:09:49 +0800 Subject: [PATCH 133/185] Send broadcast to MediaScannerReceiver to refresh gallery After restore file, the pics can only be seen in FileManager, so send broadcast to MediaScannerReceiver to refresh the datebase, then the pics can be seen in the gallery. Change-Id: I43cd8edc0c96c1d845314c7760b367f85485a6e5 --- .../sharedstoragebackup/SharedStorageAgent.java | 11 +++++++++++ 1 file changed, 11 insertions(+) mode change 100644 => 100755 packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java diff --git a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java old mode 100644 new mode 100755 index e453cf53a98b..2713e54404b9 --- a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java +++ b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java @@ -13,6 +13,9 @@ import android.util.Slog; import java.io.File; import java.io.IOException; +import android.os.SystemProperties; +import android.content.Intent; +import android.net.Uri; public class SharedStorageAgent extends FullBackupAgent { static final String TAG = "SharedStorageAgent"; @@ -93,5 +96,13 @@ public class SharedStorageAgent extends FullBackupAgent { } FullBackup.restoreFile(data, size, type, -1, mtime, outFile); + if (isStrictOpEnable()) { + getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, + Uri.fromFile(outFile))); + } + } + + private boolean isStrictOpEnable() { + return SystemProperties.getBoolean("persist.sys.strict_op_enable", false); } } -- GitLab From ae192e452c6b640f2d4ca6bbe4a7836851d941fb Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Fri, 1 Jul 2016 16:52:36 +0800 Subject: [PATCH 134/185] Hotspot: customize hotspot for specific carriers 1. Provide an interface to allow user to configure max clients; 2. Add configuration to broadcast/hide SSID; 3. Display an user-friendly notification when turning on hotspot; CRs-Fixed: 1039253 Change-Id: I5bf278fbbd969cd001de5617267ad264da78b95e --- core/res/res/values/symbols.xml | 21 ++++++++++++++++ .../server/NetworkManagementService.java | 25 ++++++++++++++++--- .../server/connectivity/Tethering.java | 5 ++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 7378a27a7ffd..fef85007f206 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2691,4 +2691,25 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 1cbac69fe4de..477e84bf98aa 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1503,9 +1503,28 @@ public class NetworkManagementService extends INetworkManagementService.Stub if (wifiConfig == null) { args = new Object[] {"set", wlanIface}; } else { - args = new Object[] {"set", wlanIface, wifiConfig.SSID, - "broadcast", Integer.toString(wifiConfig.apChannel), - getSecurityType(wifiConfig), new SensitiveArg(wifiConfig.preSharedKey)}; + String ssid_mode = "broadcast"; + if (mContext.getResources().getBoolean( + com.android.internal.R.bool + .config_regional_hotspot_show_broadcast_ssid_checkbox) + && wifiConfig.hiddenSSID) { + ssid_mode = "hidden"; + } + if (mContext.getResources().getBoolean( + com.android.internal.R.bool + .config_regional_hotspot_show_maximum_connection_enable)) { + int clientNum = Settings.System.getInt(mContext.getContentResolver(), + "WIFI_HOTSPOT_MAX_CLIENT_NUM", 8); + if (DBG) Slog.d(TAG, "clientNum: " + clientNum); + args = new Object[] {"set", wlanIface, wifiConfig.SSID, + ssid_mode, Integer.toString(wifiConfig.apChannel), + getSecurityType(wifiConfig), + new SensitiveArg(wifiConfig.preSharedKey), clientNum}; + } else { + args = new Object[] {"set", wlanIface, wifiConfig.SSID, + ssid_mode, Integer.toString(wifiConfig.apChannel), + getSecurityType(wifiConfig), new SensitiveArg(wifiConfig.preSharedKey)}; + } } executeOrLogWithMessage(SOFT_AP_COMMAND, args, NetdResponseCode.SoftapStatusResult, SOFT_AP_COMMAND_SUCCESS, logMsg); diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index c83f6fe94595..c38cc0d3f582 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -701,6 +701,11 @@ public class Tethering extends BaseNetworkObserver { } else { /* We now have a status bar icon for WifiTethering, so drop the notification */ clearTetheredNotification(); + if (mContext.getResources().getBoolean( + com.android.internal.R.bool + .config_regional_hotspot_show_notification_when_turn_on)) { + showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_wifi); + } } } else if (bluetoothTethered) { showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_bluetooth); -- GitLab From 214a32110688755c76cdc6fe0ba9f683c624f28c Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Thu, 30 Jun 2016 17:27:00 +0800 Subject: [PATCH 135/185] Hotspot: add config to save passpoint on/off state Add a new state in Settings provider to save whether hotspot 2.0, i.e, passpoint, is enabled or not. In Settings, the user can manually enable or disable this feature from UI. This enhanced feature is controlled by flex config_passpoint_setting_on. CRs-Fixed: 1039253 Change-Id: I0e8ce4d3da10532bf3aa736b0bbb24faa4655551 --- core/java/android/provider/Settings.java | 9 ++++++ core/res/res/values/config.xml | 41 +++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 5db65d3e682b..a9fc1bf340f8 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4153,6 +4153,7 @@ public final class Settings { MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON); MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME); MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SAVED_STATE); + MOVED_TO_GLOBAL.add(Settings.Global.WIFI_HOTSPOT2_ENABLED); MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS); MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED); MOVED_TO_GLOBAL.add(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED); @@ -7453,6 +7454,14 @@ public final class Settings { */ public static final String WIFI_SAVED_STATE = "wifi_saved_state"; + /** + * Used to save the hotspot2 on/off state. + * This state will be used to open/close passpoint functions + * + * @hide + */ + public static final String WIFI_HOTSPOT2_ENABLED = "wifi_hotspot2_enabled"; + /** * The interval in milliseconds to scan as used by the wifi supplicant * @hide diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 46d850f25dbb..2c54cefae943 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -405,7 +405,7 @@ false - false + true @@ -2586,4 +2586,43 @@ false + + false + + + false + + false + + + false + + false + + + -140 + -113 + -103 + -97 + -89 + -44 + + + -140 + -120 + -115 + -110 + -100 + -44 + + + + false + false + false + false + false -- GitLab From 1a47ae7bfaa3d84ad1da3e51eb6d6bb5f3332534 Mon Sep 17 00:00:00 2001 From: c_yunong Date: Mon, 11 Jul 2016 11:42:26 +0800 Subject: [PATCH 136/185] Settings: Customize date format,hide kernel version Customize hide kernel version. Change-Id: I7c8e7d3ca8cae58aedd6428f29b4c87d25c90fcb CRs-Fixed: 1037633 --- .../android/settingslib/DeviceInfoUtils.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java index ff1c8665b3d2..b07311f1469c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java @@ -97,6 +97,32 @@ public class DeviceInfoUtils { m.group(4); // Thu Jun 28 11:02:39 PDT 2012 } + public static String customizeFormatKernelVersion(boolean hideVersionName){ + if (hideVersionName) { + try { + String strVersion = readLine(FILENAME_PROC_VERSION); + final String PROC_VERSION_REGEX = "Linux version (\\S+) " + "\\((\\S+?)\\) " + + "(?:\\(gcc.+? \\)) " + "(#\\d+) " + "(?:.*?)?" + + "((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)"; + Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(strVersion); + if (!m.matches()) { + Log.e(TAG, "Regex did not match on /proc/version: " + strVersion); + return "Unavailable"; + } else if (m.groupCount() < 4) { + Log.e(TAG, "Regex match on /proc/version only returned " + + m.groupCount() + " groups"); + return "Unavailable"; + } + return m.group(1) + "\n" + m.group(4); + } catch (IOException e) { + Log.e(TAG, "IO Exception when getting kernel version for Device Info screen", e); + return "Unavailable"; + } + } else { + return getFormattedKernelVersion(); + } + } + /** * Returns " (ENGINEERING)" if the msv file has a zero value, else returns "". * @return a string to append to the model number description. -- GitLab From f20556c2f7995879bf45fb0f6bd61dfe457b50cd Mon Sep 17 00:00:00 2001 From: Vinu Deokaran Date: Tue, 7 Jul 2015 12:38:57 -0400 Subject: [PATCH 137/185] base: adding support for tertiary display ES2 platform supports 3 built-in displays. Adding support for Tertiary display. Change-Id: Id8833fedbe1655e4ed8d11d25bb5b559fa46893d --- core/java/android/view/SurfaceControl.java | 6 ++++++ .../com/android/server/display/LocalDisplayAdapter.java | 1 + 2 files changed, 7 insertions(+) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 415e70ca03fd..26d9135fee6c 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -224,6 +224,12 @@ public class SurfaceControl { */ public static final int BUILT_IN_DISPLAY_ID_HDMI = 1; + /** + * Built-in physical display id: Attached HDMI display. + * Use only with {@link SurfaceControl#getBuiltInDisplay(int)}. + */ + public static final int BUILT_IN_DISPLAY_ID_TERTIARY = 2; + /* Display power modes * / /** diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index ebba35491725..99b65f77e1fe 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -57,6 +57,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { private static final int[] BUILT_IN_DISPLAY_IDS_TO_SCAN = new int[] { SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN, SurfaceControl.BUILT_IN_DISPLAY_ID_HDMI, + SurfaceControl.BUILT_IN_DISPLAY_ID_TERTIARY, }; private final SparseArray mDevices = -- GitLab From 4ee833d20ab1d1e98b2437905f7f5e7d33d7af45 Mon Sep 17 00:00:00 2001 From: Venkateshwarlu Domakonda Date: Tue, 5 Jul 2016 16:25:48 +0530 Subject: [PATCH 138/185] Bluetooth: Update the A2DP status properly If the device is removed from the hash table before updating the status because of asynchronous operations involved, audio is not able to update policy manager regarding A2dp disconnection. This change takes care of forcibly updating HAL in such scenario so that Audio chooses the proper device on next playback. CRs-Fixed: 1031541 Change-Id: I4d0e56590b5e01cda6657f61d31d0b895fce0306 --- services/core/java/com/android/server/audio/AudioService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 3995e538edb2..94d0736411de 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5048,7 +5048,9 @@ public class AudioService extends IAudioService.Stub { DeviceListSpec deviceSpec = mConnectedDevices.get(key); boolean isConnected = deviceSpec != null; - if (isConnected && state != BluetoothProfile.STATE_CONNECTED) { + if ((isConnected && state != BluetoothProfile.STATE_CONNECTED) || + ((mConnectedBTDevicesList.size() == 0) && + (state == BluetoothProfile.STATE_DISCONNECTED))) { if (btDevice.isBluetoothDock()) { if (state == BluetoothProfile.STATE_DISCONNECTED) { // introduction of a delay for transient disconnections of docks when -- GitLab From 296a682a69a4be8fb99fa6c3e82cd5833d594b80 Mon Sep 17 00:00:00 2001 From: Xuebo Li Date: Thu, 5 Nov 2015 11:37:03 +0800 Subject: [PATCH 139/185] SystemUI: Show percentage of battery Customize whether to show the battery level in the status bar of keyguard. Carrier can customize the boolean resource to show it by default. Change-Id: I0b05525db3847ea5bdd77c77b66655a4107bd37c CRs-Fixed: 1037633 --- packages/SystemUI/res/values/config.xml | 3 +++ .../systemui/statusbar/phone/KeyguardStatusBarView.java | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index bf42da509664..13d96339d6e0 100755 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -295,5 +295,8 @@ true + + + false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 7db2870620a0..584fecd9c8f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -149,7 +149,9 @@ public class KeyguardStatusBarView extends RelativeLayout } else if (mMultiUserSwitch.getParent() == this && mKeyguardUserSwitcherShowing) { removeView(mMultiUserSwitch); } - mBatteryLevel.setVisibility(mBatteryCharging ? View.VISIBLE : View.GONE); + boolean showBatteryLevel = getResources().getBoolean(R.bool.config_showBatteryPercentage); + mBatteryLevel.setVisibility( + mBatteryCharging || showBatteryLevel ? View.VISIBLE : View.GONE); } private void updateSystemIconsLayoutParams() { -- GitLab From 845ea53d1c567a399852aff5aa8947ca0d1a39a2 Mon Sep 17 00:00:00 2001 From: Xuebo Li Date: Mon, 12 Oct 2015 14:12:12 +0800 Subject: [PATCH 140/185] Regional: Customize system volume Customize system volume. Change-Id: Ib8d7c3b9e4404bb6678b3c8af9c440bc299a76c9 CRs-Fixed: 1037633 --- .../SettingsProvider/res/values/defaults.xml | 51 +++++++ .../providers/settings/SettingsProvider.java | 144 ++++++++++++++++++ 2 files changed, 195 insertions(+) diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 978ca9466ff1..acf3123a899a 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -216,4 +216,55 @@ false + + + false + + + 5 + + + 11 + + + 4 + + + 6 + + + 5 + + + 5 + + + 11 + + + 4 + + + 6 + + + 5 + + + 5 + + + 11 + + + 4 + + + 6 + + + 5 + + + 4 diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 774be60d082a..09722fd08925 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -129,6 +129,11 @@ public class SettingsProvider extends ContentProvider { private static final String TABLE_BOOKMARKS = "bookmarks"; private static final String TABLE_ANDROID_METADATA = "android_metadata"; + private static final String HEADSET = "_headset"; + private static final String HEADPHONE = "_headphone"; + private static final String SPEAKER = "_speaker"; + private static final String EARPIECE = "_earpiece"; + // The set of removed legacy tables. private static final Set REMOVED_LEGACY_TABLES = new ArraySet<>(); static { @@ -2144,6 +2149,139 @@ public class SettingsProvider extends ContentProvider { return getSettingsLocked(SETTINGS_TYPE_SYSTEM, userId); } + private void loadCustomizedVolumeLevels(SettingsState systemSettings) { + + systemSettings.updateSettingLocked(Settings.System.VOLUME_MUSIC, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_music_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.updateSettingLocked(Settings.System.VOLUME_RING, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_ringtone_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.updateSettingLocked(Settings.System.VOLUME_VOICE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_voice_call_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.updateSettingLocked(Settings.System.VOLUME_ALARM, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_alarm_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.updateSettingLocked(Settings.System.VOLUME_NOTIFICATION, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_notification_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + // set headset default volume + systemSettings.insertSettingLocked(Settings.System.VOLUME_MUSIC + HEADSET, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_music_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_RING + HEADSET, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_ringtone_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_VOICE + HEADSET, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_voice_call_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_ALARM + HEADSET, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_alarm_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_NOTIFICATION + HEADSET, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_notification_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + // set headphone default volume + systemSettings.insertSettingLocked(Settings.System.VOLUME_MUSIC + HEADPHONE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_music_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_RING + HEADPHONE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_ringtone_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_VOICE + HEADPHONE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_voice_call_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_ALARM + HEADPHONE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_alarm_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_NOTIFICATION + HEADPHONE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_notification_headset_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + // set speaker default volume + systemSettings.insertSettingLocked(Settings.System.VOLUME_MUSIC + SPEAKER, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_music_speaker_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_RING + SPEAKER, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_ringtone_speaker_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_VOICE + SPEAKER, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_voice_call_speaker_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_ALARM + SPEAKER, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_alarm_speaker_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + systemSettings.insertSettingLocked(Settings.System.VOLUME_NOTIFICATION + SPEAKER, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_notification_speaker_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + + // set earpiece default volume + systemSettings.insertSettingLocked(Settings.System.VOLUME_VOICE + EARPIECE, + Integer.toString( + getContext().getResources().getInteger( + R.integer.def_voice_call_earpiece_volume)), + SettingsState.SYSTEM_PACKAGE_NAME); + } + /** * You must perform all necessary mutations to bring the settings * for this user from the old to the new version. When you add a new @@ -2224,6 +2362,12 @@ public class SettingsProvider extends ContentProvider { defaultComponent, SettingsState.SYSTEM_PACKAGE_NAME); } + + // Allow OEMs to set volumes in resources. + if (getContext().getResources().getBoolean(R.bool.def_custom_sys_volume)) { + final SettingsState systemSettings = getSystemSettingsLocked(userId); + loadCustomizedVolumeLevels(systemSettings); + } currentVersion = 122; } -- GitLab From b8caaf13fe0500641d18f587df69776e84714424 Mon Sep 17 00:00:00 2001 From: Bikshapathi Kothapeta Date: Wed, 13 Jul 2016 13:12:41 +0530 Subject: [PATCH 141/185] Revert "Performance: SystemServer: Move sensor init to a new thread." This reverts commit 2e11fe1b0c97c8eb36f2e43da23453bc6aaa122a. Change-Id: I466352ceccf71f0a46d02898f262009aaf1d7f59 --- .../core/jni/com_android_server_SystemServer.cpp | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp index 5c6f140d6f15..c7d6b95083d2 100644 --- a/services/core/jni/com_android_server_SystemServer.cpp +++ b/services/core/jni/com_android_server_SystemServer.cpp @@ -25,24 +25,12 @@ namespace android { -void* sensorInit(void *arg) { - ALOGI("System server: starting sensor init.\n"); - // Start the sensor service - SensorService::instantiate(); - ALOGI("System server: sensor init done.\n"); - return NULL; -} - static void android_server_SystemServer_startSensorService(JNIEnv* /* env */, jobject /* clazz */) { char propBuf[PROPERTY_VALUE_MAX]; - pthread_t sensor_init_thread; - property_get("system_init.startsensorservice", propBuf, "1"); if (strcmp(propBuf, "1") == 0) { - // We are safe to move this to a new thread because - // Android frame work has taken care to check whether the - // service is started or not before using it. - pthread_create( &sensor_init_thread, NULL, &sensorInit, NULL); + // Start the sensor service + SensorService::instantiate(); } } -- GitLab From 630229b23d4cd47aad92b427a1e628d4da9589b3 Mon Sep 17 00:00:00 2001 From: Bikshapathi Kothapeta Date: Mon, 25 Jul 2016 19:23:22 +0530 Subject: [PATCH 142/185] SystemServer: Changes to fix compilation issues as part of LAW.BR.2.0 bringup Change-Id: Id2594c545079250af24ac2577a5feddab767a4b0 --- services/java/com/android/server/SystemServer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index bb87a4f27b8c..ce1dcbc86779 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -988,8 +988,8 @@ public final class SystemServer { if (!disableNonCoreServices) { mSystemServiceManager.startService(DockObserver.class); - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { - mSystemServiceManager.startService(THERMAL_OBSERVER_CLASS); + if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + //#Fixme:mSystemServiceManager.startService(THERMAL_OBSERVER_CLASS); } } @@ -1205,7 +1205,7 @@ public final class SystemServer { } if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { - mSystemServiceManager.startService(WEAR_BLUETOOTH_SERVICE_CLASS); + //#Fixme:mSystemServiceManager.startService(WEAR_BLUETOOTH_SERVICE_CLASS); } // Before things start rolling, be sure we have decided whether -- GitLab From 0aae1f69b38fbf1b12f63da770adbaab5b3c855d Mon Sep 17 00:00:00 2001 From: mqi Date: Mon, 18 Jul 2016 16:07:46 +0800 Subject: [PATCH 143/185] SystemUI: Add SlotId for MultiSim Add slotId to distinguish between sim1 and sim2 in Simpinview Change-Id: Ic353bc1712a1ab0ffa2fcc2963f7a4decf8817ff CRs-Fixed: 956919 --- packages/Keyguard/res/values/strings.xml | 8 ++++---- .../src/com/android/keyguard/KeyguardSimPinView.java | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) mode change 100644 => 100755 packages/Keyguard/res/values/strings.xml mode change 100644 => 100755 packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml old mode 100644 new mode 100755 index bac921582dab..89f64833273f --- a/packages/Keyguard/res/values/strings.xml +++ b/packages/Keyguard/res/values/strings.xml @@ -278,8 +278,8 @@ - Incorrect SIM PIN code, you have %d remaining attempt before you must contact your carrier to unlock your device. - Incorrect SIM PIN code, you have %d remaining attempts. + Incorrect SIM%d PIN code, you have %d remaining attempt before you must contact your carrier to unlock your device. + Incorrect SIM%d PIN code, you have %d remaining attempts. - Enter SIM PIN, you have %d remaining + Enter SIM%d PIN, you have %d remaining attempt before you must contact your carrier to unlock your device. - Enter SIM PIN, you have %d remaining + Enter SIM%d PIN, you have %d remaining attempts. diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java old mode 100644 new mode 100755 index c99a7274120e..83118d8db10c --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -54,6 +54,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { private int mRemainingAttempts = -1; private AlertDialog mRemainingAttemptsDialog; private int mSubId; + private int mSlotId; private ImageView mSimImageView; KeyguardUpdateMonitorCallback mUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() { @@ -102,7 +103,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { msgId = isDefault ? R.plurals.kg_password_default_pin_message : R.plurals.kg_password_wrong_pin_code; displayMessage = getContext().getResources() - .getQuantityString(msgId, attemptsRemaining, attemptsRemaining); + .getQuantityString(msgId, attemptsRemaining, mSlotId, attemptsRemaining); } else { msgId = isDefault ? R.string.kg_sim_pin_instructions : R.string.kg_password_pin_failed; displayMessage = getContext().getString(msgId); @@ -324,6 +325,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { return; } + mSlotId = SubscriptionManager.getSlotId(mSubId) + 1; int count = TelephonyManager.getDefault().getSimCount(); Resources rez = getResources(); final String msg; -- GitLab From e87c0ffe9cd30a39f99952feb0416b7c42023518 Mon Sep 17 00:00:00 2001 From: Ashay Jaiswal Date: Thu, 26 Feb 2015 14:43:45 +0530 Subject: [PATCH 144/185] batteryservice: support shutdown at low battery voltage Add logic to shutdown when the battery continues discharging at SOC=0 with a charger plugged-in. The shutdown is initiated when the battery voltage falls below a cutoff threshold which can be configured by the android property 'ro.cutoff_voltage_mv'. CRs-Fixed: 1011948 Change-Id: Iabb317ac1a7aedf28d6edbb3cd88c64ad4706534 --- .../com/android/server/BatteryService.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 6b517210ef31..fbd1b89db5e7 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -18,6 +18,7 @@ package com.android.server; import android.database.ContentObserver; import android.os.BatteryStats; +import android.os.SystemProperties; import android.os.ResultReceiver; import android.os.ShellCommand; @@ -31,6 +32,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.BroadcastReceiver; import android.os.BatteryManager; import android.os.BatteryManagerInternal; import android.os.BatteryProperties; @@ -53,6 +55,11 @@ import android.util.Slog; import java.io.File; import java.io.FileDescriptor; import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; @@ -147,6 +154,29 @@ public final class BatteryService extends SystemService { private boolean mSentLowBatteryBroadcast = false; + private final int mVbattSamplingIntervalMsec = 30000; /* sampling frequency - 30 seconds */ + private final int mWeakChgCutoffVoltageMv; + private static int mWeakChgSocCheckStarted = 0; + /* + * Default shutdown interval in case voltage_now file is not present: + * In case of weak charger shutdown feature is enabled and + * voltage_now file absent shutdown aftet 5 minutes if SOC continues + * to remain at 0 level. + */ + private final int mWeakChgMaxShutdownIntervalMsecs = 300000; + private boolean mInitiateShutdown = false; + private File mVoltageNowFile = null; + private Runnable runnable = new Runnable() { + public void run() { + synchronized (mLock) { + if(mVoltageNowFile.exists()) + shutdownIfWeakChargerVoltageCheckLocked(); + else + shutdownIfWeakChargerEmptySOCLocked(); + } + } + }; + public BatteryService(Context context) { super(context); @@ -155,6 +185,16 @@ public final class BatteryService extends SystemService { mLed = new Led(context, getLocalService(LightsManager.class)); mBatteryStats = BatteryStatsService.getService(); + /* + * Calculate cut-off voltage from 'ro.cutoff_voltage_mv' + * or default to 3200mV. + * if 'ro.cutoff_voltage_mv' <= 0, ignore shutdown logic. + */ + mWeakChgCutoffVoltageMv = SystemProperties.getInt("ro.cutoff_voltage_mv", 0); + /* 2700mV UVLO voltage */ + if (mWeakChgCutoffVoltageMv > 2700) + mVoltageNowFile = new File("/sys/class/power_supply/battery/voltage_now"); + mCriticalBatteryLevel = mContext.getResources().getInteger( com.android.internal.R.integer.config_criticalBatteryWarningLevel); mLowBatteryWarningLevel = mContext.getResources().getInteger( @@ -271,6 +311,67 @@ public final class BatteryService extends SystemService { && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); } + private void shutdownIfWeakChargerEmptySOCLocked() { + + if (mBatteryProps.batteryLevel == 0) { + if (mInitiateShutdown) { + if (ActivityManagerNative.isSystemReady()) { + Slog.e(TAG, "silent_reboot shutdownIfWeakChargerEmptySOCLocked"); + + Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN); + intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivityAsUser(intent, UserHandle.CURRENT); + } + } else { + mInitiateShutdown = true; + mHandler.removeCallbacks(runnable); + mHandler.postDelayed(runnable, mWeakChgMaxShutdownIntervalMsecs); + } + } else { + mInitiateShutdown = false; + mWeakChgSocCheckStarted = 0; + } + } + + private void shutdownIfWeakChargerVoltageCheckLocked() { + int vbattNow = 0; + FileReader fileReader; + BufferedReader br; + + try { + fileReader = new FileReader(mVoltageNowFile); + br = new BufferedReader(fileReader); + vbattNow = Integer.parseInt(br.readLine()); + /* convert battery voltage from uV to mV */ + vbattNow = vbattNow / 1000; + br.close(); + fileReader.close(); + } catch (FileNotFoundException e) { + Slog.e(TAG, "Failure in reading battery voltage", e); + } catch (IOException e) { + Slog.e(TAG, "Failure in reading battery voltage", e); + } + + if (mBatteryProps.batteryLevel == 0) { + if (vbattNow <= mWeakChgCutoffVoltageMv) { + if (ActivityManagerNative.isSystemReady()) { + Slog.e(TAG, "silent_reboot shutdownIfWeakChargerVoltageCheckLocked"); + + Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN); + intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivityAsUser(intent, UserHandle.CURRENT); + } + } else { + mHandler.removeCallbacks(runnable); + mHandler.postDelayed(runnable, mVbattSamplingIntervalMsec); + } + } else { + mWeakChgSocCheckStarted = 0; + } + } + private void shutdownIfNoPowerLocked() { // shut down gracefully if our battery is critically low and we are not powered. // wait until the system has booted before attempting to display the shutdown dialog. @@ -363,6 +464,20 @@ public final class BatteryService extends SystemService { // Should never happen. } + /* + * Schedule Weak Charger shutdown thread if: + * Battery level = 0, Charger is pluggedin and cutoff voltage is valid. + */ + if ((mBatteryProps.batteryLevel == 0) + && (mWeakChgSocCheckStarted == 0) + && (mWeakChgCutoffVoltageMv > 0) + && (mPlugType != BATTERY_PLUGGED_NONE)) { + + mWeakChgSocCheckStarted = 1; + mHandler.removeCallbacks(runnable); + mHandler.postDelayed(runnable, mVbattSamplingIntervalMsec); + } + shutdownIfNoPowerLocked(); shutdownIfOverTempLocked(); -- GitLab From b8166563d5206d1b69f9ca5bc5f0c97906ae8d20 Mon Sep 17 00:00:00 2001 From: Nalla Kartheek Date: Fri, 29 Apr 2016 12:16:09 +0530 Subject: [PATCH 145/185] Wifi: Introduce additional APIs to support STA + SoftAp concurrency 1. Add a configuration parameter to indicate STA + SoftAp concurrency support 2. Add new APIs createSoftApInterface/deleteSoftApInterface to create/delete an interfcae softap0, an additional interface to cater to STA + SoftAp concurrency. The intention here is to create another SoftAP interface while the station interface is active, in contrary to the current design in the framework which shall shut down the station components (wpa_supplicant / host driver) on a SoftAp start(starts hostapd the host driver). Change-Id: Ie613f73b2fd98f02ba0611e9545f6ec749fd2087 CRs-Fixed: 1017907 --- .../android/os/INetworkManagementService.aidl | 9 ++++++++ .../server/NetworkManagementService.java | 20 ++++++++++++++++++ .../server/connectivity/Tethering.java | 21 +++++++++++++++++++ wifi/java/android/net/wifi/IWifiManager.aidl | 2 ++ wifi/java/android/net/wifi/WifiManager.java | 15 +++++++++++++ 5 files changed, 67 insertions(+) diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index c82aa9af8158..e1f2eaf0d971 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -448,4 +448,13 @@ interface INetworkManagementService void removeInterfaceFromLocalNetwork(String iface); void setAllowOnlyVpnForUids(boolean enable, in UidRange[] uidRanges); + /** + * Create SoftAp Interface + */ + void createSoftApInterface(String wlanIface); + + /** + * Delete SoftAp Interface + */ + void deleteSoftApInterface(String wlanIface); } diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 477e84bf98aa..4a66c9cfef14 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1245,6 +1245,26 @@ public class NetworkManagementService extends INetworkManagementService.Stub } } + @Override + public void createSoftApInterface(String wlanIface) { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + try { + mConnector.execute("softap", "create", wlanIface); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + + @Override + public void deleteSoftApInterface(String wlanIface) { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + try { + mConnector.execute("softap", "remove", wlanIface); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + @Override public void startTethering(String[] dhcpRange) { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index c38cc0d3f582..94b779d187f4 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -257,6 +257,8 @@ public class Tethering extends BaseNetworkObserver { if (VDBG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up); boolean found = false; boolean usb = false; + WifiManager mWifiManager = + (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); synchronized (mPublicSync) { if (isWifi(iface)) { found = true; @@ -280,6 +282,25 @@ public class Tethering extends BaseNetworkObserver { // ignore usb0 down after enabling RNDIS // we will handle disconnect in interfaceRemoved instead if (VDBG) Log.d(TAG, "ignore interface down for " + iface); + } else if (isWifi(iface) && (mWifiManager != null) && + mWifiManager.getWifiStaSapConcurrency()) { + int wifiApState = 0; + wifiApState = mWifiManager.getWifiApState(); + + // Ignore AP interface down after enabling STA connection. + // If STA connects to same band the SAP is enabled, the + // driver stops SAP before it proceeds for STA connection + // hence ignore interface down. After STA connection, + // driver starts SAP on STA channel. + + if ((wifiApState == WifiManager.WIFI_AP_STATE_DISABLING) || + (wifiApState == WifiManager.WIFI_AP_STATE_DISABLED)) { + if (VDBG) Log.d(TAG, "Got interface down for " + iface); + sm.sendMessage(TetherInterfaceSM.CMD_INTERFACE_DOWN); + mIfaces.remove(iface); + } else { + if (VDBG) Log.d(TAG, "ignore interface down for " + iface); + } } else if (sm != null) { sm.sendMessage(TetherInterfaceSM.CMD_INTERFACE_DOWN); mIfaces.remove(iface); diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 9268a2b7cbe2..eb2530287f4e 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -169,5 +169,7 @@ interface IWifiManager void factoryReset(); Network getCurrentNetwork(); + + boolean getWifiStaSapConcurrency(); } diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 27cb405c692b..800b958f87e2 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -2683,6 +2683,21 @@ public class WifiManager { } } + /** + * get concurrency support + * + * @return true if concurrency is allowed. + * + * @hide no intent to publish + */ + public boolean getWifiStaSapConcurrency() { + try { + return mService.getWifiStaSapConcurrency(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Resets all wifi manager settings back to factory defaults. * -- GitLab From 427be571f359501f71bb4e643890d817c461cd2a Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Sat, 2 Jul 2016 12:18:18 +0800 Subject: [PATCH 146/185] Regional: Change signal strength thresholds for LTE and UMTS Add customized signal strength calculation algorithm for LTE and UMTS. And use config to turn on/off the features. CRs-Fixed: 1039313 Change-Id: I16a56000421f63e6befd2a97d1210700bc6a037e --- .../android/telephony/SignalStrength.java | 53 ++++++++++++++----- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index fced6670f6a3..3501ab7757b8 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -619,19 +619,37 @@ public class SignalStrength implements Parcelable { * @hide */ public int getGsmLevel() { - int level; + int level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + if (Resources.getSystem().getBoolean( + com.android.internal.R.bool.config_regional_umts_singnal_threshold)) { + int dbm = getGsmDbm(); + int[] threshGsm; + threshGsm = Resources.getSystem().getIntArray( + com.android.internal.R.array.umts_signal_strength_threshold);; + if (threshGsm.length < 6) + return level; + if (dbm > threshGsm[5]) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (dbm >= threshGsm[4]) level = SIGNAL_STRENGTH_GREAT; + else if (dbm >= threshGsm[3]) level = SIGNAL_STRENGTH_GOOD; + else if (dbm >= threshGsm[2]) level = SIGNAL_STRENGTH_MODERATE; + else if (dbm >= threshGsm[1]) level = SIGNAL_STRENGTH_POOR; + else if (dbm >= threshGsm[0]) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + if (DBG) log("getCustomizedGsmDbmLevel - dbm:" + dbm + " gsmLevel:" + + level); + } else { + // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 + // asu = 0 (-113dB or less) is very weak + // signal, its better to show 0 bars to the user in such cases. + // asu = 99 is a special case, where the signal strength is unknown. + int asu = getGsmSignalStrength(); + if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT; + else if (asu >= 8) level = SIGNAL_STRENGTH_GOOD; + else if (asu >= 5) level = SIGNAL_STRENGTH_MODERATE; + else level = SIGNAL_STRENGTH_POOR; + if (DBG) log("getGsmLevel=" + level); + } - // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 - // asu = 0 (-113dB or less) is very weak - // signal, its better to show 0 bars to the user in such cases. - // asu = 99 is a special case, where the signal strength is unknown. - int asu = getGsmSignalStrength(); - if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; - else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT; - else if (asu >= 8) level = SIGNAL_STRENGTH_GOOD; - else if (asu >= 5) level = SIGNAL_STRENGTH_MODERATE; - else level = SIGNAL_STRENGTH_POOR; - if (DBG) log("getGsmLevel=" + level); return level; } @@ -799,6 +817,11 @@ public class SignalStrength implements Parcelable { } else { threshRsrp = RSRP_THRESH_LENIENT; } + if (Resources.getSystem().getBoolean( + com.android.internal.R.bool.config_regional_lte_singnal_threshold)){ + threshRsrp = Resources.getSystem().getIntArray( + com.android.internal.R.array.lte_signal_strength_threshold); + } if (mLteRsrp > threshRsrp[5]) rsrpIconLevel = -1; else if (mLteRsrp >= threshRsrp[4]) rsrpIconLevel = SIGNAL_STRENGTH_GREAT; @@ -807,6 +830,12 @@ public class SignalStrength implements Parcelable { else if (mLteRsrp >= threshRsrp[1]) rsrpIconLevel = SIGNAL_STRENGTH_POOR; else if (mLteRsrp >= threshRsrp[0]) rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + if (Resources.getSystem().getBoolean( + com.android.internal.R.bool.config_regional_lte_singnal_threshold)){ + log("getLTELevel - rsrp = " + rsrpIconLevel); + if (rsrpIconLevel != -1) return rsrpIconLevel; + } + /* * Values are -200 dB to +300 (SNR*10dB) RS_SNR >= 13.0 dB =>4 bars 4.5 * dB <= RS_SNR < 13.0 dB => 3 bars 1.0 dB <= RS_SNR < 4.5 dB => 2 bars -- GitLab From 6b336ff519e75274cf9c47d5bb1020376359a62a Mon Sep 17 00:00:00 2001 From: Sukanya Rajkhowa Date: Tue, 17 Nov 2015 10:57:52 -0800 Subject: [PATCH 147/185] Associate connected APN list with subscription - As per the current implementation, connected apn list used by TelephonyRegistry is common. As a result, in multi sim cases, when APN status of one subscription changes, sometimes the phone state listeners are notified with change in the other subscription instead, depending on whose cleanUp or setUp method is called first. - Fix this by keeping a separate connected APN list for each subscription. CRs-Fixed: 935723 Change-Id: I4490511af12ce0871fb7699cae55a923efc8c534 --- .../com/android/server/TelephonyRegistry.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 9602bf672cca..752887e5b28e 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -158,7 +158,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { private String[] mDataConnectionApn; - private ArrayList mConnectedApns; + private ArrayList[] mConnectedApns; private LinkProperties[] mDataConnectionLinkProperties; @@ -290,11 +290,11 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { mContext = context; mBatteryStats = BatteryStatsService.getService(); - mConnectedApns = new ArrayList(); int numPhones = TelephonyManager.getDefault().getPhoneCount(); if (DBG) log("TelephonyRegistor: ctor numPhones=" + numPhones); mNumPhones = numPhones; + mConnectedApns = new ArrayList[numPhones]; mCallState = new int[numPhones]; mDataActivity = new int[numPhones]; mDataConnectionState = new int[numPhones]; @@ -312,6 +312,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { mDataConnectionNetworkCapabilities = new NetworkCapabilities[numPhones]; mCellInfo = new ArrayList>(); for (int i = 0; i < numPhones; i++) { + mConnectedApns[i] = new ArrayList(); mCallState[i] = TelephonyManager.CALL_STATE_IDLE; mDataActivity[i] = TelephonyManager.DATA_ACTIVITY_NONE; mDataConnectionState[i] = TelephonyManager.DATA_UNKNOWN; @@ -334,7 +335,6 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { location.fillInNotifierBundle(mCellLocation[i]); } } - mConnectedApns = new ArrayList(); mAppOps = mContext.getSystemService(AppOpsManager.class); } @@ -1023,18 +1023,21 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { synchronized (mRecords) { int phoneId = SubscriptionManager.getPhoneId(subId); if (validatePhoneId(phoneId)) { + if (VDBG) { + log(" mConnectedApns[" + phoneId + "]=" + mConnectedApns[phoneId].toString()); + } boolean modified = false; if (state == TelephonyManager.DATA_CONNECTED) { - if (!mConnectedApns.contains(apnType)) { - mConnectedApns.add(apnType); + if (!mConnectedApns[phoneId].contains(apnType)) { + mConnectedApns[phoneId].add(apnType); if (mDataConnectionState[phoneId] != state) { mDataConnectionState[phoneId] = state; modified = true; } } } else { - if (mConnectedApns.remove(apnType)) { - if (mConnectedApns.isEmpty()) { + if (mConnectedApns[phoneId].remove(apnType)) { + if (mConnectedApns[phoneId].isEmpty()) { mDataConnectionState[phoneId] = state; modified = true; } else { -- GitLab From b4d908fd5042787c3197d98c15a25a0fd0de91bc Mon Sep 17 00:00:00 2001 From: Sai Kumar Sanagavarapu Date: Thu, 21 Jul 2016 13:33:11 +0530 Subject: [PATCH 148/185] CameraJNI: Fix memory leak in stop recording. Issue: Due to race conditions, if a recording frame callback is received after a proxy listener is set to NULL, the callback is forwarded to JNIContext which does nothing. This will lead to buffer leak in metadata mode because fd would have been duped already. Fix: Release recording frame from JNIContext. Bug: 30299751 CRs-Fixed: 1040448 Change-Id: I315ec3124014c6309d68fdc1be1e18091a84e154 --- core/jni/android_hardware_Camera.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 8b09ab7a8b57..c28a66ce9edd 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -371,9 +371,10 @@ void JNICameraContext::postDataTimestamp(nsecs_t timestamp, int32_t msgType, con postData(msgType, dataPtr, NULL); } -void JNICameraContext::postRecordingFrameHandleTimestamp(nsecs_t, native_handle_t*) { +void JNICameraContext::postRecordingFrameHandleTimestamp(nsecs_t, native_handle_t* handle) { // This is not needed at app layer. This should not be called because JNICameraContext cannot // start video recording. + mCamera->releaseRecordingFrameHandle(handle); } void JNICameraContext::postMetadata(JNIEnv *env, int32_t msgType, camera_frame_metadata_t *metadata) -- GitLab From 92068faacadbfe56e86d87a544420fa77d7ed37b Mon Sep 17 00:00:00 2001 From: Sukanya Rajkhowa Date: Fri, 15 Jul 2016 11:14:58 -0700 Subject: [PATCH 149/185] Declare TTY intents to be protected broadcasts - CURRENT_TTY_MODE_CHANGED and TTY_PREFERRED_MODE_CHANGED are system broadcasts that need to protected - Even though these broadcasts are throwing a non-fatal exception and not causing a functionality issue for now, they are likely to be treated as errors in later releases Change-Id: I184cffe4bd9358aa3fab5fcc8c92b55399ec4241 CRs-Fixed: 1030918 --- core/res/AndroidManifest.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index e9a3409be6ab..7a8f60e7b7c6 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -483,6 +483,9 @@ + + + -- GitLab From 38613cfc35942e870c054a572105a45ea63210b9 Mon Sep 17 00:00:00 2001 From: Zhu Youhua Date: Thu, 10 Mar 2016 16:39:55 +0800 Subject: [PATCH 150/185] SystemUI: Fix no LED indication for missed call when screen off When device is going to sleep, showKeyguard() will be invoked to show lock screen. It shouldn't clear the LED notification at this moment. Do not clear the LED notification in showKeyguard(). This should only happen when user is actively viewing notification. Change-Id: Id81b9e854df9510d436f6eb8185ee4411c914dd9 CRs-Fixed: 783613 --- .../com/android/systemui/statusbar/phone/PhoneStatusBar.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 d7411cc70a08..d1e8eccdc6a9 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2620,8 +2620,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // Expand the window to encompass the full screen in anticipation of the drag. // This is only possible to do atomically because the status bar is at the top of the screen! mStatusBarWindowManager.setPanelVisible(true); - - visibilityChanged(true); + if(!force){ + visibilityChanged(true); + } mWaitingForKeyguardExit = false; disable(mDisabledUnmodified1, mDisabledUnmodified2, !force /* animate */); setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true); -- GitLab From 2464d7711ed7233321647d13b2d7eee94c382cc7 Mon Sep 17 00:00:00 2001 From: mqi Date: Fri, 29 Jul 2016 14:59:35 +0800 Subject: [PATCH 151/185] SystemUI:systemui crash when moving data. Make a screenshot,then change the sdcard to intrenal storage,when moving data to it the delete the screenshot make systemui crash. Data UIR is not exit,can't be delete,throw the exception. Change-Id: Id17a59ee0f4e4d87db316d6debceb75e35a0af3b CRs-Fixed: 1008698 Change-Id: I6e6cbcf4b7808cde5a3d5633da69f9d61b8bf859 --- .../com/android/systemui/screenshot/GlobalScreenshot.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index d7894772454d..921459c37e9a 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -385,7 +385,11 @@ class DeleteImageInBackgroundTask extends AsyncTask { Uri screenshotUri = params[0]; ContentResolver resolver = mContext.getContentResolver(); - resolver.delete(screenshotUri, null, null); + try{ + resolver.delete(screenshotUri, null, null); + } catch (UnsupportedOperationException e) { + e.printStackTrace(); + } return null; } } -- GitLab From 409c6a10382e3938e9ecd2cb269cecc156b96971 Mon Sep 17 00:00:00 2001 From: Nitin Arora Date: Wed, 22 Jul 2015 15:54:30 -0700 Subject: [PATCH 152/185] Bluetooth: Send Bluetooth Off intent based in BLEApp count This change checks for the precense of an Always On APP while moving Bluetooth state from ON to BLE_ON state. If there is an app present, BT_OFF intent is immidiately sent, else the intent is sent when BT is completely turned OFF. This prevents the intermediate state where BT Off intent, enables the BT toggle switch while BT core services are still turning off. Change-Id: I169af5a9aedd18e38ad990a793a437ac40cbe9ef CRs-Fixed: 1047892 --- .../com/android/server/BluetoothManagerService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 50dc7326f5e5..6052de930f2b 100755 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -142,6 +142,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private final BluetoothHandler mHandler; private int mErrorRecoveryRetryCounter; private final int mSystemUiUid; + private boolean mIntentPending = false; private void registerForAirplaneMode(IntentFilter filter) { final ContentResolver resolver = mContext.getContentResolver(); @@ -1460,7 +1461,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { unbindAndFinish(); sendBleStateChanged(prevState, newState); // Don't broadcast as it has already been broadcast before - isStandardBroadcast = false; + if(!mIntentPending) + isStandardBroadcast = false; + else + mIntentPending = false; } else if (!intermediate_off) { // connect to GattService @@ -1488,6 +1492,13 @@ class BluetoothManagerService extends IBluetoothManager.Stub { // Broadcast as STATE_OFF newState = BluetoothAdapter.STATE_OFF; sendBrEdrDownCallback(); + if(!isBleAppPresent()){ + isStandardBroadcast = false; + mIntentPending = true; + } else { + mIntentPending = false; + isStandardBroadcast = true; + } } } else if (newState == BluetoothAdapter.STATE_ON) { boolean isUp = (newState==BluetoothAdapter.STATE_ON); -- GitLab From 01259c5d7c82caad8905b80a5212ce126b1fc980 Mon Sep 17 00:00:00 2001 From: Sravan Kumar V Date: Wed, 20 Jul 2016 13:29:27 +0530 Subject: [PATCH 153/185] Bluetooth: PBAP: Add support for PBAP UI preference This pach adds support for PBAP UI preference in SettingsLib. Without this change it is not possible to properly use the pbap checkbox preference from Bluetooth subsettings menu. Also some map profile specific bug fixes are also incorporated in this change. Change-Id: I283a0cb65cb132931010fb2f8c977bea20a67951 CRs-Fixed: 758697 --- .../bluetooth/CachedBluetoothDevice.java | 2 ++ .../bluetooth/LocalBluetoothProfileManager.java | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) mode change 100755 => 100644 packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 068f2111319f..bc7d18eb5ee1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -135,6 +135,8 @@ public final class CachedBluetoothDevice implements Comparable Date: Tue, 26 Jul 2016 13:23:49 +0800 Subject: [PATCH 154/185] Telephony: Update cdma_chocies and world_phone config values. Update cdma_chocies to true and world_phone to true. CRs-Fixed: 1046296 Change-Id: I16b658d1fbe93fe362057d38485537bc6e56c229 --- telephony/java/android/telephony/CarrierConfigManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 79eb2f27577b..c83889323edd 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -775,7 +775,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true); sDefaults.putBoolean(KEY_PREFER_2G_BOOL, true); sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false); - sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, false); + sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, true); sDefaults.putBoolean(KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL, true); sDefaults.putBoolean(KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL, true); sDefaults.putBoolean(KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL, false); @@ -784,7 +784,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_USE_OTASP_FOR_PROVISIONING_BOOL, false); sDefaults.putBoolean(KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL, false); sDefaults.putBoolean(KEY_VOICE_PRIVACY_DISABLE_UI_BOOL, false); - sDefaults.putBoolean(KEY_WORLD_PHONE_BOOL, false); + sDefaults.putBoolean(KEY_WORLD_PHONE_BOOL, true); sDefaults.putBoolean(KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL, true); sDefaults.putInt(KEY_VOLTE_REPLACEMENT_RAT_INT, 0); sDefaults.putString(KEY_DEFAULT_SIM_CALL_MANAGER_STRING, ""); -- GitLab From e30aacc250a2371793a715bc8cf2d199cf0fb6f4 Mon Sep 17 00:00:00 2001 From: Benergy Meenan Ravuri Date: Fri, 29 Jul 2016 14:44:41 +0530 Subject: [PATCH 155/185] IMS: Add config flag to map anonymous users to restricted Add a configuration flag to map anonymous users to presentation restricted Change-Id: I568fb0acb70f2bfe98a15aa63ca6daab1dda79d2 CRs-Fixed: 964459 --- .../java/android/telephony/CarrierConfigManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index c83889323edd..28741008e409 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -736,6 +736,13 @@ public class CarrierConfigManager { */ public static final String KEY_PROTOCOL_ERRORS_PERM_FAILURE = "protocol_errors_perm_failure"; + /** + * Key that determines if anonymous users to be mapped to presentation restricted + * @hide + */ + public static final String KEY_MAP_ANONYMOUS_TO_RESTRICTED_BOOL = + "carrier_map_anonymous_to_restricted"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -880,6 +887,7 @@ public class CarrierConfigManager { // Used for Sim card State detection app sDefaults.putStringArray(KEY_SIM_PROVISIONING_STATUS_DETECTION_CARRIER_APP_STRING_ARRAY, null); + sDefaults.putBoolean(KEY_MAP_ANONYMOUS_TO_RESTRICTED_BOOL, true); } /** -- GitLab From d5a09cc7c9d4df8e739e3b470a254a8674b6fab3 Mon Sep 17 00:00:00 2001 From: Amit Blay Date: Sun, 10 Jul 2016 15:46:13 +0300 Subject: [PATCH 156/185] Added 'EncryptWipeStorage' API to MountService API The EncryptWipeStorage API is used to create a new ext4 file system on the userdata partition, instead of the existing one, and encrypt it. This as opposed to the way EncryptStorage API works, which encrypts the existing file system as is ('inplace'). The 'wipe' option is already supported in the underlying Cryptfs implementation. Also in this change, new values that can be returned by 'getEncryptionState' API are declared. These values reflects the state of the MDTP activation, together with the general encryption state, in case that MDTP is activated. - ENCRYPTION_STATE_OK_MDTP_ACTIVATED - means that the crypto state is ok, and MDTP is activated. - ENCRYPTION_STATE_ERROR_MDTP_ACTIVATED - means that the crypto state is bad, and MDTP is activated. Change-Id: Ide628a8cf6499bc2216b08c22479a37133bebb03 --- .../android/os/storage/IMountService.java | 39 ++++++++++++++++++- include/storage/IMountService.h | 1 + libs/storage/IMountService.cpp | 18 +++++++++ .../java/com/android/server/MountService.java | 22 +++++++++-- 4 files changed, 76 insertions(+), 4 deletions(-) diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java index b9bcd1c190a4..9f4b05cb4d42 100644 --- a/core/java/android/os/storage/IMountService.java +++ b/core/java/android/os/storage/IMountService.java @@ -647,6 +647,24 @@ public interface IMountService extends IInterface { return _result; } + public int encryptWipeStorage(int type, String password) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeInt(type); + _data.writeString(password); + mRemote.transact(Stub.TRANSACTION_encryptWipeStorage, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + public int changeEncryptionPassword(int type, String password) throws RemoteException { Parcel _data = Parcel.obtain(); Parcel _reply = Parcel.obtain(); @@ -1507,6 +1525,8 @@ public interface IMountService extends IInterface { static final int TRANSACTION_fixateNewestUserKeyAuth = IBinder.FIRST_CALL_TRANSACTION + 71; + static final int TRANSACTION_encryptWipeStorage = IBinder.FIRST_CALL_TRANSACTION + 72; + /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. @@ -1809,6 +1829,15 @@ public interface IMountService extends IInterface { reply.writeInt(result); return true; } + case TRANSACTION_encryptWipeStorage: { + data.enforceInterface(DESCRIPTOR); + int type = data.readInt(); + String password = data.readString(); + int result = encryptWipeStorage(type, password); + reply.writeNoException(); + reply.writeInt(result); + return true; + } case TRANSACTION_changeEncryptionPassword: { data.enforceInterface(DESCRIPTOR); int type = data.readInt(); @@ -2320,7 +2349,8 @@ public interface IMountService extends IInterface { * Returns whether or not the external storage is emulated. */ public boolean isExternalStorageEmulated() throws RemoteException; - + /** The volume has been encrypted succesfully and MDTP state is 'activated'. */ + static final int ENCRYPTION_STATE_OK_MDTP_ACTIVATED = 2; /** The volume is not encrypted. */ static final int ENCRYPTION_STATE_NONE = 1; /** The volume has been encrypted succesfully. */ @@ -2333,6 +2363,8 @@ public interface IMountService extends IInterface { static final int ENCRYPTION_STATE_ERROR_INCONSISTENT = -3; /** Underlying data is corrupt */ static final int ENCRYPTION_STATE_ERROR_CORRUPT = -4; + /** The volume is in a bad state and MDTP state is 'activated'.*/ + static final int ENCRYPTION_STATE_ERROR_MDTP_ACTIVATED = -5; /** * Determines the encryption state of the volume. @@ -2355,6 +2387,11 @@ public interface IMountService extends IInterface { */ public int encryptStorage(int type, String password) throws RemoteException; + /** + * Encrypts and wipes storage. + */ + public int encryptWipeStorage(int type, String password) throws RemoteException; + /** * Changes the encryption password. */ diff --git a/include/storage/IMountService.h b/include/storage/IMountService.h index c3d34d84958b..b04be8aa2c28 100644 --- a/include/storage/IMountService.h +++ b/include/storage/IMountService.h @@ -71,6 +71,7 @@ public: virtual bool getMountedObbPath(const String16& filename, String16& path) = 0; virtual int32_t decryptStorage(const String16& password) = 0; virtual int32_t encryptStorage(const String16& password) = 0; + virtual int32_t encryptWipeStorage(const String16& password) = 0; }; // ---------------------------------------------------------------------------- diff --git a/libs/storage/IMountService.cpp b/libs/storage/IMountService.cpp index c643ed008a3b..fc97886d8990 100644 --- a/libs/storage/IMountService.cpp +++ b/libs/storage/IMountService.cpp @@ -50,6 +50,7 @@ enum { TRANSACTION_isExternalStorageEmulated, TRANSACTION_decryptStorage, TRANSACTION_encryptStorage, + TRANSACTION_encryptWipeStorage = IBinder::FIRST_CALL_TRANSACTION + 72, }; class BpMountService: public BpInterface @@ -551,6 +552,23 @@ public: } return reply.readInt32(); } + + int32_t encryptWipeStorage(const String16& password) + { + Parcel data, reply; + data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); + data.writeString16(password); + if (remote()->transact(TRANSACTION_encryptWipeStorage, data, &reply) != NO_ERROR) { + ALOGD("encryptWipeStorage could not contact remote\n"); + return -1; + } + int32_t err = reply.readExceptionCode(); + if (err < 0) { + ALOGD("encryptWipeStorage caught exception %d\n", err); + return err; + } + return reply.readInt32(); + } }; IMPLEMENT_META_INTERFACE(MountService, "IMountService") diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index 3310f41c6ca7..f2d60397ce5a 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -2567,7 +2567,7 @@ class MountService extends IMountService.Stub } } - public int encryptStorage(int type, String password) { + private int encryptStorageExtended(int type, String password, boolean wipe) { if (TextUtils.isEmpty(password) && type != StorageManager.CRYPT_TYPE_DEFAULT) { throw new IllegalArgumentException("password cannot be empty"); } @@ -2583,10 +2583,10 @@ class MountService extends IMountService.Stub try { if (type == StorageManager.CRYPT_TYPE_DEFAULT) { - mCryptConnector.execute("cryptfs", "enablecrypto", "inplace", + mCryptConnector.execute("cryptfs", "enablecrypto", wipe ? "wipe" : "inplace", CRYPTO_TYPES[type]); } else { - mCryptConnector.execute("cryptfs", "enablecrypto", "inplace", + mCryptConnector.execute("cryptfs", "enablecrypto", wipe ? "wipe" : "inplace", CRYPTO_TYPES[type], new SensitiveArg(password)); } } catch (NativeDaemonConnectorException e) { @@ -2597,6 +2597,22 @@ class MountService extends IMountService.Stub return 0; } + /** Encrypt Storage given a password. + * @param type The password type. + * @param password The password to be used in encryption. + */ + public int encryptStorage(int type, String password) { + return encryptStorageExtended(type, password, false); + } + + /** Encrypt Storage given a password after wiping it. + * @param type The password type. + * @param password The password to be used in encryption. + */ + public int encryptWipeStorage(int type, String password) { + return encryptStorageExtended(type, password, true); + } + /** Set the password for encrypting the master key. * @param type One of the CRYPTO_TYPE_XXX consts defined in StorageManager. * @param password The password to set. -- GitLab From 13cb572a1a54f12fec1b82bcbe0254e2f4fcf120 Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Sat, 30 Jul 2016 04:05:40 -0400 Subject: [PATCH 157/185] Support password input style of times countdown When password is wrong more than the customized times, keyguard could show the dialog to suggest to wipe the data. By default the count is customized to 0, which will disable this feature. Customize the config_max_unlock_countdown_times to enable this feature in the operator data package overlay. Change-Id: I9ba7cd46cb63d447a357783f68854c72cab04c38 CRs-Fixed: 1037633 --- .../Keyguard/res/values-zh-rCN/strings.xml | 6 ++ packages/Keyguard/res/values/config.xml | 3 + packages/Keyguard/res/values/strings.xml | 17 ++++ .../keyguard/KeyguardAbsKeyInputView.java | 23 +++++- .../com/android/keyguard/KeyguardPINView.java | 2 +- .../keyguard/KeyguardPasswordView.java | 2 +- .../android/keyguard/KeyguardPatternView.java | 24 +++++- .../keyguard/KeyguardSecurityContainer.java | 79 ++++++++++++++++++- 8 files changed, 145 insertions(+), 11 deletions(-) diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml index 274d9e69492e..89f1ebd1b063 100644 --- a/packages/Keyguard/res/values-zh-rCN/strings.xml +++ b/packages/Keyguard/res/values-zh-rCN/strings.xml @@ -104,6 +104,12 @@ SIM 卡 PUK 码不正确,您还可尝试 %d 次。如果仍不正确,SIM 卡将永远无法使用。 SIM 卡 PUK 码不正确,您还可尝试 %d 次。如果仍不正确,SIM 卡将永远无法使用。 + 剩余次数: %d + 您输入了%d次错误的PIN, 是否重启并恢复出厂设置? + 您输入了%d次错误的密码, 是否重启并恢复出厂设置? + 您输入了%d次错误图案, 是否重启并恢复出厂设置? + 将要清除您设备上的全部用户数据并且设备恢复成出厂设置。 + "SIM卡PIN码操作失败!" "SIM卡PUK码操作失败!" "代码正确!" diff --git a/packages/Keyguard/res/values/config.xml b/packages/Keyguard/res/values/config.xml index bde6ed531353..232b7b214a55 100644 --- a/packages/Keyguard/res/values/config.xml +++ b/packages/Keyguard/res/values/config.xml @@ -28,4 +28,7 @@ 7500000 + + + 0 diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml index 89f64833273f..782af379656e 100755 --- a/packages/Keyguard/res/values/strings.xml +++ b/packages/Keyguard/res/values/strings.xml @@ -304,6 +304,23 @@ This is displayed if the phone is not connected to a carrier.--> No service. + Remaining attempts: %d + + You entered the wrong PIN %d times, + do you want to reset your phone to factory settings? + + + You entered the wrong Password %d times, + do you want to reset your phone to factory settings? + + + You entered the wrong Pattern %d times, + do you want to reset your phone to factory settings? + + + This will erase all data from your device\'s internal storage and your device will be back to factory settings. + + Switch input method diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index 260113091e29..4636312fbf68 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -41,6 +41,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout protected View mEcaView; protected boolean mEnableHaptics; private boolean mDismissing; + private int mMaxCountdownTimes = 0; // To avoid accidental lockout due to events while the device in in the pocket, ignore // any passwords with length less than or equal to this length. @@ -94,6 +95,9 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout mSecurityMessageDisplay = KeyguardMessageArea.findSecurityMessageDisplay(this); mEcaView = findViewById(R.id.keyguard_selector_fade_container); + mMaxCountdownTimes = mContext.getResources() + .getInteger(R.integer.config_max_unlock_countdown_times); + EmergencyButton button = (EmergencyButton) findViewById(R.id.emergency_call_button); if (button != null) { button.setCallback(this); @@ -151,7 +155,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout boolean isValidPassword) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { - mLockPatternUtils.sanitizePassword(); + mLockPatternUtils.sanitizePassword(); mCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mDismissing = true; @@ -160,14 +164,15 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout } else { if (isValidPassword) { mCallback.reportUnlockAttempt(userId, false, timeoutMs); - if (timeoutMs > 0) { + if (!(mMaxCountdownTimes > 0) && timeoutMs > 0) { long deadline = mLockPatternUtils.setLockoutAttemptDeadline( userId, timeoutMs); handleAttemptLockout(deadline); } } if (timeoutMs == 0) { - mSecurityMessageDisplay.setMessage(getWrongPasswordStringId(), true); + String msg = getMessageWithCount(getWrongPasswordStringId()); + mSecurityMessageDisplay.setMessage(msg, true); } } resetPasswordText(true /* animate */, !matched /* announce deletion if no match */); @@ -199,6 +204,18 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout }.start(); } + protected String getMessageWithCount(int msgId) { + String msg = getContext().getString(msgId); + int remaining = mMaxCountdownTimes + - KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts( + KeyguardUpdateMonitor.getCurrentUser()); + if (mMaxCountdownTimes > 0 && remaining > 0) { + msg += " - " + getContext().getResources().getString( + R.string.kg_remaining_attempts, remaining); + } + return msg; + } + protected void onUserInput() { if (mCallback != null) { mCallback.userActivity(); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java index 7ea767c004fb..59097d106416 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java @@ -63,7 +63,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { @Override protected void resetState() { super.resetState(); - mSecurityMessageDisplay.setMessage(R.string.kg_pin_instructions, false); + mSecurityMessageDisplay.setMessage(getMessageWithCount(R.string.kg_pin_instructions), false); } @Override diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java index b75f52987a92..d897c2b61e37 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java @@ -74,7 +74,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView @Override protected void resetState() { - mSecurityMessageDisplay.setMessage(R.string.kg_password_instructions, false); + mSecurityMessageDisplay.setMessage(getMessageWithCount(R.string.kg_password_instructions), false); final boolean wasDisabled = mPasswordEntry.isEnabled(); setPasswordEntryEnabled(true); setPasswordEntryInputEnabled(true); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index 90553ab8ebf0..857684aee2b8 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -85,6 +85,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit private Rect mTempRect = new Rect(); private KeyguardMessageArea mSecurityMessageDisplay; private View mEcaView; + private int mMaxCountdownTimes; private ViewGroup mContainer; private int mDisappearYTranslation; @@ -126,6 +127,8 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit @Override protected void onFinishInflate() { super.onFinishInflate(); + mMaxCountdownTimes = mContext.getResources() + .getInteger(R.integer.config_max_unlock_countdown_times); mLockPatternUtils = mLockPatternUtils == null ? new LockPatternUtils(mContext) : mLockPatternUtils; @@ -189,7 +192,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit } private void displayDefaultSecurityMessage() { - mSecurityMessageDisplay.setMessage(R.string.kg_pattern_instructions, false); + mSecurityMessageDisplay.setMessage(getMessageWithCount(R.string.kg_pattern_instructions), false); } @Override @@ -255,7 +258,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit boolean isValidPattern) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { - mLockPatternUtils.sanitizePassword(); + mLockPatternUtils.sanitizePassword(); mCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct); @@ -265,20 +268,33 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong); if (isValidPattern) { mCallback.reportUnlockAttempt(userId, false, timeoutMs); - if (timeoutMs > 0) { + if (!(mMaxCountdownTimes > 0) && timeoutMs > 0) { long deadline = mLockPatternUtils.setLockoutAttemptDeadline( userId, timeoutMs); handleAttemptLockout(deadline); } } if (timeoutMs == 0) { - mSecurityMessageDisplay.setMessage(R.string.kg_wrong_pattern, true); + mSecurityMessageDisplay. + setMessage(getMessageWithCount(R.string.kg_wrong_pattern),true); mLockPatternView.postDelayed(mCancelPatternRunnable, PATTERN_CLEAR_TIMEOUT_MS); } } } } + private String getMessageWithCount(int msgId) { + String msg = getContext().getString(msgId); + int remaining = mMaxCountdownTimes + - KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts( + KeyguardUpdateMonitor.getCurrentUser()); + if (mMaxCountdownTimes > 0 && remaining > 0) { + msg += " - " + getContext().getResources().getString( + R.string.kg_remaining_attempts, remaining); + } + return msg; + } + private void handleAttemptLockout(long elapsedRealtimeDeadline) { mLockPatternView.clearPattern(); mLockPatternView.setEnabled(false); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java index a7e4e1272a60..aaff26511eec 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -17,8 +17,11 @@ package com.android.keyguard; import android.app.Activity; import android.app.AlertDialog; +import android.app.ActivityManager; import android.app.admin.DevicePolicyManager; import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; import android.os.UserHandle; import android.util.AttributeSet; import android.util.Log; @@ -49,6 +52,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe private final KeyguardUpdateMonitor mUpdateMonitor; + private WipeConfirmListener mWipeConfirmListener = null; + // Used to notify the container when something interesting happens. public interface SecurityCallback { public boolean dismiss(boolean authenticated); @@ -250,12 +255,71 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe showDialog(null, message); } + private void showCountdownWipeDialog(int attempts) { + int msgId = R.string.kg_failed_attempts_now_wiping; + switch (mSecurityModel.getSecurityMode()) { + case PIN: + msgId = R.string.kg_failed_pin_attempts_now_wiping; + break; + case Password: + msgId = R.string.kg_failed_password_attempts_now_wiping; + break; + case Pattern: + msgId = R.string.kg_failed_pattern_attempts_now_wiping; + break; + } + if (mWipeConfirmListener == null) { + mWipeConfirmListener = new WipeConfirmListener(); + } + final AlertDialog dialog = new AlertDialog.Builder(mContext) + .setMessage(mContext.getString(msgId, attempts)) + .setNegativeButton(com.android.internal.R.string.gpsVerifYes,// reuse public Yes/No + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + showWipeConfirmDialog(); + } + }) + .setPositiveButton(com.android.internal.R.string.gpsVerifNo, mWipeConfirmListener) + .setCancelable(false) + .create(); + if (!(mContext instanceof Activity)) { + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); + } + dialog.show(); + } + + private void showWipeConfirmDialog() { + final AlertDialog dialog = new AlertDialog.Builder(mContext) + .setMessage(R.string.kg_failed_attempts_now_wiping_confirm) + .setNegativeButton(com.android.internal.R.string.gpsVerifYes, mWipeConfirmListener) + .setPositiveButton(com.android.internal.R.string.gpsVerifNo, mWipeConfirmListener) + .setCancelable(false) + .create(); + if (!(mContext instanceof Activity)) { + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); + } + dialog.show(); + } + + private class WipeConfirmListener implements DialogInterface.OnClickListener { + public void onClick(DialogInterface dialog, int which) { + if (DialogInterface.BUTTON_POSITIVE == which) { + KeyguardUpdateMonitor.getInstance(mContext).clearFailedUnlockAttempts(); + } else { + if (ActivityManager.isUserAMonkey()) return; + Intent wipeIntent = new Intent(Intent.ACTION_MASTER_CLEAR); + mContext.sendBroadcast(wipeIntent); + } + } + } + private void reportFailedUnlockAttempt(int userId, int timeoutMs) { final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); final int failedAttempts = monitor.getFailedUnlockAttempts(userId) + 1; // +1 for this time if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts); + SecurityMode mode = mSecurityModel.getSecurityMode(); final DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager(); final int failedAttemptsBeforeWipe = dpm.getMaximumFailedPasswordsForWipe(null, userId); @@ -263,7 +327,18 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe final int remainingBeforeWipe = failedAttemptsBeforeWipe > 0 ? (failedAttemptsBeforeWipe - failedAttempts) : Integer.MAX_VALUE; // because DPM returns 0 if no restriction - if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) { + + final boolean usingPattern = mode == KeyguardSecurityModel.SecurityMode.Pattern; + final boolean usingPIN = mode == KeyguardSecurityModel.SecurityMode.PIN; + final boolean usingPassword = mode == KeyguardSecurityModel.SecurityMode.Password; + final int maxCountdownTimes = mContext.getResources() + .getInteger(R.integer.config_max_unlock_countdown_times); + final boolean enableTimesCounter = maxCountdownTimes > 0 && (usingPattern || usingPIN + || usingPassword); + + if (enableTimesCounter && (failedAttempts >= maxCountdownTimes)) { + showCountdownWipeDialog(failedAttempts); + } else if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) { // The user has installed a DevicePolicyManager that requests a user/profile to be wiped // N attempts. Once we get below the grace period, we post this dialog every time as a // clear warning until the deletion fires. @@ -288,7 +363,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe } monitor.reportFailedStrongAuthUnlockAttempt(userId); mLockPatternUtils.reportFailedPasswordAttempt(userId); - if (timeoutMs > 0) { + if (!enableTimesCounter && (timeoutMs > 0)) { showTimeoutDialog(timeoutMs); } } -- GitLab From 749fe29cb00e098fa7345cb417dcf724d75c8c91 Mon Sep 17 00:00:00 2001 From: Deepak Kushwah Date: Tue, 21 Jun 2016 15:28:15 +0530 Subject: [PATCH 158/185] wifidisplay: Modify WifiDisplayController Spawn RTSP server before P2P connection --In order to be sanguine that the RTSP server has been spawned on source, invoke listen() before P2P connection. --Add a debug property to enable verbose logging in WifiDisplayController Block teardown to avoid severing P2P group --Since WFD dispose is asysnchronous, framework proceeds with teardown and dissolves P2P group before WFD stack is able to complete message exchange for teardown. --Prevent framework from doing so and allow it to proceed only once WFD stack indicates it's dependence on network is over. Add null check guards in WifiDisplayController --The WifiP2PGroup delivered in the onGroupInfoAvailable() callback is not guaranteed to be non-null and hence needs to be validated. --The same applies to the WFDDevice that is retrieved using info.getOwner(). Change-Id: Iee0a7f04f05beb402799117bed5a67e72f57dc9e --- .../server/display/WifiDisplayController.java | 186 ++++++++++++------ 1 file changed, 123 insertions(+), 63 deletions(-) diff --git a/services/core/java/com/android/server/display/WifiDisplayController.java b/services/core/java/com/android/server/display/WifiDisplayController.java index 239f8cd25cc4..26e0ed231586 100644 --- a/services/core/java/com/android/server/display/WifiDisplayController.java +++ b/services/core/java/com/android/server/display/WifiDisplayController.java @@ -42,11 +42,14 @@ import android.net.wifi.p2p.WifiP2pManager.Channel; import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener; import android.net.wifi.p2p.WifiP2pManager.PeerListListener; import android.os.Handler; +import android.os.SystemProperties; import android.provider.Settings; import android.util.Slog; import android.view.Surface; import java.io.PrintWriter; +import java.lang.StackTraceElement; +import java.lang.Thread; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; @@ -70,8 +73,10 @@ import libcore.util.Objects; */ final class WifiDisplayController implements DumpUtils.Dump { private static final String TAG = "WifiDisplayController"; - private static final boolean DEBUG = false; - + private static final boolean DEBUG = + SystemProperties.getBoolean("persist.debug.wfdcdbg",false); + private static final boolean DEBUGV = + SystemProperties.getBoolean("persist.debug.wfdcdbgv",false); private static final int DEFAULT_CONTROL_PORT = 7236; private static final int MAX_THROUGHPUT = 50; private static final int CONNECTION_TIMEOUT_SECONDS = 30; @@ -242,6 +247,35 @@ final class WifiDisplayController implements DumpUtils.Dump { } } + private void dump() { + Slog.d(TAG,"mWifiDisplayOnSetting=" + mWifiDisplayOnSetting); + Slog.d(TAG,"mWifiP2pEnabled=" + mWifiP2pEnabled); + Slog.d(TAG,"mWfdEnabled=" + mWfdEnabled); + Slog.d(TAG,"mWfdEnabling=" + mWfdEnabling); + Slog.d(TAG,"mNetworkInfo=" + mNetworkInfo); + Slog.d(TAG,"mScanRequested=" + mScanRequested); + Slog.d(TAG,"mDiscoverPeersInProgress=" + mDiscoverPeersInProgress); + Slog.d(TAG,"mDesiredDevice=" + describeWifiP2pDevice(mDesiredDevice)); + Slog.d(TAG,"mConnectingDisplay=" + describeWifiP2pDevice(mConnectingDevice)); + Slog.d(TAG,"mDisconnectingDisplay=" + describeWifiP2pDevice(mDisconnectingDevice)); + Slog.d(TAG,"mCancelingDisplay=" + describeWifiP2pDevice(mCancelingDevice)); + Slog.d(TAG,"mConnectedDevice=" + describeWifiP2pDevice(mConnectedDevice)); + Slog.d(TAG,"mConnectionRetriesLeft=" + mConnectionRetriesLeft); + Slog.d(TAG,"mRemoteDisplay=" + mRemoteDisplay); + Slog.d(TAG,"mRemoteDisplayInterface=" + mRemoteDisplayInterface); + Slog.d(TAG,"mRemoteDisplayConnected=" + mRemoteDisplayConnected); + Slog.d(TAG,"mAdvertisedDisplay=" + mAdvertisedDisplay); + Slog.d(TAG,"mAdvertisedDisplaySurface=" + mAdvertisedDisplaySurface); + Slog.d(TAG,"mAdvertisedDisplayWidth=" + mAdvertisedDisplayWidth); + Slog.d(TAG,"mAdvertisedDisplayHeight=" + mAdvertisedDisplayHeight); + Slog.d(TAG,"mAdvertisedDisplayFlags=" + mAdvertisedDisplayFlags); + + Slog.d(TAG,"mAvailableWifiDisplayPeers: size=" + mAvailableWifiDisplayPeers.size()); + for (WifiP2pDevice device : mAvailableWifiDisplayPeers) { + Slog.d(TAG," " + describeWifiP2pDevice(device)); + } + } + public void requestStartScan() { if (!mScanRequested) { mScanRequested = true; @@ -363,7 +397,9 @@ final class WifiDisplayController implements DumpUtils.Dump { } private void updateScanState() { - if (mScanRequested && mWfdEnabled && mDesiredDevice == null) { + if (mScanRequested && mWfdEnabled && + (mDesiredDevice == null) && (mConnectedDevice == null) + && (mDisconnectingDevice == null)) { if (!mDiscoverPeersInProgress) { Slog.i(TAG, "Starting Wifi display scan."); mDiscoverPeersInProgress = true; @@ -563,6 +599,14 @@ final class WifiDisplayController implements DumpUtils.Dump { * connection is established (or not). */ private void updateConnection() { + if(DEBUGV) { + //new Throwable("WFD_DBG").printStackTrace(); + StackTraceElement[] st = Thread.currentThread().getStackTrace(); + for(int i = 2 ; i < st.length && i < 5; i++) { + Slog.i(TAG,st[i].toString()); + } + dump(); + } // Step 0. Stop scans if necessary to prevent interference while connected. // Resume scans later when no longer attempting to connect. updateScanState(); @@ -570,10 +614,10 @@ final class WifiDisplayController implements DumpUtils.Dump { // Step 1. Before we try to connect to a new device, tell the system we // have disconnected from the old one. if ((mRemoteDisplay != null || mExtRemoteDisplay != null) && - mConnectedDevice != mDesiredDevice) { + (mConnectedDevice != mDesiredDevice)|| + (mRemoteDisplayInterface != null && mConnectedDevice == null)) { Slog.i(TAG, "Stopped listening for RTSP connection on " - + mRemoteDisplayInterface - + " from Wifi display: " + mConnectedDevice.deviceName); + + mRemoteDisplayInterface); if(mRemoteDisplay != null) { mRemoteDisplay.dispose(); @@ -584,7 +628,6 @@ final class WifiDisplayController implements DumpUtils.Dump { mExtRemoteDisplay = null; mRemoteDisplay = null; mRemoteDisplayInterface = null; - mRemoteDisplayConnected = false; mHandler.removeCallbacks(mRtspTimeout); mWifiP2pManager.setMiracastMode(WifiP2pManager.MIRACAST_DISABLED); @@ -594,7 +637,7 @@ final class WifiDisplayController implements DumpUtils.Dump { } // Step 2. Before we try to connect to a new device, disconnect from the old one. - if (mDisconnectingDevice != null) { + if (mRemoteDisplayConnected || mDisconnectingDevice != null) { return; // wait for asynchronous callback } if (mConnectedDevice != null && mConnectedDevice != mDesiredDevice) { @@ -678,6 +721,51 @@ final class WifiDisplayController implements DumpUtils.Dump { return; // done } + //Before we connect, we need to set the oldDevice to the desiredDevice to check + //the device on receiving callbacks from the Remote display modules + final WifiP2pDevice oldDevice = mDesiredDevice; + RemoteDisplay.Listener listener = new RemoteDisplay.Listener() { + @Override + public void onDisplayConnected(Surface surface, + int width, int height, int flags, int session) { + if (mConnectedDevice == oldDevice && !mRemoteDisplayConnected) { + Slog.i(TAG, "Opened RTSP connection with Wifi display: " + + mConnectedDevice.deviceName); + mRemoteDisplayConnected = true; + mHandler.removeCallbacks(mRtspTimeout); + + if (mWifiDisplayCertMode) { + mListener.onDisplaySessionInfo( + getSessionInfo(mConnectedDeviceGroupInfo, session)); + } + + final WifiDisplay display = createWifiDisplay(mConnectedDevice); + advertiseDisplay(display, surface, width, height, flags); + } + } + + @Override + public void onDisplayDisconnected() { + if (mConnectedDevice == oldDevice) { + Slog.i(TAG, "Closed RTSP connection with Wifi display: " + + mConnectedDevice.deviceName); + mHandler.removeCallbacks(mRtspTimeout); + mRemoteDisplayConnected = false; + disconnect(); + } + } + + @Override + public void onDisplayError(int error) { + if (mConnectedDevice == oldDevice) { + Slog.i(TAG, "Lost RTSP connection with Wifi display due to error " + + error + ": " + mConnectedDevice.deviceName); + mHandler.removeCallbacks(mRtspTimeout); + handleConnectionFailure(false); + } + } + }; + // Step 5. Try to connect. if (mConnectedDevice == null && mConnectingDevice == null) { Slog.i(TAG, "Connecting to Wifi display: " + mDesiredDevice.deviceName); @@ -703,6 +791,19 @@ final class WifiDisplayController implements DumpUtils.Dump { WifiDisplay display = createWifiDisplay(mConnectingDevice); advertiseDisplay(display, null, 0, 0, 0); + if(ExtendedRemoteDisplayHelper.isAvailable()&& + mExtRemoteDisplay == null){ + final int port = getPortNumber(mDesiredDevice); + //IP is superfluous for WFD source, and we don't have one at this stage anyway since + //P2P connection hasn't been established yet + final String iface = "255.255.255.255:" + port; + mRemoteDisplayInterface = iface; + Slog.i(TAG, "Listening for RTSP connection on " + iface + + " from Wifi display: " + mDesiredDevice.deviceName); + mExtRemoteDisplay = ExtendedRemoteDisplayHelper.listen(iface, + listener, mHandler, mContext); + } + final WifiP2pDevice newDevice = mDesiredDevice; mWifiP2pManager.connect(mWifiP2pChannel, config, new ActionListener() { @Override @@ -729,8 +830,7 @@ final class WifiDisplayController implements DumpUtils.Dump { } // Step 6. Listen for incoming RTSP connection. - if (mConnectedDevice != null && mRemoteDisplay == null && - mExtRemoteDisplay== null) { + if (mConnectedDevice != null && mRemoteDisplay == null) { Inet4Address addr = getInterfaceAddress(mConnectedDeviceGroupInfo); if (addr == null) { Slog.i(TAG, "Failed to get local interface address for communicating " @@ -741,60 +841,15 @@ final class WifiDisplayController implements DumpUtils.Dump { mWifiP2pManager.setMiracastMode(WifiP2pManager.MIRACAST_SOURCE); - final WifiP2pDevice oldDevice = mConnectedDevice; final int port = getPortNumber(mConnectedDevice); final String iface = addr.getHostAddress() + ":" + port; mRemoteDisplayInterface = iface; - Slog.i(TAG, "Listening for RTSP connection on " + iface - + " from Wifi display: " + mConnectedDevice.deviceName); - - RemoteDisplay.Listener listener = new RemoteDisplay.Listener() { - @Override - public void onDisplayConnected(Surface surface, - int width, int height, int flags, int session) { - if (mConnectedDevice == oldDevice && !mRemoteDisplayConnected) { - Slog.i(TAG, "Opened RTSP connection with Wifi display: " - + mConnectedDevice.deviceName); - mRemoteDisplayConnected = true; - mHandler.removeCallbacks(mRtspTimeout); - - if (mWifiDisplayCertMode) { - mListener.onDisplaySessionInfo( - getSessionInfo(mConnectedDeviceGroupInfo, session)); - } - - final WifiDisplay display = createWifiDisplay(mConnectedDevice); - advertiseDisplay(display, surface, width, height, flags); - } - } - - @Override - public void onDisplayDisconnected() { - if (mConnectedDevice == oldDevice) { - Slog.i(TAG, "Closed RTSP connection with Wifi display: " - + mConnectedDevice.deviceName); - mHandler.removeCallbacks(mRtspTimeout); - disconnect(); - } - } - - @Override - public void onDisplayError(int error) { - if (mConnectedDevice == oldDevice) { - Slog.i(TAG, "Lost RTSP connection with Wifi display due to error " - + error + ": " + mConnectedDevice.deviceName); - mHandler.removeCallbacks(mRtspTimeout); - handleConnectionFailure(false); - } - } - }; - if(ExtendedRemoteDisplayHelper.isAvailable()){ - mExtRemoteDisplay = ExtendedRemoteDisplayHelper.listen(iface, - listener, mHandler, mContext); - } else { - mRemoteDisplay = RemoteDisplay.listen(iface, listener, - mHandler, mContext.getOpPackageName()); + if(!ExtendedRemoteDisplayHelper.isAvailable()){ + Slog.i(TAG, "Listening for RTSP connection on " + iface + + " from Wifi display: " + mConnectedDevice.deviceName); + mRemoteDisplay = RemoteDisplay.listen(iface, listener, + mHandler, mContext.getOpPackageName()); } // Use extended timeout value for certification, as some tests require user inputs @@ -806,7 +861,7 @@ final class WifiDisplayController implements DumpUtils.Dump { } private WifiDisplaySessionInfo getSessionInfo(WifiP2pGroup info, int session) { - if (info == null) { + if (info == null || info.getOwner() == null) { return null; } Inet4Address addr = getInterfaceAddress(info); @@ -840,6 +895,10 @@ final class WifiDisplayController implements DumpUtils.Dump { mWifiP2pManager.requestGroupInfo(mWifiP2pChannel, new GroupInfoListener() { @Override public void onGroupInfoAvailable(WifiP2pGroup info) { + if(info == null) { + return; + } + if (DEBUG) { Slog.d(TAG, "Received group info: " + describeWifiP2pGroup(info)); } @@ -859,8 +918,9 @@ final class WifiDisplayController implements DumpUtils.Dump { } if (mWifiDisplayCertMode) { - boolean owner = info.getOwner().deviceAddress - .equals(mThisDevice.deviceAddress); + boolean owner = (info.getOwner() != null)? + info.getOwner().deviceAddress + .equals(mThisDevice.deviceAddress):false; if (owner && info.getClientList().isEmpty()) { // this is the case when we started Autonomous GO, // and no client has connected, save group info -- GitLab From 02255a7bcf8810a37e23bd4ac2a9475b5dd76a6d Mon Sep 17 00:00:00 2001 From: c_yunong Date: Mon, 1 Aug 2016 12:31:27 +0800 Subject: [PATCH 159/185] LocalePicker: Support to the customize language list Support to customize which language to list in the LocalePicker. Support to show country/locale name in LocalePicker if it is enabled by customized overlay. Change-Id: I483786e15fb82e84bddf88a3f4196b865bcc3f56 CRs-Fixed: 1037633 --- .../android/internal/app/LocalePicker.java | 36 ++++++++++++++++--- core/res/res/values/customize.xml | 36 +++++++++++++++++++ core/res/res/values/symbols.xml | 2 ++ 3 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 core/res/res/values/customize.xml diff --git a/core/java/com/android/internal/app/LocalePicker.java b/core/java/com/android/internal/app/LocalePicker.java index 472f583fa075..b42bdb9bf172 100644 --- a/core/java/com/android/internal/app/LocalePicker.java +++ b/core/java/com/android/internal/app/LocalePicker.java @@ -29,6 +29,7 @@ import android.os.Bundle; import android.os.LocaleList; import android.os.RemoteException; import android.provider.Settings; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -42,6 +43,7 @@ import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.ArrayList; +import java.util.Arrays; public class LocalePicker extends ListFragment { private static final String TAG = "LocalePicker"; @@ -97,13 +99,39 @@ public class LocalePicker extends ListFragment { return pseudoLocales; } + /* + * Get the customize locale codes and get the language list + */ + private static ArrayList getLocaleArray(String[] locales, Resources resources) { + String localeCodes = resources.getString(R.string.locale_codes); + String[] localeCodesArray = null; + if (localeCodes != null && !TextUtils.isEmpty(localeCodes.trim())) { + localeCodes = localeCodes.replace('_', '-'); + // ICU use "fil" instead of "tl" + localeCodes = localeCodes.replaceAll("tl-", "fil-"); + localeCodesArray = localeCodes.split(","); + } + ArrayList localeList = new ArrayList( + Arrays.asList((localeCodesArray == null || localeCodesArray.length == 0) ? locales + : localeCodesArray)); + return localeList; + } + public static List getAllAssetLocales(Context context, boolean isInDeveloperMode) { final Resources resources = context.getResources(); - final String[] locales = getSystemAssetLocales(); - List localeList = new ArrayList(locales.length); - Collections.addAll(localeList, locales); - + String[] locales = null; + ArrayList localeList = new ArrayList(); + if (resources.getString(R.string.locale_codes) != null){ + locales = Resources.getSystem().getAssets().getLocales(); + // Check the locale_codes if the locales list is customized in data package overlay. + // If locale_codes is customized, use the customized list instead of built-in locales. + localeList = getLocaleArray(locales, resources); + } else { + locales = getSystemAssetLocales(); + localeList = new ArrayList(locales.length); + Collections.addAll(localeList, locales); + } // Don't show the pseudolocales unless we're in developer mode. http://b/17190407. if (!isInDeveloperMode) { for (String locale : pseudoLocales) { diff --git a/core/res/res/values/customize.xml b/core/res/res/values/customize.xml new file mode 100644 index 000000000000..02184a8c95e6 --- /dev/null +++ b/core/res/res/values/customize.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index fef85007f206..9b5fe7907969 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2413,6 +2413,8 @@ + + -- GitLab From 3416cb4e57b4c62bf648b865f800e194bf883feb Mon Sep 17 00:00:00 2001 From: mqi Date: Wed, 3 Aug 2016 15:50:39 +0800 Subject: [PATCH 160/185] SystemUI: Fix BT icon duplicate issue The default code will add new icon to the beginning of the icon list, this will change the index of the existed icon which will make the system think it to be new and thus resulting duplicate icon issue. Change to add the new icon to the end of the list. Change-Id: I7335f418b1e0fc037fffe01f534f4d888e5cced7 CRs-Fixed: 1046294 --- .../systemui/statusbar/phone/StatusBarIconList.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java old mode 100644 new mode 100755 index 97b31f248fa1..3619d4751633 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java @@ -43,10 +43,10 @@ public class StatusBarIconList { return i; } } - // Auto insert new items at the beginning. - mSlots.add(0, slot); - mIcons.add(0, null); - return 0; + // Auto insert new items at the end. + mSlots.add(slot); + mIcons.add(null); + return N; } public int size() { -- GitLab From 52ddb9b51262dbc44b5544b8d0803c768ebfba39 Mon Sep 17 00:00:00 2001 From: Matadeen Mishra Date: Mon, 6 Jun 2016 14:53:40 +0800 Subject: [PATCH 161/185] BT: fix bluetooth process can't restart again After enable timeout, com.android.bluetooth will be killed. Then, com.android.bluetooth will restart. MESSAGE_BLUETOOTH_SERVICE_CONNECTED will be sent to mHander while recoverBluetoothServiceFromError is running. At that time, we should not unbindService in recoverBluetoothServiceFromError. Otherwise, after unbind, com.android.bluetooth will die, but later mBluetooth will be assigned to adapterService in handleMessage of MESSAGE_BLUETOOTH_SERVICE_CONNECTED. From then on, mBluetooth is not null, but com.android.bluetooth is dead, and doBind will not be triggered again. Change-Id: I5be867c774837be0efb504eff9352c245b432deb CRs-Fixed: 1025113 --- .../server/BluetoothManagerService.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 6052de930f2b..a5fcdd40eedc 100755 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -143,6 +143,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private int mErrorRecoveryRetryCounter; private final int mSystemUiUid; private boolean mIntentPending = false; + private int mIBluetoothConnectedMsgQueued = 0; private void registerForAirplaneMode(IntentFilter filter) { final ContentResolver resolver = mContext.getContentResolver(); @@ -886,7 +887,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub { return; } msg.obj = service; - mHandler.sendMessage(msg); + boolean sent = mHandler.sendMessage(msg); + if (sent && (msg.arg1 == SERVICE_IBLUETOOTH)) + mIBluetoothConnectedMsgQueued++; } public void onServiceDisconnected(ComponentName className) { @@ -1060,6 +1063,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub { break; } // else must be SERVICE_IBLUETOOTH + mIBluetoothConnectedMsgQueued--; + //Remove timeout mHandler.removeMessages(MESSAGE_TIMEOUT_BIND); @@ -1194,7 +1199,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mBluetoothLock.writeLock().unlock(); } - if (mEnable) { + if (mEnable && (mIBluetoothConnectedMsgQueued == 0)) { mEnable = false; // Send a Bluetooth Restart message Message restartMsg = mHandler.obtainMessage( @@ -1595,6 +1600,20 @@ class BluetoothManagerService extends IBluetoothManager.Stub { waitForOnOff(false, true); + // If there is a MESSAGE_BLUETOOTH_SERVICE_CONNECTED in mHandler queue, we should not + // unbindService as below. Otherwise, after unbind, com.android.bluetooth will die, but + // later mBluetooth will be assigned to adapterService in handleMessage of + // MESSAGE_BLUETOOTH_SERVICE_CONNECTED. From then on, mBluetooth is not null, + // and com.android.bluetooth is dead, but doBind will not be triggered again. + if (mIBluetoothConnectedMsgQueued > 0) { + Slog.e(TAG, "recoverBluetoothServiceFromError: " + + "MESSAGE_BLUETOOTH_SERVICE_CONNECTED exists in mHandler queue, " + + "should not unbindService, return directly."); + mHandler.removeMessages(MESSAGE_BLUETOOTH_STATE_CHANGE); + mState = BluetoothAdapter.STATE_OFF; + return; + } + sendBluetoothServiceDownCallback(); try { -- GitLab From dde45648734282439a5fe8f213c0b2fd5013c782 Mon Sep 17 00:00:00 2001 From: mqi Date: Thu, 4 Aug 2016 17:19:06 +0800 Subject: [PATCH 162/185] SystemUI: Fix intent tile dismiss issue Intent tile will dismiss after exit edit mode in quick settings. This is due to intent tile not added in the tile list after exit edit mode. Change to add intent tile into tile list. Change-Id: I84c69d9bae7b56d6889418efb3b0b507abcd788f CRs-Fixed: 1035566 --- .../com/android/systemui/statusbar/phone/QSTileHost.java | 7 +++++++ 1 file changed, 7 insertions(+) mode change 100644 => 100755 packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java old mode 100644 new mode 100755 index fa5777570b5d..adf8cb7afa4a --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -462,6 +462,13 @@ public class QSTileHost implements QSTile.Host, Tunable { tileList = res.getString(R.string.quick_settings_tiles); if (DEBUG) Log.d(TAG, "Loaded tile specs from config: " + tileList); } else { + for (String tile : res.getString(R.string.quick_settings_tiles).split(",")) { + tile = tile.trim(); + if (tile.isEmpty()) continue; + if(tile.startsWith(IntentTile.PREFIX)){ + tileList = tileList.concat(",").concat(tile); + } + } if (DEBUG) Log.d(TAG, "Loaded tile specs from setting: " + tileList); } final ArrayList tiles = new ArrayList(); -- GitLab From 68cb886196bf183c7dba41ef472bf88dd88fa98d Mon Sep 17 00:00:00 2001 From: mqi Date: Fri, 5 Aug 2016 10:23:28 +0800 Subject: [PATCH 163/185] Keyguard: Add Chinese string for sim pin info Missing Chinese string for sim pin info. Add Chinese string. Change-Id: I3803b16281f75de1c499bba2a9e6762753893b3d CRs-Fixed: 740070 --- packages/Keyguard/res/values-zh-rCN/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) mode change 100644 => 100755 packages/Keyguard/res/values-zh-rCN/strings.xml diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml old mode 100644 new mode 100755 index 89f1ebd1b063..9be9a9bfbecc --- a/packages/Keyguard/res/values-zh-rCN/strings.xml +++ b/packages/Keyguard/res/values-zh-rCN/strings.xml @@ -140,4 +140,9 @@ 设备已保持锁定状态达 %d 小时。请确认密码。 "无法识别" + + + "输入 SIM%d PIN, 您还有 %d 次尝试机会。如果仍然失败,则必须联系运营商帮您解锁设备。" + "输入 SIM%d PIN, 您还有 %d 次尝试机会。" + -- GitLab From e03a86d0c187653573358e16d84bac72411669fe Mon Sep 17 00:00:00 2001 From: Sai Kumar Sanagavarapu Date: Fri, 14 Aug 2015 11:13:17 +0530 Subject: [PATCH 164/185] Camera: Force HAL1 for predefined package list. Force HAL1 for some of the popular apps to optimize power savings. Use the following setprop to add any package : camera.hal1.packagelist Change-Id: I14321c63516178dead54f04e2f6828e10225ed9e --- core/java/android/hardware/Camera.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index b44c10ffa3fc..4de2f4bf0524 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -41,6 +41,7 @@ import android.util.Log; import android.text.TextUtils; import android.view.Surface; import android.view.SurfaceHolder; +import android.os.SystemProperties; import java.io.IOException; import java.lang.ref.WeakReference; @@ -492,8 +493,21 @@ public class Camera { mEventHandler = null; } - return native_setup(new WeakReference(this), cameraId, halVersion, - ActivityThread.currentOpPackageName()); + String packageName = ActivityThread.currentOpPackageName(); + + //Force HAL1 if the package name falls in this bucket + String packageList = SystemProperties.get("camera.hal1.packagelist", ""); + if (packageList.length() > 0) { + TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter(','); + splitter.setString(packageList); + for (String str : splitter) { + if (packageName.equals(str)) { + halVersion = CAMERA_HAL_API_VERSION_1_0; + break; + } + } + } + return native_setup(new WeakReference(this), cameraId, halVersion, packageName); } private int cameraInitNormal(int cameraId) { -- GitLab From 9b5aa647d44bcea755eb68beedfb98034c5e0467 Mon Sep 17 00:00:00 2001 From: Dedy Lansky Date: Sun, 7 Aug 2016 14:19:05 +0300 Subject: [PATCH 165/185] Protect the wigig broadcast intents These broadcasts are sent from the wigig service. CRs-Fixed: 997364 Change-Id: Idb0b6ea7c460314b3438d3c9a885c3f6002a16bb --- core/res/AndroidManifest.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 7a8f60e7b7c6..310e46ab31ae 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -276,6 +276,23 @@ + + + + + + + + + + + + + + + + + -- GitLab From efc06fdc0987e2e1d3b20dd3046ddf5208f73d88 Mon Sep 17 00:00:00 2001 From: Wileen Chiu Date: Thu, 17 Mar 2016 18:11:06 -0700 Subject: [PATCH 166/185] Add absent sim info to locked screen text - For a multisim device, when only one sim is inserted that is pin locked, the carrier text only shows 'SIM CARD IS LOCKED - NO SERVICE' even though the voice registration state for one of the phones is 12, where emergency calls are allowed - This occurs when the state above is reported for the slot where a sim card is not inserted. We only check for active subscriptions when creating the display text - Add a check for when only one sim card is inserted. If the voice registration state is out of service for both slots, with at least one as 12 (emergency allowed) show 'Emergency calls only' instead of 'No service' Change-Id: Ib58b6b7431d7b29c770287037cbf07c8df101ae3 CRs-Fixed: 985955 --- .../src/com/android/keyguard/CarrierText.java | 19 ++++++++++++ .../keyguard/KeyguardUpdateMonitor.java | 30 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index 68f769449643..53953370fc16 100755 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -233,6 +233,25 @@ public class CarrierText extends TextView { } } } + /* + * In the case where there is only one sim inserted in a multisim device, if + * the voice registration service state is reported as 12 (no service with emergency) + * for at least one of the sim concatenate the sim state with Emergency calls only" + */ + if (N < TelephonyManager.getDefault().getPhoneCount() && + mKeyguardUpdateMonitor.isEmergencyOnly()) { + int presentSubId = mKeyguardUpdateMonitor.getPresentSubId(); + + if (DEBUG) { + Log.d(TAG, " Present sim - sub id: " + presentSubId); + } + if (presentSubId != -1) { + CharSequence emergencyOnlyText = + getContext().getText(com.android.internal.R.string.emergency_calls_only); + displayText = getCarrierTextForSimState( + mKeyguardUpdateMonitor.getSimState(presentSubId), emergencyOnlyText); + } + } if (allSimsMissing) { if (N != 0) { // Shows "No SIM card | Emergency calls only" on devices that are voice-capable. diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index ecaac028d4b9..681554521c3f 100755 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -387,6 +387,36 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { return mSubscriptionInfo; } + public boolean isEmergencyOnly() { + boolean isEmerg = false; + ServiceState state; + for (int slotId = 0; slotId < TelephonyManager.getDefault().getPhoneCount(); slotId++) { + state = null; + int[] subId = mSubscriptionManager.getSubId(slotId); + if (subId != null && subId.length > 0) { + state = mServiceStates.get(subId[0]); + } + if (state != null) { + if (state.getVoiceRegState() == ServiceState.STATE_IN_SERVICE) + return false; + else if (state.isEmergencyOnly()) { + isEmerg = true; + } + } + } + return isEmerg; + } + + public int getPresentSubId() { + for (int slotId = 0; slotId < TelephonyManager.getDefault().getPhoneCount(); slotId++) { + int[] subId = mSubscriptionManager.getSubId(slotId); + if (subId != null && subId.length > 0 && getSimState(subId[0]) != State.ABSENT) { + return subId[0]; + } + } + return -1; + } + @Override public void onTrustManagedChanged(boolean managed, int userId) { mUserTrustIsManaged.put(userId, managed); -- GitLab From 4df4f532741d4aaa848d70c2465765a9a8b19d87 Mon Sep 17 00:00:00 2001 From: Ashay Jaiswal Date: Mon, 24 Aug 2015 18:50:22 +0530 Subject: [PATCH 167/185] batteryservice: add support for charger led blinking Add following charger LED behaviour: If battery SOC is between 15 and 90 - if charger type is HVDCP blink LED (orange color) - for any other charger type solid orange color. CRs-Fixed: 1011948 Change-Id: Ibd0589911f9b6d9c92b331f10d93c4035a8f89b8 --- .../com/android/server/BatteryService.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index fbd1b89db5e7..8384a1eaaa18 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -933,6 +933,34 @@ public final class BatteryService extends SystemService { com.android.internal.R.integer.config_notificationsBatteryLedOff); } + private boolean isHvdcpPresent() { + File mChargerTypeFile = new File("/sys/class/power_supply/usb/type"); + FileReader fileReader; + BufferedReader br; + String type; + boolean ret; + + try { + fileReader = new FileReader(mChargerTypeFile); + br = new BufferedReader(fileReader); + type = br.readLine(); + if (type.regionMatches(true, 0, "USB_HVDCP", 0, 9)) + ret = true; + else + ret = false; + br.close(); + fileReader.close(); + } catch (FileNotFoundException e) { + ret = false; + Slog.e(TAG, "Failure in reading charger type", e); + } catch (IOException e) { + ret = false; + Slog.e(TAG, "Failure in reading charger type", e); + } + + return ret; + } + /** * Synchronize on BatteryService. */ @@ -954,8 +982,14 @@ public final class BatteryService extends SystemService { // Solid green when full or charging and nearly full mBatteryLight.setColor(mBatteryFullARGB); } else { - // Solid orange when charging and halfway full - mBatteryLight.setColor(mBatteryMediumARGB); + if (isHvdcpPresent()) { + // Blinking orange if HVDCP charger + mBatteryLight.setFlashing(mBatteryMediumARGB, Light.LIGHT_FLASH_TIMED, + mBatteryLedOn, mBatteryLedOn); + } else { + // Solid orange when charging and halfway full + mBatteryLight.setColor(mBatteryMediumARGB); + } } } else { // No lights if not charging and not low -- GitLab From 88edc6494e940a75bd74250970fcf18cb7be9c7c Mon Sep 17 00:00:00 2001 From: mqi Date: Thu, 19 May 2016 13:35:13 +0800 Subject: [PATCH 168/185] SystemUI: add config for IWLAN Add config to control the behaviour of IWLAN. CRs-Fixed: 1022270 Change-Id: I4c294bf12a500c22532cc24ed1ef486780035a2c --- packages/SystemUI/res/values/config.xml | 3 +++ .../statusbar/policy/MobileSignalController.java | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 13d96339d6e0..de357586a6fe 100755 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -298,5 +298,8 @@ false + + false + false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 287a3b8a3ed0..e9d5e70c3f8a 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -305,7 +305,14 @@ public class MobileSignalController extends SignalController< return false; case ServiceState.STATE_OUT_OF_SERVICE: case ServiceState.STATE_EMERGENCY_ONLY: - return mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE; + if (mContext.getResources().getBoolean(R.bool.config_showSignalForIWlan)) { + return mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE; + } else { + return ((mServiceState.getDataRegState() == + ServiceState.STATE_IN_SERVICE)&& + (mServiceState.getDataNetworkType() != + TelephonyManager.NETWORK_TYPE_IWLAN)); + } default: return true; } @@ -624,7 +631,8 @@ public class MobileSignalController extends SignalController< } // Update data net type icons - if (dataType == TelephonyManager.NETWORK_TYPE_IWLAN) { + if (dataType == TelephonyManager.NETWORK_TYPE_IWLAN && + mContext.getResources().getBoolean(R.bool.config_show4gForIWlan)) { // wimax is a special 4g network not handled by telephony dataTypeIcon = TelephonyIcons.ICON_4G; qsDataTypeIcon = TelephonyIcons.QS_DATA_4G; -- GitLab From 546b7de9abaf9fa8ad58d39e4eec19db940d0dd9 Mon Sep 17 00:00:00 2001 From: Mao Jinlong Date: Tue, 9 Aug 2016 15:25:20 +0800 Subject: [PATCH 169/185] Alarm: mount primary storage when in power off alarm mode In order to use the audio files for ringtone which is set by user, it is needed to mount primary storage when in power off alarm mode. Change-Id: Id4c7933c2da5b7fd2a55b776f3a93effc4261a9c CRs-Fixed: 1046238 --- services/core/java/com/android/server/MountService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index f2d60397ce5a..8b19123624ed 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -1256,7 +1256,10 @@ class MountService extends IMountService.Stub } private void onVolumeCreatedLocked(VolumeInfo vol) { - if (mPms.isOnlyCoreApps()) { + // power off alarm need the access to external storage for audio files. + // So in power off alarm mode, primary storage need to be mounted. + boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); + if (mPms.isOnlyCoreApps() && !isAlarmBoot) { Slog.d(TAG, "System booted in core-only mode; ignoring volume " + vol.getId()); return; } -- GitLab From 4abd677cf04fd3598a4fc959d6f015a31ab245e9 Mon Sep 17 00:00:00 2001 From: jinfaw Date: Wed, 3 Aug 2016 14:10:46 +0800 Subject: [PATCH 170/185] idmap: Modificaiton scan process Fix idmap only can scan one layer directory,which under the overlay root directory Change-Id: Iaad019111ae364c319e58dce57dbf4647b38d4c3 CRs-Fixed: 1025803 --- cmds/idmap/scan.cpp | 62 +++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp index 6d30f0d0ce34..d94086be09de 100644 --- a/cmds/idmap/scan.cpp +++ b/cmds/idmap/scan.cpp @@ -169,12 +169,6 @@ namespace { int idmap_scan(const char *target_package_name, const char *target_apk_path, const char *idmap_dir, const android::Vector *overlay_dirs) { - String8 filename = String8(idmap_dir); - filename.appendPath("overlays.list"); - if (unlink(filename.string()) != 0 && errno != ENOENT) { - return EXIT_FAILURE; - } - SortedVector overlayVector; const size_t N = overlay_dirs->size(); for (size_t i = 0; i < N; ++i) { @@ -189,38 +183,56 @@ int idmap_scan(const char *target_package_name, const char *target_apk_path, struct stat st; char overlay_apk_path[PATH_MAX + 1]; snprintf(overlay_apk_path, PATH_MAX, "%s/%s", overlay_dir, dirent->d_name); + if (stat(overlay_apk_path, &st) < 0) { continue; } - if (!S_ISREG(st.st_mode)) { - continue; - } - int priority = parse_apk(overlay_apk_path, target_package_name); - if (priority < 0) { + if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode)) { continue; } - String8 idmap_path(idmap_dir); - idmap_path.appendPath(flatten_path(overlay_apk_path + 1)); - idmap_path.append("@idmap"); + if (S_ISDIR(st.st_mode)) { + String8 dir_name = String8(overlay_apk_path).getPathLeaf(); + if (dir_name == "." || dir_name == "..") { + // Skip the "." and ".." dir. + continue; + } + android::Vector ovector; + ovector.push(overlay_apk_path); + idmap_scan(target_package_name, target_apk_path, idmap_dir, &ovector); + }else{ + int priority = parse_apk(overlay_apk_path, target_package_name); + if (priority < 0) { + continue; + } - if (idmap_create_path(target_apk_path, overlay_apk_path, idmap_path.string()) != 0) { - ALOGE("error: failed to create idmap for target=%s overlay=%s idmap=%s\n", - target_apk_path, overlay_apk_path, idmap_path.string()); - continue; - } + String8 filename = String8(idmap_dir); + filename.appendPath("overlays.list"); + if (unlink(filename.string()) != 0 && errno != ENOENT) { + return EXIT_FAILURE; + } + + String8 idmap_path(idmap_dir); + idmap_path.appendPath(flatten_path(overlay_apk_path + 1)); + idmap_path.append("@idmap"); + if (idmap_create_path(target_apk_path, overlay_apk_path, idmap_path.string()) != 0) { + ALOGE("error: failed to create idmap for target=%s overlay=%s idmap=%s\n", + target_apk_path, overlay_apk_path, idmap_path.string()); + continue; + } + + Overlay overlay(String8(overlay_apk_path), idmap_path, priority); + overlayVector.add(overlay); - Overlay overlay(String8(overlay_apk_path), idmap_path, priority); - overlayVector.add(overlay); + if (!writePackagesList(filename.string(), overlayVector)) { + return EXIT_FAILURE; + } + } } closedir(dir); } - if (!writePackagesList(filename.string(), overlayVector)) { - return EXIT_FAILURE; - } - return EXIT_SUCCESS; } -- GitLab From 32c44f8c85a0869794c5c4428f1bc0a91b8ea486 Mon Sep 17 00:00:00 2001 From: c_yunong Date: Wed, 10 Aug 2016 16:52:14 +0800 Subject: [PATCH 171/185] Add support to override several default values in system settings 1.Set the default date format and time format. 2.Make accessibility services enable. 3.Support customizing the preset values like InputMethod. Change-Id: I0c21c5841c1965d57158bb9e6b6b7b118932881c CRs-Fixed: 1037633 --- .../SettingsProvider/res/values/defaults.xml | 24 ++++++++++ .../providers/settings/SettingsProvider.java | 48 +++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index acf3123a899a..ad7b7190524a 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -267,4 +267,28 @@ 4 + + + + + + + + + 0 + + + + + + + diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 09722fd08925..76b81ade1159 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -2368,6 +2368,54 @@ public class SettingsProvider extends ContentProvider { final SettingsState systemSettings = getSystemSettingsLocked(userId); loadCustomizedVolumeLevels(systemSettings); } + // Allow OEMs to set date format, time format and enable/disable accessibility + // services in resource. + final SettingsState dateAndTimeSettings = getSystemSettingsLocked(userId); + String defaultStringComponent; + int defaultIntComponent; + defaultStringComponent = getContext().getResources().getString( + R.string.def_date_format); + if (!TextUtils.isEmpty(defaultStringComponent)) { + dateAndTimeSettings.insertSettingLocked(Settings.System.DATE_FORMAT, + defaultStringComponent,SettingsState.SYSTEM_PACKAGE_NAME); + } + defaultStringComponent = getContext().getResources().getString( + R.string.def_time_format); + if (!TextUtils.isEmpty(defaultStringComponent)) { + dateAndTimeSettings.insertSettingLocked(Settings.System.TIME_12_24, + defaultStringComponent,SettingsState.SYSTEM_PACKAGE_NAME); + } + defaultIntComponent = getContext().getResources().getInteger( + R.integer.def_enable_accessibility); + if (defaultIntComponent != 0) { + secureSettings.insertSettingLocked(Settings.Secure.ACCESSIBILITY_ENABLED, + String.valueOf(defaultIntComponent), SettingsState.SYSTEM_PACKAGE_NAME); + } + defaultStringComponent = getContext().getResources().getString( + R.string.def_enable_accessibility_services); + if (!TextUtils.isEmpty(defaultStringComponent)) { + secureSettings.insertSettingLocked(Settings.Secure. + ENABLED_ACCESSIBILITY_SERVICES,defaultStringComponent, + SettingsState.SYSTEM_PACKAGE_NAME); + } + // Allow openmarket OEMs to set default customized + defaultComponent + = getContext().getResources().getString(R.string.def_input_method); + if (!TextUtils.isEmpty(defaultComponent)) { + secureSettings.insertSettingLocked( + Settings.Secure.DEFAULT_INPUT_METHOD, + defaultComponent, + SettingsState.SYSTEM_PACKAGE_NAME); + } + + defaultComponent = getContext().getResources() + .getString(R.string.def_enable_input_methods); + if (!TextUtils.isEmpty(defaultComponent)) { + secureSettings.insertSettingLocked( + Settings.Secure.ENABLED_INPUT_METHODS, + defaultComponent, + SettingsState.SYSTEM_PACKAGE_NAME); + } currentVersion = 122; } -- GitLab From 5003353c3f7777363873d2deb3da169a22799daf Mon Sep 17 00:00:00 2001 From: Qiang Chen Date: Thu, 11 Aug 2016 11:15:53 +0800 Subject: [PATCH 172/185] Update "show_apn_setting_cdma_bool" to true Change-Id: I6aea7c44033f2fd88f44f14cce04980e967a56ca --- telephony/java/android/telephony/CarrierConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 28741008e409..737a501edc32 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -781,7 +781,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL, false); sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true); sDefaults.putBoolean(KEY_PREFER_2G_BOOL, true); - sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false); + sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, true); sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, true); sDefaults.putBoolean(KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL, true); sDefaults.putBoolean(KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL, true); -- GitLab From 2ed158745c19bc02909da0c9f67c54cb11cc4d4e Mon Sep 17 00:00:00 2001 From: Devi Sandeep Endluri V V Date: Wed, 10 Aug 2016 20:21:23 +0530 Subject: [PATCH 173/185] Fix: Added safe check to prevent app crash. PowerManagerService instance with respect to NSRM is not handled properly which results in application crash. Safe checks are added to prevent crashes. Change-Id: I4ab69e85b1f0a7a4d018b844f4e3dc7f6e1410e8 CRs-Fixed: 1051580 --- .../com/android/server/power/PowerManagerService.java | 4 ++-- .../com/android/server/power/QCNsrmPowerExtension.java | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 24d0ca3bc99c..b286d17160b2 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -474,7 +474,7 @@ public final class PowerManagerService extends SystemService // Set of app ids that are temporarily allowed to acquire wakelocks due to high-pri message int[] mDeviceIdleTempWhitelist = new int[0]; - private QCNsrmPowerExtension qcNsrmPowExt = new QCNsrmPowerExtension(this); + private QCNsrmPowerExtension qcNsrmPowExt; private final SparseIntArray mUidState = new SparseIntArray(); @@ -506,7 +506,7 @@ public final class PowerManagerService extends SystemService Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/); mHandlerThread.start(); mHandler = new PowerManagerHandler(mHandlerThread.getLooper()); - + qcNsrmPowExt = new QCNsrmPowerExtension(this); synchronized (mLock) { mWakeLockSuspendBlocker = createSuspendBlockerLocked("PowerManagerService.WakeLocks"); mDisplaySuspendBlocker = createSuspendBlockerLocked("PowerManagerService.Display"); diff --git a/services/core/java/com/android/server/power/QCNsrmPowerExtension.java b/services/core/java/com/android/server/power/QCNsrmPowerExtension.java index a891fac690ed..632d5c1182c7 100644 --- a/services/core/java/com/android/server/power/QCNsrmPowerExtension.java +++ b/services/core/java/com/android/server/power/QCNsrmPowerExtension.java @@ -45,7 +45,7 @@ public final class QCNsrmPowerExtension { private final ArrayList mPmsBlockedUids = new ArrayList(); public QCNsrmPowerExtension (PowerManagerService handle) { - PowerManagerService pmHandle = handle ; + pmHandle = handle ; } protected void checkPmsBlockedWakelocks ( @@ -139,8 +139,9 @@ public final class QCNsrmPowerExtension { if (wakeLock != null && ((wakeLock.mFlags & PowerManager.WAKE_LOCK_LEVEL_MASK ) == PowerManager.PARTIAL_WAKE_LOCK )) { - if (wakeLock.mDisabled != update) { + if (wakeLock.mDisabled != update && pmHandle != null) { wakeLock.mDisabled = update; + if (localLOGV) Slog.v(TAG, "updatePmsBlockWakelock pmHandle "+pmHandle); if (wakeLock.mDisabled) { // This wake lock is no longer being respected. pmHandle.notifyWakeLockReleasedLocked(wakeLock); @@ -149,6 +150,9 @@ public final class QCNsrmPowerExtension { } return true; } + else { + if (localLOGV) Slog.v(TAG, "updatePmsBlockWakelock pmHandle "+pmHandle ); + } } return false; } -- GitLab From cea452fd8c9d0a8466a23e1c333bf254df90cd8d Mon Sep 17 00:00:00 2001 From: yongga Date: Thu, 14 Jan 2016 17:46:52 +0800 Subject: [PATCH 174/185] SystemUI:will display incorrect SIM pin code It will display incorrect SIM pin code even though Input correct PIN code after unlock the first SIM PIN Condition of judgment for dispaly message has error. Add condition of judgment for dispaly message. Change-Id: I7efb88617aa43ca653ffe0518d01a9007828cc9a CRs-Fixed: 960325 --- .../src/com/android/keyguard/KeyguardSimPinView.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java index 83118d8db10c..96b36db97ff6 100755 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -52,6 +52,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { private CheckSimPin mCheckSimPinThread; private boolean mShowDefaultMessage = true; private int mRemainingAttempts = -1; + private int mResult = PhoneConstants.PIN_PASSWORD_INCORRECT; private AlertDialog mRemainingAttemptsDialog; private int mSubId; private int mSlotId; @@ -258,6 +259,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { @Override public void run() { mRemainingAttempts = attemptsRemaining; + mResult = result; if (mSimUnlockProgressDialog != null) { mSimUnlockProgressDialog.hide(); } @@ -266,6 +268,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { if (result == PhoneConstants.PIN_RESULT_SUCCESS) { KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); + mResult = PhoneConstants.PIN_PASSWORD_INCORRECT; mRemainingAttempts = -1; mShowDefaultMessage = true; if (mCallback != null) { @@ -320,8 +323,10 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { return; } if (mRemainingAttempts >= 0) { - mSecurityMessageDisplay.setMessage(getPinPasswordErrorMessage( - mRemainingAttempts, true), true); + if (mResult != PhoneConstants.PIN_RESULT_SUCCESS) + mSecurityMessageDisplay.setMessage( + getPinPasswordErrorMessage(mRemainingAttempts, true), + true); return; } @@ -349,6 +354,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { " attemptsRemaining=" + attemptsRemaining); if (attemptsRemaining >= 0) { mRemainingAttempts = attemptsRemaining; + mResult = result; mSecurityMessageDisplay.setMessage( getPinPasswordErrorMessage(attemptsRemaining, true), true); } -- GitLab From 2ad9e1d1a445f67c9124d573ecd140d51ec23017 Mon Sep 17 00:00:00 2001 From: Nalla Kartheek Date: Thu, 14 Jul 2016 20:05:07 +0530 Subject: [PATCH 175/185] Wifi: Interface provision to configure Auto Connection Auto connection dictates capability of hand-off between LTE and Wi-Fi network and also selection of a specific Wi-Fi network. This commit introduces an interface to the UI to set/reset this requirement based on which the framework shall act accordingly. Change-Id: I759837742a3bb9e2556790bb7af2e600e26db55b CRs-Fixed: 982864 --- core/java/android/provider/Settings.java | 10 ++++++++++ core/res/res/values/config.xml | 1 + core/res/res/values/symbols.xml | 1 + 3 files changed, 12 insertions(+) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index a9fc1bf340f8..159b636f2a36 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4202,6 +4202,7 @@ public final class Settings { MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER); MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE); MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY); + MOVED_TO_GLOBAL.add(Settings.Global.WIFI_AUTO_CONNECT_TYPE); } /** @hide */ @@ -7383,6 +7384,7 @@ public final class Settings { */ public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + /** * {@hide} */ @@ -7511,6 +7513,14 @@ public final class Settings { public static final String WIFI_SUSPEND_OPTIMIZATIONS_ENABLED = "wifi_suspend_optimizations_enabled"; + /** + * Setting to turn on auto connect . Enabled by default and + * needs to be set to 1 to disable it. + * @hide + */ + public static final String WIFI_AUTO_CONNECT_TYPE = + "wifi_auto_connect_type"; + /** * Setting to enable verbose logging in Wi-Fi; disabled by default, and setting to 1 * will enable it. In the future, additional values may be supported. diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 2c54cefae943..d02ce7c75858 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -416,6 +416,7 @@ scan and wake the host when a configured SSID is detected by the dongle. This chipset capability can provide power savings when wifi needs to be always kept on. --> false + true true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 9b5fe7907969..49089cec74df 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1691,6 +1691,7 @@ + -- GitLab From c35293c3be2b5a0eaf1986b6772040a19f2d828a Mon Sep 17 00:00:00 2001 From: Bhargav Upperla Date: Tue, 2 Aug 2016 16:49:39 -0700 Subject: [PATCH 176/185] Framework for LaunchBoost v2 and Frequency aggr during launch. Extending original launch boost to benefit apps that take more than 2 secs to finish launch. This is improved in two different ways. 1) Frequency aggregation during launching a large app. (Ex: Templerun2 launch latency improves by 5 secs) 2) LaunchBoost v2 to set various sched params or cpu sets during launch of a large app. Both perflocks are a more light weight boost without any cpu boosts and shows good benefit to large app launch latencies. (Ex: Games) Also responds to user touch as one form to indicate end of launch and stop boosts. Change-Id: Ie704c084104237e39b30659357667a5ebee7da36 --- core/res/res/values/config.xml | 11 +++ core/res/res/values/symbols.xml | 11 +++ .../server/am/ActivityManagerService.java | 68 +++++++++++++++++++ .../wm/TaskTapPointerEventListener.java | 12 ++++ 4 files changed, 102 insertions(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index d02ce7c75858..ada983742442 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2488,6 +2488,17 @@ 0 + + false + 0 + + + + false + 0 + + + false 0 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 49089cec74df..a2097debc8bc 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2638,6 +2638,17 @@ + + + + + + + + + + + diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 86b083ce7504..86806b9aa3f1 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -555,6 +555,22 @@ public final class ActivityManagerService extends ActivityManagerNative private boolean mIsBoosted = false; private long mBoostStartTime = 0; + /* Freq Aggr boost objects */ + public static BoostFramework sFreqAggr_init = null; + public static BoostFramework sFreqAggr = null; + public static boolean sIsFreqAggrBoostSet = false; + private boolean mIsFreqAggrEnabled = false; + private int lFreqAggr_TimeOut = 0; + private int lFreqAggr_Init_ParamVal[]; + private int lFreqAggr_ParamVal[]; + + /* Launch boost v2 objects */ + public static BoostFramework sPerfBoost_v2 = null; + public static boolean sIsLaunchBoostv2_set = false; + private boolean mIsLaunchBoostv2_enabled = false; + private int lBoost_v2_TimeOut = 0; + private int lBoost_v2_ParamVal[]; + /** All system services */ SystemServiceManager mSystemServiceManager; @@ -2713,6 +2729,28 @@ public final class ActivityManagerService extends ActivityManagerNative Watchdog.getInstance().addMonitor(this); Watchdog.getInstance().addThread(mHandler); + + mIsFreqAggrEnabled = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableFreqAggr); + + if(mIsFreqAggrEnabled) { + lFreqAggr_TimeOut = mContext.getResources().getInteger( + com.android.internal.R.integer.freqaggr_timeout_param); + lFreqAggr_Init_ParamVal = mContext.getResources().getIntArray( + com.android.internal.R.array.freqaggr_init_param_value); + lFreqAggr_ParamVal = mContext.getResources().getIntArray( + com.android.internal.R.array.freqaggr_param_value); + } + + mIsLaunchBoostv2_enabled = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableLaunchBoostv2); + + if(mIsLaunchBoostv2_enabled) { + lBoost_v2_TimeOut = mContext.getResources().getInteger( + com.android.internal.R.integer.lboostv2_timeout_param); + lBoost_v2_ParamVal = mContext.getResources().getIntArray( + com.android.internal.R.array.lboostv2_param_value); + } } public void setSystemServiceManager(SystemServiceManager mgr) { @@ -3845,6 +3883,36 @@ public final class ActivityManagerService extends ActivityManagerNative if (perf != null) { perf.perfIOPrefetchStart(startResult.pid,app.processName); } + + // Start Freq Aggregation boost + if (mIsFreqAggrEnabled == true && sFreqAggr_init == null + && sFreqAggr == null) { + sFreqAggr_init = new BoostFramework(); + sFreqAggr = new BoostFramework(); + } + if (sFreqAggr_init != null && sFreqAggr != null) { + sFreqAggr_init.perfLockAcquire(lFreqAggr_TimeOut, lFreqAggr_Init_ParamVal); + sIsFreqAggrBoostSet = true; + // Frequency Aggr perflock can only be passed one opcode-pair + if (lFreqAggr_ParamVal.length == 2) { + lFreqAggr_ParamVal[1] = startResult.pid; + sFreqAggr.perfLockAcquire(lFreqAggr_TimeOut, lFreqAggr_ParamVal); + } else { + //Opcodes improperly defined. Disable Perflock FA support. + sFreqAggr = null; + sFreqAggr_init.perfLockRelease(); + sIsFreqAggrBoostSet = false; + } + } + + // Start launch boost v2 + if (mIsLaunchBoostv2_enabled == true && sPerfBoost_v2 == null) { + sPerfBoost_v2 = new BoostFramework(); + } + if (sPerfBoost_v2 != null) { + sPerfBoost_v2.perfLockAcquire(lBoost_v2_TimeOut, lBoost_v2_ParamVal); + sIsLaunchBoostv2_set = true; + } } app.setPid(startResult.pid); diff --git a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java index fb556d23cdd3..532891e82256 100644 --- a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java +++ b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java @@ -25,6 +25,7 @@ import android.view.MotionEvent; import android.view.WindowManagerPolicy.PointerEventListener; import com.android.server.wm.WindowManagerService.H; +import com.android.server.am.ActivityManagerService; import static android.view.PointerIcon.TYPE_NOT_SPECIFIED; import static android.view.PointerIcon.TYPE_DEFAULT; @@ -63,6 +64,17 @@ public class TaskTapPointerEventListener implements PointerEventListener { public void onPointerEvent(MotionEvent motionEvent) { doGestureDetection(motionEvent); + if (ActivityManagerService.sIsFreqAggrBoostSet) { + ActivityManagerService.sFreqAggr_init.perfLockRelease(); + ActivityManagerService.sFreqAggr.perfLockRelease(); + ActivityManagerService.sIsFreqAggrBoostSet = false; + } + + if (ActivityManagerService.sIsLaunchBoostv2_set) { + ActivityManagerService.sPerfBoost_v2.perfLockRelease(); + ActivityManagerService.sIsLaunchBoostv2_set = false; + } + final int action = motionEvent.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { -- GitLab From 76cafe6cc81e88280b32048f0e9d265b32909cd6 Mon Sep 17 00:00:00 2001 From: Sanket Padawe Date: Wed, 11 Nov 2015 15:01:35 -0800 Subject: [PATCH 177/185] Don't allow contact sharing by default for device not recognized as carkit. + Don't allow contact sharing by default for devices not recognized as carkit at pair time. Bug: 23607427 Change-Id: If6babb10117ba7ee5008a4a29450a7cb981bea4a --- .../settingslib/bluetooth/CachedBluetoothDevice.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index bc7d18eb5ee1..0709942d9539 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -832,7 +832,12 @@ public final class CachedBluetoothDevice implements Comparable Date: Wed, 17 Aug 2016 14:41:33 +0800 Subject: [PATCH 178/185] DocumentsUI: Fix monkey crash RootCause: In RecyclerView source code, The start method which is called by smoothScrollToPosition method check whether mTargetPosition value equal -1 or not, if equal throw IllegalArgumentException, in stop method mTargetPosition is assigned to -1. Under normal circumestances, smoothScrollToPosition methed should call setTargetPosition method, mTargetPosition is assigned to normal value, but when the setTargetPosition method is called after stop method, mTargetPosition is assigned to -1. In monkey test, start the smoothScroll and stop the smoothScroll faster could cause this issue. The general operation of people will not be the case. Solution: Use try/catch IllegalArgumentException to avoid this case. CRs-Fixed: 1055242 Change-Id: I9a2300240670bebe5d4b47570e62f31674fe26b8 --- .../src/com/android/documentsui/dirlist/FocusManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java index f274df37f916..5a80194bea7b 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java @@ -307,7 +307,11 @@ class FocusManager implements View.OnFocusChangeListener { } } }); - mView.smoothScrollToPosition(pos); + try { + mView.smoothScrollToPosition(pos); + } catch(IllegalArgumentException e) { + Log.w(TAG, "Invalid target position :" + pos, e); + } } } -- GitLab From 7f7eba3b395c6d381dbed11de6a56fc451a069a9 Mon Sep 17 00:00:00 2001 From: Wang Yimin Date: Mon, 15 Aug 2016 19:07:32 +0800 Subject: [PATCH 179/185] Regional: Customize Wifi hotspot,direct name Change-Id: Ieede9eb92294fd3b2f13c7b7201205d41e479340 CRs-Fixed: 1037633 --- core/res/res/values/customize.xml | 10 ++++++++++ core/res/res/values/symbols.xml | 3 +++ 2 files changed, 13 insertions(+) mode change 100755 => 100644 core/res/res/values/symbols.xml diff --git a/core/res/res/values/customize.xml b/core/res/res/values/customize.xml index 02184a8c95e6..b7c2ce08f2b4 100644 --- a/core/res/res/values/customize.xml +++ b/core/res/res/values/customize.xml @@ -33,4 +33,14 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + 4 + + + + + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml old mode 100755 new mode 100644 index a2097debc8bc..d8d0660cb9ec --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2726,4 +2726,7 @@ + + + -- GitLab From a9ecbf1dba3f907437527c1439503984812ea67d Mon Sep 17 00:00:00 2001 From: Huaibin Yang Date: Tue, 2 Feb 2016 17:06:09 -0800 Subject: [PATCH 180/185] Add two fixes for MuiltiSim support Use getDefaultDataSubId to get default data network type. Currently using getDefaultSubscription() may return voice network subId. Provide database flags per subscription specific for both mobile data and roaming options. CRs-Fixed: 963773 Change-Id: I1d40bc5c84b4428d7066b28003e5b2c5d852b6f7 --- .../providers/settings/DatabaseHelper.java | 16 +++++++++++++++- .../java/android/telephony/TelephonyManager.java | 13 ++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 2ac27df9326e..132d64d3d664 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2617,6 +2617,13 @@ class DatabaseHelper extends SQLiteOpenHelper { SystemProperties.get("ro.com.android.dataroaming", "false")) ? 1 : 0); + int phoneCount = TelephonyManager.getDefault().getPhoneCount(); + for (int phoneId = 0; phoneId < phoneCount; phoneId++) { + loadSetting(stmt, Settings.Global.DATA_ROAMING + phoneId, + "true".equalsIgnoreCase(SystemProperties.get( + "ro.com.android.dataroaming", "true")) ? 1 : 0); + } + loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED, R.bool.def_device_provisioned); @@ -2640,6 +2647,14 @@ class DatabaseHelper extends SQLiteOpenHelper { SystemProperties.get("ro.com.android.mobiledata", "true")) ? 1 : 0); + // SUB specific flags for Multisim devices + for (int phoneId = 0; phoneId < phoneCount; phoneId++) { + // Mobile Data default, based on build + loadSetting(stmt, Settings.Global.MOBILE_DATA + phoneId, + "true".equalsIgnoreCase(SystemProperties.get( + "ro.com.android.mobiledata", "true")) ? 1 : 0); + } + loadBooleanSetting(stmt, Settings.Global.NETSTATS_ENABLED, R.bool.def_netstats_enabled); @@ -2690,7 +2705,6 @@ class DatabaseHelper extends SQLiteOpenHelper { // Set the preferred network mode to target desired value or Default // value defined in system property - int phoneCount = TelephonyManager.getDefault().getPhoneCount(); String val = ""; String mode = ""; for (int phoneId = 0; phoneId < phoneCount; phoneId++) { diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 975f6f29065b..d56f62acc8ed 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -1551,7 +1551,7 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} */ public int getDataNetworkType() { - return getDataNetworkType(getSubId()); + return getDataNetworkType(getDefaultDataSubscriptionId()); } /** @@ -3483,6 +3483,13 @@ public class TelephonyManager { return SubscriptionManager.getDefaultSubscriptionId(); } + /** + * Returns Default Data subscription. + */ + private static int getDefaultDataSubscriptionId() { + return SubscriptionManager.getDefaultDataSubscriptionId(); + } + /** * Returns Default phone. */ @@ -4563,7 +4570,7 @@ public class TelephonyManager { /** @hide */ @SystemApi public void setDataEnabled(boolean enable) { - setDataEnabled(SubscriptionManager.getDefaultDataSubscriptionId(), enable); + setDataEnabled(getDefaultDataSubscriptionId(), enable); } /** @hide */ @@ -4582,7 +4589,7 @@ public class TelephonyManager { /** @hide */ @SystemApi public boolean getDataEnabled() { - return getDataEnabled(SubscriptionManager.getDefaultDataSubscriptionId()); + return getDataEnabled(getDefaultDataSubscriptionId()); } /** @hide */ -- GitLab From 9bb392c0fcdb41870cd7b1c004250e92bbf0672f Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Thu, 30 Jun 2016 10:02:55 +0800 Subject: [PATCH 181/185] Support to show long or short name in SystemUI. Supports to switch show long nameor short name. Add two configs for switching which format need show. config_show_long_operator_name -- decide to whether show long name under normal form. config_show_long_operator_name_when_roaming -- decide to whether show long name when roaming. Change-Id: I496274a6c497bf16cea493c401b3d76c62cbcd92 CRs-fixed: 1037642 --- packages/SystemUI/res/values/config.xml | 3 +++ .../statusbar/policy/MobileSignalController.java | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index de357586a6fe..0446c7bca60d 100755 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -301,5 +301,8 @@ false false + + false + false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index e9d5e70c3f8a..6173fab85536 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -538,6 +538,12 @@ public class MobileSignalController extends SignalController< mCurrentState.networkName = mServiceState.getOperatorAlphaShort(); } + if (!showLongOperatorName()) { + mCurrentState.networkNameData = TextUtils.isEmpty(mServiceState. + getOperatorAlphaShort()) ? mCurrentState.networkNameData : mServiceState. + getOperatorAlphaShort() + " " + getNetworkClassString(mServiceState); + } + if (mConfig.readIconsFromXml) { mCurrentState.voiceLevel = getVoiceSignalLevel(); } @@ -545,11 +551,19 @@ public class MobileSignalController extends SignalController< notifyListenersIfNecessary(); } - private boolean isDataDisabled() { return !mPhone.getDataEnabled(mSubscriptionInfo.getSubscriptionId()); } + private boolean showLongOperatorName() { + if (mContext.getResources().getBoolean(R.bool.config_show_long_operator_name) || (mContext. + getResources().getBoolean(R.bool.config_show_long_operator_name_when_roaming) && + isRoaming())) { + return true; + } + return false; + } + private void generateIconGroup() { final int level = mCurrentState.level; final int voiceLevel = mCurrentState.voiceLevel; -- GitLab From c0bb245b5a092dd8046364333916f711b75a4d25 Mon Sep 17 00:00:00 2001 From: Devi Sandeep Endluri V V Date: Fri, 5 Aug 2016 13:07:22 +0530 Subject: [PATCH 182/185] Tethering: call getTetherStats before RecordingSnaphot getTetherStats should be called before recording xtSnapshot and devSnapshot, to add tethered data stats to total Network Stats Change-Id: I81b77e6dbffb78356bf68496bff412ef1a0284dd CRs-Fixed: 1047506 --- .../core/java/com/android/server/net/NetworkStatsService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 66f51c15190c..6f4ce158cb9a 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -1015,6 +1015,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { final NetworkStats xtSnapshot = mNetworkManager.getNetworkStatsSummaryXt(); final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev(); + NetPluginDelegate.getTetherStats(uidSnapshot, xtSnapshot, devSnapshot); // For xt/dev, we pass a null VPN array because usage is aggregated by UID, so VPN traffic // can't be reattributed to responsible apps. @@ -1022,7 +1023,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub { devSnapshot, mActiveIfaces, null /* vpnArray */, currentTime); mXtRecorder.recordSnapshotLocked( xtSnapshot, mActiveIfaces, null /* vpnArray */, currentTime); - NetPluginDelegate.getTetherStats(uidSnapshot, xtSnapshot, devSnapshot); // For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps. VpnInfo[] vpnArray = mConnManager.getAllVpnInfo(); -- GitLab From 9c9e996627f608bd178c135f6f3f69724c37553f Mon Sep 17 00:00:00 2001 From: mqi Date: Fri, 15 Jan 2016 14:10:21 +0800 Subject: [PATCH 183/185] SystemUI: Fix No AM/PM showing in 12-hour-format Change clock style to AM_PM_STYLE_NORMAL. Change lock screen style to HH:MM AM/PM. Change-Id: Ic4aaa77927cc5736fe566381248e4945044dc061 CRs-Fixed: 956221 --- packages/Keyguard/res/values/config.xml | 3 +++ .../src/com/android/keyguard/KeyguardStatusView.java | 10 ++++++---- .../com/android/systemui/statusbar/policy/Clock.java | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/Keyguard/res/values/config.xml b/packages/Keyguard/res/values/config.xml index 232b7b214a55..44336d334b87 100644 --- a/packages/Keyguard/res/values/config.xml +++ b/packages/Keyguard/res/values/config.xml @@ -31,4 +31,7 @@ 0 + + + true diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java index 9d1df26514ee..d427c4cb6153 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java @@ -240,10 +240,12 @@ public class KeyguardStatusView extends GridLayout { dateView = DateFormat.getBestDateTimePattern(locale, dateViewSkel); clockView12 = DateFormat.getBestDateTimePattern(locale, clockView12Skel); - // CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton - // format. The following code removes the AM/PM indicator if we didn't want it. - if (!clockView12Skel.contains("a")) { - clockView12 = clockView12.replaceAll("a", "").trim(); + if(!context.getResources().getBoolean(R.bool.config_showAmpm)){ + // CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton + // format. The following code removes the AM/PM indicator if we didn't want it. + if (!clockView12Skel.contains("a")) { + clockView12 = clockView12.replaceAll("a", "").trim(); + } } clockView24 = DateFormat.getBestDateTimePattern(locale, clockView24Skel); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 66152fcd965e..3e57d48025b5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -87,7 +87,7 @@ public class Clock extends TextView implements DemoMode, Tunable { R.styleable.Clock, 0, 0); try { - mAmPmStyle = a.getInt(R.styleable.Clock_amPmStyle, AM_PM_STYLE_GONE); + mAmPmStyle = a.getInt(R.styleable.Clock_amPmStyle, AM_PM_STYLE_NORMAL); } finally { a.recycle(); } -- GitLab From f2370e0031ab7b9c43cdd23f7db08cd2d5e79f1b Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Sirivolu Date: Fri, 12 Aug 2016 20:29:40 +0530 Subject: [PATCH 184/185] Add EMBMS icon and roaming icon changes Add new roaming data icons Add support for new roaming data icons display for LTE, LTE+ for operator. Change-Id: I080506527ec906af07b565ffc5e4b503283cd77e CRs-Fixed: 957287 Add icon for EMBMS registration LTE icon is appended to signal bar in status bar when EMBMS service is active CRs-Fixed: 957448 Change-Id: I010dee19228b50d72f0c43b36dfafe6e7c9865a9 Fix eMBMS icon display on eMBMS service stop Fix delay in remove eMBMS icon on eMBMS service stop by notifylistener Change-Id: Ib7986f0428c6e817be649929b340cf66e7a1e8f8 During Roming "R" icon is removed from siganl bar when data is disabled. During roaming display "R" icon irrespective of whether the data is enabled or disabled. And display LTE/LTE+ data icons on signal bar only if mobile data is enabled. CRs-Fixed:981620 Change-Id: I4b1c0089215d575c7ad24ce68cc0dc003f895dc5 Fix data icon issue for roaming In case of roaming network, if data roaming setting is disabled data is disconnected, but operator data icon is not cleared. Add a check for data roaming setting to clear operator data icon. Change-Id: Ib87884f0d78e91dda219c887b7657cff8806890d CRs-Fixed: 988136 Change-Id: Ie3de506d147ed3ecfe89a08cc2061732d406a10b --- .../lte_embms_services_all_brackets.xml | 48 +++++++++++++ ...ully_connected_lte_networktype_in_roam.xml | 47 ++++++++++++ ...connected_lte_plus_networktype_in_roam.xml | 49 +++++++++++++ .../res/layout/mobile_signal_group.xml | 16 +++++ packages/SystemUI/res/values/config.xml | 3 + .../systemui/statusbar/SignalClusterView.java | 37 ++++++++-- .../statusbar/policy/CallbackHandler.java | 32 ++++++++- .../policy/MobileSignalController.java | 71 ++++++++++++++++--- .../statusbar/policy/NetworkController.java | 8 +++ .../policy/NetworkControllerImpl.java | 18 ++++- 10 files changed, 314 insertions(+), 15 deletions(-) create mode 100644 packages/SystemUI/res/drawable/lte_embms_services_all_brackets.xml create mode 100644 packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_networktype_in_roam.xml create mode 100644 packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_plus_networktype_in_roam.xml diff --git a/packages/SystemUI/res/drawable/lte_embms_services_all_brackets.xml b/packages/SystemUI/res/drawable/lte_embms_services_all_brackets.xml new file mode 100644 index 000000000000..6fed25b4f16f --- /dev/null +++ b/packages/SystemUI/res/drawable/lte_embms_services_all_brackets.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_networktype_in_roam.xml b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_networktype_in_roam.xml new file mode 100644 index 000000000000..390fa13d3791 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_networktype_in_roam.xml @@ -0,0 +1,47 @@ + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_plus_networktype_in_roam.xml b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_plus_networktype_in_roam.xml new file mode 100644 index 000000000000..93ae7bb132c6 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_lte_plus_networktype_in_roam.xml @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/mobile_signal_group.xml b/packages/SystemUI/res/layout/mobile_signal_group.xml index 436f4a4540a5..759f2bea73d6 100644 --- a/packages/SystemUI/res/layout/mobile_signal_group.xml +++ b/packages/SystemUI/res/layout/mobile_signal_group.xml @@ -28,6 +28,22 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" > + + 0 diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 93ad4924ff69..7d1549d7f878 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -51,7 +51,7 @@ import java.util.List; // Intimately tied to the design of res/layout/signal_cluster_view.xml public class SignalClusterView extends LinearLayout - implements NetworkControllerImpl.SignalCallback, + implements NetworkControllerImpl.SignalCallbackExtended, SecurityController.SecurityControllerCallback, Tunable { static final String TAG = "SignalClusterView"; @@ -298,6 +298,23 @@ public class SignalClusterView apply(); } + @Override + public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, + int qsType, boolean activityIn, boolean activityOut, int dataActivityId, + int mobileActivityId, int stackedDataId, int stackedVoiceId, + String typeContentDescription, String description, boolean isWide, int subId, + int dataNetworkTypeInRoamingId, int embmsIconId) { + PhoneState state = getState(subId); + if (state == null) { + return; + } + state.mDataNetworkTypeInRoamingId = dataNetworkTypeInRoamingId; + state.mMobileEmbmsId = embmsIconId; + this.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType, activityIn, + activityOut, dataActivityId, mobileActivityId, stackedDataId, + stackedVoiceId, typeContentDescription, description, isWide, subId); + } + @Override public void setEthernetIndicators(IconState state) { mEthernetVisible = state.visible && !mBlockEthernet; @@ -643,9 +660,12 @@ public class SignalClusterView private String mMobileDescription, mMobileTypeDescription; private ViewGroup mMobileGroup; - private ImageView mMobile, mMobileDark, mMobileType; + private ImageView mMobile, mMobileDark, mMobileType, mRoaming, mDataNetworkTypeInRoaming, + mMobileEmbms; + + private int mDataActivityId = 0, mMobileActivityId = 0, mDataNetworkTypeInRoamingId =0, + mMobileEmbmsId = 0; - private int mDataActivityId = 0, mMobileActivityId = 0; private int mStackedDataId = 0, mStackedVoiceId = 0; private ImageView mDataActivity, mMobileActivity, mStackedData, mStackedVoice; private ViewGroup mMobileSingleGroup, mMobileStackedGroup; @@ -664,6 +684,9 @@ public class SignalClusterView mMobileType = (ImageView) root.findViewById(R.id.mobile_type); mMobileActivity = (ImageView) root.findViewById(R.id.mobile_inout); + mDataNetworkTypeInRoaming = (ImageView) root + .findViewById(R.id.dataNetwork_type_in_roaming); + mMobileEmbms = (ImageView) root.findViewById(R.id.embms); mDataActivity = (ImageView) root.findViewById(R.id.data_inout); mStackedData = (ImageView) root.findViewById(R.id.mobile_signal_data); mStackedVoice = (ImageView) root.findViewById(R.id.mobile_signal_voice); @@ -703,6 +726,10 @@ public class SignalClusterView } } + mMobileEmbms.setImageResource(mMobileEmbmsId); + + mDataNetworkTypeInRoaming.setImageResource(mDataNetworkTypeInRoamingId); + if (mStackedDataId != 0 && mStackedVoiceId != 0) { mStackedData.setImageResource(mStackedDataId); mStackedVoice.setImageResource(mStackedVoiceId); @@ -738,7 +765,9 @@ public class SignalClusterView mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE); mDataActivity.setVisibility(mDataActivityId != 0 ? View.VISIBLE : View.GONE); mMobileActivity.setVisibility(mMobileActivityId != 0 ? View.VISIBLE : View.GONE); - + mDataNetworkTypeInRoaming.setVisibility(mDataNetworkTypeInRoamingId != 0 ? View.VISIBLE + : View.GONE); + mMobileEmbms.setVisibility(mMobileEmbmsId != 0 ? View.VISIBLE : View.GONE); return mMobileVisible; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index 16b3ba133b61..b7597ffb10ea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -23,6 +23,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.SignalCallbackExtended; import java.util.ArrayList; import java.util.List; @@ -32,7 +33,7 @@ import java.util.List; * Implements network listeners and forwards the calls along onto other listeners but on * the current or specified Looper. */ -public class CallbackHandler extends Handler implements EmergencyListener, SignalCallback { +public class CallbackHandler extends Handler implements EmergencyListener, SignalCallbackExtended { private static final int MSG_EMERGENCE_CHANGED = 0; private static final int MSG_SUBS_CHANGED = 1; private static final int MSG_NO_SIM_VISIBLE_CHANGED = 2; @@ -141,6 +142,35 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa }); } + @Override + public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon, + final int statusType, final int qsType, final boolean activityIn, + final boolean activityOut, final int dataActivityId, final int mobileActivityId, + final int stackedDataIcon, final int stackedVoiceIcon, + final String typeContentDescription, final String description, final boolean isWide, + final int subId, final int dataNetworkTypeInRoamingId, final int embmsIconId) { + post(new Runnable() { + @Override + public void run() { + for (SignalCallback signalCluster : mSignalCallbacks) { + if (signalCluster instanceof SignalCallbackExtended) { + ((SignalCallbackExtended)signalCluster).setMobileDataIndicators( + statusIcon, qsIcon, statusType, qsType, activityIn, + activityOut, dataActivityId, mobileActivityId, + stackedDataIcon, stackedVoiceIcon, typeContentDescription, + description, isWide, subId, dataNetworkTypeInRoamingId, + embmsIconId); + } else { + signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, + qsType, activityIn, activityOut, dataActivityId, + mobileActivityId, stackedDataIcon, stackedVoiceIcon, + typeContentDescription, description, isWide, subId); + } + } + } + }); + } + @Override public void setSubs(List subs) { obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 6173fab85536..f992e646d7fd 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.content.res.Resources; import android.net.NetworkCapabilities; import android.os.Looper; +import android.os.SystemProperties; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; @@ -36,6 +37,7 @@ import com.android.internal.telephony.cdma.EriInfo; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.SignalCallbackExtended; import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config; import com.android.systemui.statusbar.policy.NetworkControllerImpl.SubscriptionDefaults; @@ -78,6 +80,7 @@ public class MobileSignalController extends SignalController< private final int STATUS_BAR_STYLE_CDMA_1X_COMBINED = 1; private final int STATUS_BAR_STYLE_DEFAULT_DATA = 2; private final int STATUS_BAR_STYLE_DATA_VOICE = 3; + private final int STATUS_BAR_STYLE_EXTENDED = 4; private int mStyle = STATUS_BAR_STYLE_ANDROID_DEFAULT; // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't @@ -108,6 +111,10 @@ public class MobileSignalController extends SignalController< } mStyle = context.getResources().getInteger(R.integer.status_bar_style); + //TODO - Remove this when status_bar_style is set to 4 for carrier one in carrier config + if (isCarrierOneSupported()) { + mStyle = STATUS_BAR_STYLE_EXTENDED; + } String networkName = info.getCarrierName() != null ? info.getCarrierName().toString() : mNetworkNameDefault; @@ -119,6 +126,12 @@ public class MobileSignalController extends SignalController< updateDataSim(); } + //TODO - Remove this when carrier pack is enabled for carrier one + public static boolean isCarrierOneSupported() { + String property = SystemProperties.get("persist.radio.atel.carrier"); + return "405854".equals(property); + } + public void setConfiguration(Config config) { mConfig = config; if (!config.readIconsFromXml) { @@ -244,7 +257,7 @@ public class MobileSignalController extends SignalController< // Show icon in QS when we are connected or need to show roaming or data is disabled. boolean showDataIcon = mCurrentState.dataConnected || mCurrentState.iconGroup == TelephonyIcons.ROAMING - || dataDisabled; + || isRoaming() || dataDisabled; IconState statusIcon = new IconState(mCurrentState.enabled && !mCurrentState.airplaneMode, getCurrentIconId(), contentDescription); @@ -267,15 +280,55 @@ public class MobileSignalController extends SignalController< showDataIcon &= mCurrentState.isDefault || mCurrentState.iconGroup == TelephonyIcons.ROAMING || dataDisabled; - showDataIcon &= mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT; + showDataIcon &= (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT + || mStyle == STATUS_BAR_STYLE_EXTENDED); int typeIcon = showDataIcon ? icons.mDataType : 0; int dataActivityId = showMobileActivity() ? 0 : icons.mActivityId; int mobileActivityId = showMobileActivity() ? icons.mActivityId : 0; - callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon, - activityIn, activityOut, dataActivityId, mobileActivityId, - icons.mStackedDataIcon, icons.mStackedVoiceIcon, - dataContentDescription, description, icons.mIsWide, - mSubscriptionInfo.getSubscriptionId()); + if( callback instanceof SignalCallbackExtended ) { + ((SignalCallbackExtended)callback).setMobileDataIndicators(statusIcon, qsIcon, typeIcon, + qsTypeIcon, activityIn, activityOut, dataActivityId, mobileActivityId, + icons.mStackedDataIcon, icons.mStackedVoiceIcon, + dataContentDescription, description, icons.mIsWide, + mSubscriptionInfo.getSubscriptionId(), getdataNetworkTypeInRoamingId(), + getEmbmsIconId()); + } else { + callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon, + activityIn, activityOut, dataActivityId, mobileActivityId, + icons.mStackedDataIcon, icons.mStackedVoiceIcon, + dataContentDescription, description, icons.mIsWide, + mSubscriptionInfo.getSubscriptionId()); + } + } + + private int getdataNetworkTypeInRoamingId() { + if ((mStyle == STATUS_BAR_STYLE_EXTENDED) && isRoaming() + && mCurrentState.dataConnected) { + int dataType = getDataNetworkType(); + if (dataType == TelephonyManager.NETWORK_TYPE_LTE) { + return R.drawable.stat_sys_data_fully_connected_lte_networktype_in_roam; + } else if (dataType == TelephonyManager.NETWORK_TYPE_LTE_CA) { + return R.drawable.stat_sys_data_fully_connected_lte_plus_networktype_in_roam; + } else { + return 0; + } + } else { + return 0; + } + } + + private int getEmbmsIconId() { + if (mStyle == STATUS_BAR_STYLE_EXTENDED + && isEmbmsActiveOnDataSim()) { + return R.drawable.lte_embms_services_all_brackets; + } else { + return 0; + } + } + + private boolean isEmbmsActiveOnDataSim() { + return mNetworkController.isEmbmsActive() + && mCurrentState.dataSim; } @Override @@ -572,7 +625,6 @@ public class MobileSignalController extends SignalController< final boolean roaming = isRoaming(); final int voiceType = getVoiceNetworkType(); final int dataType = getDataNetworkType(); - int[][] sbIcons = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH; int[][] qsIcons = TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH; int[] contentDesc = AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH; @@ -683,7 +735,8 @@ public class MobileSignalController extends SignalController< private boolean showMobileActivity() { return (mStyle == STATUS_BAR_STYLE_DEFAULT_DATA) - || (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT); + || (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT) + || (mStyle == STATUS_BAR_STYLE_EXTENDED); } private int getVoiceNetworkType() { 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 26989138594a..f82e922fc3f8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -59,6 +59,14 @@ public interface NetworkController { void setMobileDataEnabled(boolean enabled); } + public interface SignalCallbackExtended extends SignalCallback { + void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, + int qsType, boolean activityIn, boolean activityOut, int dataActivityId, + int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon, + String typeContentDescription, String description, boolean isWide, + int subId, int dataNetworkTypeInRoamingId, int embmsIconId); + } + public interface EmergencyListener { void setEmergencyCallsOnly(boolean emergencyOnly); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index fe5452f8d7c8..91274e69f642 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -71,6 +71,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private static final int EMERGENCY_FIRST_CONTROLLER = 100; private static final int EMERGENCY_VOICE_CONTROLLER = 200; private static final int EMERGENCY_NO_SUB = 300; + private static final String ACTION_EMBMS_STATUS = "com.qualcomm.intent.EMBMS_STATUS"; private final Context mContext; private final TelephonyManager mPhone; @@ -131,6 +132,7 @@ public class NetworkControllerImpl extends BroadcastReceiver @VisibleForTesting ServiceState mLastServiceState; private boolean mUserSetup; + private boolean mIsEmbmsActive; /** * Construct this controller object and register for updates. @@ -220,6 +222,10 @@ public class NetworkControllerImpl extends BroadcastReceiver filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); filter.addAction(Intent.ACTION_LOCALE_CHANGED); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + //TODO:Replace this check when regional specific config is added + if (MobileSignalController.isCarrierOneSupported()) { + filter.addAction(ACTION_EMBMS_STATUS); + } mContext.registerReceiver(this, filter, null, mReceiverHandler); mListening = true; @@ -401,7 +407,13 @@ public class NetworkControllerImpl extends BroadcastReceiver // emergency state. recalculateEmergency(); } - } else { + } else if (action.equals(ACTION_EMBMS_STATUS)) { + mIsEmbmsActive = intent.getBooleanExtra("ACTIVE", false); + Log.d(TAG,"EMBMS_STATUS On Receive:isEmbmsactive=" + mIsEmbmsActive); + for (MobileSignalController controller : mMobileSignalControllers.values()) { + controller.notifyListeners(); + } + } else { int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID); if (SubscriptionManager.isValidSubscriptionId(subId)) { @@ -436,6 +448,10 @@ public class NetworkControllerImpl extends BroadcastReceiver refreshLocale(); } + public boolean isEmbmsActive() { + return mIsEmbmsActive; + } + private void updateMobileControllers() { if (!mListening) { return; -- GitLab From 4404f4a28f851a444c8ce0b28b33d9b17237ece6 Mon Sep 17 00:00:00 2001 From: Benergy Meenan Ravuri Date: Tue, 12 Jan 2016 20:16:38 +0530 Subject: [PATCH 185/185] IMS: Show VoWIFI icon based on IMS capabilities. Extend the below APIs which will get the feature values per subscription. isWifCallingEnabled and isVTWifiCallingEnabled. These APIs are used to show VoWIFI icon based on IMS capabilities. Change-Id: Ie997670682f926f9ba0f6f2589f0df502c88bece CRs-Fixed: 998552 --- packages/SystemUI/res/drawable/volte.xml | 36 +++++++++++++ packages/SystemUI/res/drawable/vowifi.xml | 37 +++++++++++++ .../res/layout/mobile_signal_group.xml | 9 ++++ .../res/layout/signal_cluster_view.xml | 8 +++ .../systemui/statusbar/SignalClusterView.java | 40 ++++++++++++-- .../statusbar/policy/CallbackHandler.java | 5 +- .../policy/MobileSignalController.java | 54 ++++++++++++++++++- .../statusbar/policy/NetworkController.java | 3 +- .../java/android/telephony/ServiceState.java | 22 +++++++- .../android/telephony/TelephonyManager.java | 33 +++++++++++- .../internal/telephony/ITelephony.aidl | 12 +++++ 11 files changed, 247 insertions(+), 12 deletions(-) create mode 100644 packages/SystemUI/res/drawable/volte.xml create mode 100644 packages/SystemUI/res/drawable/vowifi.xml mode change 100755 => 100644 packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java diff --git a/packages/SystemUI/res/drawable/volte.xml b/packages/SystemUI/res/drawable/volte.xml new file mode 100644 index 000000000000..214b59b1068d --- /dev/null +++ b/packages/SystemUI/res/drawable/volte.xml @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/packages/SystemUI/res/drawable/vowifi.xml b/packages/SystemUI/res/drawable/vowifi.xml new file mode 100644 index 000000000000..10dc5ce28bea --- /dev/null +++ b/packages/SystemUI/res/drawable/vowifi.xml @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/packages/SystemUI/res/layout/mobile_signal_group.xml b/packages/SystemUI/res/layout/mobile_signal_group.xml index 759f2bea73d6..d5f7a2178b15 100644 --- a/packages/SystemUI/res/layout/mobile_signal_group.xml +++ b/packages/SystemUI/res/layout/mobile_signal_group.xml @@ -44,6 +44,15 @@ android:layout_marginEnd="5dp" android:visibility="gone" /> + + subInfos = SubscriptionManager.from(mContext) + .getActiveSubscriptionInfoList(); + if (subInfos != null) { + for (SubscriptionInfo subInfo: subInfos) { + int subId = subInfo.getSubscriptionId(); + if (mPhone != null + && (mPhone.isVoWifiCallingAvailableForSubscriber(subId) + || mPhone.isVideoTelephonyWifiCallingAvailableForSubscriber(subId))) { + return true; + } + } + } else { + Log.e(mTag, "Invalid SubscriptionInfo"); + } + return false; + } + + private int getImsIconId() { + if (mStyle != STATUS_BAR_STYLE_EXTENDED || mServiceState == null || + (mServiceState.getVoiceRegState() != ServiceState.STATE_IN_SERVICE)) { + return 0; + } + if (mCurrentState.imsRadioTechnology == ServiceState.RIL_RADIO_TECHNOLOGY_LTE) { + return R.drawable.volte; + } + return 0; + } + @Override protected MobileState cleanState() { return new MobileState(); @@ -601,6 +635,10 @@ public class MobileSignalController extends SignalController< mCurrentState.voiceLevel = getVoiceSignalLevel(); } + if (mStyle == STATUS_BAR_STYLE_EXTENDED) { + mCurrentState.imsRadioTechnology = getImsRadioTechnology(); + } + notifyListenersIfNecessary(); } @@ -753,6 +791,14 @@ public class MobileSignalController extends SignalController< return mServiceState.getDataNetworkType(); } + private int getImsRadioTechnology() { + if (mServiceState == null || (mServiceState.getVoiceRegState() != + ServiceState.STATE_IN_SERVICE)) { + return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; + } + return mServiceState.getRilImsRadioTechnology(); + } + private int getVoiceSignalLevel() { if (mSignalStrength == null) { return SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; @@ -949,6 +995,7 @@ public class MobileSignalController extends SignalController< boolean userSetup; int dataActivity; int voiceLevel; + int imsRadioTechnology; @Override public void copyFrom(State s) { @@ -965,6 +1012,7 @@ public class MobileSignalController extends SignalController< userSetup = state.userSetup; dataActivity = state.dataActivity; voiceLevel = state.voiceLevel; + imsRadioTechnology = state.imsRadioTechnology; } @Override @@ -983,6 +1031,7 @@ public class MobileSignalController extends SignalController< builder.append("userSetup=").append(userSetup); builder.append("voiceLevel=").append(voiceLevel).append(','); builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode); + builder.append("imsRadioTechnology=").append(imsRadioTechnology); } @Override @@ -997,7 +1046,8 @@ public class MobileSignalController extends SignalController< && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode && ((MobileState) o).userSetup == userSetup && ((MobileState) o).voiceLevel == voiceLevel - && ((MobileState) o).isDefault == isDefault; + && ((MobileState) o).isDefault == isDefault + && ((MobileState) o).imsRadioTechnology == imsRadioTechnology; } } } 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 f82e922fc3f8..1294aa075340 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -64,7 +64,8 @@ public interface NetworkController { int qsType, boolean activityIn, boolean activityOut, int dataActivityId, int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon, String typeContentDescription, String description, boolean isWide, - int subId, int dataNetworkTypeInRoamingId, int embmsIconId); + int subId, int dataNetworkTypeInRoamingId, int embmsIconId, + int imsIconId, boolean isImsOverWifi); } public interface EmergencyListener { diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 919c494922cf..4741981ebabe 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -229,6 +229,7 @@ public class ServiceState implements Parcelable { private int mRilVoiceRadioTechnology; private int mRilDataRadioTechnology; + private int mRilImsRadioTechnology = RIL_RADIO_TECHNOLOGY_UNKNOWN; private boolean mCssIndicator; private int mNetworkId; @@ -318,6 +319,7 @@ public class ServiceState implements Parcelable { mCdmaEriIconMode = s.mCdmaEriIconMode; mIsEmergencyOnly = s.mIsEmergencyOnly; mIsDataRoamingFromRegistration = s.mIsDataRoamingFromRegistration; + mRilImsRadioTechnology = s.mRilImsRadioTechnology; } /** @@ -346,6 +348,7 @@ public class ServiceState implements Parcelable { mCdmaEriIconMode = in.readInt(); mIsEmergencyOnly = in.readInt() != 0; mIsDataRoamingFromRegistration = in.readInt() != 0; + mRilImsRadioTechnology = in.readInt(); } public void writeToParcel(Parcel out, int flags) { @@ -371,6 +374,7 @@ public class ServiceState implements Parcelable { out.writeInt(mCdmaEriIconMode); out.writeInt(mIsEmergencyOnly ? 1 : 0); out.writeInt(mIsDataRoamingFromRegistration ? 1 : 0); + out.writeInt(mRilImsRadioTechnology); } public int describeContents() { @@ -680,7 +684,8 @@ public class ServiceState implements Parcelable { && equalsHandlesNulls(mCdmaDefaultRoamingIndicator, s.mCdmaDefaultRoamingIndicator) && mIsEmergencyOnly == s.mIsEmergencyOnly - && mIsDataRoamingFromRegistration == s.mIsDataRoamingFromRegistration); + && mIsDataRoamingFromRegistration == s.mIsDataRoamingFromRegistration + && mRilImsRadioTechnology == s.mRilImsRadioTechnology); } /** @@ -788,7 +793,8 @@ public class ServiceState implements Parcelable { + " RoamInd=" + mCdmaRoamingIndicator + " DefRoamInd=" + mCdmaDefaultRoamingIndicator + " EmergOnly=" + mIsEmergencyOnly - + " IsDataRoamingFromRegistration=" + mIsDataRoamingFromRegistration); + + " IsDataRoamingFromRegistration=" + mIsDataRoamingFromRegistration + + " mRilImsRadioTechnology=" + mRilImsRadioTechnology); } private void setNullState(int state) { @@ -815,6 +821,7 @@ public class ServiceState implements Parcelable { mCdmaEriIconMode = -1; mIsEmergencyOnly = false; mIsDataRoamingFromRegistration = false; + mRilImsRadioTechnology = RIL_RADIO_TECHNOLOGY_UNKNOWN; } public void setStateOutOfService() { @@ -1017,6 +1024,7 @@ public class ServiceState implements Parcelable { m.putInt("cdmaDefaultRoamingIndicator", mCdmaDefaultRoamingIndicator); m.putBoolean("emergencyOnly", Boolean.valueOf(mIsEmergencyOnly)); m.putBoolean("isDataRoamingFromRegistration", Boolean.valueOf(mIsDataRoamingFromRegistration)); + m.putInt("imsRadioTechnology", mRilImsRadioTechnology); } /** @hide */ @@ -1228,4 +1236,14 @@ public class ServiceState implements Parcelable { return newSs; } + + /** @hide */ + public int getRilImsRadioTechnology() { + return mRilImsRadioTechnology; + } + + /** @hide */ + public void setRilImsRadioTechnology(int imsRadioTechnology) { + mRilImsRadioTechnology = imsRadioTechnology; + } } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index d56f62acc8ed..41519da33162 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4798,7 +4798,7 @@ public class TelephonyManager { } catch (NullPointerException ex) { return false; } - } + } /** * Returns the Status of video telephony (VT) @@ -4828,6 +4828,37 @@ public class TelephonyManager { } } + /** + * Returns the Status of VOWIFI calling + * using subId + * @hide + */ + public boolean isVoWifiCallingAvailableForSubscriber(int subId) { + try { + return getITelephony().isVoWifiCallingAvailableForSubscriber(subId); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + + /** + * Returns the Status of Video telephony wifi calling + * using subId + * @hide + */ + public boolean isVideoTelephonyWifiCallingAvailableForSubscriber(int subId) { + try { + return getITelephony() + .isVideoTelephonyWifiCallingAvailableForSubscriber(subId); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + /** * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the default phone. * diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 0d0d7766a217..25e50445bce5 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -982,6 +982,12 @@ interface ITelephony { */ boolean isWifiCallingAvailable(); + /* + * Returns the Status of VOWIFI calling + * using subId + */ + boolean isVoWifiCallingAvailableForSubscriber(int subId); + /** * Returns the Status of Volte */ @@ -992,6 +998,12 @@ interface ITelephony { */ boolean isVideoTelephonyAvailable(); + /** + * Returns the Status of Video telephony wifi calling + * using subId + */ + boolean isVideoTelephonyWifiCallingAvailableForSubscriber(int subId); + /** * Returns the unique device ID of phone, for example, the IMEI for * GSM and the MEID for CDMA phones. Return null if device ID is not available. -- GitLab