diff options
Diffstat (limited to 'core')
18 files changed, 328 insertions, 44 deletions
diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl index 474154b..2caec369 100644 --- a/core/java/android/app/IUiAutomationConnection.aidl +++ b/core/java/android/app/IUiAutomationConnection.aidl @@ -43,6 +43,8 @@ interface IUiAutomationConnection { void clearWindowAnimationFrameStats(); WindowAnimationFrameStats getWindowAnimationFrameStats(); void executeShellCommand(String command, in ParcelFileDescriptor fd); + void grantRuntimePermission(String packageName, String permission, int userId); + void revokeRuntimePermission(String packageName, String permission, int userId); // Called from the system process. oneway void shutdown(); diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index a8494fb..efed2e0 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -30,6 +30,7 @@ import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.SystemClock; +import android.os.UserHandle; import android.util.Log; import android.view.Display; import android.view.InputEvent; @@ -846,6 +847,62 @@ public final class UiAutomation { } /** + * Grants a runtime permission to a package for a user. + * @param packageName The package to which to grant. + * @param permission The permission to grant. + * @return Whether granting succeeded. + * + * @hide + */ + public boolean grantRuntimePermission(String packageName, String permission, + UserHandle userHandle) { + synchronized (mLock) { + throwIfNotConnectedLocked(); + } + try { + if (DEBUG) { + Log.i(LOG_TAG, "Granting runtime permission"); + } + // Calling out without a lock held. + mUiAutomationConnection.grantRuntimePermission(packageName, + permission, userHandle.getIdentifier()); + // TODO: The package manager API should return boolean. + return true; + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error granting runtime permission", re); + } + return false; + } + + /** + * Revokes a runtime permission from a package for a user. + * @param packageName The package from which to revoke. + * @param permission The permission to revoke. + * @return Whether revoking succeeded. + * + * @hide + */ + public boolean revokeRuntimePermission(String packageName, String permission, + UserHandle userHandle) { + synchronized (mLock) { + throwIfNotConnectedLocked(); + } + try { + if (DEBUG) { + Log.i(LOG_TAG, "Revoking runtime permission"); + } + // Calling out without a lock held. + mUiAutomationConnection.revokeRuntimePermission(packageName, + permission, userHandle.getIdentifier()); + // TODO: The package manager API should return boolean. + return true; + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error revoking runtime permission", re); + } + return false; + } + + /** * Executes a shell command. This method returs a file descriptor that points * to the standard output stream. The command execution is similar to running * "adb shell <command>" from a host connected to the device. diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index 39cd3bc..13e27e2 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -19,6 +19,7 @@ package android.app; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.IAccessibilityServiceClient; import android.content.Context; +import android.content.pm.IPackageManager; import android.graphics.Bitmap; import android.hardware.input.InputManager; import android.os.Binder; @@ -60,6 +61,9 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { private final IAccessibilityManager mAccessibilityManager = IAccessibilityManager.Stub .asInterface(ServiceManager.getService(Service.ACCESSIBILITY_SERVICE)); + private final IPackageManager mPackageManager = IPackageManager.Stub + .asInterface(ServiceManager.getService("package")); + private final Object mLock = new Object(); private final Binder mToken = new Binder(); @@ -227,6 +231,38 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { } @Override + public void grantRuntimePermission(String packageName, String permission, int userId) + throws RemoteException { + synchronized (mLock) { + throwIfCalledByNotTrustedUidLocked(); + throwIfShutdownLocked(); + throwIfNotConnectedLocked(); + } + final long identity = Binder.clearCallingIdentity(); + try { + mPackageManager.grantRuntimePermission(packageName, permission, userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + + @Override + public void revokeRuntimePermission(String packageName, String permission, int userId) + throws RemoteException { + synchronized (mLock) { + throwIfCalledByNotTrustedUidLocked(); + throwIfShutdownLocked(); + throwIfNotConnectedLocked(); + } + final long identity = Binder.clearCallingIdentity(); + try { + mPackageManager.revokeRuntimePermission(packageName, permission, userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + + @Override public void executeShellCommand(final String command, final ParcelFileDescriptor sink) throws RemoteException { synchronized (mLock) { diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index 0cafff8..c934e8d 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -609,6 +609,23 @@ public class ClipData implements Parcelable { b.append("NULL"); } } + + /** @hide */ + public void toShortSummaryString(StringBuilder b) { + if (mHtmlText != null) { + b.append("HTML"); + } else if (mText != null) { + b.append("TEXT"); + } else if (mUri != null) { + b.append("U:"); + b.append(mUri); + } else if (mIntent != null) { + b.append("I:"); + mIntent.toShortString(b, true, true, true, true); + } else { + b.append("NULL"); + } + } } /** @@ -884,6 +901,19 @@ public class ClipData implements Parcelable { } } + /** @hide */ + public void toShortStringShortItems(StringBuilder b, boolean first) { + if (mItems.size() > 0) { + if (!first) { + b.append(' '); + } + mItems.get(0).toShortString(b); + if (mItems.size() > 1) { + b.append(" ..."); + } + } + } + @Override public int describeContents() { return 0; diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java index be35f08..e988516 100644 --- a/core/java/android/content/ClipDescription.java +++ b/core/java/android/content/ClipDescription.java @@ -201,22 +201,28 @@ public class ClipDescription implements Parcelable { /** @hide */ public boolean toShortString(StringBuilder b) { - boolean first = true; - for (int i=0; i<mMimeTypes.length; i++) { + boolean first = !toShortStringTypesOnly(b); + if (mLabel != null) { if (!first) { b.append(' '); } first = false; - b.append(mMimeTypes[i]); + b.append('"'); + b.append(mLabel); + b.append('"'); } - if (mLabel != null) { + return !first; + } + + /** @hide */ + public boolean toShortStringTypesOnly(StringBuilder b) { + boolean first = true; + for (int i=0; i<mMimeTypes.length; i++) { if (!first) { b.append(' '); } first = false; - b.append('"'); - b.append(mLabel); - b.append('"'); + b.append(mMimeTypes[i]); } return !first; } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index ec443cd..87d52e4 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -7533,14 +7533,19 @@ public class Intent implements Parcelable, Cloneable { if (!first) { b.append(' '); } - first = false; + b.append("clip={"); if (clip) { - b.append("clip={"); mClipData.toShortString(b); - b.append('}'); } else { - b.append("(has clip)"); + if (mClipData.getDescription() != null) { + first = !mClipData.getDescription().toShortStringTypesOnly(b); + } else { + first = true; + } + mClipData.toShortStringShortItems(b, first); } + first = false; + b.append('}'); } if (extras && mExtras != null) { if (!first) { diff --git a/core/java/android/content/pm/IntentFilterVerificationInfo.java b/core/java/android/content/pm/IntentFilterVerificationInfo.java index 4dbac05..953b051 100644 --- a/core/java/android/content/pm/IntentFilterVerificationInfo.java +++ b/core/java/android/content/pm/IntentFilterVerificationInfo.java @@ -19,6 +19,7 @@ package android.content.pm; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS; +import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER; import android.os.Parcel; @@ -199,6 +200,10 @@ public final class IntentFilterVerificationInfo implements Parcelable { sb.append("never"); break; + case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK: + sb.append("always-ask"); + break; + case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED: default: sb.append("undefined"); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 0f936fd..c8e9402 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1073,6 +1073,18 @@ public abstract class PackageManager { public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3; /** + * Used as the {@code status} argument for {@link PackageManager#updateIntentVerificationStatus} + * to indicate that this app should always be considered as an ambiguous candidate for + * handling the matching Intent even if there are other candidate apps in the "always" + * state. Put another way: if there are any 'always ask' apps in a set of more than + * one candidate app, then a disambiguation is *always* presented even if there is + * another candidate app with the 'always' state. + * + * @hide + */ + public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4; + + /** * Can be used as the {@code millisecondsToDelay} argument for * {@link PackageManager#extendVerificationTimeout}. This is the * maximum time {@code PackageManager} waits for the verification diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl index c933f92..0b165cd 100644 --- a/core/java/android/hardware/ICameraService.aidl +++ b/core/java/android/hardware/ICameraService.aidl @@ -35,7 +35,7 @@ interface ICameraService /** * Keep up-to-date with frameworks/av/include/camera/ICameraService.h */ - int getNumberOfCameras(); + int getNumberOfCameras(int type); // rest of 'int' return values in this file are actually status_t diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 2e4f628..1fcfaca 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -64,6 +64,9 @@ public final class CameraManager { private static final int API_VERSION_1 = 1; private static final int API_VERSION_2 = 2; + private static final int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0; + private static final int CAMERA_TYPE_ALL = 1; + private ArrayList<String> mDeviceIdList; private final Context mContext; @@ -615,7 +618,7 @@ public final class CameraManager { } try { - numCameras = cameraService.getNumberOfCameras(); + numCameras = cameraService.getNumberOfCameras(CAMERA_TYPE_ALL); } catch(CameraRuntimeException e) { throw e.asChecked(); } catch (RemoteException e) { diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 20bcf62..bfca719 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -179,16 +179,16 @@ public final class UserHandle implements Parcelable { } /** - * Returns the app id for a given shared app gid. + * Returns the app id for a given shared app gid. Returns -1 if the ID is invalid. * @hide */ public static final int getAppIdFromSharedAppGid(int gid) { - final int noUserGid = getAppId(gid); - if (noUserGid < Process.FIRST_SHARED_APPLICATION_GID || - noUserGid > Process.LAST_SHARED_APPLICATION_GID) { - throw new IllegalArgumentException(Integer.toString(gid) + " is not a shared app gid"); + final int appId = getAppId(gid) + Process.FIRST_APPLICATION_UID + - Process.FIRST_SHARED_APPLICATION_GID; + if (appId < 0 || appId >= Process.FIRST_SHARED_APPLICATION_GID) { + return -1; } - return (noUserGid + Process.FIRST_APPLICATION_UID) - Process.FIRST_SHARED_APPLICATION_GID; + return appId; } /** diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index 49230c1..2595fe0 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -16,16 +16,23 @@ package com.android.internal.app; +import android.animation.Animator; import android.animation.ObjectAnimator; +import android.annotation.Nullable; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.ContentResolver; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.RippleDrawable; @@ -73,19 +80,54 @@ public class PlatLogoActivity extends Activity { im.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { - final int pad = (int) (8*dp); - outline.setOval(pad, pad, view.getWidth()-pad, view.getHeight()-pad); + final int pad = (int) (8 * dp); + outline.setOval(pad, pad, view.getWidth() - pad, view.getHeight() - pad); } }); - final Drawable platlogo = getDrawable(com.android.internal.R.drawable.platlogo); + final float hue = (float) Math.random(); + final Paint bgPaint = new Paint(); + bgPaint.setColor(Color.HSBtoColor(hue, 0.4f, 1f)); + final Paint fgPaint = new Paint(); + fgPaint.setColor(Color.HSBtoColor(hue, 0.5f, 1f)); + final Drawable M = getDrawable(com.android.internal.R.drawable.platlogo_m); + final Drawable platlogo = new Drawable() { + @Override + public void setAlpha(int alpha) { } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void draw(Canvas c) { + final float r = c.getWidth() / 2f; + c.drawCircle(r, r, r, bgPaint); + c.drawArc(0, 0, 2 * r, 2 * r, 135, 180, false, fgPaint); + M.setBounds(0, 0, c.getWidth(), c.getHeight()); + M.draw(c); + } + }; im.setBackground(new RippleDrawable( ColorStateList.valueOf(0xFFFFFFFF), platlogo, null)); + im.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setOval(0, 0, view.getWidth(), view.getHeight()); + } + }); im.setClickable(true); im.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (mTapCount == 0) { + showMarshmallow(im); + } im.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { @@ -132,6 +174,9 @@ public class PlatLogoActivity extends Activity { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode != KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { + if (mKeyCount == 0) { + showMarshmallow(im); + } ++mKeyCount; if (mKeyCount > 2) { if (mTapCount > 5) { @@ -155,4 +200,17 @@ public class PlatLogoActivity extends Activity { .setStartDelay(800) .start(); } + + public void showMarshmallow(View im) { + final Drawable fg = getDrawable(com.android.internal.R.drawable.platlogo); + fg.setBounds(0, 0, im.getWidth(), im.getHeight()); + fg.setAlpha(0); + im.getOverlay().add(fg); + + final Animator fadeIn = ObjectAnimator.ofInt(fg, "alpha", 255); + fadeIn.setInterpolator(mInterpolator); + fadeIn.setDuration(300); + fadeIn.start(); + } + } diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index 9d0636a..f190d8c 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -294,6 +294,29 @@ public class ArrayUtils { } /** + * Removes value from given array if present, providing set-like behavior. + */ + public static @Nullable String[] removeString(@Nullable String[] cur, String val) { + if (cur == null) { + return null; + } + final int N = cur.length; + for (int i = 0; i < N; i++) { + if (Objects.equals(cur[i], val)) { + String[] ret = new String[N - 1]; + if (i > 0) { + System.arraycopy(cur, 0, ret, 0, i); + } + if (i < (N - 1)) { + System.arraycopy(cur, i + 1, ret, i, N - i - 1); + } + return ret; + } + } + return cur; + } + + /** * Adds value to given array if not already present, providing set-like * behavior. */ diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 169fb60..4f44c26 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -497,6 +497,12 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz, jint cameraId, jobject info_obj) { CameraInfo cameraInfo; + if (cameraId >= Camera::getNumberOfCameras() || cameraId < 0) { + ALOGE("%s: Unknown camera ID %d", __FUNCTION__, cameraId); + jniThrowRuntimeException(env, "Unknown camera ID"); + return; + } + status_t rc = Camera::getCameraInfo(cameraId, &cameraInfo); if (rc != NO_ERROR) { jniThrowRuntimeException(env, "Fail to get camera info"); diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml index f5d945a..bb423fef5 100644 --- a/core/res/res/drawable-nodpi/platlogo.xml +++ b/core/res/res/drawable-nodpi/platlogo.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2014 The Android Open Source Project +Copyright (C) 2015 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. @@ -14,30 +14,20 @@ Copyright (C) 2014 The Android Open Source Project limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="480dp" - android:height="480dp" + android:width="48dp" + android:height="48dp" android:viewportWidth="48.0" android:viewportHeight="48.0"> <path - android:pathData="M24.0,2.0C11.8,2.0 2.0,11.8 2.0,24.0c0.0,6.1 2.5,11.6 6.4,15.6L39.6,8.4C35.6,4.5 30.1,2.0 24.0,2.0z" - android:fillColor="#F57C00"/> - <path - android:pathData="M39.6,8.4L8.4,39.6c4.0,4.0 9.5,6.4 15.6,6.4c12.2,0.0 22.0,-9.8 22.0,-22.0C46.0,17.9 43.5,12.4 39.6,8.4z" - android:fillColor="#FF9800"/> - <path - android:pathData="M45.9,25.9L34.0,14.0L14.0,34.0l11.9,11.9C36.5,45.0 45.0,36.5 45.9,25.9z" - android:fillAlpha="0.33" - android:fillColor="#F57C00"/> - <path - android:pathData="M24.0,24.0c0.0,0.0 0.0,2.2 0.0,5.0s0.0,5.0 0.0,5.0l10.0,-10.0L34.0,14.0L24.0,24.0z" + android:pathData="M34.9,13.2c-0.8,-0.8,-4.2,-2.4,-10.9,-2.4s-10.1,1.6,-10.9,2.4c-0.8,0.8,-2.4,4.2,-2.4,10.9s1.6,10.1,2.4,10.9 c0.8,0.8,4.2,2.4,10.9,2.4s10.1,-1.6,10.9,-2.4c0.8,-0.8,2.4,-4.2,2.4,-10.9S35.6,14,34.9,13.2z" android:fillColor="#FFFFFF"/> <path - android:pathData="M24.0,24.0L14.0,14.0l0.0,10.0l10.0,10.0c0.0,0.0 0.0,-2.2 0.0,-5.0S24.0,24.0 24.0,24.0z" - android:fillColor="#EEEEEE"/> + android:pathData="M34.7,13.7c0,0.8,-1.2,1.5,-3.1,2.1c-1.9,0.5,-4.6,0.8,-7.6,0.8s-5.6,-0.3,-7.6,-0.8 c-1.9,-0.5,-3.1,-1.2,-3.1,-2.1s1.2,-1.5,3.1,-2.1c1.9,-0.5,4.6,-0.8,7.6,-0.8s5.6,0.3,7.6,0.8C33.5,12.1,34.7,12.9,34.7,13.7z" + android:fillColor="#EBEBEB"/> <path - android:pathData="M14.0,34.0l10.0,0.0 -10.0,-10.0z" - android:fillColor="#DDDDDD"/> + android:pathData="M30,13c-0.1,0,-0.1,0,-0.2,0c-0.4,-0.1,-0.7,-0.6,-0.6,-1l1.3,-5.5c0.1,-0.4,0.6,-0.7,1,-0.6c0.4,0.1,0.7,0.6,0.6,1 l-1.3,5.5C30.7,12.7,30.4,13,30,13z" + android:fillColor="#FFFFFF"/> <path - android:pathData="M34.0,34.0l0.0,-10.0 -10.0,10.0z" - android:fillColor="#DDDDDD"/> + android:pathData="M18,13c-0.4,0,-0.7,-0.3,-0.8,-0.6l-1.3,-5.5c-0.1,-0.4,0.2,-0.9,0.6,-1c0.4,-0.1,0.9,0.2,1,0.6l1.3,5.5 c0.1,0.4,-0.2,0.9,-0.6,1C18.1,13,18.1,13,18,13z" + android:fillColor="#FFFFFF"/> </vector> diff --git a/core/res/res/drawable-nodpi/platlogo_m.xml b/core/res/res/drawable-nodpi/platlogo_m.xml new file mode 100644 index 0000000..f19e045 --- /dev/null +++ b/core/res/res/drawable-nodpi/platlogo_m.xml @@ -0,0 +1,37 @@ +<!-- +Copyright (C) 2015 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48dp" + android:height="48dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:fillColor="#08000000" + android:pathData="M13.5,34.5l13.3,13.3c11,-1.3,19.7,-10,21,-21L34.5,13.5L13.5,34.5z" + /> + <path + android:pathData="M24,24c0,0,0,2.4,0,5.2s0,5.2,0,5.2L34.5,24V13.5L24,24z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M24,24L13.5,13.5V24L24,34.5c0,0,0,-2.4,0,-5.2S24,24,24,24z" + android:fillColor="#EEEEEE"/> + <path + android:pathData="M13.5,34.5l10.5,0.0l-10.5,-10.5z" + android:fillColor="#DDDDDD"/> + <path + android:pathData="M34.5,34.5l0.0,-10.5l-10.5,10.5z" + android:fillColor="#DDDDDD"/> +</vector> diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml index 8f5109d..8cc9961 100644 --- a/core/res/res/drawable-nodpi/stat_sys_adb.xml +++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml @@ -19,6 +19,18 @@ Copyright (C) 2014 The Android Open Source Project android:viewportWidth="24.0" android:viewportHeight="24.0"> <path - android:fillColor="#FF000000" - android:pathData="M12.0,12.0l-10.0,-10.0 0.0,10.0 0.0,10.0 10.0,0.0 10.0,0.0 0.0,-10.0 0.0,-10.0z"/> + android:pathData="M8.4,5.3c-0.2,0.0 -0.4,-0.2 -0.5,-0.4L7.1,1.6C7.0,1.4 7.2,1.1 7.4,1.0C7.7,0.9 8.0,1.1 8.0,1.4l0.8,3.3c0.1,0.3 -0.1,0.5 -0.4,0.6C8.5,5.3 8.4,5.3 8.4,5.3z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M15.6,5.3c0.0,0.0 -0.1,0.0 -0.1,0.0c-0.3,-0.1 -0.4,-0.3 -0.4,-0.6L16.0,1.4C16.0,1.1 16.3,0.9 16.6,1.0c0.3,0.1 0.4,0.3 0.4,0.6l-0.8,3.3C16.1,5.1 15.9,5.3 15.6,5.3z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M18.6,5.4c-0.1,-0.1 -0.2,-0.1 -0.3,-0.2c0.2,0.2 0.3,0.3 0.3,0.5c0.0,0.9 -2.9,1.7 -6.6,1.7S5.4,6.7 5.4,5.7c0.0,-0.2 0.1,-0.3 0.3,-0.5C5.6,5.3 5.5,5.4 5.4,5.4C5.0,5.9 4.0,8.0 4.0,12.0s1.0,6.1 1.4,6.6C5.9,19.0 8.0,20.0 12.0,20.0s6.1,-1.0 6.6,-1.4C19.0,18.1 20.0,16.0 20.0,12.0S19.0,5.9 18.6,5.4zM8.0,13.0c-0.6,0.0 -1.0,-0.4 -1.0,-1.0c0.0,-0.6 0.4,-1.0 1.0,-1.0s1.0,0.4 1.0,1.0C9.0,12.6 8.6,13.0 8.0,13.0zM16.0,13.0c-0.6,0.0 -1.0,-0.4 -1.0,-1.0c0.0,-0.6 0.4,-1.0 1.0,-1.0s1.0,0.4 1.0,1.0C17.0,12.6 16.6,13.0 16.0,13.0z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M5.35,5.7 + a 6.6 1.75 0 1 1 13.25 0 + a 6.6 1.75 0 1 1 -13.25 0 + z" + android:fillColor="#BBFFFFFF" /> </vector> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index ee61944..262aa76 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2318,4 +2318,6 @@ <java-symbol type="array" name="config_cell_retries_per_error_code" /> <java-symbol type="drawable" name="ic_more_items" /> + <java-symbol type="drawable" name="platlogo_m" /> + </resources> |