diff options
201 files changed, 3318 insertions, 1776 deletions
diff --git a/api/current.txt b/api/current.txt index cbf4d67..3ab4ce4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -28355,11 +28355,9 @@ package android.telecom { method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle); method public void cancelMissedCallsNotification(); method public void clearAccounts(); - method public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(); method public android.telecom.PhoneAccountHandle getConnectionManager(); - method public android.telecom.PhoneAccountHandle getDefaultOutgoingPhoneAccount(java.lang.String); method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle); - method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(java.lang.String); + method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage(); method public boolean handleMmi(java.lang.String); method public boolean hasMultipleCallCapableAccounts(); method public boolean isInCall(); @@ -28733,6 +28731,7 @@ package android.telephony { field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName"; field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl"; field public static final java.lang.String MMS_CONFIG_USER_AGENT = "userAgent"; + field public static final int MMS_ERROR_CONFIGURATION_ERROR = 7; // 0x7 field public static final int MMS_ERROR_HTTP_FAILURE = 4; // 0x4 field public static final int MMS_ERROR_INVALID_APN = 2; // 0x2 field public static final int MMS_ERROR_IO_ERROR = 5; // 0x5 diff --git a/cmds/dpm/src/com/android/commands/dpm/Dpm.java b/cmds/dpm/src/com/android/commands/dpm/Dpm.java index b8b2087..3b9a785 100644 --- a/cmds/dpm/src/com/android/commands/dpm/Dpm.java +++ b/cmds/dpm/src/com/android/commands/dpm/Dpm.java @@ -94,7 +94,7 @@ public final class Dpm extends BaseCommand { mDevicePolicyManager.removeActiveAdmin(component, UserHandle.USER_OWNER); throw e; } - System.out.println("Device owner set to package " + packageName); + System.out.println("Success: Device owner set to package " + packageName); System.out.println("Active admin set to component " + component.toShortString()); } @@ -113,8 +113,8 @@ public final class Dpm extends BaseCommand { mDevicePolicyManager.removeActiveAdmin(component, userId); throw e; } - System.out.println("Active admin and profile owner set to " + component.toShortString() + - " for user " + userId); + System.out.println("Success: Active admin and profile owner set to " + + component.toShortString() + " for user " + userId); } private ComponentName parseComponentName(String component) { diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 701ab1d..5f3ed61 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -5066,7 +5066,7 @@ public class Activity extends ContextThemeWrapper public void setTaskDescription(ActivityManager.TaskDescription taskDescription) { ActivityManager.TaskDescription td; // Scale the icon down to something reasonable if it is provided - if (taskDescription.getIcon() != null) { + if (taskDescription.getIconFilename() == null && taskDescription.getIcon() != null) { final int size = ActivityManager.getLauncherLargeIconSizeInner(this); final Bitmap icon = Bitmap.createScaledBitmap(taskDescription.getIcon(), size, size, true); td = new ActivityManager.TaskDescription(taskDescription.getLabel(), icon, diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 9486a72..85d4839 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -56,9 +56,11 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Size; import android.util.Slog; +import org.xmlpull.v1.XmlSerializer; import java.io.FileDescriptor; import java.io.FileOutputStream; +import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -508,8 +510,18 @@ public class ActivityManager { * Information you can set and retrieve about the current activity within the recent task list. */ public static class TaskDescription implements Parcelable { + /** @hide */ + public static final String ATTR_TASKDESCRIPTION_PREFIX = "task_description_"; + private static final String ATTR_TASKDESCRIPTIONLABEL = + ATTR_TASKDESCRIPTION_PREFIX + "label"; + private static final String ATTR_TASKDESCRIPTIONCOLOR = + ATTR_TASKDESCRIPTION_PREFIX + "color"; + private static final String ATTR_TASKDESCRIPTIONICONFILENAME = + ATTR_TASKDESCRIPTION_PREFIX + "icon_filename"; + private String mLabel; private Bitmap mIcon; + private String mIconFilename; private int mColorPrimary; /** @@ -529,6 +541,12 @@ public class ActivityManager { mColorPrimary = colorPrimary; } + /** @hide */ + public TaskDescription(String label, int colorPrimary, String iconFilename) { + this(label, null, colorPrimary); + mIconFilename = iconFilename; + } + /** * Creates the TaskDescription to the specified values. * @@ -559,7 +577,10 @@ public class ActivityManager { * Creates a copy of another TaskDescription. */ public TaskDescription(TaskDescription td) { - this(td.getLabel(), td.getIcon(), td.getPrimaryColor()); + mLabel = td.mLabel; + mIcon = td.mIcon; + setPrimaryColor(td.mColorPrimary); + mIconFilename = td.mIconFilename; } private TaskDescription(Parcel source) { @@ -579,7 +600,7 @@ public class ActivityManager { * @hide */ public void setPrimaryColor(int primaryColor) { - mColorPrimary = primaryColor; + mColorPrimary = 0xFF000000 | primaryColor; } /** @@ -591,6 +612,16 @@ public class ActivityManager { } /** + * Moves the icon bitmap reference from an actual Bitmap to a file containing the + * bitmap. + * @hide + */ + public void setIconFilename(String iconFilename) { + mIconFilename = iconFilename; + mIcon = null; + } + + /** * @return The label and description of the current state of this task. */ public String getLabel() { @@ -601,7 +632,22 @@ public class ActivityManager { * @return The icon that represents the current state of this task. */ public Bitmap getIcon() { - return mIcon; + if (mIcon != null) { + return mIcon; + } + if (mIconFilename != null) { + try { + return ActivityManagerNative.getDefault(). + getTaskDescriptionIcon(mIconFilename); + } catch (RemoteException e) { + } + } + return null; + } + + /** @hide */ + public String getIconFilename() { + return mIconFilename; } /** @@ -611,6 +657,30 @@ public class ActivityManager { return mColorPrimary; } + /** @hide */ + public void saveToXml(XmlSerializer out) throws IOException { + if (mLabel != null) { + out.attribute(null, ATTR_TASKDESCRIPTIONLABEL, mLabel); + } + if (mColorPrimary != 0) { + out.attribute(null, ATTR_TASKDESCRIPTIONCOLOR, Integer.toHexString(mColorPrimary)); + } + if (mIconFilename != null) { + out.attribute(null, ATTR_TASKDESCRIPTIONICONFILENAME, mIconFilename); + } + } + + /** @hide */ + public void restoreFromXml(String attrName, String attrValue) { + if (ATTR_TASKDESCRIPTIONLABEL.equals(attrName)) { + setLabel(attrValue); + } else if (ATTR_TASKDESCRIPTIONCOLOR.equals(attrName)) { + setPrimaryColor((int) Long.parseLong(attrValue, 16)); + } else if (ATTR_TASKDESCRIPTIONICONFILENAME.equals(attrName)) { + setIconFilename(attrValue); + } + } + @Override public int describeContents() { return 0; @@ -631,12 +701,19 @@ public class ActivityManager { mIcon.writeToParcel(dest, 0); } dest.writeInt(mColorPrimary); + if (mIconFilename == null) { + dest.writeInt(0); + } else { + dest.writeInt(1); + dest.writeString(mIconFilename); + } } public void readFromParcel(Parcel source) { mLabel = source.readInt() > 0 ? source.readString() : null; mIcon = source.readInt() > 0 ? Bitmap.CREATOR.createFromParcel(source) : null; mColorPrimary = source.readInt(); + mIconFilename = source.readInt() > 0 ? source.readString() : null; } public static final Creator<TaskDescription> CREATOR diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 677fcef..11470e3 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2253,6 +2253,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case GET_TASK_DESCRIPTION_ICON_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + String filename = data.readString(); + Bitmap icon = getTaskDescriptionIcon(filename); + reply.writeNoException(); + if (icon == null) { + reply.writeInt(0); + } else { + reply.writeInt(1); + icon.writeToParcel(reply, 0); + } + return true; + } + case REQUEST_VISIBLE_BEHIND_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); @@ -5241,6 +5255,20 @@ class ActivityManagerProxy implements IActivityManager } @Override + public Bitmap getTaskDescriptionIcon(String filename) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(filename); + mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0); + reply.readException(); + final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply); + data.recycle(); + reply.recycle(); + return icon; + } + + @Override public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index b4877de..7d0d27f 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -123,7 +123,6 @@ import libcore.io.DropBox; import libcore.io.EventLogger; import libcore.io.IoUtils; import libcore.net.event.NetworkEventDispatcher; - import dalvik.system.CloseGuard; import dalvik.system.VMDebug; import dalvik.system.VMRuntime; @@ -5088,10 +5087,8 @@ public final class ActivityThread { mInstrumentation = new Instrumentation(); ContextImpl context = ContextImpl.createAppContext( this, getSystemContext().mPackageInfo); - Application app = Instrumentation.newApplication(Application.class, context); - mAllApplications.add(app); - mInitialApplication = app; - app.onCreate(); + mInitialApplication = context.mPackageInfo.makeApplication(true, null); + mInitialApplication.onCreate(); } catch (Exception e) { throw new RuntimeException( "Unable to instantiate Application():" + e.toString(), e); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 8fa1fd5..aa5fea0 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -451,6 +451,7 @@ public interface IActivityManager extends IInterface { public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values) throws RemoteException; + public Bitmap getTaskDescriptionIcon(String filename) throws RemoteException; public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException; public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException; @@ -775,4 +776,5 @@ public interface IActivityManager extends IInterface { int RELEASE_ACTIVITY_INSTANCE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+235; int RELEASE_SOME_ACTIVITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+236; int BOOT_ANIMATION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+237; + int GET_TASK_DESCRIPTION_ICON_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+238; } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index ff9f6ab..53912e1 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -4295,7 +4295,7 @@ public class Intent implements Parcelable, Cloneable { int j = uri.indexOf(')', i); while (i < j) { int sep = uri.indexOf('!', i); - if (sep < 0) sep = j; + if (sep < 0 || sep > j) sep = j; if (i < sep) { intent.addCategory(uri.substring(i, sep)); } diff --git a/core/java/android/ddm/DdmHandleViewDebug.java b/core/java/android/ddm/DdmHandleViewDebug.java index ce83796..3a36b0a 100644 --- a/core/java/android/ddm/DdmHandleViewDebug.java +++ b/core/java/android/ddm/DdmHandleViewDebug.java @@ -56,6 +56,9 @@ public class DdmHandleViewDebug extends ChunkHandler { /** Capture View Layers. */ private static final int VURT_CAPTURE_LAYERS = 2; + /** Dump View Theme. */ + private static final int VURT_DUMP_THEME = 3; + /** * Generic View Operation, first parameter in the packet should be one of the * VUOP_* constants below. @@ -131,6 +134,8 @@ public class DdmHandleViewDebug extends ChunkHandler { return dumpHierarchy(rootView, in); else if (op == VURT_CAPTURE_LAYERS) return captureLayers(rootView); + else if (op == VURT_DUMP_THEME) + return dumpTheme(rootView); else return createFailChunk(ERR_INVALID_OP, "Unknown view root operation: " + op); } @@ -258,6 +263,22 @@ public class DdmHandleViewDebug extends ChunkHandler { return new Chunk(CHUNK_VURT, data, 0, data.length); } + /** + * Returns the Theme dump of the provided view. + */ + private Chunk dumpTheme(View rootView) { + ByteArrayOutputStream b = new ByteArrayOutputStream(1024); + try { + ViewDebug.dumpTheme(rootView, b); + } catch (IOException e) { + return createFailChunk(1, "Unexpected error while dumping the theme: " + + e.getMessage()); + } + + byte[] data = b.toByteArray(); + return new Chunk(CHUNK_VURT, data, 0, data.length); + } + private Chunk captureView(View rootView, View targetView) { ByteArrayOutputStream b = new ByteArrayOutputStream(1024); try { diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java index f440874..4407c9d 100644 --- a/core/java/android/nfc/cardemulation/AidGroup.java +++ b/core/java/android/nfc/cardemulation/AidGroup.java @@ -15,10 +15,6 @@ import android.util.Log; /** * The AidGroup class represents a group of Application Identifiers (AIDs). * - * <p>An instance of this object can be used with - * {@link CardEmulation#registerAidsForService(android.content.ComponentName, String, java.util.List)} - * to tell the OS which AIDs are handled by your HCE- or SE-based service. - * * <p>The format of AIDs is defined in the ISO/IEC 7816-4 specification. This class * requires the AIDs to be input as a hexadecimal string, with an even amount of * hexadecimal characters, e.g. "F014811481". @@ -60,7 +56,10 @@ public final class AidGroup implements Parcelable { } else { this.category = CardEmulation.CATEGORY_OTHER; } - this.aids = aids; + this.aids = new ArrayList<String>(aids.size()); + for (String aid : aids) { + this.aids.add(aid.toUpperCase()); + } this.description = null; } @@ -144,7 +143,7 @@ public final class AidGroup implements Parcelable { if (inGroup) { String aid = parser.getAttributeValue(null, "value"); if (aid != null) { - aids.add(aid); + aids.add(aid.toUpperCase()); } } else { Log.d(TAG, "Ignoring <aid> tag while not in group"); diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java index 3811375..00b2ee3 100644 --- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java +++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java @@ -311,7 +311,7 @@ public final class ApduServiceInfo implements Parcelable { public String getCategoryForAid(String aid) { ArrayList<AidGroup> groups = getAidGroups(); for (AidGroup group : groups) { - if (group.aids.contains(aid)) { + if (group.aids.contains(aid.toUpperCase())) { return group.category; } } @@ -425,7 +425,7 @@ public final class ApduServiceInfo implements Parcelable { public ApduServiceInfo createFromParcel(Parcel source) { ResolveInfo info = ResolveInfo.CREATOR.createFromParcel(source); String description = source.readString(); - boolean onHost = (source.readInt() != 0) ? true : false; + boolean onHost = source.readInt() != 0; ArrayList<AidGroup> staticAidGroups = new ArrayList<AidGroup>(); int numStaticGroups = source.readInt(); if (numStaticGroups > 0) { @@ -436,7 +436,7 @@ public final class ApduServiceInfo implements Parcelable { if (numDynamicGroups > 0) { source.readTypedList(dynamicAidGroups, AidGroup.CREATOR); } - boolean requiresUnlock = (source.readInt() != 0) ? true : false; + boolean requiresUnlock = source.readInt() != 0; int bannerResource = source.readInt(); int uid = source.readInt(); return new ApduServiceInfo(info, onHost, description, staticAidGroups, diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index c25278f..82016c3 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -19,6 +19,7 @@ import android.annotation.SystemApi; import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.content.Context; +import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; @@ -430,7 +431,8 @@ public class UserManager { * @return whether the user making this call is a goat */ public boolean isUserAGoat() { - return false; + return mContext.getPackageManager() + .isPackageAvailable("com.coffeestainstudios.goatsimulator"); } /** diff --git a/core/java/android/transition/Fade.java b/core/java/android/transition/Fade.java index 1f9d093..e7857c0 100644 --- a/core/java/android/transition/Fade.java +++ b/core/java/android/transition/Fade.java @@ -145,12 +145,21 @@ public class Fade extends Visibility { private final View mView; private boolean mCanceled = false; private float mPausedAlpha = -1; + private boolean mLayerTypeChanged = false; public FadeAnimatorListener(View view) { mView = view; } @Override + public void onAnimationStart(Animator animator) { + if (mView.hasOverlappingRendering() && mView.getLayerType() == View.LAYER_TYPE_NONE) { + mLayerTypeChanged = true; + mView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + } + + @Override public void onAnimationCancel(Animator animator) { mCanceled = true; if (mPausedAlpha >= 0) { @@ -163,6 +172,9 @@ public class Fade extends Visibility { if (!mCanceled) { mView.setTransitionAlpha(1); } + if (mLayerTypeChanged) { + mView.setLayerType(View.LAYER_TYPE_NONE, null); + } } @Override diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index b677888..c850f71 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -814,8 +814,8 @@ public abstract class Transition implements Cloneable { } } if (mTargetIds.size() == 0 && mTargets.size() == 0 && - (mTargetTypes == null || mTargetTypes.isEmpty() && - (mTargetNames == null || mTargetNames.isEmpty()))) { + (mTargetTypes == null || mTargetTypes.isEmpty()) && + (mTargetNames == null || mTargetNames.isEmpty())) { return true; } if (mTargetIds.contains(targetId) || mTargets.contains(target)) { diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index d23e115..edb3798 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -339,8 +339,7 @@ public abstract class HardwareRenderer { * @param attachInfo AttachInfo tied to the specified view. * @param callbacks Callbacks invoked when drawing happens. */ - abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks, - boolean isStartingWindow); + abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks); /** * Creates a new hardware layer. A hardware layer built by calling this diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java index 577415e..5f37042 100644 --- a/core/java/android/view/LayoutInflater.java +++ b/core/java/android/view/LayoutInflater.java @@ -606,9 +606,9 @@ public abstract class LayoutInflater { constructor.setAccessible(true); final View view = constructor.newInstance(args); if (view instanceof ViewStub) { - // always use ourselves when inflating ViewStub later + // Use the same context when inflating ViewStub later. final ViewStub viewStub = (ViewStub) view; - viewStub.setLayoutInflater(this); + viewStub.setLayoutInflater(cloneInContext((Context) args[0])); } return view; diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 3d1332c..5d2822d 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -16,7 +16,6 @@ package android.view; -import android.graphics.Color; import com.android.internal.R; import android.content.Context; @@ -268,8 +267,7 @@ public class ThreadedRenderer extends HardwareRenderer { view.mRecreateDisplayList = false; } - private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks, - boolean isStartingWindow) { + private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks) { Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList"); updateViewTreeDisplayList(view); @@ -281,12 +279,6 @@ public class ThreadedRenderer extends HardwareRenderer { callbacks.onHardwarePreDraw(canvas); canvas.insertReorderBarrier(); - if (isStartingWindow) { - // Compensate for some situations in which a hw-accelerated surface - // will not be filled with anything by default; this is equivalent - // to the old behavior when the system process was not hw-accelerated - canvas.drawColor(Color.BLACK); - } canvas.drawRenderNode(view.getDisplayList()); canvas.insertInorderBarrier(); @@ -306,8 +298,7 @@ public class ThreadedRenderer extends HardwareRenderer { } @Override - void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks, - boolean isStartingWindow) { + void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks) { attachInfo.mIgnoreDirtyState = true; long frameTimeNanos = mChoreographer.getFrameTimeNanos(); attachInfo.mDrawingTime = frameTimeNanos / TimeUtils.NANOS_PER_MS; @@ -317,7 +308,7 @@ public class ThreadedRenderer extends HardwareRenderer { recordDuration = System.nanoTime(); } - updateRootDisplayList(view, callbacks, isStartingWindow); + updateRootDisplayList(view, callbacks); if (mProfilingEnabled) { recordDuration = System.nanoTime() - recordDuration; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index ae6e4e7..43ab4ef 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -711,10 +711,17 @@ public final class ViewRootImpl implements ViewParent, // can be used by code on the system process to escape that and enable // HW accelerated drawing. (This is basically for the lock screen.) + final boolean fakeHwAccelerated = (attrs.privateFlags & + WindowManager.LayoutParams.PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED) != 0; final boolean forceHwAccelerated = (attrs.privateFlags & WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED) != 0; - if (!HardwareRenderer.sRendererDisabled + if (fakeHwAccelerated) { + // This is exclusively for the preview windows the window manager + // shows for launching applications, so they will look more like + // the app being launched. + mAttachInfo.mHardwareAccelerationRequested = true; + } else if (!HardwareRenderer.sRendererDisabled || (HardwareRenderer.sSystemRendererDisabled && forceHwAccelerated)) { if (mAttachInfo.mHardwareRenderer != null) { mAttachInfo.mHardwareRenderer.destroy(); @@ -2479,8 +2486,7 @@ public final class ViewRootImpl implements ViewParent, dirty.setEmpty(); mBlockResizeBuffer = false; - mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this, - params.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING); + mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this); } else { // If we get here with a disabled & requested hardware renderer, something went // wrong (an invalidate posted right before we destroyed the hardware surface diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 273ec9d..47ee52e 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1024,6 +1024,26 @@ public interface WindowManager extends ViewManager { public int flags; /** + * If the window has requested hardware acceleration, but this is not + * allowed in the process it is in, then still render it as if it is + * hardware accelerated. This is used for the starting preview windows + * in the system process, which don't need to have the overhead of + * hardware acceleration (they are just a static rendering), but should + * be rendered as such to match the actual window of the app even if it + * is hardware accelerated. + * Even if the window isn't hardware accelerated, still do its rendering + * as if it was. + * Like {@link #FLAG_HARDWARE_ACCELERATED} except for trusted system windows + * that need hardware acceleration (e.g. LockScreen), where hardware acceleration + * is generally disabled. This flag must be specified in addition to + * {@link #FLAG_HARDWARE_ACCELERATED} to enable hardware acceleration for system + * windows. + * + * @hide + */ + public static final int PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED = 0x00000001; + + /** * In the system process, we globally do not use hardware acceleration * because there are many threads doing UI there and they conflict. * If certain parts of the UI that really do want to use hardware diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 06b7a93..0687905 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -1205,7 +1205,6 @@ class FastScroller { if (!hasSections || !mMatchDragPosition) { return (float) firstVisibleItem / (totalItemCount - visibleItemCount); } - // Ignore headers. firstVisibleItem -= mHeaderCount; if (firstVisibleItem < 0) { @@ -1255,9 +1254,19 @@ class FastScroller { // across the last item account for whatever space is remaining. if (firstVisibleItem > 0 && firstVisibleItem + visibleItemCount == totalItemCount) { final View lastChild = mList.getChildAt(visibleItemCount - 1); - final float lastItemVisible = (float) (mList.getHeight() - mList.getPaddingBottom() - - lastChild.getTop()) / lastChild.getHeight(); - result += (1 - result) * lastItemVisible; + final int bottomPadding = mList.getPaddingBottom(); + final int maxSize; + final int currentVisibleSize; + if (mList.getClipToPadding()) { + maxSize = lastChild.getHeight(); + currentVisibleSize = mList.getHeight() - bottomPadding - lastChild.getTop(); + } else { + maxSize = lastChild.getHeight() + bottomPadding; + currentVisibleSize = mList.getHeight() - lastChild.getTop(); + } + if (currentVisibleSize > 0 && maxSize > 0) { + result += (1 - result) * ((float) currentVisibleSize / maxSize ); + } } return result; diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 107e8c6..22600de 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -491,8 +491,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } private boolean versionNumberAtLeastL(int versionNumber) { - // TODO: remove "|| true" once the build code for L is fixed. - return versionNumber >= Build.VERSION_CODES.L || true; + return versionNumber >= Build.VERSION_CODES.L; } private void setAlwaysButtonEnabled(boolean hasValidSelection, int checkedPos, diff --git a/core/java/com/android/internal/view/StandaloneActionMode.java b/core/java/com/android/internal/view/StandaloneActionMode.java index fae7ea1..d5d3602 100644 --- a/core/java/com/android/internal/view/StandaloneActionMode.java +++ b/core/java/com/android/internal/view/StandaloneActionMode.java @@ -46,7 +46,8 @@ public class StandaloneActionMode extends ActionMode implements MenuBuilder.Call mContextView = view; mCallback = callback; - mMenu = new MenuBuilder(context).setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + mMenu = new MenuBuilder(view.getContext()).setDefaultShowAsAction( + MenuItem.SHOW_AS_ACTION_IF_ROOM); mMenu.setCallback(this); mFocusable = isFocusable; } @@ -126,7 +127,7 @@ public class StandaloneActionMode extends ActionMode implements MenuBuilder.Call @Override public MenuInflater getMenuInflater() { - return new MenuInflater(mContext); + return new MenuInflater(mContextView.getContext()); } public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { @@ -141,7 +142,7 @@ public class StandaloneActionMode extends ActionMode implements MenuBuilder.Call return true; } - new MenuPopupHelper(mContext, subMenu).show(); + new MenuPopupHelper(mContextView.getContext(), subMenu).show(); return true; } diff --git a/core/res/res/drawable-hdpi/spinner_textfield_activated_mtrl_alpha.9.png b/core/res/res/drawable-hdpi/spinner_textfield_activated_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index 5e67395..0000000 --- a/core/res/res/drawable-hdpi/spinner_textfield_activated_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/spinner_textfield_default_mtrl_alpha.9.png b/core/res/res/drawable-hdpi/spinner_textfield_default_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index 9c2ee13..0000000 --- a/core/res/res/drawable-hdpi/spinner_textfield_default_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/spinner_textfield_activated_mtrl_alpha.9.png b/core/res/res/drawable-mdpi/spinner_textfield_activated_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index cb8f78a..0000000 --- a/core/res/res/drawable-mdpi/spinner_textfield_activated_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/spinner_textfield_default_mtrl_alpha.9.png b/core/res/res/drawable-mdpi/spinner_textfield_default_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index 64d4c81..0000000 --- a/core/res/res/drawable-mdpi/spinner_textfield_default_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/spinner_textfield_activated_mtrl_alpha.9.png b/core/res/res/drawable-xhdpi/spinner_textfield_activated_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index 8e7862f..0000000 --- a/core/res/res/drawable-xhdpi/spinner_textfield_activated_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/spinner_textfield_default_mtrl_alpha.9.png b/core/res/res/drawable-xhdpi/spinner_textfield_default_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index 95cb83f..0000000 --- a/core/res/res/drawable-xhdpi/spinner_textfield_default_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xxhdpi/spinner_textfield_activated_mtrl_alpha.9.png b/core/res/res/drawable-xxhdpi/spinner_textfield_activated_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index eb495c6..0000000 --- a/core/res/res/drawable-xxhdpi/spinner_textfield_activated_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xxhdpi/spinner_textfield_default_mtrl_alpha.9.png b/core/res/res/drawable-xxhdpi/spinner_textfield_default_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index c2268af..0000000 --- a/core/res/res/drawable-xxhdpi/spinner_textfield_default_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xxxhdpi/spinner_textfield_activated_mtrl_alpha.9.png b/core/res/res/drawable-xxxhdpi/spinner_textfield_activated_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index fbcd7d4..0000000 --- a/core/res/res/drawable-xxxhdpi/spinner_textfield_activated_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable-xxxhdpi/spinner_textfield_default_mtrl_alpha.9.png b/core/res/res/drawable-xxxhdpi/spinner_textfield_default_mtrl_alpha.9.png Binary files differdeleted file mode 100644 index ebc9bf7..0000000 --- a/core/res/res/drawable-xxxhdpi/spinner_textfield_default_mtrl_alpha.9.png +++ /dev/null diff --git a/core/res/res/drawable/ic_corp_icon_badge.xml b/core/res/res/drawable/ic_corp_icon_badge.xml index 0e1c63d..538dade 100644 --- a/core/res/res/drawable/ic_corp_icon_badge.xml +++ b/core/res/res/drawable/ic_corp_icon_badge.xml @@ -30,18 +30,15 @@ Copyright (C) 2014 The Android Open Source Project android:pathData="M49.0,49.0m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0" android:fillColor="#FF5722"/> <path - android:pathData="M55.25,44.264l-2.254,0.0l0.0,-1.531l-1.531,-1.531l-4.638,0.0l-1.531,1.531l0.0,1.531l-2.294,0.0c-0.846,0.0 -1.523,0.685 -1.523,1.531l-0.008,8.421c0.0,0.846 0.685,1.531 1.531,1.531L55.25,55.746994c0.846,0.0 1.531,-0.685 1.531,-1.531l0.0,-8.421C56.782,44.948 56.097,44.264 55.25,44.264zM51.465,44.264l-4.638,0.0l0.0,-1.531l4.638,0.0L51.465,44.264z" + android:pathData="M55.801,43.688l-2.837,-0.001l0.0,-1.137l-1.587,-1.588l-4.72,-0.001l-1.588,1.587l0.0,1.137l-2.867,-0.001c-0.94,0.0 -1.691,0.76 -1.691,1.699L40.5,48.654c0.0,0.94 0.76,1.7 1.699,1.7l5.255,0.001l0.0,-1.271l0.225,0.0l2.589,0.0l0.225,0.0l0.0,1.271l5.303,0.001c0.939,0.0 1.7,-0.76 1.7,-1.699l0.002,-3.269C57.5,44.449 56.74,43.689 55.801,43.688zM51.377,43.687l-4.72,-0.001l0.0,-1.137l4.72,0.001L51.377,43.687z" android:fillColor="#FFFFFF"/> <path - android:pathData="M57.359,45.373c0.0,-0.855 -0.738,-1.547 -1.651,-1.547L42.535,43.826c-0.913,0.0 -1.643,0.692 -1.643,1.547l0.004,3.232c0.0,0.911 0.737,1.648 1.648,1.648l13.162,0.0c0.911,0.0 1.648,-0.737 1.648,-1.648L57.359,45.373z" + android:pathData="M50.494,52.012l-3.04,0.0l0.0,-0.901l-6.417,0.0l0.0,3.172c0.0,0.94 0.741,1.7 1.68,1.7l12.464,0.003c0.939,0.0 1.702,-0.76 1.703,-1.699l0.0,-3.176l-6.39,0.0L50.494,52.012z" android:fillColor="#FFFFFF"/> <path android:pathData="M40.726,40.726 h16.13 v16.13 h-16.13z" android:fillColor="#00000000"/> <path - android:pathData="M40.0,49.0l17.0,0.0l0.0,2.0l-17.0,0.0z" - android:fillColor="#FF5722"/> - <path - android:pathData="M47.625,48.951l3.003,0.0l0.0,3.002l-3.003,0.0z" - android:fillColor="#FF5722"/> -</vector>
\ No newline at end of file + android:pathData="M46.657,42.55 h4.72 v1.137 h-4.72z" + android:fillColor="#00000000"/> +</vector> diff --git a/core/res/res/drawable/ic_corp_statusbar_icon.xml b/core/res/res/drawable/ic_corp_statusbar_icon.xml new file mode 100644 index 0000000..e742c0b --- /dev/null +++ b/core/res/res/drawable/ic_corp_statusbar_icon.xml @@ -0,0 +1,30 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M20.801,5.981L17.13,5.98l0.001,-1.471l-2.053,-2.055L8.969,2.453L6.915,4.506L6.914,5.977L3.203,5.976c-1.216,0.0 -2.189,0.983 -2.189,2.199L1.0,12.406c0.0,1.216 0.983,2.2 2.199,2.2L10.0,14.608l0.0,-1.644l0.291,0.0l3.351,0.0l0.291,0.0l0.0,1.645l6.863,0.002c1.216,0.0 2.2,-0.983 2.2,-2.199L23.0,8.181C23.0,6.965 22.017,5.981 20.801,5.981zM15.076,5.979L8.968,5.978l0.001,-1.471l6.108,0.001L15.076,5.979z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M13.911,16.646L9.978,16.646L9.978,15.48L1.673,15.48l0.0,4.105c0.0,1.216 0.959,2.2 2.175,2.2l16.13,0.004c1.216,0.0 2.203,-0.983 2.203,-2.199l0.0,-4.11l-8.27,0.0L13.910999,16.646z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M23.657,6.55 h4.72 v1.137 h-4.72z" + android:fillColor="#00000000"/> +</vector> diff --git a/core/res/res/drawable/spinner_textfield_background_material.xml b/core/res/res/drawable/spinner_textfield_background_material.xml index 5bdff4a..2732d53 100644 --- a/core/res/res/drawable/spinner_textfield_background_material.xml +++ b/core/res/res/drawable/spinner_textfield_background_material.xml @@ -17,17 +17,29 @@ <inset xmlns:android="http://schemas.android.com/apk/res/android" android:inset="@dimen/control_inset_material"> <selector android:autoMirrored="true"> - <item android:state_checked="true"> - <nine-patch android:src="@drawable/spinner_textfield_activated_mtrl_alpha" - android:tint="?attr/colorControlActivated" /> - </item> - <item android:state_pressed="true"> - <nine-patch android:src="@drawable/spinner_textfield_activated_mtrl_alpha" - android:tint="?attr/colorControlActivated" /> + <item android:state_checked="false" android:state_pressed="false"> + <layer-list android:paddingMode="stack"> + <item> + <nine-patch android:src="@drawable/textfield_default_mtrl_alpha" + android:tint="?attr/colorControlNormal" /> + </item> + <item> + <nine-patch android:src="@drawable/spinner_mtrl_am_alpha" + android:tint="?attr/colorControlNormal" /> + </item> + </layer-list> </item> <item> - <nine-patch android:src="@drawable/spinner_textfield_default_mtrl_alpha" - android:tint="?attr/colorControlNormal" /> + <layer-list android:paddingMode="stack"> + <item> + <nine-patch android:src="@drawable/textfield_activated_mtrl_alpha" + android:tint="?attr/colorControlActivated" /> + </item> + <item> + <nine-patch android:src="@drawable/spinner_mtrl_am_alpha" + android:tint="?attr/colorControlActivated" /> + </item> + </layer-list> </item> </selector> </inset> diff --git a/core/res/res/layout/screen.xml b/core/res/res/layout/screen.xml index 902a797..403ffd6 100644 --- a/core/res/res/layout/screen.xml +++ b/core/res/res/layout/screen.xml @@ -30,7 +30,8 @@ This is the basic layout for a screen, with all of its features enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> <!-- Title bar --> <RelativeLayout android:id="@android:id/title_container" diff --git a/core/res/res/layout/screen_custom_title.xml b/core/res/res/layout/screen_custom_title.xml index b385bed..a3312dc 100644 --- a/core/res/res/layout/screen_custom_title.xml +++ b/core/res/res/layout/screen_custom_title.xml @@ -26,7 +26,8 @@ This is a custom layout for a screen. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> <FrameLayout android:id="@android:id/title_container" android:layout_width="match_parent" diff --git a/core/res/res/layout/screen_progress.xml b/core/res/res/layout/screen_progress.xml index 1f04d35..e70f2ec 100644 --- a/core/res/res/layout/screen_progress.xml +++ b/core/res/res/layout/screen_progress.xml @@ -31,7 +31,8 @@ This is the basic layout for a screen, with all of its features enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> <RelativeLayout android:id="@android:id/title_container" style="?android:attr/windowTitleBackgroundStyle" diff --git a/core/res/res/layout/screen_simple.xml b/core/res/res/layout/screen_simple.xml index c1914e7..6111348 100644 --- a/core/res/res/layout/screen_simple.xml +++ b/core/res/res/layout/screen_simple.xml @@ -30,7 +30,8 @@ enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> <FrameLayout android:id="@android:id/content" android:layout_width="match_parent" diff --git a/core/res/res/layout/screen_simple_overlay_action_mode.xml b/core/res/res/layout/screen_simple_overlay_action_mode.xml index c790d10..52b893b 100644 --- a/core/res/res/layout/screen_simple_overlay_action_mode.xml +++ b/core/res/res/layout/screen_simple_overlay_action_mode.xml @@ -35,5 +35,6 @@ enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> </FrameLayout> diff --git a/core/res/res/layout/screen_title.xml b/core/res/res/layout/screen_title.xml index f5134f9..409e9c6 100644 --- a/core/res/res/layout/screen_title.xml +++ b/core/res/res/layout/screen_title.xml @@ -27,7 +27,8 @@ enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme" /> <FrameLayout android:layout_width="match_parent" android:layout_height="?android:attr/windowTitleSize" diff --git a/core/res/res/layout/screen_title_icons.xml b/core/res/res/layout/screen_title_icons.xml index b866e57..f145429 100644 --- a/core/res/res/layout/screen_title_icons.xml +++ b/core/res/res/layout/screen_title_icons.xml @@ -28,7 +28,8 @@ This is the basic layout for a screen, with all of its features enabled. android:inflatedId="@+id/action_mode_bar" android:layout="@layout/action_mode_bar" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme"/> <RelativeLayout android:id="@android:id/title_container" style="?android:attr/windowTitleBackgroundStyle" android:layout_width="match_parent" diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 4f906ff..59eef74 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1203,8 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Comparteix amb %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Selecciona una aplicació d\'inici"</string> <string name="alwaysUse" msgid="4583018368000610438">"Utilitza-ho de manera predeterminada per a aquesta acció."</string> - <!-- no translation found for use_a_different_app (8134926230585710243) --> - <skip /> + <string name="use_a_different_app" msgid="8134926230585710243">"Fes servir una altra aplicació"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Esborra els paràmetres predeterminats a Configuració del sistema > Aplicacions > Baixades."</string> <string name="chooseActivity" msgid="7486876147751803333">"Tria una acció"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Tria una aplicació per al dispositiu USB"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 85a8d80..448e072 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -1768,7 +1768,7 @@ <string name="lock_to_app_title" msgid="1682643873107812874">"از پین کردن صفحه استفاده شود؟"</string> <string name="lock_to_app_description" msgid="9076084599283282800">"پین کردن صفحه، نمایشگر را در یک نمای واحد قفل میکند.\n\nبرای خروج، کلیدهای بازگشت و برنامههای اخیر را همزمان لمس کنید و نگه دارید."</string> <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"پین کردن صفحه، نمایشگر را در یک نمای واحد قفل میکند.\n\nبرای خروج، کلید برنامههای اخیر را لمس کنید و نگه دارید."</string> - <string name="lock_to_app_negative" msgid="2259143719362732728">"نه، سپاسگزارم"</string> + <string name="lock_to_app_negative" msgid="2259143719362732728">"خیر، سپاسگزارم"</string> <string name="lock_to_app_positive" msgid="7085139175671313864">"شروع"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"صفحه پین شد"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"پین صفحه برداشته شد"</string> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index d63be70..64d1f9e 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -1203,7 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Տարածել ըստ %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Ընտրեք հիմնական հավելվածը"</string> <string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել լռելյայն այս գործողության համար:"</string> - <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ ծրագիր"</string> + <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ հավելված"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Մաքրել լռելյայնը Համակարգի կարգավորումներ > Ծրագրեր >Ներբեռնված էջից:"</string> <string name="chooseActivity" msgid="7486876147751803333">"Ընտրել գործողություն"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Ընտրեք հավելված USB սարքի համար"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index a8c8f1c..f1691ef 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -211,7 +211,7 @@ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"שימוש בתכונות שיכולות לרוקן את הסוללה במהירות."</string> - <string name="permgrouplab_calendar" msgid="5863508437783683902">"לוח שנה"</string> + <string name="permgrouplab_calendar" msgid="5863508437783683902">"יומן"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"גישה ישירה ללוח השנה ולאירועים."</string> <string name="permgrouplab_dictionary" msgid="4148597128843641379">"קריאת מילון משתמש"</string> <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"קריאת מילים במילון משתמש."</string> @@ -500,11 +500,11 @@ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"כתיבה בזרם החברתי שלך"</string> <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"מאפשר לאפליקציה להציג עדכונים חברתיים מהחברים שלך. היזהר בעת שיתוף מידע -- הדבר מאפשר לאפליקציה ליצור הודעות שעשויות להיראות כאילו שנשלחו מחבר. שים לב: ייתכן אישור זה לא נאכף בכל הרשתות החברתיות."</string> <string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי יומן וגם מידע סודי"</string> - <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"מאפשר לאפליקציה לקרוא את כל אירועי לוח השנה המאוחסנים בטאבלט, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני לוח השנה שלך, ללא התחשבות בסודיות או ברגישות."</string> - <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"מאפשר לאפליקציה לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני לוח השנה שלך, ללא התחשבות בסודיות או ברגישות."</string> + <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"מאפשר לאפליקציה לקרוא את כל אירועי היומן המאוחסנים בטאבלט, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני היומן שלך, ללא התחשבות בסודיות או ברגישות."</string> + <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"מאפשר לאפליקציה לקרוא את כל אירועי היומן המאוחסנים בטלפון, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני היומן שלך, ללא התחשבות בסודיות או ברגישות."</string> <string name="permlab_writeCalendar" msgid="8438874755193825647">"הוספה ושינוי של אירועי יומן ושליחת דוא\"ל לאורחים ללא ידיעת הבעלים"</string> - <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטאבלט, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string> - <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטלפון, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string> + <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטאבלט, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי יומן או לשנות אירועים ללא ידיעת הבעלים."</string> + <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטלפון, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי יומן או לשנות אירועים ללא ידיעת הבעלים."</string> <string name="permlab_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string> <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string> <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גישה לפקודות ספק מיקום נוספות"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 8b13e83..a67eeb9 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -397,8 +397,8 @@ <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Ļauj īpašniekam izveidot savienojumu ar drukāšanas pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"izveidot savienojumu ar drukas spolētāja pakalpojumu"</string> <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Ļauj īpašniekam izveidot savienojumu ar drukas spolētāja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> - <string name="permlab_bindNfcService" msgid="2752731300419410724">"Saistīt ar TDLS pakalpojumu"</string> - <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Ļauj īpašniekam saistīt lietojumprogrammas, kas emulē TDLS kartes. Parastajām lietotnēm šī atļauja nav nepieciešama."</string> + <string name="permlab_bindNfcService" msgid="2752731300419410724">"Saistīt ar NFC pakalpojumu"</string> + <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Ļauj īpašniekam saistīt lietojumprogrammas, kas emulē NFC kartes. Parastajām lietotnēm šī atļauja nav nepieciešama."</string> <string name="permlab_bindTextService" msgid="7358378401915287938">"saistīt ar īsziņu pakalpojumu"</string> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa saskarni (piem., SpellCheckerService). Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindVpnService" msgid="4708596021161473255">"saistīt ar VPN pakalpojumu"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 36465c9..746eb4f 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1071,7 +1071,7 @@ </plurals> <plurals name="num_hours_ago"> <item quantity="one" msgid="9150797944610821849">"godzinę temu"</item> - <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> godzin temu"</item> + <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> godz. temu"</item> </plurals> <plurals name="last_num_days"> <item quantity="other" msgid="3069992808164318268">"Ostatnie (<xliff:g id="COUNT">%d</xliff:g>) dni"</item> @@ -1199,8 +1199,8 @@ <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otwórz w aplikacji %1$s"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edytuj w aplikacji"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edytuj w aplikacji %1$s"</string> - <string name="whichSendApplication" msgid="6902512414057341668">"Udostępnij w aplikacji"</string> - <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Udostępnij w aplikacji %1$s"</string> + <string name="whichSendApplication" msgid="6902512414057341668">"Udostępnij przez"</string> + <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Udostępnij przez %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Wybierz aplikację ekranu głównego"</string> <string name="alwaysUse" msgid="4583018368000610438">"Domyślne dla tej czynności"</string> <string name="use_a_different_app" msgid="8134926230585710243">"Użyj innej aplikacji"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 12c6661..48d4920 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -300,8 +300,8 @@ <string name="permdesc_receiveBluetoothMap" msgid="8656755936919466345">"Permite aplicației să primească și să proceseze mesaje MAP prin Bluetooth. Aceasta înseamnă că aplicația ar putea monitoriza sau șterge mesajele trimise pe dispozitiv fără a le afișa."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"preluare aplicaţii care rulează"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite aplicaţiei să preia informaţiile despre activităţile care rulează în prezent şi care au rulat recent. În acest fel, aplicaţia poate descoperi informaţii despre aplicaţiile care sunt utilizate pe dispozitiv."</string> - <string name="permlab_startTasksFromRecents" msgid="8990073877885690623">"start a task from recents"</string> - <string name="permdesc_startTasksFromRecents" msgid="7382133554871222235">"Allows the app to use an ActivityManager.RecentTaskInfo object to launch a defunct task that was returned from ActivityManager.getRecentTaskList()."</string> + <string name="permlab_startTasksFromRecents" msgid="8990073877885690623">"începeți o sarcină din activități recente"</string> + <string name="permdesc_startTasksFromRecents" msgid="7382133554871222235">"Permite aplicației să utilizeze obiectul ActivityManager.RecentTaskInfo pentru a lansa o sarcină eșuată, readusă din ActivityManager.getRecentTaskList()."</string> <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"interacţiune între utilizatori"</string> <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Permite aplicaţiei să efectueze acţiuni pentru diferiţi utilizatori pe dispozitiv. Aplicaţiile rău intenţionate pot utiliza această permisiune pentru a încălca protecţia între utilizatori."</string> <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"licenţă completă pentru interacţiune între utilizatori"</string> @@ -1766,8 +1766,8 @@ <string name="lock_to_app_toast_accessible" msgid="3340628918851844044">"Pentru a anula fixarea acestui ecran, atingeți și țineți apăsat pe Recente."</string> <string name="lock_to_app_toast_locked" msgid="8739004135132606329">"Ecranul este fixat. Anularea fixării nu este permisă de organizația dvs."</string> <string name="lock_to_app_title" msgid="1682643873107812874">"Utilizați fixarea ecranului?"</string> - <string name="lock_to_app_description" msgid="9076084599283282800">"Fixarea ecranului îl blochează pe acesta într-un display unic.\n\nPentru a ieși, atingeți și țineți apăsat pe Înapoi și Recente în același timp."</string> - <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"Fixarea ecranului îl blochează pe acesta într-un display unic.\n\nPentru a ieși, atingeți și țineți apăsat Recente."</string> + <string name="lock_to_app_description" msgid="9076084599283282800">"Dacă fixați ecranul, rămâne o singură vizualizare.\n\nPentru a ieși, atingeți și țineți apăsat pe Înapoi și Recente în același timp."</string> + <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"Dacă fixați ecranul, rămâne o singură vizualizare.\n\nPentru a ieși, atingeți și țineți apăsat pe Recente."</string> <string name="lock_to_app_negative" msgid="2259143719362732728">"NU, MULȚUMESC"</string> <string name="lock_to_app_positive" msgid="7085139175671313864">"PORNIȚI"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Ecran fixat"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 3a0e500..d2cee98 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1213,9 +1213,9 @@ <string name="aerr_process" msgid="4507058997035697579">"Kwa bahati mbaya, mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> umekoma."</string> <string name="anr_title" msgid="4351948481459135709"></string> <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> haifanyi kazi.\n\nUnataka kuifunga?"</string> - <string name="anr_activity_process" msgid="5776209883299089767">"Shughuli <xliff:g id="ACTIVITY">%1$s</xliff:g> haijibu. \n\n Unataka kuifunga?"</string> - <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> haijibu. Unataka kufunga?"</string> - <string name="anr_process" msgid="6513209874880517125">"Mchakato <xliff:g id="PROCESS">%1$s</xliff:g> haijibu. \n\n Unataka kuifunga?"</string> + <string name="anr_activity_process" msgid="5776209883299089767">"Shughuli ya <xliff:g id="ACTIVITY">%1$s</xliff:g> haifanyi kazi.\n\nJe, ungependa kuifunga?"</string> + <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> haifanyi kazi. Je, ungependa kuifunga?"</string> + <string name="anr_process" msgid="6513209874880517125">"Mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> haufanyi kazi. \n\nJe, ungependa kuifunga?"</string> <string name="force_close" msgid="8346072094521265605">"Sawa"</string> <string name="report" msgid="4060218260984795706">"Ripoti"</string> <string name="wait" msgid="7147118217226317732">"Subiri"</string> diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml index 64638ba..2f17e75 100644 --- a/core/res/res/values-ur-rPK/strings.xml +++ b/core/res/res/values-ur-rPK/strings.xml @@ -1203,8 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"%1$s کے ساتھ اشتراک کریں"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"ایک ہوم ایپ منتخب کریں"</string> <string name="alwaysUse" msgid="4583018368000610438">"اس کارروائی کیلئے بطور ڈیفالٹ استعمال کریں۔"</string> - <!-- no translation found for use_a_different_app (8134926230585710243) --> - <skip /> + <string name="use_a_different_app" msgid="8134926230585710243">"ایک مختلف ایپ استعمال کریں"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"سسٹم ترتیبات > ایپس > ڈاؤن لوڈ کردہ میں ڈیفالٹ صاف کریں۔"</string> <string name="chooseActivity" msgid="7486876147751803333">"ایک کارروائی منتخب کریں"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"USB آلہ کیلئے ایک ایپ منتخب کریں"</string> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index feac522..949c38c 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1791,6 +1791,7 @@ <item>SUPL_PORT=7275</item> <item>NTP_SERVER=north-america.pool.ntp.org</item> <item>SUPL_VER=0x20000</item> + <item>SUPL_MODE=0x01</item> </string-array> <!-- If there is no preload VM number in the sim card, carriers such as diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 4bc1ff3..bbd40a1 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2101,485 +2101,485 @@ <!-- =============================================================== Resources added in version 21 of the platform =============================================================== --> - <eat-comment /> - - <public type="attr" name="fastScrollStyle" /> - <public type="attr" name="windowContentTransitions" /> - <public type="attr" name="windowContentTransitionManager" /> - <public type="attr" name="translationZ" /> - <public type="attr" name="tintMode" /> - <public type="attr" name="controlX1" /> - <public type="attr" name="controlY1" /> - <public type="attr" name="controlX2" /> - <public type="attr" name="controlY2" /> - <public type="attr" name="transitionName" /> - <public type="attr" name="transitionGroup" /> - <public type="attr" name="viewportWidth" /> - <public type="attr" name="viewportHeight" /> - <public type="attr" name="fillColor" /> - <public type="attr" name="pathData" /> - <public type="attr" name="strokeColor" /> - <public type="attr" name="strokeWidth" /> - <public type="attr" name="trimPathStart" /> - <public type="attr" name="trimPathEnd" /> - <public type="attr" name="trimPathOffset" /> - <public type="attr" name="strokeLineCap" /> - <public type="attr" name="strokeLineJoin" /> - <public type="attr" name="strokeMiterLimit" /> - <public type="attr" name="colorControlNormal" id="0x1010429"/> - <public type="attr" name="colorControlActivated" /> - <public type="attr" name="colorButtonNormal" /> - <public type="attr" name="colorControlHighlight" /> - <public type="attr" name="persistableMode" /> - <public type="attr" name="titleTextAppearance" /> - <public type="attr" name="subtitleTextAppearance" /> - <public type="attr" name="slideEdge" /> - <public type="attr" name="actionBarTheme" /> - <public type="attr" name="textAppearanceListItemSecondary" /> - <public type="attr" name="colorPrimary" /> - <public type="attr" name="colorPrimaryDark" /> - <public type="attr" name="colorAccent" /> - <public type="attr" name="nestedScrollingEnabled" /> - <public type="attr" name="windowEnterTransition" /> - <public type="attr" name="windowExitTransition" /> - <public type="attr" name="windowSharedElementEnterTransition" /> - <public type="attr" name="windowSharedElementExitTransition" /> - <public type="attr" name="windowAllowReturnTransitionOverlap" /> - <public type="attr" name="windowAllowEnterTransitionOverlap" /> - <public type="attr" name="sessionService" /> - <public type="attr" name="stackViewStyle" /> - <public type="attr" name="switchStyle" /> - <public type="attr" name="elevation" /> - <public type="attr" name="excludeId" /> - <public type="attr" name="excludeClass" /> - <public type="attr" name="hideOnContentScroll" /> - <public type="attr" name="actionOverflowMenuStyle" /> - <public type="attr" name="documentLaunchMode" /> - <public type="attr" name="maxRecents" /> - <public type="attr" name="autoRemoveFromRecents" /> - <public type="attr" name="stateListAnimator" /> - <public type="attr" name="toId" /> - <public type="attr" name="fromId" /> - <public type="attr" name="reversible" /> - <public type="attr" name="splitTrack" /> - <public type="attr" name="targetName" /> - <public type="attr" name="excludeName" /> - <public type="attr" name="matchOrder" /> - <public type="attr" name="windowDrawsSystemBarBackgrounds" /> - <public type="attr" name="statusBarColor"/> - <public type="attr" name="navigationBarColor"/> - <public type="attr" name="contentInsetStart" /> - <public type="attr" name="contentInsetEnd" /> - <public type="attr" name="contentInsetLeft" /> - <public type="attr" name="contentInsetRight" /> - <public type="attr" name="paddingMode" /> - <public type="attr" name="layout_rowWeight" /> - <public type="attr" name="layout_columnWeight" /> - <public type="attr" name="translateX" /> - <public type="attr" name="translateY" /> - <public type="attr" name="selectableItemBackgroundBorderless" /> - <public type="attr" name="elegantTextHeight" /> - <public type="attr" name="searchKeyphraseId" /> - <public type="attr" name="searchKeyphrase" /> - <public type="attr" name="searchKeyphraseSupportedLocales" /> - <public type="attr" name="windowTransitionBackgroundFadeDuration" /> - <public type="attr" name="overlapAnchor" /> - <public type="attr" name="progressTint" /> - <public type="attr" name="progressTintMode" /> - <public type="attr" name="progressBackgroundTint" /> - <public type="attr" name="progressBackgroundTintMode" /> - <public type="attr" name="secondaryProgressTint" /> - <public type="attr" name="secondaryProgressTintMode" /> - <public type="attr" name="indeterminateTint" /> - <public type="attr" name="indeterminateTintMode" /> - <public type="attr" name="backgroundTint" /> - <public type="attr" name="backgroundTintMode" /> - <public type="attr" name="foregroundTint" /> - <public type="attr" name="foregroundTintMode" /> - <public type="attr" name="buttonTint" /> - <public type="attr" name="buttonTintMode" /> - <public type="attr" name="thumbTint" /> - <public type="attr" name="thumbTintMode" /> - <public type="attr" name="fullBackupOnly" /> - <public type="attr" name="propertyXName" /> - <public type="attr" name="propertyYName" /> - <public type="attr" name="relinquishTaskIdentity" /> - <public type="attr" name="tileModeX" /> - <public type="attr" name="tileModeY" /> - <public type="attr" name="actionModeShareDrawable" /> - <public type="attr" name="actionModeFindDrawable" /> - <public type="attr" name="actionModeWebSearchDrawable" /> - <public type="attr" name="transitionVisibilityMode" /> - <public type="attr" name="minimumHorizontalAngle" /> - <public type="attr" name="minimumVerticalAngle" /> - <public type="attr" name="maximumAngle" /> - <public type="attr" name="searchViewStyle" /> - <public type="attr" name="closeIcon" /> - <public type="attr" name="goIcon" /> - <public type="attr" name="searchIcon" /> - <public type="attr" name="voiceIcon" /> - <public type="attr" name="commitIcon" /> - <public type="attr" name="suggestionRowLayout" /> - <public type="attr" name="queryBackground" /> - <public type="attr" name="submitBackground" /> - <public type="attr" name="buttonBarPositiveButtonStyle" /> - <public type="attr" name="buttonBarNeutralButtonStyle" /> - <public type="attr" name="buttonBarNegativeButtonStyle" /> - <public type="attr" name="popupElevation" /> - <public type="attr" name="actionBarPopupTheme" /> - <public type="attr" name="multiArch" /> - <public type="attr" name="touchscreenBlocksFocus" /> - <public type="attr" name="windowElevation" /> - <public type="attr" name="launchTaskBehindTargetAnimation" /> - <public type="attr" name="launchTaskBehindSourceAnimation" /> - <public type="attr" name="restrictionType" /> - <public type="attr" name="dayOfWeekBackground" /> - <public type="attr" name="dayOfWeekTextAppearance" /> - <public type="attr" name="headerMonthTextAppearance" /> - <public type="attr" name="headerDayOfMonthTextAppearance" /> - <public type="attr" name="headerYearTextAppearance" /> - <public type="attr" name="yearListItemTextAppearance" /> - <public type="attr" name="yearListSelectorColor" /> - <public type="attr" name="calendarTextColor" /> - <public type="attr" name="recognitionService" /> - <public type="attr" name="timePickerStyle" /> - <public type="attr" name="timePickerDialogTheme" /> - <public type="attr" name="headerTimeTextAppearance" /> - <public type="attr" name="headerAmPmTextAppearance" /> - <public type="attr" name="numbersTextColor" /> - <public type="attr" name="numbersBackgroundColor" /> - <public type="attr" name="numbersSelectorColor" /> - <public type="attr" name="amPmTextColor" /> - <public type="attr" name="amPmBackgroundColor" /> - <public type="attr" name="searchKeyphraseRecognitionFlags" /> - <public type="attr" name="checkMarkTint" /> - <public type="attr" name="checkMarkTintMode" /> - <public type="attr" name="popupTheme" /> - <public type="attr" name="toolbarStyle" /> - <public type="attr" name="windowClipToOutline" /> - <public type="attr" name="datePickerDialogTheme" /> - <public type="attr" name="showText" /> - <public type="attr" name="windowReturnTransition" /> - <public type="attr" name="windowReenterTransition" /> - <public type="attr" name="windowSharedElementReturnTransition" /> - <public type="attr" name="windowSharedElementReenterTransition" /> - <public type="attr" name="resumeWhilePausing" /> - <public type="attr" name="datePickerMode"/> - <public type="attr" name="timePickerMode"/> - <public type="attr" name="inset" /> - <public type="attr" name="letterSpacing" /> - <public type="attr" name="fontFeatureSettings" /> - <public type="attr" name="outlineProvider" /> - <public type="attr" name="contentAgeHint" /> - <public type="attr" name="country" /> - <public type="attr" name="windowSharedElementsUseOverlay" /> - <public type="attr" name="reparent" /> - <public type="attr" name="reparentWithOverlay" /> - <public type="attr" name="ambientShadowAlpha" /> - <public type="attr" name="spotShadowAlpha" /> - <public type="attr" name="navigationIcon" /> - <public type="attr" name="navigationContentDescription" /> - <public type="attr" name="fragmentExitTransition" /> - <public type="attr" name="fragmentEnterTransition" /> - <public type="attr" name="fragmentSharedElementEnterTransition" /> - <public type="attr" name="fragmentReturnTransition" /> - <public type="attr" name="fragmentSharedElementReturnTransition" /> - <public type="attr" name="fragmentReenterTransition" /> - <public type="attr" name="fragmentAllowEnterTransitionOverlap" /> - <public type="attr" name="fragmentAllowReturnTransitionOverlap" /> - <public type="attr" name="patternPathData" /> - <public type="attr" name="strokeAlpha" /> - <public type="attr" name="fillAlpha" /> - <public type="attr" name="windowActivityTransitions" /> - - <public type="id" name="mask" /> - <public type="id" name="statusBarBackground" /> - <public type="id" name="navigationBarBackground" /> - - <public type="style" name="Widget.FastScroll" /> - <public type="style" name="Widget.StackView" /> - <public type="style" name="Widget.Toolbar" /> - <public type="style" name="Widget.Toolbar.Button.Navigation" /> - - <public type="style" name="Widget.DeviceDefault.FastScroll" /> - <public type="style" name="Widget.DeviceDefault.StackView" /> - <public type="style" name="Widget.DeviceDefault.Light.FastScroll" /> - <public type="style" name="Widget.DeviceDefault.Light.StackView" /> - - <public type="style" name="TextAppearance.Material" /> - <public type="style" name="TextAppearance.Material.Button" /> - <public type="style" name="TextAppearance.Material.Body2" /> - <public type="style" name="TextAppearance.Material.Body1" /> - <public type="style" name="TextAppearance.Material.Caption" /> - <public type="style" name="TextAppearance.Material.DialogWindowTitle" /> - <public type="style" name="TextAppearance.Material.Display4" /> - <public type="style" name="TextAppearance.Material.Display3" /> - <public type="style" name="TextAppearance.Material.Display2" /> - <public type="style" name="TextAppearance.Material.Display1" /> - <public type="style" name="TextAppearance.Material.Headline" /> - <public type="style" name="TextAppearance.Material.Inverse" /> - <public type="style" name="TextAppearance.Material.Large" /> - <public type="style" name="TextAppearance.Material.Large.Inverse" /> - <public type="style" name="TextAppearance.Material.Medium" /> - <public type="style" name="TextAppearance.Material.Medium.Inverse" /> - <public type="style" name="TextAppearance.Material.Menu" /> - <public type="style" name="TextAppearance.Material.Notification" /> - <public type="style" name="TextAppearance.Material.Notification.Emphasis" /> - <public type="style" name="TextAppearance.Material.Notification.Info" /> - <public type="style" name="TextAppearance.Material.Notification.Line2" /> - <public type="style" name="TextAppearance.Material.Notification.Time" /> - <public type="style" name="TextAppearance.Material.Notification.Title" /> - <public type="style" name="TextAppearance.Material.SearchResult.Subtitle" /> - <public type="style" name="TextAppearance.Material.SearchResult.Title" /> - <public type="style" name="TextAppearance.Material.Small" /> - <public type="style" name="TextAppearance.Material.Small.Inverse" /> - <public type="style" name="TextAppearance.Material.Subhead" /> - <public type="style" name="TextAppearance.Material.Title" /> - <public type="style" name="TextAppearance.Material.WindowTitle" /> - - <public type="style" name="TextAppearance.Material.Widget" /> - <public type="style" name="TextAppearance.Material.Widget.ActionBar.Menu" /> - <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle" /> - <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse" /> - <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title" /> - <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title.Inverse" /> - <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle" /> - <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse" /> - <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title" /> - <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title.Inverse" /> - <public type="style" name="TextAppearance.Material.Widget.Button" /> - <public type="style" name="TextAppearance.Material.Widget.DropDownHint" /> - <public type="style" name="TextAppearance.Material.Widget.DropDownItem" /> - <public type="style" name="TextAppearance.Material.Widget.EditText" /> - <public type="style" name="TextAppearance.Material.Widget.IconMenu.Item" /> - <public type="style" name="TextAppearance.Material.Widget.PopupMenu" /> - <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Large" /> - <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Small" /> - <public type="style" name="TextAppearance.Material.Widget.TabWidget" /> - <public type="style" name="TextAppearance.Material.Widget.TextView" /> - <public type="style" name="TextAppearance.Material.Widget.TextView.PopupMenu" /> - <public type="style" name="TextAppearance.Material.Widget.TextView.SpinnerItem" /> - <public type="style" name="TextAppearance.Material.Widget.Toolbar.Subtitle" /> - <public type="style" name="TextAppearance.Material.Widget.Toolbar.Title" /> - - <public type="style" name="Theme.DeviceDefault.Settings" /> - - <public type="style" name="Theme.Material" /> - <public type="style" name="Theme.Material.Dialog" /> - <public type="style" name="Theme.Material.Dialog.Alert" /> - <public type="style" name="Theme.Material.Dialog.MinWidth" /> - <public type="style" name="Theme.Material.Dialog.NoActionBar" /> - <public type="style" name="Theme.Material.Dialog.NoActionBar.MinWidth" /> - <public type="style" name="Theme.Material.Dialog.Presentation" /> - <public type="style" name="Theme.Material.DialogWhenLarge" /> - <public type="style" name="Theme.Material.DialogWhenLarge.NoActionBar" /> - <public type="style" name="Theme.Material.InputMethod" /> - <public type="style" name="Theme.Material.NoActionBar" /> - <public type="style" name="Theme.Material.NoActionBar.Fullscreen" /> - <public type="style" name="Theme.Material.NoActionBar.Overscan" /> - <public type="style" name="Theme.Material.NoActionBar.TranslucentDecor" /> - <public type="style" name="Theme.Material.Panel" /> - <public type="style" name="Theme.Material.Settings" /> - <public type="style" name="Theme.Material.Voice" /> - <public type="style" name="Theme.Material.Wallpaper" /> - <public type="style" name="Theme.Material.Wallpaper.NoTitleBar" /> - - <public type="style" name="Theme.Material.Light" /> - <public type="style" name="Theme.Material.Light.DarkActionBar" /> - <public type="style" name="Theme.Material.Light.Dialog" /> - <public type="style" name="Theme.Material.Light.Dialog.Alert" /> - <public type="style" name="Theme.Material.Light.Dialog.MinWidth" /> - <public type="style" name="Theme.Material.Light.Dialog.NoActionBar" /> - <public type="style" name="Theme.Material.Light.Dialog.NoActionBar.MinWidth" /> - <public type="style" name="Theme.Material.Light.Dialog.Presentation" /> - <public type="style" name="Theme.Material.Light.DialogWhenLarge" /> - <public type="style" name="Theme.Material.Light.DialogWhenLarge.NoActionBar" /> - <public type="style" name="Theme.Material.Light.NoActionBar" /> - <public type="style" name="Theme.Material.Light.NoActionBar.Fullscreen" /> - <public type="style" name="Theme.Material.Light.NoActionBar.Overscan" /> - <public type="style" name="Theme.Material.Light.NoActionBar.TranslucentDecor" /> - <public type="style" name="Theme.Material.Light.Panel" /> - <public type="style" name="Theme.Material.Light.Voice" /> - - <public type="style" name="ThemeOverlay" /> - <public type="style" name="ThemeOverlay.Material" /> - <public type="style" name="ThemeOverlay.Material.ActionBar" /> - <public type="style" name="ThemeOverlay.Material.Light" /> - <public type="style" name="ThemeOverlay.Material.Dark" /> - <public type="style" name="ThemeOverlay.Material.Dark.ActionBar" /> - - <public type="style" name="Widget.Material" /> - <public type="style" name="Widget.Material.ActionBar" /> - <public type="style" name="Widget.Material.ActionBar.Solid" /> - <public type="style" name="Widget.Material.ActionBar.TabBar" /> - <public type="style" name="Widget.Material.ActionBar.TabText" /> - <public type="style" name="Widget.Material.ActionBar.TabView" /> - <public type="style" name="Widget.Material.ActionButton" /> - <public type="style" name="Widget.Material.ActionButton.CloseMode" /> - <public type="style" name="Widget.Material.ActionButton.Overflow" /> - <public type="style" name="Widget.Material.ActionMode" /> - <public type="style" name="Widget.Material.AutoCompleteTextView" /> - <public type="style" name="Widget.Material.Button" /> - <public type="style" name="Widget.Material.Button.Borderless" /> - <public type="style" name="Widget.Material.Button.Borderless.Colored" /> - <public type="style" name="Widget.Material.Button.Borderless.Small" /> - <public type="style" name="Widget.Material.Button.Inset" /> - <public type="style" name="Widget.Material.Button.Small" /> - <public type="style" name="Widget.Material.Button.Toggle" /> - <public type="style" name="Widget.Material.ButtonBar" /> - <public type="style" name="Widget.Material.ButtonBar.AlertDialog" /> - <public type="style" name="Widget.Material.CalendarView" /> - <public type="style" name="Widget.Material.CheckedTextView" /> - <public type="style" name="Widget.Material.CompoundButton.CheckBox" /> - <public type="style" name="Widget.Material.CompoundButton.RadioButton" /> - <public type="style" name="Widget.Material.CompoundButton.Star" /> - <public type="style" name="Widget.Material.DatePicker" /> - <public type="style" name="Widget.Material.DropDownItem" /> - <public type="style" name="Widget.Material.DropDownItem.Spinner" /> - <public type="style" name="Widget.Material.EditText" /> - <public type="style" name="Widget.Material.ExpandableListView" /> - <public type="style" name="Widget.Material.FastScroll" /> - <public type="style" name="Widget.Material.GridView" /> - <public type="style" name="Widget.Material.HorizontalScrollView" /> - <public type="style" name="Widget.Material.ImageButton" /> - <public type="style" name="Widget.Material.ListPopupWindow" /> - <public type="style" name="Widget.Material.ListView" /> - <public type="style" name="Widget.Material.ListView.DropDown" /> - <public type="style" name="Widget.Material.MediaRouteButton" /> - <public type="style" name="Widget.Material.PopupMenu" /> - <public type="style" name="Widget.Material.PopupMenu.Overflow" /> - <public type="style" name="Widget.Material.PopupWindow" /> - <public type="style" name="Widget.Material.ProgressBar" /> - <public type="style" name="Widget.Material.ProgressBar.Horizontal" /> - <public type="style" name="Widget.Material.ProgressBar.Large" /> - <public type="style" name="Widget.Material.ProgressBar.Small" /> - <public type="style" name="Widget.Material.ProgressBar.Small.Title" /> - <public type="style" name="Widget.Material.RatingBar" /> - <public type="style" name="Widget.Material.RatingBar.Indicator" /> - <public type="style" name="Widget.Material.RatingBar.Small" /> - <public type="style" name="Widget.Material.ScrollView" /> - <public type="style" name="Widget.Material.SearchView" /> - <public type="style" name="Widget.Material.SeekBar" /> - <public type="style" name="Widget.Material.SegmentedButton" /> - <public type="style" name="Widget.Material.StackView" /> - <public type="style" name="Widget.Material.Spinner" /> - <public type="style" name="Widget.Material.Spinner.Underlined" /> - <public type="style" name="Widget.Material.Tab" /> - <public type="style" name="Widget.Material.TabWidget" /> - <public type="style" name="Widget.Material.TextView" /> - <public type="style" name="Widget.Material.TextView.SpinnerItem" /> - <public type="style" name="Widget.Material.TimePicker" /> - <public type="style" name="Widget.Material.Toolbar" /> - <public type="style" name="Widget.Material.Toolbar.Button.Navigation" /> - <public type="style" name="Widget.Material.WebTextView" /> - <public type="style" name="Widget.Material.WebView" /> - - <public type="style" name="Widget.Material.Light" /> - <public type="style" name="Widget.Material.Light.ActionBar" /> - <public type="style" name="Widget.Material.Light.ActionBar.Solid" /> - <public type="style" name="Widget.Material.Light.ActionBar.TabBar" /> - <public type="style" name="Widget.Material.Light.ActionBar.TabText" /> - <public type="style" name="Widget.Material.Light.ActionBar.TabView" /> - <public type="style" name="Widget.Material.Light.ActionButton" /> - <public type="style" name="Widget.Material.Light.ActionButton.CloseMode" /> - <public type="style" name="Widget.Material.Light.ActionButton.Overflow" /> - <public type="style" name="Widget.Material.Light.ActionMode" /> - <public type="style" name="Widget.Material.Light.AutoCompleteTextView" /> - <public type="style" name="Widget.Material.Light.Button" /> - <public type="style" name="Widget.Material.Light.Button.Borderless" /> - <public type="style" name="Widget.Material.Light.Button.Borderless.Colored" /> - <public type="style" name="Widget.Material.Light.Button.Borderless.Small" /> - <public type="style" name="Widget.Material.Light.Button.Inset" /> - <public type="style" name="Widget.Material.Light.Button.Small" /> - <public type="style" name="Widget.Material.Light.Button.Toggle" /> - <public type="style" name="Widget.Material.Light.ButtonBar" /> - <public type="style" name="Widget.Material.Light.ButtonBar.AlertDialog" /> - <public type="style" name="Widget.Material.Light.CalendarView" /> - <public type="style" name="Widget.Material.Light.CheckedTextView" /> - <public type="style" name="Widget.Material.Light.CompoundButton.CheckBox" /> - <public type="style" name="Widget.Material.Light.CompoundButton.RadioButton" /> - <public type="style" name="Widget.Material.Light.CompoundButton.Star" /> - <public type="style" name="Widget.Material.Light.DatePicker" /> - <public type="style" name="Widget.Material.Light.DropDownItem" /> - <public type="style" name="Widget.Material.Light.DropDownItem.Spinner" /> - <public type="style" name="Widget.Material.Light.EditText" /> - <public type="style" name="Widget.Material.Light.ExpandableListView" /> - <public type="style" name="Widget.Material.Light.FastScroll" /> - <public type="style" name="Widget.Material.Light.GridView" /> - <public type="style" name="Widget.Material.Light.HorizontalScrollView" /> - <public type="style" name="Widget.Material.Light.ImageButton" /> - <public type="style" name="Widget.Material.Light.ListPopupWindow" /> - <public type="style" name="Widget.Material.Light.ListView" /> - <public type="style" name="Widget.Material.Light.ListView.DropDown" /> - <public type="style" name="Widget.Material.Light.MediaRouteButton" /> - <public type="style" name="Widget.Material.Light.PopupMenu" /> - <public type="style" name="Widget.Material.Light.PopupMenu.Overflow" /> - <public type="style" name="Widget.Material.Light.PopupWindow" /> - <public type="style" name="Widget.Material.Light.ProgressBar" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Horizontal" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Inverse" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Large" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Large.Inverse" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Small" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Small.Inverse" /> - <public type="style" name="Widget.Material.Light.ProgressBar.Small.Title" /> - <public type="style" name="Widget.Material.Light.RatingBar" /> - <public type="style" name="Widget.Material.Light.RatingBar.Indicator" /> - <public type="style" name="Widget.Material.Light.RatingBar.Small" /> - <public type="style" name="Widget.Material.Light.ScrollView" /> - <public type="style" name="Widget.Material.Light.SearchView" /> - <public type="style" name="Widget.Material.Light.SeekBar" /> - <public type="style" name="Widget.Material.Light.SegmentedButton" /> - <public type="style" name="Widget.Material.Light.StackView" /> - <public type="style" name="Widget.Material.Light.Spinner" /> - <public type="style" name="Widget.Material.Light.Spinner.Underlined" /> - <public type="style" name="Widget.Material.Light.Tab" /> - <public type="style" name="Widget.Material.Light.TabWidget" /> - <public type="style" name="Widget.Material.Light.TextView" /> - <public type="style" name="Widget.Material.Light.TextView.SpinnerItem" /> - <public type="style" name="Widget.Material.Light.TimePicker" /> - <public type="style" name="Widget.Material.Light.WebTextView" /> - <public type="style" name="Widget.Material.Light.WebView" /> - - <!-- @hide This really shouldn't be public; clients using it should use @* to ref it. --> - <public type="style" name="Theme.Leanback.FormWizard"/> - - <public type="string" name="config_webSettingsDefaultTextEncoding" /> - - <public type="array" name="config_keySystemUuidMapping" /> - - <!-- An interpolator which accelerates fast but decelerates slowly. --> - <public type="interpolator" name="fast_out_slow_in" /> - <!-- An interpolator which starts with a peak non-zero velocity and decelerates slowly. --> - <public type="interpolator" name="linear_out_slow_in" /> - <!-- An interpolator which accelerates fast and keeps accelerating until the end. --> - <public type="interpolator" name="fast_out_linear_in" /> - - <!-- Used for Activity Transitions, this transition indicates that no Transition - should be used. --> - <public type="transition" name="no_transition" id="0x010f0000"/> - <!-- A transition that moves and resizes a view --> - <public type="transition" name="move"/> - <!-- A transition that fades views in and out. --> - <public type="transition" name="fade"/> - <!-- A transition that moves views in or out of the scene to or from the edges when - a view visibility changes. --> - <public type="transition" name="explode"/> - <!-- A transition that moves views in or out of the scene to or from the bottom edge when - a view visibility changes. --> - <public type="transition" name="slide_bottom"/> - <!-- A transition that moves views in or out of the scene to or from the top edge when - a view visibility changes. --> - <public type="transition" name="slide_top"/> - <!-- A transition that moves views in or out of the scene to or from the right edge when - a view visibility changes. --> - <public type="transition" name="slide_right"/> - <!-- A transition that moves views in or out of the scene to or from the left edge when - a view visibility changes. --> - <public type="transition" name="slide_left"/> - - <!-- WebView error page for when the load fails. @hide @SystemApi --> - <public type="raw" name="loaderror" id="0x01100000"/> - <!-- WebView error page for when domain lookup fails. @hide @SystemApi --> - <public type="raw" name="nodomain"/> + <eat-comment /> + + <public type="attr" name="fastScrollStyle" id="0x010103f7" /> + <public type="attr" name="windowContentTransitions" id="0x010103f8" /> + <public type="attr" name="windowContentTransitionManager" id="0x010103f9" /> + <public type="attr" name="translationZ" id="0x010103fa" /> + <public type="attr" name="tintMode" id="0x010103fb" /> + <public type="attr" name="controlX1" id="0x010103fc" /> + <public type="attr" name="controlY1" id="0x010103fd" /> + <public type="attr" name="controlX2" id="0x010103fe" /> + <public type="attr" name="controlY2" id="0x010103ff" /> + <public type="attr" name="transitionName" id="0x01010400" /> + <public type="attr" name="transitionGroup" id="0x01010401" /> + <public type="attr" name="viewportWidth" id="0x01010402" /> + <public type="attr" name="viewportHeight" id="0x01010403" /> + <public type="attr" name="fillColor" id="0x01010404" /> + <public type="attr" name="pathData" id="0x01010405" /> + <public type="attr" name="strokeColor" id="0x01010406" /> + <public type="attr" name="strokeWidth" id="0x01010407" /> + <public type="attr" name="trimPathStart" id="0x01010408" /> + <public type="attr" name="trimPathEnd" id="0x01010409" /> + <public type="attr" name="trimPathOffset" id="0x0101040a" /> + <public type="attr" name="strokeLineCap" id="0x0101040b" /> + <public type="attr" name="strokeLineJoin" id="0x0101040c" /> + <public type="attr" name="strokeMiterLimit" id="0x0101040d" /> + <public type="attr" name="colorControlNormal" id="0x01010429" /> + <public type="attr" name="colorControlActivated" id="0x0101042a" /> + <public type="attr" name="colorButtonNormal" id="0x0101042b" /> + <public type="attr" name="colorControlHighlight" id="0x0101042c" /> + <public type="attr" name="persistableMode" id="0x0101042d" /> + <public type="attr" name="titleTextAppearance" id="0x0101042e" /> + <public type="attr" name="subtitleTextAppearance" id="0x0101042f" /> + <public type="attr" name="slideEdge" id="0x01010430" /> + <public type="attr" name="actionBarTheme" id="0x01010431" /> + <public type="attr" name="textAppearanceListItemSecondary" id="0x01010432" /> + <public type="attr" name="colorPrimary" id="0x01010433" /> + <public type="attr" name="colorPrimaryDark" id="0x01010434" /> + <public type="attr" name="colorAccent" id="0x01010435" /> + <public type="attr" name="nestedScrollingEnabled" id="0x01010436" /> + <public type="attr" name="windowEnterTransition" id="0x01010437" /> + <public type="attr" name="windowExitTransition" id="0x01010438" /> + <public type="attr" name="windowSharedElementEnterTransition" id="0x01010439" /> + <public type="attr" name="windowSharedElementExitTransition" id="0x0101043a" /> + <public type="attr" name="windowAllowReturnTransitionOverlap" id="0x0101043b" /> + <public type="attr" name="windowAllowEnterTransitionOverlap" id="0x0101043c" /> + <public type="attr" name="sessionService" id="0x0101043d" /> + <public type="attr" name="stackViewStyle" id="0x0101043e" /> + <public type="attr" name="switchStyle" id="0x0101043f" /> + <public type="attr" name="elevation" id="0x01010440" /> + <public type="attr" name="excludeId" id="0x01010441" /> + <public type="attr" name="excludeClass" id="0x01010442" /> + <public type="attr" name="hideOnContentScroll" id="0x01010443" /> + <public type="attr" name="actionOverflowMenuStyle" id="0x01010444" /> + <public type="attr" name="documentLaunchMode" id="0x01010445" /> + <public type="attr" name="maxRecents" id="0x01010446" /> + <public type="attr" name="autoRemoveFromRecents" id="0x01010447" /> + <public type="attr" name="stateListAnimator" id="0x01010448" /> + <public type="attr" name="toId" id="0x01010449" /> + <public type="attr" name="fromId" id="0x0101044a" /> + <public type="attr" name="reversible" id="0x0101044b" /> + <public type="attr" name="splitTrack" id="0x0101044c" /> + <public type="attr" name="targetName" id="0x0101044d" /> + <public type="attr" name="excludeName" id="0x0101044e" /> + <public type="attr" name="matchOrder" id="0x0101044f" /> + <public type="attr" name="windowDrawsSystemBarBackgrounds" id="0x01010450" /> + <public type="attr" name="statusBarColor" id="0x01010451" /> + <public type="attr" name="navigationBarColor" id="0x01010452" /> + <public type="attr" name="contentInsetStart" id="0x01010453" /> + <public type="attr" name="contentInsetEnd" id="0x01010454" /> + <public type="attr" name="contentInsetLeft" id="0x01010455" /> + <public type="attr" name="contentInsetRight" id="0x01010456" /> + <public type="attr" name="paddingMode" id="0x01010457" /> + <public type="attr" name="layout_rowWeight" id="0x01010458" /> + <public type="attr" name="layout_columnWeight" id="0x01010459" /> + <public type="attr" name="translateX" id="0x0101045a" /> + <public type="attr" name="translateY" id="0x0101045b" /> + <public type="attr" name="selectableItemBackgroundBorderless" id="0x0101045c" /> + <public type="attr" name="elegantTextHeight" id="0x0101045d" /> + <public type="attr" name="searchKeyphraseId" id="0x0101045e" /> + <public type="attr" name="searchKeyphrase" id="0x0101045f" /> + <public type="attr" name="searchKeyphraseSupportedLocales" id="0x01010460" /> + <public type="attr" name="windowTransitionBackgroundFadeDuration" id="0x01010461" /> + <public type="attr" name="overlapAnchor" id="0x01010462" /> + <public type="attr" name="progressTint" id="0x01010463" /> + <public type="attr" name="progressTintMode" id="0x01010464" /> + <public type="attr" name="progressBackgroundTint" id="0x01010465" /> + <public type="attr" name="progressBackgroundTintMode" id="0x01010466" /> + <public type="attr" name="secondaryProgressTint" id="0x01010467" /> + <public type="attr" name="secondaryProgressTintMode" id="0x01010468" /> + <public type="attr" name="indeterminateTint" id="0x01010469" /> + <public type="attr" name="indeterminateTintMode" id="0x0101046a" /> + <public type="attr" name="backgroundTint" id="0x0101046b" /> + <public type="attr" name="backgroundTintMode" id="0x0101046c" /> + <public type="attr" name="foregroundTint" id="0x0101046d" /> + <public type="attr" name="foregroundTintMode" id="0x0101046e" /> + <public type="attr" name="buttonTint" id="0x0101046f" /> + <public type="attr" name="buttonTintMode" id="0x01010470" /> + <public type="attr" name="thumbTint" id="0x01010471" /> + <public type="attr" name="thumbTintMode" id="0x01010472" /> + <public type="attr" name="fullBackupOnly" id="0x01010473" /> + <public type="attr" name="propertyXName" id="0x01010474" /> + <public type="attr" name="propertyYName" id="0x01010475" /> + <public type="attr" name="relinquishTaskIdentity" id="0x01010476" /> + <public type="attr" name="tileModeX" id="0x01010477" /> + <public type="attr" name="tileModeY" id="0x01010478" /> + <public type="attr" name="actionModeShareDrawable" id="0x01010479" /> + <public type="attr" name="actionModeFindDrawable" id="0x0101047a" /> + <public type="attr" name="actionModeWebSearchDrawable" id="0x0101047b" /> + <public type="attr" name="transitionVisibilityMode" id="0x0101047c" /> + <public type="attr" name="minimumHorizontalAngle" id="0x0101047d" /> + <public type="attr" name="minimumVerticalAngle" id="0x0101047e" /> + <public type="attr" name="maximumAngle" id="0x0101047f" /> + <public type="attr" name="searchViewStyle" id="0x01010480" /> + <public type="attr" name="closeIcon" id="0x01010481" /> + <public type="attr" name="goIcon" id="0x01010482" /> + <public type="attr" name="searchIcon" id="0x01010483" /> + <public type="attr" name="voiceIcon" id="0x01010484" /> + <public type="attr" name="commitIcon" id="0x01010485" /> + <public type="attr" name="suggestionRowLayout" id="0x01010486" /> + <public type="attr" name="queryBackground" id="0x01010487" /> + <public type="attr" name="submitBackground" id="0x01010488" /> + <public type="attr" name="buttonBarPositiveButtonStyle" id="0x01010489" /> + <public type="attr" name="buttonBarNeutralButtonStyle" id="0x0101048a" /> + <public type="attr" name="buttonBarNegativeButtonStyle" id="0x0101048b" /> + <public type="attr" name="popupElevation" id="0x0101048c" /> + <public type="attr" name="actionBarPopupTheme" id="0x0101048d" /> + <public type="attr" name="multiArch" id="0x0101048e" /> + <public type="attr" name="touchscreenBlocksFocus" id="0x0101048f" /> + <public type="attr" name="windowElevation" id="0x01010490" /> + <public type="attr" name="launchTaskBehindTargetAnimation" id="0x01010491" /> + <public type="attr" name="launchTaskBehindSourceAnimation" id="0x01010492" /> + <public type="attr" name="restrictionType" id="0x01010493" /> + <public type="attr" name="dayOfWeekBackground" id="0x01010494" /> + <public type="attr" name="dayOfWeekTextAppearance" id="0x01010495" /> + <public type="attr" name="headerMonthTextAppearance" id="0x01010496" /> + <public type="attr" name="headerDayOfMonthTextAppearance" id="0x01010497" /> + <public type="attr" name="headerYearTextAppearance" id="0x01010498" /> + <public type="attr" name="yearListItemTextAppearance" id="0x01010499" /> + <public type="attr" name="yearListSelectorColor" id="0x0101049a" /> + <public type="attr" name="calendarTextColor" id="0x0101049b" /> + <public type="attr" name="recognitionService" id="0x0101049c" /> + <public type="attr" name="timePickerStyle" id="0x0101049d" /> + <public type="attr" name="timePickerDialogTheme" id="0x0101049e" /> + <public type="attr" name="headerTimeTextAppearance" id="0x0101049f" /> + <public type="attr" name="headerAmPmTextAppearance" id="0x010104a0" /> + <public type="attr" name="numbersTextColor" id="0x010104a1" /> + <public type="attr" name="numbersBackgroundColor" id="0x010104a2" /> + <public type="attr" name="numbersSelectorColor" id="0x010104a3" /> + <public type="attr" name="amPmTextColor" id="0x010104a4" /> + <public type="attr" name="amPmBackgroundColor" id="0x010104a5" /> + <public type="attr" name="searchKeyphraseRecognitionFlags" id="0x010104a6" /> + <public type="attr" name="checkMarkTint" id="0x010104a7" /> + <public type="attr" name="checkMarkTintMode" id="0x010104a8" /> + <public type="attr" name="popupTheme" id="0x010104a9" /> + <public type="attr" name="toolbarStyle" id="0x010104aa" /> + <public type="attr" name="windowClipToOutline" id="0x010104ab" /> + <public type="attr" name="datePickerDialogTheme" id="0x010104ac" /> + <public type="attr" name="showText" id="0x010104ad" /> + <public type="attr" name="windowReturnTransition" id="0x010104ae" /> + <public type="attr" name="windowReenterTransition" id="0x010104af" /> + <public type="attr" name="windowSharedElementReturnTransition" id="0x010104b0" /> + <public type="attr" name="windowSharedElementReenterTransition" id="0x010104b1" /> + <public type="attr" name="resumeWhilePausing" id="0x010104b2" /> + <public type="attr" name="datePickerMode" id="0x010104b3" /> + <public type="attr" name="timePickerMode" id="0x010104b4" /> + <public type="attr" name="inset" id="0x010104b5" /> + <public type="attr" name="letterSpacing" id="0x010104b6" /> + <public type="attr" name="fontFeatureSettings" id="0x010104b7" /> + <public type="attr" name="outlineProvider" id="0x010104b8" /> + <public type="attr" name="contentAgeHint" id="0x010104b9" /> + <public type="attr" name="country" id="0x010104ba" /> + <public type="attr" name="windowSharedElementsUseOverlay" id="0x010104bb" /> + <public type="attr" name="reparent" id="0x010104bc" /> + <public type="attr" name="reparentWithOverlay" id="0x010104bd" /> + <public type="attr" name="ambientShadowAlpha" id="0x010104be" /> + <public type="attr" name="spotShadowAlpha" id="0x010104bf" /> + <public type="attr" name="navigationIcon" id="0x010104c0" /> + <public type="attr" name="navigationContentDescription" id="0x010104c1" /> + <public type="attr" name="fragmentExitTransition" id="0x010104c2" /> + <public type="attr" name="fragmentEnterTransition" id="0x010104c3" /> + <public type="attr" name="fragmentSharedElementEnterTransition" id="0x010104c4" /> + <public type="attr" name="fragmentReturnTransition" id="0x010104c5" /> + <public type="attr" name="fragmentSharedElementReturnTransition" id="0x010104c6" /> + <public type="attr" name="fragmentReenterTransition" id="0x010104c7" /> + <public type="attr" name="fragmentAllowEnterTransitionOverlap" id="0x010104c8" /> + <public type="attr" name="fragmentAllowReturnTransitionOverlap" id="0x010104c9" /> + <public type="attr" name="patternPathData" id="0x010104ca" /> + <public type="attr" name="strokeAlpha" id="0x010104cb" /> + <public type="attr" name="fillAlpha" id="0x010104cc" /> + <public type="attr" name="windowActivityTransitions" id="0x010104cd" /> + + <public type="id" name="mask" id="0x0102002e" /> + <public type="id" name="statusBarBackground" id="0x0102002f" /> + <public type="id" name="navigationBarBackground" id="0x01020030" /> + + <public type="style" name="Widget.FastScroll" id="0x010301e5" /> + <public type="style" name="Widget.StackView" id="0x010301e6" /> + <public type="style" name="Widget.Toolbar" id="0x010301e7" /> + <public type="style" name="Widget.Toolbar.Button.Navigation" id="0x010301e8" /> + + <public type="style" name="Widget.DeviceDefault.FastScroll" id="0x010301e9" /> + <public type="style" name="Widget.DeviceDefault.StackView" id="0x010301ea" /> + <public type="style" name="Widget.DeviceDefault.Light.FastScroll" id="0x010301eb" /> + <public type="style" name="Widget.DeviceDefault.Light.StackView" id="0x010301ec" /> + + <public type="style" name="TextAppearance.Material" id="0x010301ed" /> + <public type="style" name="TextAppearance.Material.Button" id="0x010301ee" /> + <public type="style" name="TextAppearance.Material.Body2" id="0x010301ef" /> + <public type="style" name="TextAppearance.Material.Body1" id="0x010301f0" /> + <public type="style" name="TextAppearance.Material.Caption" id="0x010301f1" /> + <public type="style" name="TextAppearance.Material.DialogWindowTitle" id="0x010301f2" /> + <public type="style" name="TextAppearance.Material.Display4" id="0x010301f3" /> + <public type="style" name="TextAppearance.Material.Display3" id="0x010301f4" /> + <public type="style" name="TextAppearance.Material.Display2" id="0x010301f5" /> + <public type="style" name="TextAppearance.Material.Display1" id="0x010301f6" /> + <public type="style" name="TextAppearance.Material.Headline" id="0x010301f7" /> + <public type="style" name="TextAppearance.Material.Inverse" id="0x010301f8" /> + <public type="style" name="TextAppearance.Material.Large" id="0x010301f9" /> + <public type="style" name="TextAppearance.Material.Large.Inverse" id="0x010301fa" /> + <public type="style" name="TextAppearance.Material.Medium" id="0x010301fb" /> + <public type="style" name="TextAppearance.Material.Medium.Inverse" id="0x010301fc" /> + <public type="style" name="TextAppearance.Material.Menu" id="0x010301fd" /> + <public type="style" name="TextAppearance.Material.Notification" id="0x010301fe" /> + <public type="style" name="TextAppearance.Material.Notification.Emphasis" id="0x010301ff" /> + <public type="style" name="TextAppearance.Material.Notification.Info" id="0x01030200" /> + <public type="style" name="TextAppearance.Material.Notification.Line2" id="0x01030201" /> + <public type="style" name="TextAppearance.Material.Notification.Time" id="0x01030202" /> + <public type="style" name="TextAppearance.Material.Notification.Title" id="0x01030203" /> + <public type="style" name="TextAppearance.Material.SearchResult.Subtitle" id="0x01030204" /> + <public type="style" name="TextAppearance.Material.SearchResult.Title" id="0x01030205" /> + <public type="style" name="TextAppearance.Material.Small" id="0x01030206" /> + <public type="style" name="TextAppearance.Material.Small.Inverse" id="0x01030207" /> + <public type="style" name="TextAppearance.Material.Subhead" id="0x01030208" /> + <public type="style" name="TextAppearance.Material.Title" id="0x01030209" /> + <public type="style" name="TextAppearance.Material.WindowTitle" id="0x0103020a" /> + + <public type="style" name="TextAppearance.Material.Widget" id="0x0103020b" /> + <public type="style" name="TextAppearance.Material.Widget.ActionBar.Menu" id="0x0103020c" /> + <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle" id="0x0103020d" /> + <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse" id="0x0103020e" /> + <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title" id="0x0103020f" /> + <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title.Inverse" id="0x01030210" /> + <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle" id="0x01030211" /> + <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse" id="0x01030212" /> + <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title" id="0x01030213" /> + <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title.Inverse" id="0x01030214" /> + <public type="style" name="TextAppearance.Material.Widget.Button" id="0x01030215" /> + <public type="style" name="TextAppearance.Material.Widget.DropDownHint" id="0x01030216" /> + <public type="style" name="TextAppearance.Material.Widget.DropDownItem" id="0x01030217" /> + <public type="style" name="TextAppearance.Material.Widget.EditText" id="0x01030218" /> + <public type="style" name="TextAppearance.Material.Widget.IconMenu.Item" id="0x01030219" /> + <public type="style" name="TextAppearance.Material.Widget.PopupMenu" id="0x0103021a" /> + <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Large" id="0x0103021b" /> + <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Small" id="0x0103021c" /> + <public type="style" name="TextAppearance.Material.Widget.TabWidget" id="0x0103021d" /> + <public type="style" name="TextAppearance.Material.Widget.TextView" id="0x0103021e" /> + <public type="style" name="TextAppearance.Material.Widget.TextView.PopupMenu" id="0x0103021f" /> + <public type="style" name="TextAppearance.Material.Widget.TextView.SpinnerItem" id="0x01030220" /> + <public type="style" name="TextAppearance.Material.Widget.Toolbar.Subtitle" id="0x01030221" /> + <public type="style" name="TextAppearance.Material.Widget.Toolbar.Title" id="0x01030222" /> + + <public type="style" name="Theme.DeviceDefault.Settings" id="0x01030223" /> + + <public type="style" name="Theme.Material" id="0x01030224" /> + <public type="style" name="Theme.Material.Dialog" id="0x01030225" /> + <public type="style" name="Theme.Material.Dialog.Alert" id="0x01030226" /> + <public type="style" name="Theme.Material.Dialog.MinWidth" id="0x01030227" /> + <public type="style" name="Theme.Material.Dialog.NoActionBar" id="0x01030228" /> + <public type="style" name="Theme.Material.Dialog.NoActionBar.MinWidth" id="0x01030229" /> + <public type="style" name="Theme.Material.Dialog.Presentation" id="0x0103022a" /> + <public type="style" name="Theme.Material.DialogWhenLarge" id="0x0103022b" /> + <public type="style" name="Theme.Material.DialogWhenLarge.NoActionBar" id="0x0103022c" /> + <public type="style" name="Theme.Material.InputMethod" id="0x0103022d" /> + <public type="style" name="Theme.Material.NoActionBar" id="0x0103022e" /> + <public type="style" name="Theme.Material.NoActionBar.Fullscreen" id="0x0103022f" /> + <public type="style" name="Theme.Material.NoActionBar.Overscan" id="0x01030230" /> + <public type="style" name="Theme.Material.NoActionBar.TranslucentDecor" id="0x01030231" /> + <public type="style" name="Theme.Material.Panel" id="0x01030232" /> + <public type="style" name="Theme.Material.Settings" id="0x01030233" /> + <public type="style" name="Theme.Material.Voice" id="0x01030234" /> + <public type="style" name="Theme.Material.Wallpaper" id="0x01030235" /> + <public type="style" name="Theme.Material.Wallpaper.NoTitleBar" id="0x01030236" /> + + <public type="style" name="Theme.Material.Light" id="0x01030237" /> + <public type="style" name="Theme.Material.Light.DarkActionBar" id="0x01030238" /> + <public type="style" name="Theme.Material.Light.Dialog" id="0x01030239" /> + <public type="style" name="Theme.Material.Light.Dialog.Alert" id="0x0103023a" /> + <public type="style" name="Theme.Material.Light.Dialog.MinWidth" id="0x0103023b" /> + <public type="style" name="Theme.Material.Light.Dialog.NoActionBar" id="0x0103023c" /> + <public type="style" name="Theme.Material.Light.Dialog.NoActionBar.MinWidth" id="0x0103023d" /> + <public type="style" name="Theme.Material.Light.Dialog.Presentation" id="0x0103023e" /> + <public type="style" name="Theme.Material.Light.DialogWhenLarge" id="0x0103023f" /> + <public type="style" name="Theme.Material.Light.DialogWhenLarge.NoActionBar" id="0x01030240" /> + <public type="style" name="Theme.Material.Light.NoActionBar" id="0x01030241" /> + <public type="style" name="Theme.Material.Light.NoActionBar.Fullscreen" id="0x01030242" /> + <public type="style" name="Theme.Material.Light.NoActionBar.Overscan" id="0x01030243" /> + <public type="style" name="Theme.Material.Light.NoActionBar.TranslucentDecor" id="0x01030244" /> + <public type="style" name="Theme.Material.Light.Panel" id="0x01030245" /> + <public type="style" name="Theme.Material.Light.Voice" id="0x01030246" /> + + <public type="style" name="ThemeOverlay" id="0x01030247" /> + <public type="style" name="ThemeOverlay.Material" id="0x01030248" /> + <public type="style" name="ThemeOverlay.Material.ActionBar" id="0x01030249" /> + <public type="style" name="ThemeOverlay.Material.Light" id="0x0103024a" /> + <public type="style" name="ThemeOverlay.Material.Dark" id="0x0103024b" /> + <public type="style" name="ThemeOverlay.Material.Dark.ActionBar" id="0x0103024c" /> + + <public type="style" name="Widget.Material" id="0x0103024d" /> + <public type="style" name="Widget.Material.ActionBar" id="0x0103024e" /> + <public type="style" name="Widget.Material.ActionBar.Solid" id="0x0103024f" /> + <public type="style" name="Widget.Material.ActionBar.TabBar" id="0x01030250" /> + <public type="style" name="Widget.Material.ActionBar.TabText" id="0x01030251" /> + <public type="style" name="Widget.Material.ActionBar.TabView" id="0x01030252" /> + <public type="style" name="Widget.Material.ActionButton" id="0x01030253" /> + <public type="style" name="Widget.Material.ActionButton.CloseMode" id="0x01030254" /> + <public type="style" name="Widget.Material.ActionButton.Overflow" id="0x01030255" /> + <public type="style" name="Widget.Material.ActionMode" id="0x01030256" /> + <public type="style" name="Widget.Material.AutoCompleteTextView" id="0x01030257" /> + <public type="style" name="Widget.Material.Button" id="0x01030258" /> + <public type="style" name="Widget.Material.Button.Borderless" id="0x01030259" /> + <public type="style" name="Widget.Material.Button.Borderless.Colored" id="0x0103025a" /> + <public type="style" name="Widget.Material.Button.Borderless.Small" id="0x0103025b" /> + <public type="style" name="Widget.Material.Button.Inset" id="0x0103025c" /> + <public type="style" name="Widget.Material.Button.Small" id="0x0103025d" /> + <public type="style" name="Widget.Material.Button.Toggle" id="0x0103025e" /> + <public type="style" name="Widget.Material.ButtonBar" id="0x0103025f" /> + <public type="style" name="Widget.Material.ButtonBar.AlertDialog" id="0x01030260" /> + <public type="style" name="Widget.Material.CalendarView" id="0x01030261" /> + <public type="style" name="Widget.Material.CheckedTextView" id="0x01030262" /> + <public type="style" name="Widget.Material.CompoundButton.CheckBox" id="0x01030263" /> + <public type="style" name="Widget.Material.CompoundButton.RadioButton" id="0x01030264" /> + <public type="style" name="Widget.Material.CompoundButton.Star" id="0x01030265" /> + <public type="style" name="Widget.Material.DatePicker" id="0x01030266" /> + <public type="style" name="Widget.Material.DropDownItem" id="0x01030267" /> + <public type="style" name="Widget.Material.DropDownItem.Spinner" id="0x01030268" /> + <public type="style" name="Widget.Material.EditText" id="0x01030269" /> + <public type="style" name="Widget.Material.ExpandableListView" id="0x0103026a" /> + <public type="style" name="Widget.Material.FastScroll" id="0x0103026b" /> + <public type="style" name="Widget.Material.GridView" id="0x0103026c" /> + <public type="style" name="Widget.Material.HorizontalScrollView" id="0x0103026d" /> + <public type="style" name="Widget.Material.ImageButton" id="0x0103026e" /> + <public type="style" name="Widget.Material.ListPopupWindow" id="0x0103026f" /> + <public type="style" name="Widget.Material.ListView" id="0x01030270" /> + <public type="style" name="Widget.Material.ListView.DropDown" id="0x01030271" /> + <public type="style" name="Widget.Material.MediaRouteButton" id="0x01030272" /> + <public type="style" name="Widget.Material.PopupMenu" id="0x01030273" /> + <public type="style" name="Widget.Material.PopupMenu.Overflow" id="0x01030274" /> + <public type="style" name="Widget.Material.PopupWindow" id="0x01030275" /> + <public type="style" name="Widget.Material.ProgressBar" id="0x01030276" /> + <public type="style" name="Widget.Material.ProgressBar.Horizontal" id="0x01030277" /> + <public type="style" name="Widget.Material.ProgressBar.Large" id="0x01030278" /> + <public type="style" name="Widget.Material.ProgressBar.Small" id="0x01030279" /> + <public type="style" name="Widget.Material.ProgressBar.Small.Title" id="0x0103027a" /> + <public type="style" name="Widget.Material.RatingBar" id="0x0103027b" /> + <public type="style" name="Widget.Material.RatingBar.Indicator" id="0x0103027c" /> + <public type="style" name="Widget.Material.RatingBar.Small" id="0x0103027d" /> + <public type="style" name="Widget.Material.ScrollView" id="0x0103027e" /> + <public type="style" name="Widget.Material.SearchView" id="0x0103027f" /> + <public type="style" name="Widget.Material.SeekBar" id="0x01030280" /> + <public type="style" name="Widget.Material.SegmentedButton" id="0x01030281" /> + <public type="style" name="Widget.Material.StackView" id="0x01030282" /> + <public type="style" name="Widget.Material.Spinner" id="0x01030283" /> + <public type="style" name="Widget.Material.Spinner.Underlined" id="0x01030284" /> + <public type="style" name="Widget.Material.Tab" id="0x01030285" /> + <public type="style" name="Widget.Material.TabWidget" id="0x01030286" /> + <public type="style" name="Widget.Material.TextView" id="0x01030287" /> + <public type="style" name="Widget.Material.TextView.SpinnerItem" id="0x01030288" /> + <public type="style" name="Widget.Material.TimePicker" id="0x01030289" /> + <public type="style" name="Widget.Material.Toolbar" id="0x0103028a" /> + <public type="style" name="Widget.Material.Toolbar.Button.Navigation" id="0x0103028b" /> + <public type="style" name="Widget.Material.WebTextView" id="0x0103028c" /> + <public type="style" name="Widget.Material.WebView" id="0x0103028d" /> + + <public type="style" name="Widget.Material.Light" id="0x0103028e" /> + <public type="style" name="Widget.Material.Light.ActionBar" id="0x0103028f" /> + <public type="style" name="Widget.Material.Light.ActionBar.Solid" id="0x01030290" /> + <public type="style" name="Widget.Material.Light.ActionBar.TabBar" id="0x01030291" /> + <public type="style" name="Widget.Material.Light.ActionBar.TabText" id="0x01030292" /> + <public type="style" name="Widget.Material.Light.ActionBar.TabView" id="0x01030293" /> + <public type="style" name="Widget.Material.Light.ActionButton" id="0x01030294" /> + <public type="style" name="Widget.Material.Light.ActionButton.CloseMode" id="0x01030295" /> + <public type="style" name="Widget.Material.Light.ActionButton.Overflow" id="0x01030296" /> + <public type="style" name="Widget.Material.Light.ActionMode" id="0x01030297" /> + <public type="style" name="Widget.Material.Light.AutoCompleteTextView" id="0x01030298" /> + <public type="style" name="Widget.Material.Light.Button" id="0x01030299" /> + <public type="style" name="Widget.Material.Light.Button.Borderless" id="0x0103029a" /> + <public type="style" name="Widget.Material.Light.Button.Borderless.Colored" id="0x0103029b" /> + <public type="style" name="Widget.Material.Light.Button.Borderless.Small" id="0x0103029c" /> + <public type="style" name="Widget.Material.Light.Button.Inset" id="0x0103029d" /> + <public type="style" name="Widget.Material.Light.Button.Small" id="0x0103029e" /> + <public type="style" name="Widget.Material.Light.Button.Toggle" id="0x0103029f" /> + <public type="style" name="Widget.Material.Light.ButtonBar" id="0x010302a0" /> + <public type="style" name="Widget.Material.Light.ButtonBar.AlertDialog" id="0x010302a1" /> + <public type="style" name="Widget.Material.Light.CalendarView" id="0x010302a2" /> + <public type="style" name="Widget.Material.Light.CheckedTextView" id="0x010302a3" /> + <public type="style" name="Widget.Material.Light.CompoundButton.CheckBox" id="0x010302a4" /> + <public type="style" name="Widget.Material.Light.CompoundButton.RadioButton" id="0x010302a5" /> + <public type="style" name="Widget.Material.Light.CompoundButton.Star" id="0x010302a6" /> + <public type="style" name="Widget.Material.Light.DatePicker" id="0x010302a7" /> + <public type="style" name="Widget.Material.Light.DropDownItem" id="0x010302a8" /> + <public type="style" name="Widget.Material.Light.DropDownItem.Spinner" id="0x010302a9" /> + <public type="style" name="Widget.Material.Light.EditText" id="0x010302aa" /> + <public type="style" name="Widget.Material.Light.ExpandableListView" id="0x010302ab" /> + <public type="style" name="Widget.Material.Light.FastScroll" id="0x010302ac" /> + <public type="style" name="Widget.Material.Light.GridView" id="0x010302ad" /> + <public type="style" name="Widget.Material.Light.HorizontalScrollView" id="0x010302ae" /> + <public type="style" name="Widget.Material.Light.ImageButton" id="0x010302af" /> + <public type="style" name="Widget.Material.Light.ListPopupWindow" id="0x010302b0" /> + <public type="style" name="Widget.Material.Light.ListView" id="0x010302b1" /> + <public type="style" name="Widget.Material.Light.ListView.DropDown" id="0x010302b2" /> + <public type="style" name="Widget.Material.Light.MediaRouteButton" id="0x010302b3" /> + <public type="style" name="Widget.Material.Light.PopupMenu" id="0x010302b4" /> + <public type="style" name="Widget.Material.Light.PopupMenu.Overflow" id="0x010302b5" /> + <public type="style" name="Widget.Material.Light.PopupWindow" id="0x010302b6" /> + <public type="style" name="Widget.Material.Light.ProgressBar" id="0x010302b7" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Horizontal" id="0x010302b8" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Inverse" id="0x010302b9" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Large" id="0x010302ba" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Large.Inverse" id="0x010302bb" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Small" id="0x010302bc" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Small.Inverse" id="0x010302bd" /> + <public type="style" name="Widget.Material.Light.ProgressBar.Small.Title" id="0x010302be" /> + <public type="style" name="Widget.Material.Light.RatingBar" id="0x010302bf" /> + <public type="style" name="Widget.Material.Light.RatingBar.Indicator" id="0x010302c0" /> + <public type="style" name="Widget.Material.Light.RatingBar.Small" id="0x010302c1" /> + <public type="style" name="Widget.Material.Light.ScrollView" id="0x010302c2" /> + <public type="style" name="Widget.Material.Light.SearchView" id="0x010302c3" /> + <public type="style" name="Widget.Material.Light.SeekBar" id="0x010302c4" /> + <public type="style" name="Widget.Material.Light.SegmentedButton" id="0x010302c5" /> + <public type="style" name="Widget.Material.Light.StackView" id="0x010302c6" /> + <public type="style" name="Widget.Material.Light.Spinner" id="0x010302c7" /> + <public type="style" name="Widget.Material.Light.Spinner.Underlined" id="0x010302c8" /> + <public type="style" name="Widget.Material.Light.Tab" id="0x010302c9" /> + <public type="style" name="Widget.Material.Light.TabWidget" id="0x010302ca" /> + <public type="style" name="Widget.Material.Light.TextView" id="0x010302cb" /> + <public type="style" name="Widget.Material.Light.TextView.SpinnerItem" id="0x010302cc" /> + <public type="style" name="Widget.Material.Light.TimePicker" id="0x010302cd" /> + <public type="style" name="Widget.Material.Light.WebTextView" id="0x010302ce" /> + <public type="style" name="Widget.Material.Light.WebView" id="0x010302cf" /> + + <!-- @hide This really shouldn't be public; clients using it should use @* to ref it. --> + <public type="style" name="Theme.Leanback.FormWizard" id="0x010302d0" /> + + <public type="string" name="config_webSettingsDefaultTextEncoding" id="0x01040018" /> + + <public type="array" name="config_keySystemUuidMapping" id="0x01070005" /> + + <!-- An interpolator which accelerates fast but decelerates slowly. --> + <public type="interpolator" name="fast_out_slow_in" id="0x010c000d" /> + <!-- An interpolator which starts with a peak non-zero velocity and decelerates slowly. --> + <public type="interpolator" name="linear_out_slow_in" id="0x010c000e" /> + <!-- An interpolator which accelerates fast and keeps accelerating until the end. --> + <public type="interpolator" name="fast_out_linear_in" id="0x010c000f" /> + + <!-- Used for Activity Transitions, this transition indicates that no Transition + should be used. --> + <public type="transition" name="no_transition" id="0x010f0000" /> + <!-- A transition that moves and resizes a view --> + <public type="transition" name="move" id="0x010f0001" /> + <!-- A transition that fades views in and out. --> + <public type="transition" name="fade" id="0x010f0002" /> + <!-- A transition that moves views in or out of the scene to or from the edges when + a view visibility changes. --> + <public type="transition" name="explode" id="0x010f0003" /> + <!-- A transition that moves views in or out of the scene to or from the bottom edge when + a view visibility changes. --> + <public type="transition" name="slide_bottom" id="0x010f0004" /> + <!-- A transition that moves views in or out of the scene to or from the top edge when + a view visibility changes. --> + <public type="transition" name="slide_top" id="0x010f0005" /> + <!-- A transition that moves views in or out of the scene to or from the right edge when + a view visibility changes. --> + <public type="transition" name="slide_right" id="0x010f0006" /> + <!-- A transition that moves views in or out of the scene to or from the left edge when + a view visibility changes. --> + <public type="transition" name="slide_left" id="0x010f0007" /> + + <!-- WebView error page for when the load fails. @hide @SystemApi --> + <public type="raw" name="loaderror" id="0x01100000" /> + <!-- WebView error page for when domain lookup fails. @hide @SystemApi --> + <public type="raw" name="nodomain" id="0x01100001" /> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b4775c5..ed43faf 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1193,6 +1193,7 @@ <java-symbol type="drawable" name="ic_corp_badge" /> <java-symbol type="drawable" name="ic_corp_icon_badge" /> <java-symbol type="drawable" name="ic_corp_icon" /> + <java-symbol type="drawable" name="ic_corp_statusbar_icon" /> <java-symbol type="drawable" name="emulator_circular_window_overlay" /> <java-symbol type="drawable" name="sim_light_blue" /> diff --git a/data/sounds/AudioPackage10.mk b/data/sounds/AudioPackage10.mk index 68a87f2..5a5eea6 100644 --- a/data/sounds/AudioPackage10.mk +++ b/data/sounds/AudioPackage10.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery_48k.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage11.mk b/data/sounds/AudioPackage11.mk index f19ed30..0f85b33 100644 --- a/data/sounds/AudioPackage11.mk +++ b/data/sounds/AudioPackage11.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery_48k.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage12.mk b/data/sounds/AudioPackage12.mk index c13689d..4251332 100644 --- a/data/sounds/AudioPackage12.mk +++ b/data/sounds/AudioPackage12.mk @@ -12,8 +12,8 @@ ALARM_FILES := Argon Carbon Helium Krypton Neon Oxygen Osmium Platinum NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Titan Tethys RINGTONE_FILES := Callisto Dione Ganymede Luna Oberon Phobos Sedna Titania Triton Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click camera_focus Dock Undock Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord LowBattery WirelessChargingStarted + camera_focus Dock Undock Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord LowBattery WirelessChargingStarted PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/ogg/$(fn).ogg:system/media/audio/alarms/$(fn).ogg) diff --git a/data/sounds/AudioPackage12_48.mk b/data/sounds/AudioPackage12_48.mk index 6d86baf..70e68d3 100644 --- a/data/sounds/AudioPackage12_48.mk +++ b/data/sounds/AudioPackage12_48.mk @@ -12,8 +12,8 @@ ALARM_FILES := Argon Carbon Helium Krypton Neon Oxygen Osmium Platinum NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Titan Tethys RINGTONE_FILES := Callisto Dione Ganymede Luna Oberon Phobos Sedna Titania Triton Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord LowBattery WirelessChargingStarted + Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord LowBattery WirelessChargingStarted # Alarms not yet available in 48 kHz PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ @@ -34,4 +34,4 @@ PRODUCT_COPY_FILES += $(foreach fn,$(MATERIAL_EFFECT_FILES),\ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ - $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg
\ No newline at end of file + $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg diff --git a/data/sounds/AudioPackage13.mk b/data/sounds/AudioPackage13.mk index 9bbfa7f..cec7280 100644 --- a/data/sounds/AudioPackage13.mk +++ b/data/sounds/AudioPackage13.mk @@ -13,8 +13,8 @@ NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Tit RINGTONE_FILES := Atria Callisto Dione Ganymede Luna Oberon Phobos Pyxis Sedna Titania Triton \ Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click camera_focus Dock Undock Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord WirelessChargingStarted LowBattery + camera_focus Dock Undock Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord WirelessChargingStarted LowBattery PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/material/ogg/$(fn).ogg:system/media/audio/alarms/$(fn).ogg) diff --git a/data/sounds/AudioPackage13_48.mk b/data/sounds/AudioPackage13_48.mk index b90cd00..d1b17c8 100644 --- a/data/sounds/AudioPackage13_48.mk +++ b/data/sounds/AudioPackage13_48.mk @@ -13,8 +13,8 @@ NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Tit RINGTONE_FILES := Atria Callisto Dione Ganymede Luna Oberon Phobos Pyxis Sedna Titania Triton \ Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord WirelessChargingStarted LowBattery + Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord WirelessChargingStarted LowBattery PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/material/ogg/$(fn)_48k.ogg:system/media/audio/alarms/$(fn).ogg) @@ -34,4 +34,4 @@ PRODUCT_COPY_FILES += $(foreach fn,$(MATERIAL_EFFECT_FILES),\ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ - $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg
\ No newline at end of file + $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg diff --git a/data/sounds/AudioPackage6.mk b/data/sounds/AudioPackage6.mk index 89b5f1b..c843fdc 100644 --- a/data/sounds/AudioPackage6.mk +++ b/data/sounds/AudioPackage6.mk @@ -19,7 +19,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk index 065fb84..ce82651 100644 --- a/data/sounds/AudioPackage7.mk +++ b/data/sounds/AudioPackage7.mk @@ -21,7 +21,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage7alt.mk b/data/sounds/AudioPackage7alt.mk index 9c35a2e..db468f3 100644 --- a/data/sounds/AudioPackage7alt.mk +++ b/data/sounds/AudioPackage7alt.mk @@ -21,7 +21,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \ diff --git a/data/sounds/AudioPackage8.mk b/data/sounds/AudioPackage8.mk index 070381d..4112c18 100644 --- a/data/sounds/AudioPackage8.mk +++ b/data/sounds/AudioPackage8.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage9.mk b/data/sounds/AudioPackage9.mk index 0673811..1b430c0 100644 --- a/data/sounds/AudioPackage9.mk +++ b/data/sounds/AudioPackage9.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/effects/material/ogg/camera_click.ogg b/data/sounds/effects/material/ogg/camera_click.ogg Binary files differnew file mode 100644 index 0000000..2528ef6 --- /dev/null +++ b/data/sounds/effects/material/ogg/camera_click.ogg diff --git a/data/sounds/effects/material/ogg/camera_click_48k.ogg b/data/sounds/effects/material/ogg/camera_click_48k.ogg Binary files differnew file mode 100644 index 0000000..01f3a05 --- /dev/null +++ b/data/sounds/effects/material/ogg/camera_click_48k.ogg diff --git a/docs/html/google/play/billing/index.jd b/docs/html/google/play/billing/index.jd index e1326d7..bdbf5c7 100644 --- a/docs/html/google/play/billing/index.jd +++ b/docs/html/google/play/billing/index.jd @@ -14,6 +14,7 @@ and features, and more. You can use In-app Billing to sell products as</p> <div class="sidebox"> <h2><strong>New in In-App Billing</strong></h2> <ul> + <li><strong>IAB v2 shutdown</strong>—In-app Billing v2 API is deprecated and will be shut down in January 2015. If your app is still using In-app Billing v2, please migrate to the v3 API as soon as possible.</li> <li><strong>Seasonal subscriptions</strong>—You can now set up a recurring <a href="billing_subscriptions.html#user-billing">seasonal subscription</a> that starts and ends on the same date each year (for @@ -41,7 +42,7 @@ and features, and more. You can use In-app Billing to sell products as</p> <ul> <li>Standard in-app products (one-time billing), or</li> -<li>Subscriptions, (recurring, automated billing)</li> +<li>Subscriptions (recurring, automated billing)</li> </ul> <p>When you use the in-app billing service to sell an item, diff --git a/docs/html/google/play/billing/v2/api.jd b/docs/html/google/play/billing/v2/api.jd index 9501555..36a9017 100644 --- a/docs/html/google/play/billing/v2/api.jd +++ b/docs/html/google/play/billing/v2/api.jd @@ -2,7 +2,28 @@ page.title=In-app Billing Version 2 excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> diff --git a/docs/html/google/play/billing/v2/billing_integrate.jd b/docs/html/google/play/billing/v2/billing_integrate.jd index 5eb17d5..c264271 100644 --- a/docs/html/google/play/billing/v2/billing_integrate.jd +++ b/docs/html/google/play/billing/v2/billing_integrate.jd @@ -2,7 +2,28 @@ page.title=Implementing In-app Billing <span style="font-size:16px;">(IAB Versio excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/docs/html/google/play/billing/v2/billing_reference.jd b/docs/html/google/play/billing/v2/billing_reference.jd index 4587dee..32e00cf 100644 --- a/docs/html/google/play/billing/v2/billing_reference.jd +++ b/docs/html/google/play/billing/v2/billing_reference.jd @@ -2,7 +2,28 @@ page.title=In-app Billing Reference <span style="font-size:16px;">(IAB Version 2 excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/docs/html/google/play/billing/v2/billing_subscriptions.jd b/docs/html/google/play/billing/v2/billing_subscriptions.jd index f8051a9..01e39ac 100644 --- a/docs/html/google/play/billing/v2/billing_subscriptions.jd +++ b/docs/html/google/play/billing/v2/billing_subscriptions.jd @@ -2,7 +2,28 @@ page.title=Implementing Subscriptions <span style="font-size:16px;">(IAB Versio excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml index 167f7d8..e194f55 100644 --- a/packages/PrintSpooler/res/values-es-rUS/strings.xml +++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"Cuadro de diálogo de impresión"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"Página <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> de <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"Resumen, <xliff:g id="COPIES">%1$s</xliff:g> copias, tamaño de papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Resumen, copias <xliff:g id="COPIES">%1$s</xliff:g>, tamaño de papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> <string name="expand_handle" msgid="7282974448109280522">"Controlador para expandir"</string> <string name="collapse_handle" msgid="6886637989442507451">"Controlador para contraer"</string> <string name="print_button" msgid="645164566271246268">"Imprimir"</string> diff --git a/packages/PrintSpooler/res/values-eu-rES/strings.xml b/packages/PrintSpooler/res/values-eu-rES/strings.xml index b2c2b9c..4f0f8fc 100644 --- a/packages/PrintSpooler/res/values-eu-rES/strings.xml +++ b/packages/PrintSpooler/res/values-eu-rES/strings.xml @@ -43,8 +43,8 @@ <string name="collapse_handle" msgid="6886637989442507451">"Tolestu heldulekua"</string> <string name="print_button" msgid="645164566271246268">"Inprimatu"</string> <string name="savetopdf_button" msgid="2976186791686924743">"Gorde PDF gisa"</string> - <string name="print_options_expanded" msgid="6944679157471691859">"Inprimaketa-aukerak zabalduta daude"</string> - <string name="print_options_collapsed" msgid="7455930445670414332">"Inprimaketa-aukerak tolestuta daude"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"Inprimatzeko aukerak zabalduta daude"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"Inprimatzeko aukerak tolestuta daude"</string> <string name="search" msgid="5421724265322228497">"Bilatu"</string> <string name="all_printers_label" msgid="3178848870161526399">"Inprimagailu guztiak"</string> <string name="add_print_service_label" msgid="5356702546188981940">"Gehitu zerbitzua"</string> diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml index 349ac31..3a3f6bb 100644 --- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml +++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml @@ -37,9 +37,9 @@ <string name="all_printers" msgid="5018829726861876202">"ທຸກເຄື່ອງພິມ..."</string> <string name="print_dialog" msgid="32628687461331979">"ໜ້າຕ່າງການພິມ"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="page_description_template" msgid="6831239682256197161">"ໜ້າທີ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ໃນ <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"ສະຫຼຸບ, ສໍາເນົາ <xliff:g id="COPIES">%1$s</xliff:g> , ຂະຫນາດ <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> - <string name="expand_handle" msgid="7282974448109280522">"ຂະຫຍາຍໂຕຈັບ"</string> + <string name="page_description_template" msgid="6831239682256197161">"ໜ້າທີ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ຈາກທັງໝົດ <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"ສະຫຼຸບ, ສໍາເນົາ <xliff:g id="COPIES">%1$s</xliff:g>, ຂະຫນາດ <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"ຂະຫຍາຍໂຕຈັດການ"</string> <string name="collapse_handle" msgid="6886637989442507451">"ປິດໂຕຈັດການ"</string> <string name="print_button" msgid="645164566271246268">"ພິມ"</string> <string name="savetopdf_button" msgid="2976186791686924743">"ບັນທຶກເປັນ PDF"</string> diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml index d115b29..7b47f4c 100644 --- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml +++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"Caixa de diálogo de impressão"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"Página <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> de <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"Resumo, cópias <xliff:g id="COPIES">%1$s</xliff:g>, tamanho do papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Resumo, <xliff:g id="COPIES">%1$s</xliff:g> cópias, tamanho do papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> <string name="expand_handle" msgid="7282974448109280522">"Expandir alça"</string> <string name="collapse_handle" msgid="6886637989442507451">"Fechar alça"</string> <string name="print_button" msgid="645164566271246268">"Imprimir"</string> diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml index 3f5cb3c..1446a53 100644 --- a/packages/PrintSpooler/res/values-ro/strings.xml +++ b/packages/PrintSpooler/res/values-ro/strings.xml @@ -37,21 +37,14 @@ <string name="all_printers" msgid="5018829726861876202">"Toate imprimantele..."</string> <string name="print_dialog" msgid="32628687461331979">"Caseta de dialog de printare"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <!-- no translation found for page_description_template (6831239682256197161) --> - <skip /> - <!-- no translation found for summary_template (8899734908625669193) --> - <skip /> - <!-- no translation found for expand_handle (7282974448109280522) --> - <skip /> - <!-- no translation found for collapse_handle (6886637989442507451) --> - <skip /> + <string name="page_description_template" msgid="6831239682256197161">"Pagina <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> din <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Rezumat, copii <xliff:g id="COPIES">%1$s</xliff:g>, dimensiunea paginii <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"Ghidaj de extindere"</string> + <string name="collapse_handle" msgid="6886637989442507451">"Ghidaj de restrângere"</string> <string name="print_button" msgid="645164566271246268">"Printați"</string> - <!-- no translation found for savetopdf_button (2976186791686924743) --> - <skip /> - <!-- no translation found for print_options_expanded (6944679157471691859) --> - <skip /> - <!-- no translation found for print_options_collapsed (7455930445670414332) --> - <skip /> + <string name="savetopdf_button" msgid="2976186791686924743">"Salvați în format PDF"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"Opțiuni de printare extinse"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"Opțiuni de printare restrânse"</string> <string name="search" msgid="5421724265322228497">"Căutați"</string> <string name="all_printers_label" msgid="3178848870161526399">"Toate imprimantele"</string> <string name="add_print_service_label" msgid="5356702546188981940">"Adăugați un serviciu"</string> diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml index 7a000c5..77ecb21 100644 --- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml @@ -37,21 +37,14 @@ <string name="all_printers" msgid="5018829726861876202">"所有打印机…"</string> <string name="print_dialog" msgid="32628687461331979">"打印对话框"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> / <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <!-- no translation found for page_description_template (6831239682256197161) --> - <skip /> - <!-- no translation found for summary_template (8899734908625669193) --> - <skip /> - <!-- no translation found for expand_handle (7282974448109280522) --> - <skip /> - <!-- no translation found for collapse_handle (6886637989442507451) --> - <skip /> + <string name="page_description_template" msgid="6831239682256197161">"第<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>页,共<xliff:g id="PAGE_COUNT">%2$d</xliff:g>页"</string> + <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g>份,纸张尺寸为<xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"展开手柄"</string> + <string name="collapse_handle" msgid="6886637989442507451">"收起手柄"</string> <string name="print_button" msgid="645164566271246268">"打印"</string> - <!-- no translation found for savetopdf_button (2976186791686924743) --> - <skip /> - <!-- no translation found for print_options_expanded (6944679157471691859) --> - <skip /> - <!-- no translation found for print_options_collapsed (7455930445670414332) --> - <skip /> + <string name="savetopdf_button" msgid="2976186791686924743">"保存为PDF格式"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"已展开打印选项"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"已收起打印选项"</string> <string name="search" msgid="5421724265322228497">"搜索"</string> <string name="all_printers_label" msgid="3178848870161526399">"所有打印机"</string> <string name="add_print_service_label" msgid="5356702546188981940">"添加服务"</string> diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml index eb28f8a..3e26a5e 100644 --- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"印表機對話方塊"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"第 <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> 頁,共 <xliff:g id="PAGE_COUNT">%2$d</xliff:g> 頁"</string> - <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g> 份,<xliff:g id="PAPER_SIZE">%2$s</xliff:g> 紙張大小"</string> + <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g> 份,紙張為 <xliff:g id="PAPER_SIZE">%2$s</xliff:g> 大小"</string> <string name="expand_handle" msgid="7282974448109280522">"展開控點"</string> <string name="collapse_handle" msgid="6886637989442507451">"收合控點"</string> <string name="print_button" msgid="645164566271246268">"列印"</string> diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java index d169319..c4b3262 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java @@ -595,7 +595,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat } }); } else if (resultCode == RESULT_CANCELED) { - setState(STATE_CONFIGURING); + mState = STATE_CONFIGURING; updateOptionsUi(); } else { setState(STATE_CREATE_FILE_FAILED); @@ -2335,7 +2335,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat mContext.unbindService(PageShredder.this); mCallback.run(); } - }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } @Override diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 3c2a776..bddd691 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -283,6 +283,21 @@ <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> + </intent-filter> + </activity> + + <activity android:name=".egg.LLandActivity" + android:theme="@android:style/Theme.Material.Light.NoActionBar.TranslucentDecor" + android:exported="true" + android:label="@string/lland" + android:hardwareAccelerated="true" + android:launchMode="singleInstance" + android:screenOrientation="locked" + android:process=":sweetsweetdesserts" + android:excludeFromRecents="true"> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.android.internal.category.PLATLOGO" /> </intent-filter> </activity> diff --git a/packages/SystemUI/res/drawable/android.xml b/packages/SystemUI/res/drawable/android.xml new file mode 100644 index 0000000..750de05 --- /dev/null +++ b/packages/SystemUI/res/drawable/android.xml @@ -0,0 +1,37 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2 (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" + android:viewportHeight="48"> + <path + android:name="torso" + android:pathData="M12,36c0,1.1 0.9,2 2,2l2,0l0,7c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3l0,-7l4,0l0,7c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3l0,-7l2,0c1.1,0 2,-0.9 2,-2L36,16L12,16L12,36z" + android:fillColor="#FFFFFF"/> + <path + android:name="leftArm" + android:pathData="M7,16c-1.7,0 -3,1.3 -3,3l0,14c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3L10,19C10,17.3 8.7,16 7,16z" + android:fillColor="#FFFFFF"/> + <path + android:name="rightArm" + android:pathData="M41,16c-1.7,0 -3,1.3 -3,3l0,14c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3L44,19C44,17.3 42.7,16 41,16z" + android:fillColor="#FFFFFF"/> + <path + android:name="illFormTheHead" + android:pathData="M31.1,4.3l2.6,-2.6c0.4,-0.4 0.4,-1 0,-1.4c-0.4,-0.4 -1,-0.4 -1.4,0l-3,3C27.7,2.5 25.9,2 24,2c-1.9,0 -3.7,0.5 -5.3,1.3l-3,-3c-0.4,-0.4 -1,-0.4 -1.4,0c-0.4,0.4 -0.4,1 0,1.4l2.6,2.6C13.9,6.5 12,10 12,14l24,0C36,10 34.1,6.5 31.1,4.3zM20.31,9c0,0.72 -0.59,1.31 -1.31,1.31c-0.72,0 -1.31,-0.59 -1.31,-1.31c0,-0.72 0.59,-1.31 1.31,-1.31C19.72,7.69 20.31,8.28 20.31,9zM30.31,9c0,0.72 -0.59,1.31 -1.31,1.31c-0.73,0 -1.31,-0.59 -1.31,-1.31c0,-0.72 0.59,-1.31 1.31,-1.31C29.72,7.69 30.31,8.28 30.31,9z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/cloud.xml b/packages/SystemUI/res/drawable/cloud.xml new file mode 100644 index 0000000..17e4ad2 --- /dev/null +++ b/packages/SystemUI/res/drawable/cloud.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M38.700001,20.100000C37.299999,13.200000 31.299999,8.000000 24.000000,8.000000c-5.800000,0.000000 -10.800000,3.300000 -13.300000,8.100000C4.700000,16.700001 0.000000,21.799999 0.000000,28.000000c0.000000,6.600000 5.400000,12.000000 12.000000,12.000000l26.000000,0.000000c5.500000,0.000000 10.000000,-4.500000 10.000000,-10.000000C48.000000,24.700001 43.900002,20.400000 38.700001,20.100000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/cloud_off.xml b/packages/SystemUI/res/drawable/cloud_off.xml new file mode 100644 index 0000000..b15ea5f --- /dev/null +++ b/packages/SystemUI/res/drawable/cloud_off.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M19.400000,10.000000c-0.700000,-3.400000 -3.700000,-6.000000 -7.400000,-6.000000c-1.500000,0.000000 -2.900000,0.400000 -4.000000,1.200000l1.500000,1.500000C10.200000,6.200000 11.100000,6.000000 12.000000,6.000000c3.000000,0.000000 5.500000,2.500000 5.500000,5.500000L17.500000,12.000000L19.000000,12.000000c1.700000,0.000000 3.000000,1.300000 3.000000,3.000000c0.000000,1.100000 -0.600000,2.100000 -1.600000,2.600000l1.500000,1.500000c1.300000,-0.900000 2.100000,-2.400000 2.100000,-4.100000C24.000000,12.400000 21.900000,10.200000 19.400000,10.000000zM3.000000,5.300000L5.800000,8.000000C2.600000,8.200000 0.000000,10.800000 0.000000,14.000000c0.000000,3.300000 2.700000,6.000000 6.000000,6.000000l11.700000,0.000000l2.000000,2.000000l1.300000,-1.300000L4.300000,4.000000L3.000000,5.300000zM7.700000,10.000000l8.000000,8.000000L6.000000,18.000000c-2.200000,0.000000 -4.000000,-1.800000 -4.000000,-4.000000c0.000000,-2.200000 1.800000,-4.000000 4.000000,-4.000000L7.700000,10.000000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/moon.xml b/packages/SystemUI/res/drawable/moon.xml new file mode 100644 index 0000000..4ee6286 --- /dev/null +++ b/packages/SystemUI/res/drawable/moon.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M18.000000,4.000000c-2.100000,0.000000 -4.100000,0.300000 -6.000000,0.900000C20.100000,7.500000 26.000000,15.000000 26.000000,24.000000s-5.900000,16.500000 -14.000000,19.100000c1.900000,0.600000 3.900000,0.900000 6.000000,0.900000c11.000000,0.000000 20.000000,-9.000000 20.000000,-20.000000S29.000000,4.000000 18.000000,4.000000z" + android:fillColor="#FFF2F2FF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/placeholder.xml b/packages/SystemUI/res/drawable/placeholder.xml new file mode 100644 index 0000000..1933145 --- /dev/null +++ b/packages/SystemUI/res/drawable/placeholder.xml @@ -0,0 +1,51 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="100dp" + android:height="400dp" + android:viewportWidth="100" + android:viewportHeight="400"> + + <!-- future site of real artwork --> + + <path android:fillColor="#FFFFFF00" + android:pathData="M 0,0 L 100,0 L 100,400 L 0,400 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,0 L 100,25 L 100,50 L 0,25 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,50 L 100,75 L 100,100 L 0,75 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,100 L 100,125 L 100,150 L 0,125 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,150 L 100,175 L 100,200 L 0,175 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,200 L 100,225 L 100,250 L 0,225 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,250 L 100,275 L 100,300 L 0,275 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,300 L 100,325 L 100,350 L 0,325 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,350 L 100,375 L 100,400 L 0,375 z" /> +</vector> + diff --git a/packages/SystemUI/res/drawable/recents_task_view_header_bg_color.xml b/packages/SystemUI/res/drawable/recents_task_view_header_bg_color.xml new file mode 100644 index 0000000..5f9341c --- /dev/null +++ b/packages/SystemUI/res/drawable/recents_task_view_header_bg_color.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <corners android:topLeftRadius="@dimen/recents_task_view_rounded_corners_radius" + android:topRightRadius="@dimen/recents_task_view_rounded_corners_radius"/> + <solid android:color="#00000000" /> +</shape>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/scorecard.xml b/packages/SystemUI/res/drawable/scorecard.xml new file mode 100644 index 0000000..707449a --- /dev/null +++ b/packages/SystemUI/res/drawable/scorecard.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle" + > + <corners + android:radius="8dp" /> + <solid + android:color="#ffffffff" /> +</shape> diff --git a/packages/SystemUI/res/drawable/scorecard_gameover.xml b/packages/SystemUI/res/drawable/scorecard_gameover.xml new file mode 100644 index 0000000..f663a66 --- /dev/null +++ b/packages/SystemUI/res/drawable/scorecard_gameover.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle" + > + <corners + android:radius="8dp" /> + <solid + android:color="#ffff0000" /> +</shape> diff --git a/packages/SystemUI/res/drawable/star.xml b/packages/SystemUI/res/drawable/star.xml new file mode 100644 index 0000000..73ca04a --- /dev/null +++ b/packages/SystemUI/res/drawable/star.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M30.250000,17.750000L24.000000,4.000000l-6.250000,13.750000L4.000000,24.000000l13.750000,6.250000L24.000000,44.000000l6.250000,-13.750000L44.000000,24.000000L30.250000,17.750000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/sun.xml b/packages/SystemUI/res/drawable/sun.xml new file mode 100644 index 0000000..3e4a233 --- /dev/null +++ b/packages/SystemUI/res/drawable/sun.xml @@ -0,0 +1,29 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <group> + <path + android:pathData="M 24,8 A 16,16 0 1,0 24.0001,8 z" + android:fillColor="#FFFFFFCC" /> + <path + android:pathData="M40.0,30.6l6.6,-6.6L40.0,17.4L40.0,8.0l-9.4,0.0L24.0,1.4L17.4,8.0L8.0,8.0l0.0,9.4L1.4,24.0L8.0,30.6L8.0,40.0l9.4,0.0l6.6,6.6l6.6,-6.6L40.0,40.0L40.0,30.6zM24.0,36.0c-6.6,0.0 -12.0,-5.4 -12.0,-12.0s5.4,-12.0 12.0,-12.0c6.6,0.0 12.0,5.4 12.0,12.0S30.6,36.0 24.0,36.0z" + android:fillColor="#FFFFFF40"/> + </group> +</vector> diff --git a/packages/SystemUI/res/drawable/sun2.xml b/packages/SystemUI/res/drawable/sun2.xml new file mode 100644 index 0000000..6d2d504 --- /dev/null +++ b/packages/SystemUI/res/drawable/sun2.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M40.000000,17.400000L40.000000,8.000000l-9.400000,0.000000L24.000000,1.400000L17.400000,8.000000L8.000000,8.000000l0.000000,9.400000L1.400000,24.000000L8.000000,30.600000L8.000000,40.000000l9.400000,0.000000l6.600000,6.600000l6.600000,-6.600000L40.000000,40.000000l0.000000,-9.400000l6.600000,-6.600000L40.000000,17.400000zM24.000000,36.000000c-6.600000,0.000000 -12.000000,-5.400000 -12.000000,-12.000000s5.400000,-12.000000 12.000000,-12.000000c6.600000,0.000000 12.000000,5.400000 12.000000,12.000000S30.600000,36.000000 24.000000,36.000000zM24.000000,16.000000c-4.400000,0.000000 -8.000000,3.600000 -8.000000,8.000000c0.000000,4.400000 3.600000,8.000000 8.000000,8.000000s8.000000,-3.600000 8.000000,-8.000000C32.000000,19.600000 28.400000,16.000000 24.000000,16.000000z" + android:fillColor="#FF000000"/> +</vector> diff --git a/packages/SystemUI/res/layout/lland.xml b/packages/SystemUI/res/layout/lland.xml new file mode 100644 index 0000000..053225d --- /dev/null +++ b/packages/SystemUI/res/layout/lland.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 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. +--> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent" + > + <com.android.systemui.egg.LLand + android:id="@+id/world" + android:layout_width="match_parent" + android:layout_height="match_parent"> + </com.android.systemui.egg.LLand> + <TextView + android:id="@+id/score" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="32sp" + android:textColor="#FFAAAAAA" + android:layout_marginTop="32dp" + android:layout_marginLeft="16dp" + android:layout_gravity="top|left" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:background="@drawable/scorecard" + /> + <TextView + android:id="@+id/welcome" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="30sp" + android:textColor="#FFFFFFFF" + android:layout_gravity="center" + android:layout_marginTop="70dp" + android:visibility="gone" + /> +</FrameLayout> + diff --git a/packages/SystemUI/res/layout/recents_task_view.xml b/packages/SystemUI/res/layout/recents_task_view.xml index 4cb8498..d1d3828 100644 --- a/packages/SystemUI/res/layout/recents_task_view.xml +++ b/packages/SystemUI/res/layout/recents_task_view.xml @@ -15,30 +15,34 @@ --> <com.android.systemui.recents.views.TaskView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" + android:layout_width="match_parent" android:layout_height="match_parent" - android:focusable="true" - android:background="#FFffffff"> - <com.android.systemui.recents.views.TaskViewThumbnail - android:id="@+id/task_view_thumbnail" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - <include layout="@layout/recents_task_view_header" /> + android:focusable="true"> <FrameLayout - android:id="@+id/lock_to_app_fab" - android:layout_width="48dp" - android:layout_height="48dp" - android:layout_gravity="bottom|right" - android:layout_marginRight="15dp" - android:layout_marginBottom="15dp" - android:translationZ="3dp" - android:contentDescription="@string/recents_lock_to_app_button_label" - android:background="@drawable/recents_lock_to_task_button_bg"> - <ImageView - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center" - android:src="@drawable/recents_lock_to_app_pin" /> + android:id="@+id/task_view_content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <com.android.systemui.recents.views.TaskViewThumbnail + android:id="@+id/task_view_thumbnail" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + <include layout="@layout/recents_task_view_header" /> + <FrameLayout + android:id="@+id/lock_to_app_fab" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_gravity="bottom|right" + android:layout_marginRight="15dp" + android:layout_marginBottom="15dp" + android:translationZ="2dp" + android:contentDescription="@string/recents_lock_to_app_button_label" + android:background="@drawable/recents_lock_to_task_button_bg"> + <ImageView + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_gravity="center" + android:src="@drawable/recents_lock_to_app_pin" /> + </FrameLayout> </FrameLayout> </com.android.systemui.recents.views.TaskView> diff --git a/packages/SystemUI/res/values-af/config.xml b/packages/SystemUI/res/values-af/config.xml index 3a66eab..38497cf 100644 --- a/packages/SystemUI/res/values-af/config.xml +++ b/packages/SystemUI/res/values-af/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s,10 s,30 s,60 s,120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-am/config.xml b/packages/SystemUI/res/values-am/config.xml index 3a66eab..97e30c9 100644 --- a/packages/SystemUI/res/values-am/config.xml +++ b/packages/SystemUI/res/values-am/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s፣10s፣30s፣60s፣120s"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/config.xml b/packages/SystemUI/res/values-ar/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-ar/config.xml +++ b/packages/SystemUI/res/values-ar/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-ca/config.xml b/packages/SystemUI/res/values-bg/config.xml index 3a66eab..3a6872f 100644 --- a/packages/SystemUI/res/values-ca/config.xml +++ b/packages/SystemUI/res/values-bg/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 с, 10 с, 30 с, 60 с, 120 с"</string> </resources> diff --git a/packages/SystemUI/res/values-bn-rBD/config.xml b/packages/SystemUI/res/values-bn-rBD/config.xml index 947fde9..be49df5 100644 --- a/packages/SystemUI/res/values-bn-rBD/config.xml +++ b/packages/SystemUI/res/values-bn-rBD/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"৬০০০০:১০০০০,৩০০০০০:৩০০০০,১৮০০০০০:৬০০০০,০"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"১সে.,১০সে.,৩০সে.,৬০সে.,১২০সে."</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index c6a381c..c9d1cf5 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -214,10 +214,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"S\'ha establert la ubicació per GPS"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"Sol·licituds d\'ubicació actives"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Configuració de les notificacions"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"Configuració de l\'aplicació <xliff:g id="APP_NAME">%s</xliff:g>"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girarà automàticament."</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla està bloquejada en orientació horitzontal."</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla està bloquejada en orientació vertical."</string> @@ -323,7 +321,7 @@ <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Torna a començar"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Sí, continua"</string> <string name="user_add_user_title" msgid="4553596395824132638">"Vols afegir un usuari nou?"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar el seu espai.\n\nQualsevol usuari pot actualitzar les aplicacions dels altres usuaris."</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar-se l\'espai.\n\nQualsevol usuari pot actualitzar les aplicacions de la resta d\'usuaris."</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"Estalvi de bateria activada"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Redueix el rendiment i l\'ús de les dades en segon pla."</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Desactiva l\'estalvi de bateria"</string> diff --git a/packages/SystemUI/res/values-de/config.xml b/packages/SystemUI/res/values-de/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-de/config.xml +++ b/packages/SystemUI/res/values-de/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-el/config.xml b/packages/SystemUI/res/values-el/config.xml index 3a66eab..f3cccde 100644 --- a/packages/SystemUI/res/values-el/config.xml +++ b/packages/SystemUI/res/values-el/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 δ, 10 δ, 30 δ, 60 δ, 120 δ"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/config.xml b/packages/SystemUI/res/values-en-rGB/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-en-rGB/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-en-rIN/config.xml b/packages/SystemUI/res/values-en-rIN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-en-rIN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-es-rUS/config.xml b/packages/SystemUI/res/values-es-rUS/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-es-rUS/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-es/config.xml b/packages/SystemUI/res/values-es/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-es/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-et-rEE/config.xml b/packages/SystemUI/res/values-et-rEE/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-et-rEE/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-eu-rES/config.xml b/packages/SystemUI/res/values-eu-rES/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-eu-rES/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-fa/config.xml b/packages/SystemUI/res/values-fa/config.xml deleted file mode 100644 index a4a7ca2..0000000 --- a/packages/SystemUI/res/values-fa/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"۶۰۰۰۰:۱۰۰۰۰,۳۰۰۰۰۰:۳۰۰۰۰,۱۸۰۰۰۰۰:۶۰۰۰۰,۰"</string> -</resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 11e6241..7130c89 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -70,7 +70,7 @@ <string name="screenshot_saving_title" msgid="8242282144535555697">"در حال ذخیره تصویر صفحه..."</string> <string name="screenshot_saving_text" msgid="2419718443411738818">"تصویر صفحه ذخیره شد."</string> <string name="screenshot_saved_title" msgid="6461865960961414961">"تصویر صفحه گرفته شد."</string> - <string name="screenshot_saved_text" msgid="1152839647677558815">"برای مشاهده تصویر صفحه خود، لمس کنید."</string> + <string name="screenshot_saved_text" msgid="1152839647677558815">"برای مشاهده عکس صفحهنمایشتان، لمس کنید."</string> <string name="screenshot_failed_title" msgid="705781116746922771">"تصویر صفحه گرفته نشد."</string> <string name="screenshot_failed_text" msgid="1260203058661337274">"به دلیل فضای ذخیرهسازی کم یا عدم اجازه برنامه یا سازمانتان، نمیتوان از صفحه عکس گرفت."</string> <string name="usb_preference_title" msgid="6551050377388882787">"گزینههای انتقال فایل USB"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/config.xml b/packages/SystemUI/res/values-fr-rCA/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-fr-rCA/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-fr/config.xml b/packages/SystemUI/res/values-fr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-fr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-gl-rES/config.xml b/packages/SystemUI/res/values-gl-rES/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-gl-rES/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml index 68d3af4..c94e04f 100644 --- a/packages/SystemUI/res/values-gl-rES/strings.xml +++ b/packages/SystemUI/res/values-gl-rES/strings.xml @@ -301,9 +301,9 @@ <string name="keyguard_unlock" msgid="8043466894212841998">"Pasa o dedo cara arriba para desbloquear"</string> <string name="phone_hint" msgid="3101468054914424646">"Pasa o dedo cara á dereita para acceder ao teléfono"</string> <string name="camera_hint" msgid="5241441720959174226">"Pasa o dedo cara á esquerda para abrir a cámara"</string> - <string name="interruption_level_none" msgid="3831278883136066646">"Nunca"</string> + <string name="interruption_level_none" msgid="3831278883136066646">"Ningún"</string> <string name="interruption_level_priority" msgid="6517366750688942030">"Prioridade"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Sempre"</string> + <string name="interruption_level_all" msgid="1330581184930945764">"Todas"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para finalizar a carga)"</string> <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Cambiar usuario"</string> <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Cambiar usuario, usuario actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-hi/config.xml b/packages/SystemUI/res/values-hi/config.xml index 3a66eab..000d96f 100644 --- a/packages/SystemUI/res/values-hi/config.xml +++ b/packages/SystemUI/res/values-hi/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 से,10 से, 30 से, 60 से, 120 से"</string> </resources> diff --git a/packages/SystemUI/res/values-hr/config.xml b/packages/SystemUI/res/values-hr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-hr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-hu/config.xml b/packages/SystemUI/res/values-hu/config.xml index 3a66eab..f5ccf75 100644 --- a/packages/SystemUI/res/values-hu/config.xml +++ b/packages/SystemUI/res/values-hu/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1, 10, 30, 60, 120"</string> </resources> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index c84e380..9901c88 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -318,8 +318,8 @@ <string name="guest_wipe_session_message" msgid="8476238178270112811">"Դուք ցանկանու՞մ եք շարունակել ձեր գործողությունը:"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Սկսել"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Այո, շարունակել"</string> - <string name="user_add_user_title" msgid="4553596395824132638">"Ավելացնե՞լ նոր օգտվող:"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտվող եք ավելացնում, նա պետք է կարգավորի իր տարածքը:\n\nՑանկացած օգտվող կարող է թարմացնել ծրագրերը՝ մյուս բոլոր օգտվողների համար:"</string> + <string name="user_add_user_title" msgid="4553596395824132638">"Ավելացնե՞լ նոր պրոֆիլ:"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտվող եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտվող կարող է թարմացնել հավելվածները մյուս բոլոր հաշիվների համար:"</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"Մարտկոցի տնտեսումը միացված է"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Նվազեցնում է ծանրաբեռնվածությունը և ֆոնային տվյալները"</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Անջատել մարտկոցի տնտեսումը"</string> diff --git a/packages/SystemUI/res/values-in/config.xml b/packages/SystemUI/res/values-in/config.xml index 3a66eab..2aa4b09 100644 --- a/packages/SystemUI/res/values-in/config.xml +++ b/packages/SystemUI/res/values-in/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1dtk,10dtk,30dtk,60dtk,120dtk"</string> </resources> diff --git a/packages/SystemUI/res/values-is-rIS/config.xml b/packages/SystemUI/res/values-is-rIS/config.xml index 3a66eab..46f7456 100644 --- a/packages/SystemUI/res/values-is-rIS/config.xml +++ b/packages/SystemUI/res/values-is-rIS/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek.,10 sek., 30 sek., 60 sek.,120 sek."</string> </resources> diff --git a/packages/SystemUI/res/values-it/config.xml b/packages/SystemUI/res/values-it/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-it/config.xml +++ b/packages/SystemUI/res/values-it/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/config.xml b/packages/SystemUI/res/values-iw/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-iw/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ja/config.xml b/packages/SystemUI/res/values-ja/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ja/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-kk-rKZ/config.xml b/packages/SystemUI/res/values-kk-rKZ/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-kk-rKZ/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-km-rKH/config.xml b/packages/SystemUI/res/values-km-rKH/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-km-rKH/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-kn-rIN/config.xml b/packages/SystemUI/res/values-kn-rIN/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-kn-rIN/config.xml +++ b/packages/SystemUI/res/values-kn-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-ky-rKG/config.xml b/packages/SystemUI/res/values-ky-rKG/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ky-rKG/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-cs/config.xml b/packages/SystemUI/res/values-lt/config.xml index 3a66eab..edfec94 100644 --- a/packages/SystemUI/res/values-cs/config.xml +++ b/packages/SystemUI/res/values-lt/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek., 10 sek., 30 sek., 60 sek., 120 sek."</string> </resources> diff --git a/packages/SystemUI/res/values-lv/config.xml b/packages/SystemUI/res/values-lv/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-lv/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-da/config.xml b/packages/SystemUI/res/values-mk-rMK/config.xml index 3a66eab..024f528 100644 --- a/packages/SystemUI/res/values-da/config.xml +++ b/packages/SystemUI/res/values-mk-rMK/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1сек., 10 сек., 30 сек., 60 сек., 120 сек."</string> </resources> diff --git a/packages/SystemUI/res/values-ml-rIN/config.xml b/packages/SystemUI/res/values-ml-rIN/config.xml index 3a66eab..d2d29f9 100644 --- a/packages/SystemUI/res/values-ml-rIN/config.xml +++ b/packages/SystemUI/res/values-ml-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1സെ,10സെ,30സെ,60സെ,120സെ"</string> </resources> diff --git a/packages/SystemUI/res/values-mn-rMN/config.xml b/packages/SystemUI/res/values-mn-rMN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-mn-rMN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index bc58845..7d53269 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -212,10 +212,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS байршил"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"Байршлын хүсэлтүүд идэвхтэй"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Бүх мэдэгдлийг цэвэрлэх."</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Мэдэгдлийн тохиргоо"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> тохиргоо"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Дэлгэц автоматаар эргэнэ."</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Дэлгэц босоо чиглэлээр түгжигдсэн."</string> diff --git a/packages/SystemUI/res/values-mr-rIN/config.xml b/packages/SystemUI/res/values-mr-rIN/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-mr-rIN/config.xml +++ b/packages/SystemUI/res/values-mr-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-my-rMM/config.xml b/packages/SystemUI/res/values-my-rMM/config.xml index 3a26007..805d893 100644 --- a/packages/SystemUI/res/values-my-rMM/config.xml +++ b/packages/SystemUI/res/values-my-rMM/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"၆၀၀၀၀:၁၀၀၀၀၊ ၃၀၀၀၀၀:၃၀၀၀၀၊ ၁၈၀၀၀၀၀:၆၀၀၀၀,၀"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"၁စက္ကန့်၊ ၁၀စက္ကန့်၊ ၃၀စက္ကန့်၊ 60စက္ကန့်၊ ၁၂၀စက္ကန့်"</string> </resources> diff --git a/packages/SystemUI/res/values-ne-rNP/config.xml b/packages/SystemUI/res/values-ne-rNP/config.xml deleted file mode 100644 index 5fbf1d8..0000000 --- a/packages/SystemUI/res/values-ne-rNP/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"६००००:१००००,३०००००:३००००, १८०००००:६००००,०"</string> -</resources> diff --git a/packages/SystemUI/res/values-nl/config.xml b/packages/SystemUI/res/values-nl/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-nl/config.xml +++ b/packages/SystemUI/res/values-nl/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/config.xml b/packages/SystemUI/res/values-pl/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-pl/config.xml +++ b/packages/SystemUI/res/values-pl/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/config.xml b/packages/SystemUI/res/values-pt-rPT/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-pt-rPT/config.xml +++ b/packages/SystemUI/res/values-pt-rPT/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/config.xml b/packages/SystemUI/res/values-pt/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-pt/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index d784317..4e8880e 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -314,7 +314,7 @@ <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Ștergeți invitatul?"</string> <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string> <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Ștergeți"</string> - <string name="guest_wipe_session_title" msgid="6419439912885956132">"Welcome back, guest!"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"Bine ați revenit în sesiunea pentru invitați!"</string> <string name="guest_wipe_session_message" msgid="8476238178270112811">"Vreți să continuați sesiunea?"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Începeți din nou"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Da, continuați"</string> diff --git a/packages/SystemUI/res/values-sk/config.xml b/packages/SystemUI/res/values-sk/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sk/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sl/config.xml b/packages/SystemUI/res/values-sl/config.xml deleted file mode 100644 index cd49028..0000000 --- a/packages/SystemUI/res/values-sl/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000, 300000:30000, 1800000:60000, 0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sr/config.xml b/packages/SystemUI/res/values-sr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sv/config.xml b/packages/SystemUI/res/values-sv/config.xml index 3a66eab..3b683a8 100644 --- a/packages/SystemUI/res/values-sv/config.xml +++ b/packages/SystemUI/res/values-sv/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek,10 sek, 30 sek, 60 sek,120 sek"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/config.xml b/packages/SystemUI/res/values-sw/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sw/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ta-rIN/config.xml b/packages/SystemUI/res/values-ta-rIN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ta-rIN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-te-rIN/config.xml b/packages/SystemUI/res/values-te-rIN/config.xml index 3a66eab..7a4c0cb 100644 --- a/packages/SystemUI/res/values-te-rIN/config.xml +++ b/packages/SystemUI/res/values-te-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1సె,10సె,30సె,60సె,120సె"</string> </resources> diff --git a/packages/SystemUI/res/values-th/config.xml b/packages/SystemUI/res/values-th/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-th/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-tl/config.xml b/packages/SystemUI/res/values-tl/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-tl/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-uk/config.xml b/packages/SystemUI/res/values-uk/config.xml index 3a66eab..3a6872f 100644 --- a/packages/SystemUI/res/values-uk/config.xml +++ b/packages/SystemUI/res/values-uk/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 с, 10 с, 30 с, 60 с, 120 с"</string> </resources> diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml index dccf861..13fad3f 100644 --- a/packages/SystemUI/res/values-ur-rPK/strings.xml +++ b/packages/SystemUI/res/values-ur-rPK/strings.xml @@ -212,10 +212,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"مقام متعین کیا گیا بذریعہ GPS"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"مقام کی درخواستیں فعال ہیں"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"سبھی اطلاعات صاف کریں۔"</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"اطلاع کی ترتیبات"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ترتیبات"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"اسکرین خود بخود گردش کرے گی۔"</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"اسکرین لینڈ اسکیپ سمت بندی میں مقفل ہے۔"</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"اسکرین پورٹریٹ سمت بندی میں مقفل ہے۔"</string> @@ -321,7 +319,7 @@ <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"دوبارہ شروع کریں"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"ہاں، جاری رکھیں"</string> <string name="user_add_user_title" msgid="4553596395824132638">"نیا صارف شامل کریں؟"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے۔\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"بیٹری سیور آن ہے"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"کارکردگی اور پس منظر کا ڈیٹا کم کر دیتا ہے"</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"بیٹری کی بچت آف کریں"</string> diff --git a/packages/SystemUI/res/values-uz-rUZ/config.xml b/packages/SystemUI/res/values-uz-rUZ/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-uz-rUZ/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-zu/config.xml b/packages/SystemUI/res/values-zu/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-zu/config.xml +++ b/packages/SystemUI/res/values-zu/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index d5b0f17..82dccd2 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -117,4 +117,10 @@ <!-- The color of the navigation bar icons. Need to be in sync with ic_sysbar_* --> <color name="navigation_bar_icon_color">#E5FFFFFF</color> + + <!-- Shadow color for the first pixels around the fake shadow for recents. --> + <color name="fake_shadow_start_color">#44000000</color> + + <!-- Shadow color for the furthest pixels around the fake shadow for recents. --> + <color name="fake_shadow_end_color">#03000000</color> </resources> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 9654da9..9346906 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -29,12 +29,18 @@ ImageView --> <bool name="config_recents_thumbnail_image_fits_to_xy">false</bool> + <!-- Whether recents should use hardware layers for its taskviews. This flag can be enabled + for devices where the java drawing of round rects may be slow --> + <bool name="config_recents_use_hardware_layers">false</bool> + <!-- The number of app thumbnails we keep in memory --> <integer name="config_recents_max_thumbnail_count">10</integer> <!-- The number of app icons we keep in memory --> <integer name="config_recents_max_icon_count">20</integer> + <!-- Whether to use cheap, less good looking shadows for recents --> + <bool name="config_recents_fake_shadows">false</bool> <!-- The theme to use for RecentsActivity. --> <item type="style" name="config_recents_activity_theme">@style/RecentsTheme.Wallpaper</item> @@ -148,9 +154,12 @@ duration of the transition in to recents from home. --> <integer name="recents_animate_task_enter_from_home_delay">150</integer> <!-- The min animation duration for animating the task in when transitioning from home. --> - <integer name="recents_animate_task_enter_from_home_duration">275</integer> - <!-- The animation stagger to apply to each task animation when transitioning from home. --> - <integer name="recents_animate_task_enter_from_home_stagger_delay">10</integer> + <integer name="recents_animate_task_enter_from_home_duration">200</integer> + <!-- The total animation stagger delay when entering from home. --> + <integer name="recents_animate_task_enter_from_home_stagger_delay">110</integer> + <!-- The total animation duration added to the last card when entering from home. + This value is partialy also added to the previous tasks --> + <integer name="recents_animate_task_enter_from_home_stagger_duration">72</integer> <!-- The short duration when animating in/out the lock to app button. --> <integer name="recents_animate_lock_to_app_button_short_duration">150</integer> <!-- The long duration when animating in/out the lock to app button. --> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 37ee0ae..c690ef4 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -292,7 +292,7 @@ <dimen name="unlock_falsing_threshold">80dp</dimen> <!-- Lockscreen falsing threshold for quick settings. --> - <dimen name="qs_falsing_threshold">80dp</dimen> + <dimen name="qs_falsing_threshold">40dp</dimen> <!-- Falsing threshold used when dismissing notifications from the lockscreen. --> <dimen name="swipe_helper_falsing_threshold">70dp</dimen> @@ -452,10 +452,14 @@ <!-- How far the user needs to drag up to invoke search. --> <dimen name="search_panel_threshold">100dp</dimen> - <!-- The width/height of the phone/camera/unlock icon on keyguard. --> + <!-- The width/height of the phone/camera/unlock icon view on keyguard. --> <dimen name="keyguard_affordance_height">56dp</dimen> <dimen name="keyguard_affordance_width">56dp</dimen> + <!-- The width/height of the phone/camera/unlock icon drawable on keyguard. --> + <dimen name="keyguard_affordance_icon_height">24dp</dimen> + <dimen name="keyguard_affordance_icon_width">24dp</dimen> + <dimen name="keyguard_indication_margin_bottom">65dp</dimen> <!-- The text size for battery level --> @@ -492,4 +496,10 @@ <!-- The maximum width of the navigation bar ripples. --> <dimen name="key_button_ripple_max_width">95dp</dimen> + + <!-- Inset shadow for FakeShadowDrawable. It is used to avoid gaps between the card + and the shadow. --> + <dimen name="fake_shadow_inset">1dp</dimen> + + <dimen name="fake_shadow_size">8dp</dimen> </resources> diff --git a/packages/SystemUI/res/values/lland_config.xml b/packages/SystemUI/res/values/lland_config.xml new file mode 100644 index 0000000..56125a5 --- /dev/null +++ b/packages/SystemUI/res/values/lland_config.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 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. +*/ +--> + +<resources> + <dimen name="obstacle_spacing">380dp</dimen> + <dimen name="translation_per_sec">100dp</dimen> + <dimen name="boost_dv">600dp</dimen> + <dimen name="player_hit_size">40dp</dimen> + <dimen name="player_size">40dp</dimen> + <dimen name="obstacle_width">80dp</dimen> + <dimen name="obstacle_gap">170dp</dimen> + <dimen name="obstacle_height_min">40dp</dimen> + <dimen name="building_width_min">20dp</dimen> + <dimen name="building_width_max">250dp</dimen> + <dimen name="building_height_min">20dp</dimen> + <dimen name="cloud_size_min">10dp</dimen> + <dimen name="cloud_size_max">100dp</dimen> + <dimen name="sun_size">45dp</dimen> + <dimen name="moon_size">30dp</dimen> + <dimen name="star_size_min">3dp</dimen> + <dimen name="star_size_max">5dp</dimen> + <dimen name="G">30dp</dimen> + <dimen name="max_v">1000dp</dimen> + <dimen name="scenery_z">6dp</dimen> + <dimen name="obstacle_z">15dp</dimen> + <dimen name="player_z">15dp</dimen> + <dimen name="player_z_boost">18dp</dimen> + <dimen name="hud_z">35dp</dimen> +</resources> diff --git a/packages/SystemUI/res/values/lland_strings.xml b/packages/SystemUI/res/values/lland_strings.xml new file mode 100644 index 0000000..ce88157 --- /dev/null +++ b/packages/SystemUI/res/values/lland_strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright (c) 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. + */ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Name of the L Land easter egg. DO NOT TRANSLATE --> + <string name="lland">L Land</string> +</resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 0445fe8..e9a1acf 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -670,6 +670,8 @@ <string name="recents_lock_to_app_button_label">lock to app</string> <!-- Recents: Temporary string for the button in the recents search bar. [CHAR LIMIT=NONE] --> <string name="recents_search_bar_label">search</string> + <!-- Recents: Launch error string. [CHAR LIMIT=NONE] --> + <string name="recents_launch_error_message">Could not start <xliff:g id="app" example="Calendar">%s</xliff:g>.</string> <!-- Expanded Status Bar Header: Battery Charged [CHAR LIMIT=40] --> diff --git a/packages/SystemUI/src/com/android/systemui/egg/LLand.java b/packages/SystemUI/src/com/android/systemui/egg/LLand.java new file mode 100644 index 0000000..d1c02dd --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/egg/LLand.java @@ -0,0 +1,748 @@ +/* + * Copyright (C) 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. + */ + +package com.android.systemui.egg; + +import android.animation.TimeAnimator; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.*; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.*; +import android.view.animation.DecelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import com.android.systemui.R; + +public class LLand extends FrameLayout { + public static final String TAG = "LLand"; + + public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + public static final boolean DEBUG_DRAW = false && DEBUG; + + public static final void L(String s, Object ... objects) { + if (DEBUG) { + Log.d(TAG, String.format(s, objects)); + } + } + + public static final boolean AUTOSTART = true; + public static final boolean HAVE_STARS = true; + + public static final float DEBUG_SPEED_MULTIPLIER = 1f; // 0.1f; + public static final boolean DEBUG_IDDQD = false; + + private static class Params { + public float TRANSLATION_PER_SEC; + public int OBSTACLE_SPACING, OBSTACLE_PERIOD; + public int BOOST_DV; + public int PLAYER_HIT_SIZE; + public int PLAYER_SIZE; + public int OBSTACLE_WIDTH; + public int OBSTACLE_GAP; + public int OBSTACLE_MIN; + public int BUILDING_WIDTH_MIN, BUILDING_WIDTH_MAX; + public int BUILDING_HEIGHT_MIN; + public int CLOUD_SIZE_MIN, CLOUD_SIZE_MAX; + public int STAR_SIZE_MIN, STAR_SIZE_MAX; + public int G; + public int MAX_V; + public float SCENERY_Z, OBSTACLE_Z, PLAYER_Z, PLAYER_Z_BOOST, HUD_Z; + public Params(Resources res) { + TRANSLATION_PER_SEC = res.getDimension(R.dimen.translation_per_sec); + OBSTACLE_SPACING = res.getDimensionPixelSize(R.dimen.obstacle_spacing); + OBSTACLE_PERIOD = (int) (OBSTACLE_SPACING / TRANSLATION_PER_SEC); + BOOST_DV = res.getDimensionPixelSize(R.dimen.boost_dv); + PLAYER_HIT_SIZE = res.getDimensionPixelSize(R.dimen.player_hit_size); + PLAYER_SIZE = res.getDimensionPixelSize(R.dimen.player_size); + OBSTACLE_WIDTH = res.getDimensionPixelSize(R.dimen.obstacle_width); + OBSTACLE_GAP = res.getDimensionPixelSize(R.dimen.obstacle_gap); + OBSTACLE_MIN = res.getDimensionPixelSize(R.dimen.obstacle_height_min); + BUILDING_HEIGHT_MIN = res.getDimensionPixelSize(R.dimen.building_height_min); + BUILDING_WIDTH_MIN = res.getDimensionPixelSize(R.dimen.building_width_min); + BUILDING_WIDTH_MAX = res.getDimensionPixelSize(R.dimen.building_width_max); + CLOUD_SIZE_MIN = res.getDimensionPixelSize(R.dimen.cloud_size_min); + CLOUD_SIZE_MAX = res.getDimensionPixelSize(R.dimen.cloud_size_max); + STAR_SIZE_MIN = res.getDimensionPixelSize(R.dimen.star_size_min); + STAR_SIZE_MAX = res.getDimensionPixelSize(R.dimen.star_size_max); + + G = res.getDimensionPixelSize(R.dimen.G); + MAX_V = res.getDimensionPixelSize(R.dimen.max_v); + + SCENERY_Z = res.getDimensionPixelSize(R.dimen.scenery_z); + OBSTACLE_Z = res.getDimensionPixelSize(R.dimen.obstacle_z); + PLAYER_Z = res.getDimensionPixelSize(R.dimen.player_z); + PLAYER_Z_BOOST = res.getDimensionPixelSize(R.dimen.player_z_boost); + HUD_Z = res.getDimensionPixelSize(R.dimen.hud_z); + } + } + + private TimeAnimator mAnim; + + private TextView mScoreField; + private View mSplash; + + private Player mDroid; + private ArrayList<Obstacle> mObstaclesInPlay = new ArrayList<Obstacle>(); + + private float t, dt; + + private int mScore; + private float mLastPipeTime; // in sec + private int mWidth, mHeight; + private boolean mAnimating, mPlaying; + private boolean mFrozen; // after death, a short backoff + + private int mTimeOfDay; + private static final int DAY = 0, NIGHT = 1, TWILIGHT = 2, SUNSET = 3; + private static final int[][] SKIES = { + { 0xFFc0c0FF, 0xFFa0a0FF }, // DAY + { 0xFF000010, 0xFF000000 }, // NIGHT + { 0xFF000040, 0xFF000010 }, // TWILIGHT + { 0xFF805010, 0xFF202080 }, // SUNSET + }; + + private static Params PARAMS; + + public LLand(Context context) { + this(context, null); + } + + public LLand(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LLand(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setFocusable(true); + PARAMS = new Params(getResources()); + mTimeOfDay = irand(0, SKIES.length); + } + + @Override + public boolean willNotDraw() { + return !DEBUG; + } + + public int getGameWidth() { return mWidth; } + public int getGameHeight() { return mHeight; } + public float getGameTime() { return t; } + public float getLastTimeStep() { return dt; } + + public void setScoreField(TextView tv) { + mScoreField = tv; + if (tv != null) { + tv.setTranslationZ(PARAMS.HUD_Z); + if (!(mAnimating && mPlaying)) { + tv.setTranslationY(-500); + } + } + } + + public void setSplash(View v) { + mSplash = v; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + stop(); + reset(); + if (AUTOSTART) { + start(false); + } + } + + final float hsv[] = {0, 0, 0}; + + private void reset() { + L("reset"); + final Drawable sky = new GradientDrawable( + GradientDrawable.Orientation.BOTTOM_TOP, + SKIES[mTimeOfDay] + ); + sky.setDither(true); + setBackground(sky); + + setScaleX(frand() > 0.5f ? 1 : -1); + + setScore(0); + + int i = getChildCount(); + while (i-->0) { + final View v = getChildAt(i); + if (v instanceof GameView) { + removeViewAt(i); + } + } + + mObstaclesInPlay.clear(); + + mWidth = getWidth(); + mHeight = getHeight(); + + boolean showingSun = (mTimeOfDay == DAY || mTimeOfDay == SUNSET) && frand() > 0.25; + if (showingSun) { + final Star sun = new Star(getContext()); + sun.setBackgroundResource(R.drawable.sun); + final int w = getResources().getDimensionPixelSize(R.dimen.sun_size); + sun.setTranslationX(frand(w, mWidth-w)); + if (mTimeOfDay == DAY) { + sun.setTranslationY(frand(w, (mHeight * 0.66f))); + sun.getBackground().setTint(0); + } else { + sun.setTranslationY(frand(mHeight * 0.66f, mHeight - w)); + sun.getBackground().setTintMode(PorterDuff.Mode.SRC_ATOP); + sun.getBackground().setTint(0xC0FF8000); + + } + addView(sun, new LayoutParams(w, w)); + } + if (!showingSun) { + final boolean dark = mTimeOfDay == NIGHT || mTimeOfDay == TWILIGHT; + final float ff = frand(); + if ((dark && ff < 0.75f) || ff < 0.5f) { + final Star moon = new Star(getContext()); + moon.setBackgroundResource(R.drawable.moon); + moon.getBackground().setAlpha(dark ? 255 : 128); + moon.setScaleX(frand() > 0.5 ? -1 : 1); + moon.setRotation(moon.getScaleX() * frand(5, 30)); + final int w = getResources().getDimensionPixelSize(R.dimen.sun_size); + moon.setTranslationX(frand(w, mWidth - w)); + moon.setTranslationY(frand(w, mHeight - w)); + addView(moon, new LayoutParams(w, w)); + } + } + + final int mh = mHeight / 6; + final boolean cloudless = frand() < 0.25; + final int N = 20; + for (i=0; i<N; i++) { + final float r1 = frand(); + final Scenery s; + if (HAVE_STARS && r1 < 0.3 && mTimeOfDay != DAY) { + s = new Star(getContext()); + } else if (r1 < 0.6 && !cloudless) { + s = new Cloud(getContext()); + } else { + s = new Building(getContext()); + + s.z = (float)i/N; + s.setTranslationZ(PARAMS.SCENERY_Z * (1+s.z)); + s.v = 0.85f * s.z; // buildings move proportional to their distance + hsv[0] = 175; + hsv[1] = 0.25f; + hsv[2] = 1 * s.z; + s.setBackgroundColor(Color.HSVToColor(hsv)); + s.h = irand(PARAMS.BUILDING_HEIGHT_MIN, mh); + } + final LayoutParams lp = new LayoutParams(s.w, s.h); + if (s instanceof Building) { + lp.gravity = Gravity.BOTTOM; + } else { + lp.gravity = Gravity.TOP; + final float r = frand(); + if (s instanceof Star) { + lp.topMargin = (int) (r * r * mHeight); + } else { + lp.topMargin = (int) (1 - r*r * mHeight/2) + mHeight/2; + } + } + + addView(s, lp); + s.setTranslationX(frand(-lp.width, mWidth + lp.width)); + } + + mDroid = new Player(getContext()); + mDroid.setX(mWidth / 2); + mDroid.setY(mHeight / 2); + addView(mDroid, new LayoutParams(PARAMS.PLAYER_SIZE, PARAMS.PLAYER_SIZE)); + if (mAnim != null) { + Log.wtf(TAG, "reseting while animating??!?"); + } + mAnim = new TimeAnimator(); + mAnim.setTimeListener(new TimeAnimator.TimeListener() { + @Override + public void onTimeUpdate(TimeAnimator timeAnimator, long t, long dt) { + step(t, dt); + } + }); + } + + private void setScore(int score) { + mScore = score; + if (mScoreField != null) mScoreField.setText(String.valueOf(score)); + } + + private void addScore(int incr) { + setScore(mScore + incr); + } + + private void start(boolean startPlaying) { + L("start(startPlaying=%s)", startPlaying?"true":"false"); + if (startPlaying) { + mPlaying = true; + + t = 0; + mLastPipeTime = getGameTime() - PARAMS.OBSTACLE_PERIOD; // queue up a obstacle + + if (mSplash != null && mSplash.getAlpha() > 0f) { + mSplash.setTranslationZ(PARAMS.HUD_Z); + mSplash.animate().alpha(0).translationZ(0).setDuration(400); + + mScoreField.animate().translationY(0) + .setInterpolator(new DecelerateInterpolator()) + .setDuration(1500); + } + + mScoreField.setTextColor(0xFFAAAAAA); + mScoreField.setBackgroundResource(R.drawable.scorecard); + mDroid.setVisibility(View.VISIBLE); + mDroid.setX(mWidth / 2); + mDroid.setY(mHeight / 2); + } else { + mDroid.setVisibility(View.GONE); + } + if (!mAnimating) { + mAnim.start(); + mAnimating = true; + } + } + + private void stop() { + if (mAnimating) { + mAnim.cancel(); + mAnim = null; + mAnimating = false; + mScoreField.setTextColor(0xFFFFFFFF); + mScoreField.setBackgroundResource(R.drawable.scorecard_gameover); + mTimeOfDay = irand(0, SKIES.length); // for next reset + mFrozen = true; + postDelayed(new Runnable() { + @Override + public void run() { + mFrozen = false; + } + }, 250); + } + } + + public static final float lerp(float x, float a, float b) { + return (b - a) * x + a; + } + + public static final float rlerp(float v, float a, float b) { + return (v - a) / (b - a); + } + + public static final float clamp(float f) { + return f < 0f ? 0f : f > 1f ? 1f : f; + } + + public static final float frand() { + return (float) Math.random(); + } + + public static final float frand(float a, float b) { + return lerp(frand(), a, b); + } + + public static final int irand(int a, int b) { + return (int) lerp(frand(), (float) a, (float) b); + } + + private void step(long t_ms, long dt_ms) { + t = t_ms / 1000f; // seconds + dt = dt_ms / 1000f; + + if (DEBUG) { + t *= DEBUG_SPEED_MULTIPLIER; + dt *= DEBUG_SPEED_MULTIPLIER; + } + + // 1. Move all objects and update bounds + final int N = getChildCount(); + int i = 0; + for (; i<N; i++) { + final View v = getChildAt(i); + if (v instanceof GameView) { + ((GameView) v).step(t_ms, dt_ms, t, dt); + } + } + + // 2. Check for altitude + if (mPlaying && mDroid.below(mHeight)) { + if (DEBUG_IDDQD) { + poke(); + } else { + L("player hit the floor"); + stop(); + } + } + + // 3. Check for obstacles + boolean passedBarrier = false; + for (int j = mObstaclesInPlay.size(); j-->0;) { + final Obstacle ob = mObstaclesInPlay.get(j); + if (mPlaying && ob.intersects(mDroid) && !DEBUG_IDDQD) { + L("player hit an obstacle"); + stop(); + } else if (ob.cleared(mDroid)) { + passedBarrier = true; + mObstaclesInPlay.remove(j); + } + } + + if (mPlaying && passedBarrier) { + addScore(1); + } + + // 4. Handle edge of screen + // Walk backwards to make sure removal is safe + while (i-->0) { + final View v = getChildAt(i); + if (v instanceof Obstacle) { + if (v.getTranslationX() + v.getWidth() < 0) { + removeViewAt(i); + } + } else if (v instanceof Scenery) { + final Scenery s = (Scenery) v; + if (v.getTranslationX() + s.w < 0) { + v.setTranslationX(getWidth()); + } + } + } + + // 3. Time for more obstacles! + if (mPlaying && (t - mLastPipeTime) > PARAMS.OBSTACLE_PERIOD) { + mLastPipeTime = t; + final int obstacley = (int) (Math.random() + * (mHeight - 2*PARAMS.OBSTACLE_MIN - PARAMS.OBSTACLE_GAP)) + PARAMS.OBSTACLE_MIN; + + final Obstacle p1 = new Obstacle(getContext(), obstacley); + addView(p1, new LayoutParams( + PARAMS.OBSTACLE_WIDTH, + mHeight, + Gravity.TOP|Gravity.LEFT)); + p1.setTranslationX(mWidth); + p1.setTranslationY(-mHeight); + p1.setTranslationZ(0); + p1.animate() + .translationY(-mHeight+p1.h) + .translationZ(PARAMS.OBSTACLE_Z) + .setStartDelay(irand(0,250)) + .setDuration(250); + mObstaclesInPlay.add(p1); + + final Obstacle p2 = new Obstacle(getContext(), + mHeight - obstacley - PARAMS.OBSTACLE_GAP); + addView(p2, new LayoutParams( + PARAMS.OBSTACLE_WIDTH, + mHeight, + Gravity.TOP|Gravity.LEFT)); + p2.setTranslationX(mWidth); + p2.setTranslationY(mHeight); + p2.setTranslationZ(0); + p2.animate() + .translationY(mHeight-p2.h) + .translationZ(PARAMS.OBSTACLE_Z) + .setStartDelay(irand(0,100)) + .setDuration(400); + mObstaclesInPlay.add(p2); + } + + if (DEBUG) { + final Rect r = new Rect(); + mDroid.getHitRect(r); + r.inset(-4, -4); + invalidate(r); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (DEBUG) L("touch: %s", ev); + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + poke(); + return true; + } + return false; + } + + @Override + public boolean onTrackballEvent(MotionEvent ev) { + if (DEBUG) L("trackball: %s", ev); + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + poke(); + return true; + } + return false; + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent ev) { + if (DEBUG) L("keyDown: %d", keyCode); + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_CENTER: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_SPACE: + case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_BUTTON_A: + poke(); + return true; + } + return false; + } + + @Override + public boolean onGenericMotionEvent (MotionEvent ev) { + if (DEBUG) L("generic: %s", ev); + return false; + } + + private void poke() { + L("poke"); + if (mFrozen) return; + if (!mAnimating) { + reset(); + start(true); + } else if (!mPlaying) { + start(true); + } + mDroid.boost(); + if (DEBUG) { + mDroid.dv *= DEBUG_SPEED_MULTIPLIER; + mDroid.animate().setDuration((long) (200/DEBUG_SPEED_MULTIPLIER)); + } + } + + @Override + public void onDraw(Canvas c) { + super.onDraw(c); + + if (!DEBUG_DRAW) return; + + final Paint pt = new Paint(); + pt.setColor(0xFFFFFFFF); + final int L = mDroid.corners.length; + final int N = L/2; + for (int i=0; i<N; i++) { + final int x = (int) mDroid.corners[i*2]; + final int y = (int) mDroid.corners[i*2+1]; + c.drawCircle(x, y, 4, pt); + c.drawLine(x, y, + mDroid.corners[(i*2+2)%L], + mDroid.corners[(i*2+3)%L], + pt); + } + + final int M = getChildCount(); + pt.setColor(0x6000FF00); + for (int i=0; i<M; i++) { + final View v = getChildAt(i); + if (v == mDroid) continue; + if (!(v instanceof GameView)) continue; + final Rect r = new Rect(); + v.getHitRect(r); + c.drawRect(r, pt); + } + + pt.setColor(Color.BLACK); + final StringBuilder sb = new StringBuilder("obstacles: "); + for (Obstacle ob : mObstaclesInPlay) { + sb.append(ob.hitRect.toShortString()); + sb.append(" "); + } + pt.setTextSize(20f); + c.drawText(sb.toString(), 20, 100, pt); + } + + static final Rect sTmpRect = new Rect(); + + private interface GameView { + public void step(long t_ms, long dt_ms, float t, float dt); + } + + private class Player extends ImageView implements GameView { + public float dv; + + private final float[] sHull = new float[] { + 0.3f, 0f, // left antenna + 0.7f, 0f, // right antenna + 0.92f, 0.33f, // off the right shoulder of Orion + 0.92f, 0.75f, // right hand (our right, not his right) + 0.6f, 1f, // right foot + 0.4f, 1f, // left foot BLUE! + 0.08f, 0.75f, // sinistram + 0.08f, 0.33f, // cold shoulder + }; + public final float[] corners = new float[sHull.length]; + + public Player(Context context) { + super(context); + + setBackgroundResource(R.drawable.android); + getBackground().setTintMode(PorterDuff.Mode.SRC_ATOP); + getBackground().setTint(0xFF00FF00); + setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + final int w = view.getWidth(); + final int h = view.getHeight(); + final int ix = (int) (w * 0.3f); + final int iy = (int) (h * 0.2f); + outline.setRect(ix, iy, w - ix, h - iy); + } + }); + } + + public void prepareCheckIntersections() { + final int inset = (PARAMS.PLAYER_SIZE - PARAMS.PLAYER_HIT_SIZE)/2; + final int scale = PARAMS.PLAYER_HIT_SIZE; + final int N = sHull.length/2; + for (int i=0; i<N; i++) { + corners[i*2] = scale * sHull[i*2] + inset; + corners[i*2+1] = scale * sHull[i*2+1] + inset; + } + final Matrix m = getMatrix(); + m.mapPoints(corners); + } + + public boolean below(int h) { + final int N = corners.length/2; + for (int i=0; i<N; i++) { + final int y = (int) corners[i*2+1]; + if (y >= h) return true; + } + return false; + } + + public void step(long t_ms, long dt_ms, float t, float dt) { + if (getVisibility() != View.VISIBLE) return; // not playing yet + + dv += PARAMS.G; + if (dv < -PARAMS.MAX_V) dv = -PARAMS.MAX_V; + else if (dv > PARAMS.MAX_V) dv = PARAMS.MAX_V; + + final float y = getTranslationY() + dv * dt; + setTranslationY(y < 0 ? 0 : y); + setRotation( + 90 + lerp(clamp(rlerp(dv, PARAMS.MAX_V, -1 * PARAMS.MAX_V)), 90, -90)); + + prepareCheckIntersections(); + } + + public void boost() { + dv = -PARAMS.BOOST_DV; + setTranslationZ(PARAMS.PLAYER_Z_BOOST); + setScaleX(1.25f); + setScaleY(1.25f); + animate() + .scaleX(1f) + .scaleY(1f) + .translationZ(PARAMS.PLAYER_Z) + .setDuration(200); + } + } + + private class Obstacle extends View implements GameView { + public float h; + + public final Rect hitRect = new Rect(); + + public Obstacle(Context context, float h) { + super(context); + setBackgroundResource(R.drawable.placeholder); + this.h = h; + } + + public boolean intersects(Player p) { + final int N = p.corners.length/2; + for (int i=0; i<N; i++) { + final int x = (int) p.corners[i*2]; + final int y = (int) p.corners[i*2+1]; + if (hitRect.contains(x, y)) return true; + } + return false; + } + + public boolean cleared(Player p) { + final int N = p.corners.length/2; + for (int i=0; i<N; i++) { + final int x = (int) p.corners[i*2]; + if (hitRect.right >= x) return false; + } + return true; + } + + @Override + public void step(long t_ms, long dt_ms, float t, float dt) { + setTranslationX(getTranslationX()-PARAMS.TRANSLATION_PER_SEC*dt); + getHitRect(hitRect); + } + } + + private class Scenery extends FrameLayout implements GameView { + public float z; + public float v; + public int h, w; + public Scenery(Context context) { + super(context); + } + + @Override + public void step(long t_ms, long dt_ms, float t, float dt) { + setTranslationX(getTranslationX() - PARAMS.TRANSLATION_PER_SEC * dt * v); + } + } + + private class Building extends Scenery { + public Building(Context context) { + super(context); + + w = irand(PARAMS.BUILDING_WIDTH_MIN, PARAMS.BUILDING_WIDTH_MAX); + h = 0; // will be setup later, along with z + + setTranslationZ(PARAMS.SCENERY_Z); + } + } + + private class Cloud extends Scenery { + public Cloud(Context context) { + super(context); + setBackgroundResource(frand() < 0.01f ? R.drawable.cloud_off : R.drawable.cloud); + getBackground().setAlpha(0x40); + w = h = irand(PARAMS.CLOUD_SIZE_MIN, PARAMS.CLOUD_SIZE_MAX); + z = 0; + v = frand(0.15f,0.5f); + } + } + + private class Star extends Scenery { + public Star(Context context) { + super(context); + setBackgroundResource(R.drawable.star); + w = h = irand(PARAMS.STAR_SIZE_MIN, PARAMS.STAR_SIZE_MAX); + v = z = 0; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java new file mode 100644 index 0000000..88fd952 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 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. + */ + +package com.android.systemui.egg; + +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; +import android.widget.TextView; + +import com.android.systemui.R; + +public class LLandActivity extends Activity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.lland); + LLand world = (LLand) findViewById(R.id.world); + world.setScoreField((TextView) findViewById(R.id.score)); + world.setSplash(findViewById(R.id.welcome)); + Log.v(LLand.TAG, "focus: " + world.requestFocus()); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 9af893d..4af8499 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -170,6 +170,8 @@ public class KeyguardViewMediator extends SystemUI { private boolean mSwitchingUser; private boolean mSystemReady; + private boolean mBootCompleted; + private boolean mBootSendUserPresent; // Whether the next call to playSounds() should be skipped. Defaults to // true because the first lock (on boot) should be silent. @@ -1145,8 +1147,14 @@ public class KeyguardViewMediator extends SystemUI { } private void sendUserPresentBroadcast() { - final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); - mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser); + synchronized (this) { + if (mBootCompleted) { + final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); + mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser); + } else { + mBootSendUserPresent = true; + } + } } /** @@ -1406,6 +1414,12 @@ public class KeyguardViewMediator extends SystemUI { public void onBootCompleted() { mUpdateMonitor.dispatchBootCompleted(); + synchronized (this) { + mBootCompleted = true; + if (mBootSendUserPresent) { + sendUserPresentBroadcast(); + } + } } public StatusBarKeyguardViewManager registerStatusBar(PhoneStatusBar phoneStatusBar, diff --git a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java index 787de4e..5caf1ac 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java @@ -19,6 +19,7 @@ package com.android.systemui.recents; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityOptions; +import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetProviderInfo; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; @@ -32,6 +33,7 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.os.Handler; import android.os.UserHandle; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import com.android.systemui.R; @@ -118,6 +120,22 @@ public class AlternateRecentsComponent implements ActivityOptions.OnAnimationSta // Load the header bar layout reloadHeaderBarLayout(); mBootCompleted = true; + + // Try and pre-emptively bind the search widget on startup to ensure that we + // have the right thumbnail bounds to animate to. + if (Constants.DebugFlags.App.EnableSearchLayout) { + // If there is no id, then bind a new search app widget + if (mConfig.searchBarAppWidgetId < 0) { + AppWidgetHost host = new RecentsAppWidgetHost(mContext, + Constants.Values.App.AppWidgetHostId); + Pair<Integer, AppWidgetProviderInfo> widgetInfo = + mSystemServicesProxy.bindSearchAppWidget(host); + if (widgetInfo != null) { + // Save the app widget id into the settings + mConfig.updateSearchBarAppWidgetId(mContext, widgetInfo.first); + } + } + } } /** Shows the recents */ @@ -222,9 +240,8 @@ public class AlternateRecentsComponent implements ActivityOptions.OnAnimationSta // Bring an active task to the foreground mSystemServicesProxy.moveTaskToFront(toTask.key.id, launchOpts); } else { - try { - mSystemServicesProxy.startActivityFromRecents(toTask.key.id, launchOpts); - } catch (ActivityNotFoundException anfe) {} + mSystemServicesProxy.startActivityFromRecents(mContext, toTask.key.id, + toTask.activityLabel, launchOpts); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java index 52ec54b..103f96f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Constants.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java @@ -32,15 +32,13 @@ public class Constants { // Enables the filtering of tasks according to their grouping public static final boolean EnableTaskFiltering = false; // Enables clipping of tasks against each other - public static final boolean EnableTaskStackClipping = false; + public static final boolean EnableTaskStackClipping = true; // Enables tapping on the TaskBar to launch the task public static final boolean EnableTaskBarTouchEvents = true; // Enables app-info pane on long-pressing the icon public static final boolean EnableDevAppInfoOnLongPress = true; // Enables the search bar layout public static final boolean EnableSearchLayout = true; - // Enables the dynamic shadows behind each task - public static final boolean EnableShadows = true; // Enables the thumbnail alpha on the front-most task public static final boolean EnableThumbnailAlphaOnFrontmost = false; // This disables the bitmap and icon caches diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index 8f92027..a49bbf9 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -405,6 +405,22 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView mConfig.updateOnConfigurationChange(); onConfigurationChange(); } + + // Start listening for widget package changes if there is one bound, post it since we don't + // want it stalling the startup + if (mConfig.searchBarAppWidgetId >= 0) { + final WeakReference<RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks> callback = + new WeakReference<RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks>(this); + mRecentsView.post(new Runnable() { + @Override + public void run() { + RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks cb = callback.get(); + if (cb != null) { + mAppWidgetHost.startListening(cb); + } + } + }); + } } /** Inflates the debug overlay if debug mode is enabled. */ @@ -464,22 +480,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView protected void onResume() { super.onResume(); - // Start listening for widget package changes if there is one bound, post it since we don't - // want it stalling the startup - if (mConfig.searchBarAppWidgetId >= 0) { - final WeakReference<RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks> callback = - new WeakReference<RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks>(this); - mRecentsView.postDelayed(new Runnable() { - @Override - public void run() { - RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks cb = callback.get(); - if (cb != null) { - mAppWidgetHost.startListening(cb); - } - } - }, 1); - } - // Mark Recents as visible mVisible = true; } @@ -496,11 +496,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Unregister any broadcast receivers for the task loader RecentsTaskLoader.getInstance().unregisterReceivers(); - - // Stop listening for widget package changes if there was one bound - if (mAppWidgetHost.isListening()) { - mAppWidgetHost.stopListening(); - } } @Override @@ -509,6 +504,11 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Unregister the system broadcast receivers unregisterReceiver(mSystemBroadcastReceiver); + + // Stop listening for widget package changes if there was one bound + if (mAppWidgetHost.isListening()) { + mAppWidgetHost.stopListening(); + } } @Override @@ -614,6 +614,12 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView } @Override + public void onTaskLaunchFailed() { + // Return to Home + dismissRecentsToHomeRaw(true); + } + + @Override public void onAllTaskViewsDismissed() { mFinishLaunchHomeRunnable.run(); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java index 2a2caa0..4696c82 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java @@ -78,6 +78,7 @@ public class RecentsConfiguration { public int taskViewEnterFromHomeDelay; public int taskViewEnterFromHomeDuration; public int taskViewEnterFromHomeStaggerDelay; + public int taskViewEnterFromHomeStaggerDuration; public int taskViewExitToHomeDuration; public int taskViewRemoveAnimDuration; public int taskViewRemoveAnimTranslationXPx; @@ -119,7 +120,9 @@ public class RecentsConfiguration { public int launchedToTaskId; /** Misc **/ + public boolean useHardwareLayers; public int altTabKeyDelay; + public boolean fakeShadows; /** Dev options and global settings */ public boolean lockToAppEnabled; @@ -217,6 +220,8 @@ public class RecentsConfiguration { res.getInteger(R.integer.recents_animate_task_enter_from_home_duration); taskViewEnterFromHomeStaggerDelay = res.getInteger(R.integer.recents_animate_task_enter_from_home_stagger_delay); + taskViewEnterFromHomeStaggerDuration = + res.getInteger(R.integer.recents_animate_task_enter_from_home_stagger_duration); taskViewExitToHomeDuration = res.getInteger(R.integer.recents_animate_task_exit_to_home_duration); taskViewRemoveAnimDuration = @@ -271,7 +276,9 @@ public class RecentsConfiguration { res.getInteger(R.integer.recents_nav_bar_scrim_enter_duration); // Misc + useHardwareLayers = res.getBoolean(R.bool.config_recents_use_hardware_layers); altTabKeyDelay = res.getInteger(R.integer.recents_alt_tab_key_delay); + fakeShadows = res.getBoolean(R.bool.config_recents_fake_shadows); } /** Updates the system insets */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index 11b7b8b..9554f01 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -57,6 +57,7 @@ import android.view.DisplayInfo; import android.view.SurfaceControl; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; +import com.android.systemui.R; import com.android.systemui.recents.Constants; import java.io.IOException; @@ -515,12 +516,18 @@ public class SystemServicesProxy { return takeScreenshot(); } - public void startActivityFromRecents(int taskId, ActivityOptions options) { + /** Starts an activity from recents. */ + public boolean startActivityFromRecents(Context context, int taskId, String taskName, + ActivityOptions options) { if (mIam != null) { try { mIam.startActivityFromRecents(taskId, options == null ? null : options.toBundle()); - } catch (RemoteException e) { + return true; + } catch (Exception e) { + Console.logError(context, + context.getString(R.string.recents_launch_error_message, taskName)); } } + return false; } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java index 4c6b389..f01d17c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java @@ -18,11 +18,14 @@ package com.android.systemui.recents.misc; import android.content.Intent; import android.graphics.Color; +import android.graphics.Matrix; import android.graphics.Rect; +import android.view.View; import com.android.systemui.recents.RecentsConfiguration; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.ArrayList; /* Common code */ public class Utilities { @@ -68,6 +71,80 @@ public class Utilities { } } + /** Maps a coorindate in a descendant view into the parent. */ + public static float mapCoordInDescendentToSelf(View descendant, View root, + float[] coord, boolean includeRootScroll) { + ArrayList<View> ancestorChain = new ArrayList<View>(); + + float[] pt = {coord[0], coord[1]}; + + View v = descendant; + while(v != root && v != null) { + ancestorChain.add(v); + v = (View) v.getParent(); + } + ancestorChain.add(root); + + float scale = 1.0f; + int count = ancestorChain.size(); + for (int i = 0; i < count; i++) { + View v0 = ancestorChain.get(i); + // For TextViews, scroll has a meaning which relates to the text position + // which is very strange... ignore the scroll. + if (v0 != descendant || includeRootScroll) { + pt[0] -= v0.getScrollX(); + pt[1] -= v0.getScrollY(); + } + + v0.getMatrix().mapPoints(pt); + pt[0] += v0.getLeft(); + pt[1] += v0.getTop(); + scale *= v0.getScaleX(); + } + + coord[0] = pt[0]; + coord[1] = pt[1]; + return scale; + } + + /** Maps a coordinate in the root to a descendent. */ + public static float mapCoordInSelfToDescendent(View descendant, View root, + float[] coord, Matrix tmpInverseMatrix) { + ArrayList<View> ancestorChain = new ArrayList<View>(); + + float[] pt = {coord[0], coord[1]}; + + View v = descendant; + while(v != root) { + ancestorChain.add(v); + v = (View) v.getParent(); + } + ancestorChain.add(root); + + float scale = 1.0f; + int count = ancestorChain.size(); + tmpInverseMatrix.set(Matrix.IDENTITY_MATRIX); + for (int i = count - 1; i >= 0; i--) { + View ancestor = ancestorChain.get(i); + View next = i > 0 ? ancestorChain.get(i-1) : null; + + pt[0] += ancestor.getScrollX(); + pt[1] += ancestor.getScrollY(); + + if (next != null) { + pt[0] -= next.getLeft(); + pt[1] -= next.getTop(); + next.getMatrix().invert(tmpInverseMatrix); + tmpInverseMatrix.mapPoints(pt); + scale *= next.getScaleX(); + } + } + + coord[0] = pt[0]; + coord[1] = pt[1]; + return scale; + } + /** Calculates the constrast between two colors, using the algorithm provided by the WCAG v2. */ public static float computeContrastBetweenColors(int bg, int fg) { float bgR = Color.red(bg) / 255f; diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java index e5c06fd..d4b403d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java @@ -204,7 +204,8 @@ class TaskResourceLoader implements Runnable { if (!mCancelled) { // Notify that the task data has changed final Drawable newIcon = cachedIcon; - final Bitmap newThumbnail = cachedThumbnail; + final Bitmap newThumbnail = cachedThumbnail == mDefaultThumbnail + ? null : cachedThumbnail; mMainThreadHandler.post(new Runnable() { @Override public void run() { @@ -252,7 +253,6 @@ public class RecentsTaskLoader { BitmapDrawable mDefaultApplicationIcon; Bitmap mDefaultThumbnail; - Bitmap mLoadingThumbnail; /** Private Constructor */ private RecentsTaskLoader(Context context) { @@ -271,9 +271,6 @@ public class RecentsTaskLoader { mDefaultThumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); mDefaultThumbnail.setHasAlpha(false); mDefaultThumbnail.eraseColor(0xFFffffff); - mLoadingThumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - mLoadingThumbnail.setHasAlpha(false); - mLoadingThumbnail.eraseColor(0xFFffffff); mDefaultApplicationIcon = new BitmapDrawable(context.getResources(), icon); // Initialize the proxy, cache and loaders @@ -500,17 +497,16 @@ public class RecentsTaskLoader { // use the default assets in their place until they load boolean requiresLoad = (applicationIcon == null) || (thumbnail == null); applicationIcon = applicationIcon != null ? applicationIcon : mDefaultApplicationIcon; - thumbnail = thumbnail != null ? thumbnail : mDefaultThumbnail; if (requiresLoad) { mLoadQueue.addTask(t); } - t.notifyTaskDataLoaded(thumbnail, applicationIcon); + t.notifyTaskDataLoaded(thumbnail == mDefaultThumbnail ? null : thumbnail, applicationIcon); } /** Releases the task resource data back into the pool. */ public void unloadTaskData(Task t) { mLoadQueue.removeTask(t); - t.notifyTaskDataUnloaded(mDefaultThumbnail, mDefaultApplicationIcon); + t.notifyTaskDataUnloaded(null, mDefaultApplicationIcon); } /** Completely removes the resource data from the pool. */ @@ -519,7 +515,7 @@ public class RecentsTaskLoader { mThumbnailCache.remove(t.key); mApplicationIconCache.remove(t.key); if (notifyTaskDataUnloaded) { - t.notifyTaskDataUnloaded(mDefaultThumbnail, mDefaultApplicationIcon); + t.notifyTaskDataUnloaded(null, mDefaultApplicationIcon); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java b/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java index d6889d0..d2fdaff 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java @@ -22,6 +22,7 @@ import android.graphics.Outline; import android.graphics.Rect; import android.view.View; import android.view.ViewOutlineProvider; + import com.android.systemui.recents.RecentsConfiguration; /* An outline provider that has a clip and outline that can be animated. */ @@ -29,8 +30,10 @@ public class AnimateableViewBounds extends ViewOutlineProvider { RecentsConfiguration mConfig; - View mSourceView; + TaskView mSourceView; + Rect mTmpRect = new Rect(); Rect mClipRect = new Rect(); + Rect mClipBounds = new Rect(); Rect mOutlineClipRect = new Rect(); int mCornerRadius; float mAlpha = 1f; @@ -40,11 +43,10 @@ public class AnimateableViewBounds extends ViewOutlineProvider { ObjectAnimator mClipRightAnimator; ObjectAnimator mClipBottomAnimator; - public AnimateableViewBounds(View source, int cornerRadius) { + public AnimateableViewBounds(TaskView source, int cornerRadius) { mConfig = RecentsConfiguration.getInstance(); mSourceView = source; mCornerRadius = cornerRadius; - mSourceView.setClipToOutline(true); setClipTop(getClipTop()); setClipRight(getClipRight()); setClipBottom(getClipBottom()); @@ -56,8 +58,8 @@ public class AnimateableViewBounds extends ViewOutlineProvider { outline.setAlpha(mMinAlpha + mAlpha / (1f - mMinAlpha)); outline.setRoundRect(Math.max(mClipRect.left, mOutlineClipRect.left), Math.max(mClipRect.top, mOutlineClipRect.top), - mSourceView.getMeasuredWidth() - Math.max(mClipRect.right, mOutlineClipRect.right), - mSourceView.getMeasuredHeight() - Math.max(mClipRect.bottom, mOutlineClipRect.bottom), + mSourceView.getWidth() - Math.max(mClipRect.right, mOutlineClipRect.right), + mSourceView.getHeight() - Math.max(mClipRect.bottom, mOutlineClipRect.bottom), mCornerRadius); } @@ -89,6 +91,7 @@ public class AnimateableViewBounds extends ViewOutlineProvider { if (top != mClipRect.top) { mClipRect.top = top; mSourceView.invalidateOutline(); + updateClipBounds(); } } @@ -114,6 +117,7 @@ public class AnimateableViewBounds extends ViewOutlineProvider { if (right != mClipRect.right) { mClipRect.right = right; mSourceView.invalidateOutline(); + updateClipBounds(); } } @@ -139,6 +143,11 @@ public class AnimateableViewBounds extends ViewOutlineProvider { if (bottom != mClipRect.bottom) { mClipRect.bottom = bottom; mSourceView.invalidateOutline(); + updateClipBounds(); + if (!mConfig.useHardwareLayers) { + mSourceView.mThumbnailView.updateVisibility( + bottom - mSourceView.getPaddingBottom()); + } } } @@ -159,4 +168,11 @@ public class AnimateableViewBounds extends ViewOutlineProvider { public int getOutlineClipBottom() { return mOutlineClipRect.bottom; } + + private void updateClipBounds() { + mClipBounds.set(mClipRect.left, mClipRect.top, + mSourceView.getWidth() - mClipRect.right, + mSourceView.getHeight() - mClipRect.bottom); + mSourceView.setClipBounds(mClipBounds); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java new file mode 100644 index 0000000..72f9001 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java @@ -0,0 +1,286 @@ +/* + * Copyright (C) 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 + */ +package com.android.systemui.recents.views; + +import android.content.res.Resources; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.RadialGradient; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.util.Log; + +import com.android.systemui.R; +import com.android.systemui.recents.RecentsConfiguration; + +/** + * A rounded rectangle drawable which also includes a shadow around. This is mostly copied from + * frameworks/support/v7/cardview/eclair-mr1/android/support/v7/widget/ + * RoundRectDrawableWithShadow.java revision c42ba8c000d1e6ce85e152dfc17089a0a69e739f with a few + * modifications to suit our needs in SystemUI. + */ +class FakeShadowDrawable extends Drawable { + // used to calculate content padding + final static double COS_45 = Math.cos(Math.toRadians(45)); + + final static float SHADOW_MULTIPLIER = 1.5f; + + final float mInsetShadow; // extra shadow to avoid gaps between card and shadow + + Paint mCornerShadowPaint; + + Paint mEdgeShadowPaint; + + final RectF mCardBounds; + + float mCornerRadius; + + Path mCornerShadowPath; + + // updated value with inset + float mMaxShadowSize; + + // actual value set by developer + float mRawMaxShadowSize; + + // multiplied value to account for shadow offset + float mShadowSize; + + // actual value set by developer + float mRawShadowSize; + + private boolean mDirty = true; + + private final int mShadowStartColor; + + private final int mShadowEndColor; + + private boolean mAddPaddingForCorners = true; + + /** + * If shadow size is set to a value above max shadow, we print a warning + */ + private boolean mPrintedShadowClipWarning = false; + + public FakeShadowDrawable(Resources resources, RecentsConfiguration config) { + mShadowStartColor = resources.getColor(R.color.fake_shadow_start_color); + mShadowEndColor = resources.getColor(R.color.fake_shadow_end_color); + mInsetShadow = resources.getDimension(R.dimen.fake_shadow_inset); + setShadowSize(resources.getDimensionPixelSize(R.dimen.fake_shadow_size), + resources.getDimensionPixelSize(R.dimen.fake_shadow_size)); + mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + mCornerShadowPaint.setStyle(Paint.Style.FILL); + mCornerShadowPaint.setDither(true); + mCornerRadius = config.taskViewRoundedCornerRadiusPx; + mCardBounds = new RectF(); + mEdgeShadowPaint = new Paint(mCornerShadowPaint); + } + + @Override + public void setAlpha(int alpha) { + mCornerShadowPaint.setAlpha(alpha); + mEdgeShadowPaint.setAlpha(alpha); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + mDirty = true; + } + + void setShadowSize(float shadowSize, float maxShadowSize) { + if (shadowSize < 0 || maxShadowSize < 0) { + throw new IllegalArgumentException("invalid shadow size"); + } + if (shadowSize > maxShadowSize) { + shadowSize = maxShadowSize; + if (!mPrintedShadowClipWarning) { + Log.w("CardView", "Shadow size is being clipped by the max shadow size. See " + + "{CardView#setMaxCardElevation}."); + mPrintedShadowClipWarning = true; + } + } + if (mRawShadowSize == shadowSize && mRawMaxShadowSize == maxShadowSize) { + return; + } + mRawShadowSize = shadowSize; + mRawMaxShadowSize = maxShadowSize; + mShadowSize = shadowSize * SHADOW_MULTIPLIER + mInsetShadow; + mMaxShadowSize = maxShadowSize + mInsetShadow; + mDirty = true; + invalidateSelf(); + } + + @Override + public boolean getPadding(Rect padding) { + int vOffset = (int) Math.ceil(calculateVerticalPadding(mRawMaxShadowSize, mCornerRadius, + mAddPaddingForCorners)); + int hOffset = (int) Math.ceil(calculateHorizontalPadding(mRawMaxShadowSize, mCornerRadius, + mAddPaddingForCorners)); + padding.set(hOffset, vOffset, hOffset, vOffset); + return true; + } + + static float calculateVerticalPadding(float maxShadowSize, float cornerRadius, + boolean addPaddingForCorners) { + if (addPaddingForCorners) { + return (float) (maxShadowSize * SHADOW_MULTIPLIER + (1 - COS_45) * cornerRadius); + } else { + return maxShadowSize * SHADOW_MULTIPLIER; + } + } + + static float calculateHorizontalPadding(float maxShadowSize, float cornerRadius, + boolean addPaddingForCorners) { + if (addPaddingForCorners) { + return (float) (maxShadowSize + (1 - COS_45) * cornerRadius); + } else { + return maxShadowSize; + } + } + + @Override + public void setColorFilter(ColorFilter cf) { + mCornerShadowPaint.setColorFilter(cf); + mEdgeShadowPaint.setColorFilter(cf); + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + @Override + public void draw(Canvas canvas) { + if (mDirty) { + buildComponents(getBounds()); + mDirty = false; + } + canvas.translate(0, mRawShadowSize / 4); + drawShadow(canvas); + canvas.translate(0, -mRawShadowSize / 4); + } + + private void drawShadow(Canvas canvas) { + final float edgeShadowTop = -mCornerRadius - mShadowSize; + final float inset = mCornerRadius + mInsetShadow + mRawShadowSize / 2; + final boolean drawHorizontalEdges = mCardBounds.width() - 2 * inset > 0; + final boolean drawVerticalEdges = mCardBounds.height() - 2 * inset > 0; + // LT + int saved = canvas.save(); + canvas.translate(mCardBounds.left + inset, mCardBounds.top + inset); + canvas.drawPath(mCornerShadowPath, mCornerShadowPaint); + if (drawHorizontalEdges) { + canvas.drawRect(0, edgeShadowTop, + mCardBounds.width() - 2 * inset, -mCornerRadius, + mEdgeShadowPaint); + } + canvas.restoreToCount(saved); + // RB + saved = canvas.save(); + canvas.translate(mCardBounds.right - inset, mCardBounds.bottom - inset); + canvas.rotate(180f); + canvas.drawPath(mCornerShadowPath, mCornerShadowPaint); + if (drawHorizontalEdges) { + canvas.drawRect(0, edgeShadowTop, + mCardBounds.width() - 2 * inset, -mCornerRadius + mShadowSize, + mEdgeShadowPaint); + } + canvas.restoreToCount(saved); + // LB + saved = canvas.save(); + canvas.translate(mCardBounds.left + inset, mCardBounds.bottom - inset); + canvas.rotate(270f); + canvas.drawPath(mCornerShadowPath, mCornerShadowPaint); + if (drawVerticalEdges) { + canvas.drawRect(0, edgeShadowTop, + mCardBounds.height() - 2 * inset, -mCornerRadius, mEdgeShadowPaint); + } + canvas.restoreToCount(saved); + // RT + saved = canvas.save(); + canvas.translate(mCardBounds.right - inset, mCardBounds.top + inset); + canvas.rotate(90f); + canvas.drawPath(mCornerShadowPath, mCornerShadowPaint); + if (drawVerticalEdges) { + canvas.drawRect(0, edgeShadowTop, + mCardBounds.height() - 2 * inset, -mCornerRadius, mEdgeShadowPaint); + } + canvas.restoreToCount(saved); + } + + private void buildShadowCorners() { + RectF innerBounds = new RectF(-mCornerRadius, -mCornerRadius, mCornerRadius, mCornerRadius); + RectF outerBounds = new RectF(innerBounds); + outerBounds.inset(-mShadowSize, -mShadowSize); + + if (mCornerShadowPath == null) { + mCornerShadowPath = new Path(); + } else { + mCornerShadowPath.reset(); + } + mCornerShadowPath.setFillType(Path.FillType.EVEN_ODD); + mCornerShadowPath.moveTo(-mCornerRadius, 0); + mCornerShadowPath.rLineTo(-mShadowSize, 0); + // outer arc + mCornerShadowPath.arcTo(outerBounds, 180f, 90f, false); + // inner arc + mCornerShadowPath.arcTo(innerBounds, 270f, -90f, false); + mCornerShadowPath.close(); + + float startRatio = mCornerRadius / (mCornerRadius + mShadowSize); + mCornerShadowPaint.setShader(new RadialGradient(0, 0, mCornerRadius + mShadowSize, + new int[]{mShadowStartColor, mShadowStartColor, mShadowEndColor}, + new float[]{0f, startRatio, 1f} + , Shader.TileMode.CLAMP)); + + // we offset the content shadowSize/2 pixels up to make it more realistic. + // this is why edge shadow shader has some extra space + // When drawing bottom edge shadow, we use that extra space. + mEdgeShadowPaint.setShader(new LinearGradient(0, -mCornerRadius + mShadowSize, 0, + -mCornerRadius - mShadowSize, + new int[]{mShadowStartColor, mShadowStartColor, mShadowEndColor}, + new float[]{0f, .5f, 1f}, Shader.TileMode.CLAMP)); + } + + private void buildComponents(Rect bounds) { + // Card is offset SHADOW_MULTIPLIER * maxShadowSize to account for the shadow shift. + // We could have different top-bottom offsets to avoid extra gap above but in that case + // center aligning Views inside the CardView would be problematic. + final float verticalOffset = mMaxShadowSize * SHADOW_MULTIPLIER; + mCardBounds.set(bounds.left + mMaxShadowSize, bounds.top + verticalOffset, + bounds.right - mMaxShadowSize, bounds.bottom - verticalOffset); + buildShadowCorners(); + } + + float getMinWidth() { + final float content = 2 * + Math.max(mRawMaxShadowSize, mCornerRadius + mInsetShadow + mRawMaxShadowSize / 2); + return content + (mRawMaxShadowSize + mInsetShadow) * 2; + } + + float getMinHeight() { + final float content = 2 * Math.max(mRawMaxShadowSize, mCornerRadius + mInsetShadow + + mRawMaxShadowSize * SHADOW_MULTIPLIER / 2); + return content + (mRawMaxShadowSize * SHADOW_MULTIPLIER + mInsetShadow) * 2; + } +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 1bfb41f..6c22a3b 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -56,6 +56,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV /** The RecentsView callbacks */ public interface RecentsViewCallbacks { public void onTaskViewClicked(); + public void onTaskLaunchFailed(); public void onAllTaskViewsDismissed(); public void onExitToHomeAnimationTriggered(); } @@ -393,7 +394,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV // Upfront the processing of the thumbnail TaskViewTransform transform = new TaskViewTransform(); - View sourceView = tv; + View sourceView; int offsetX = 0; int offsetY = 0; float stackScroll = stackView.getScroller().getStackScroll(); @@ -406,6 +407,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV offsetX = transform.rect.left; offsetY = mConfig.displayRect.height(); } else { + sourceView = tv.mThumbnailView; transform = stackView.getStackAlgorithm().getStackTransform(task, stackScroll, transform, null); } @@ -470,13 +472,18 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV // Bring an active task to the foreground ssp.moveTaskToFront(task.key.id, launchOpts); } else { - try { - ssp.startActivityFromRecents(task.key.id, launchOpts); + if (ssp.startActivityFromRecents(getContext(), task.key.id, + task.activityLabel, launchOpts)) { if (launchOpts == null && lockToTask) { ssp.lockCurrentTask(); } - } catch (ActivityNotFoundException anfe) { - Console.logError(getContext(), "Could not start Activity"); + } else { + // Dismiss the task and return the user to home if we fail to + // launch the task + onTaskViewDismissed(task); + if (mCb != null) { + mCb.onTaskLaunchFailed(); + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index 895b9d1..e1e4068 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -16,21 +16,23 @@ package com.android.systemui.recents.views; +import android.animation.ValueAnimator; import android.content.ComponentName; import android.content.Context; +import android.graphics.Matrix; import android.graphics.Rect; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; +import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; -import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityNodeInfo; import android.widget.FrameLayout; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; import com.android.systemui.recents.misc.DozeTrigger; import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.recents.misc.Utilities; import com.android.systemui.recents.model.RecentsPackageMonitor; import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; @@ -76,15 +78,28 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Optimizations int mStackViewsAnimationDuration; boolean mStackViewsDirty = true; + boolean mStackViewsClipDirty = true; boolean mAwaitingFirstLayout = true; boolean mStartEnterAnimationRequestedAfterLayout; boolean mStartEnterAnimationCompleted; ViewAnimation.TaskViewEnterContext mStartEnterAnimationContext; int[] mTmpVisibleRange = new int[2]; + float[] mTmpCoord = new float[2]; + Matrix mTmpMatrix = new Matrix(); + Rect mTmpRect = new Rect(); TaskViewTransform mTmpTransform = new TaskViewTransform(); HashMap<Task, TaskView> mTmpTaskViewMap = new HashMap<Task, TaskView>(); LayoutInflater mInflater; + // A convenience update listener to request updating clipping of tasks + ValueAnimator.AnimatorUpdateListener mRequestUpdateClippingListener = + new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + requestUpdateStackViewsClip(); + } + }; + // A convenience runnable to return all views to the pool Runnable mReturnAllViewsToPoolRunnable = new Runnable() { @Override @@ -151,6 +166,14 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } } + /** Requests that the views clipping be updated. */ + void requestUpdateStackViewsClip() { + if (!mStackViewsClipDirty) { + invalidate(); + mStackViewsClipDirty = true; + } + } + /** Finds the child view given a specific task. */ public TaskView getChildViewForTask(Task t) { int childCount = getChildCount(); @@ -300,7 +323,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Animate the task into place tv.updateViewPropertiesToTaskTransform(mCurrentTaskTransforms.get(taskIndex), - mStackViewsAnimationDuration); + mStackViewsAnimationDuration, mRequestUpdateClippingListener); // Request accessibility focus on the next view if we removed the task // that previously held accessibility focus @@ -318,6 +341,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Reset the request-synchronize params mStackViewsAnimationDuration = 0; mStackViewsDirty = false; + mStackViewsClipDirty = true; return true; } return false; @@ -348,10 +372,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // stacked and we can make assumptions about the visibility of the this // task relative to the ones in front of it. if (nextTv != null) { - // We can reuse the current task transforms to find the task rects - TaskViewTransform transform = mCurrentTaskTransforms.get(mStack.indexOfTask(tv.getTask())); - TaskViewTransform nextTransform = mCurrentTaskTransforms.get(mStack.indexOfTask(nextTv.getTask())); - clipBottom = transform.rect.bottom - nextTransform.rect.top; + // Map the top edge of next task view into the local space of the current + // task view to find the clip amount in local space + mTmpCoord[0] = mTmpCoord[1] = 0; + Utilities.mapCoordInDescendentToSelf(nextTv, this, mTmpCoord, false); + Utilities.mapCoordInSelfToDescendent(tv, this, mTmpCoord, mTmpMatrix); + clipBottom = (int) Math.floor(tv.getMeasuredHeight() - mTmpCoord[1] + - nextTv.getPaddingTop() - 1); } } tv.getViewBounds().setClipBottom(clipBottom); @@ -362,6 +389,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal tv.getViewBounds().setClipBottom(0); } } + mStackViewsClipDirty = false; } /** The stack insets to apply to the stack contents */ @@ -537,10 +565,17 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal if (tv.isFullScreenView()) { tv.measure(widthMeasureSpec, heightMeasureSpec); } else { + if (tv.getBackground() != null) { + tv.getBackground().getPadding(mTmpRect); + } else { + mTmpRect.setEmpty(); + } tv.measure( - MeasureSpec.makeMeasureSpec(mLayoutAlgorithm.mTaskRect.width(), + MeasureSpec.makeMeasureSpec( + mLayoutAlgorithm.mTaskRect.width() + mTmpRect.left + mTmpRect.right, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(mLayoutAlgorithm.mTaskRect.height() + + MeasureSpec.makeMeasureSpec( + mLayoutAlgorithm.mTaskRect.height() + mTmpRect.top + mTmpRect.bottom + tv.getMaxFooterHeight(), MeasureSpec.EXACTLY)); } } @@ -562,8 +597,15 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal if (tv.isFullScreenView()) { tv.layout(left, top, left + tv.getMeasuredWidth(), top + tv.getMeasuredHeight()); } else { - tv.layout(mLayoutAlgorithm.mTaskRect.left, mLayoutAlgorithm.mTaskRect.top, - mLayoutAlgorithm.mTaskRect.right, mLayoutAlgorithm.mTaskRect.bottom + + if (tv.getBackground() != null) { + tv.getBackground().getPadding(mTmpRect); + } else { + mTmpRect.setEmpty(); + } + tv.layout(mLayoutAlgorithm.mTaskRect.left - mTmpRect.left, + mLayoutAlgorithm.mTaskRect.top - mTmpRect.top, + mLayoutAlgorithm.mTaskRect.right + mTmpRect.right, + mLayoutAlgorithm.mTaskRect.bottom + mTmpRect.bottom + tv.getMaxFooterHeight()); } } @@ -650,6 +692,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal ctx.currentTaskRect = mLayoutAlgorithm.mTaskRect; ctx.currentTaskOccludesLaunchTarget = (launchTargetTask != null) && launchTargetTask.group.isTaskAboveTask(task, launchTargetTask); + ctx.updateListener = mRequestUpdateClippingListener; mLayoutAlgorithm.getStackTransform(task, mStackScroller.getStackScroll(), ctx.currentTaskTransform, null); tv.startEnterRecentsAnimation(ctx); } @@ -988,7 +1031,9 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal @Override public void onTaskViewClipStateChanged(TaskView tv) { - invalidate(); + if (!mStackViewsDirty) { + invalidate(); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 51adc28..1750804 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -20,12 +20,9 @@ import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; -import android.graphics.Color; -import android.graphics.Outline; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.graphics.Rect; +import android.graphics.*; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; import android.util.AttributeSet; import android.view.View; import android.view.ViewOutlineProvider; @@ -72,6 +69,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, AnimateableViewBounds mViewBounds; Paint mLayerPaint = new Paint(); + View mContent; TaskViewThumbnail mThumbnailView; TaskViewHeader mHeaderView; TaskViewFooter mFooterView; @@ -106,9 +104,12 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, mMaxDimScale = mConfig.taskStackMaxDim / 255f; mClipViewInStack = true; mViewBounds = new AnimateableViewBounds(this, mConfig.taskViewRoundedCornerRadiusPx); - setOutlineProvider(mViewBounds); setTaskProgress(getTaskProgress()); setDim(getDim()); + if (mConfig.fakeShadows) { + setBackground(new FakeShadowDrawable(context.getResources(), mConfig)); + } + setOutlineProvider(mViewBounds); } /** Set callback */ @@ -129,15 +130,16 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, @Override protected void onFinishInflate() { // Bind the views + mContent = findViewById(R.id.task_view_content); mHeaderView = (TaskViewHeader) findViewById(R.id.task_view_bar); mThumbnailView = (TaskViewThumbnail) findViewById(R.id.task_view_thumbnail); + mThumbnailView.enableTaskBarClip(mHeaderView); mActionButtonView = findViewById(R.id.lock_to_app_fab); mActionButtonView.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { // Set the outline to match the FAB background - outline.setOval(0, 0, mActionButtonView.getWidth(), - mActionButtonView.getHeight()); + outline.setOval(0, 0, mActionButtonView.getWidth(), mActionButtonView.getHeight()); } }); if (mFooterView != null) { @@ -150,24 +152,35 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); + int widthWithoutPadding = width - mPaddingLeft - mPaddingRight; + int heightWithoutPadding = height - mPaddingTop - mPaddingBottom; + + // Measure the content + mContent.measure(MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY)); + // Measure the bar view, thumbnail, and footer - mHeaderView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + mHeaderView.measure(MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(mConfig.taskBarHeight, MeasureSpec.EXACTLY)); if (mFooterView != null) { - mFooterView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + mFooterView.measure( + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(mConfig.taskViewLockToAppButtonHeight, MeasureSpec.EXACTLY)); } - mActionButtonView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), - MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)); + mActionButtonView.measure( + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(heightWithoutPadding, MeasureSpec.AT_MOST)); if (mIsFullScreenView) { // Measure the thumbnail height to be the full dimensions - mThumbnailView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + mThumbnailView.measure( + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(heightWithoutPadding, MeasureSpec.EXACTLY)); } else { // Measure the thumbnail to be square - mThumbnailView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)); + mThumbnailView.measure( + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY)); } setMeasuredDimension(width, height); invalidateOutline(); @@ -175,10 +188,15 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, /** Synchronizes this view's properties with the task's transform */ void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration) { + updateViewPropertiesToTaskTransform(toTransform, duration, null); + } + + void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration, + ValueAnimator.AnimatorUpdateListener updateCallback) { // If we are a full screen view, then only update the Z to keep it in order // XXX: Also update/animate the dim as well if (mIsFullScreenView) { - if (Constants.DebugFlags.App.EnableShadows && + if (!mConfig.fakeShadows && toTransform.hasTranslationZChangedFrom(getTranslationZ())) { setTranslationZ(toTransform.translationZ); } @@ -186,7 +204,8 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, } // Apply the transform - toTransform.applyToTaskView(this, duration, mConfig.fastOutSlowInInterpolator, false); + toTransform.applyToTaskView(this, duration, mConfig.fastOutSlowInInterpolator, false, + !mConfig.fakeShadows, updateCallback); // Update the task progress if (mTaskProgressAnimator != null) { @@ -258,9 +277,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, } else if (mConfig.launchedFromHome) { // Move the task view off screen (below) so we can animate it in setTranslationY(offscreenY); - if (Constants.DebugFlags.App.EnableShadows) { - setTranslationZ(0); - } + setTranslationZ(0); setScaleX(1f); setScaleY(1f); } @@ -321,8 +338,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, mViewBounds.setClipRight(0); // Reset the bar translation mHeaderView.setTranslationY(0); - // Enable the thumbnail clip - mThumbnailView.enableTaskBarClip(mHeaderView); // Animate the footer into view (if it is the front most task) animateFooterVisibility(true, mConfig.taskBarEnterAnimDuration); @@ -339,9 +354,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, }) .start(); } else { - // Otherwise, just enable the thumbnail clip - mThumbnailView.enableTaskBarClip(mHeaderView); - // Animate the footer into view animateFooterVisibility(true, 0); } @@ -349,8 +361,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, } else if (mConfig.launchedFromAppWithThumbnail) { if (mTask.isLaunchTarget) { - // Enable the task bar clip - mThumbnailView.enableTaskBarClip(mHeaderView); // Animate the dim/overlay if (Constants.DebugFlags.App.EnableThumbnailAlphaOnFrontmost) { // Animate the thumbnail alpha before the dim animation (to prevent updating the @@ -382,8 +392,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, .withLayer() .start(); } else { - // Enable the task bar clip - mThumbnailView.enableTaskBarClip(mHeaderView); // Animate the task up if it was occluding the launch target if (ctx.currentTaskOccludesLaunchTarget) { setTranslationY(transform.translationY + mConfig.taskViewAffiliateGroupEnterOffsetPx); @@ -397,7 +405,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, .withEndAction(new Runnable() { @Override public void run() { - mThumbnailView.enableTaskBarClip(mHeaderView); // Decrement the post animation trigger ctx.postAnimationTrigger.decrement(); } @@ -411,9 +418,12 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, } else if (mConfig.launchedFromHome) { // Animate the tasks up int frontIndex = (ctx.currentStackViewCount - ctx.currentStackViewIndex - 1); - int delay = mConfig.taskViewEnterFromHomeDelay + - frontIndex * mConfig.taskViewEnterFromHomeStaggerDelay; - if (Constants.DebugFlags.App.EnableShadows) { + float fraction = (float) frontIndex / (ctx.currentStackViewCount - 1); + fraction = (float) Math.pow(fraction, 0.85f); + int delay = (int) (mConfig.taskViewEnterFromHomeDelay + + fraction * mConfig.taskViewEnterFromHomeStaggerDelay); + long delayIncrease = (long) (fraction * mConfig.taskViewEnterFromHomeStaggerDuration); + if (!mConfig.fakeShadows) { animate().translationZ(transform.translationZ); } animate() @@ -421,13 +431,12 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, .scaleY(transform.scale) .translationY(transform.translationY) .setStartDelay(delay) - .setUpdateListener(null) + .setUpdateListener(ctx.updateListener) .setInterpolator(mConfig.quintOutInterpolator) - .setDuration(mConfig.taskViewEnterFromHomeDuration) + .setDuration(mConfig.taskViewEnterFromHomeDuration + delayIncrease) .withEndAction(new Runnable() { @Override public void run() { - mThumbnailView.enableTaskBarClip(mHeaderView); // Decrement the post animation trigger ctx.postAnimationTrigger.decrement(); } @@ -440,9 +449,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, startDelay = delay; } else { - // Otherwise, just enable the thumbnail clip - mThumbnailView.enableTaskBarClip(mHeaderView); - // Animate the footer into view animateFooterVisibility(true, 0); } @@ -474,8 +480,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, void startLaunchTaskAnimation(final Runnable postAnimRunnable, boolean isLaunchingTask, boolean occludesLaunchTarget, boolean lockToTask) { if (isLaunchingTask) { - // Disable the thumbnail clip - mThumbnailView.disableTaskBarClip(); // Animate the thumbnail alpha back into full opacity for the window animation out mThumbnailView.startLaunchTaskAnimation(postAnimRunnable); @@ -637,17 +641,31 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, /** Returns the current dim. */ public void setDim(int dim) { mDim = dim; - // Defer setting hardware layers if we have not yet measured, or there is no dim to draw - if (getMeasuredWidth() > 0 && getMeasuredHeight() > 0) { - if (mDimAnimator != null) { - mDimAnimator.removeAllListeners(); - mDimAnimator.cancel(); - } + if (mDimAnimator != null) { + mDimAnimator.removeAllListeners(); + mDimAnimator.cancel(); + } + if (mConfig.useHardwareLayers) { + // Defer setting hardware layers if we have not yet measured, or there is no dim to draw + if (getMeasuredWidth() > 0 && getMeasuredHeight() > 0) { + if (mDimAnimator != null) { + mDimAnimator.removeAllListeners(); + mDimAnimator.cancel(); + } - int inverse = 255 - mDim; - mDimColorFilter.setColor(Color.argb(0xFF, inverse, inverse, inverse)); - mLayerPaint.setColorFilter(mDimColorFilter); - setLayerType(LAYER_TYPE_HARDWARE, mLayerPaint); + int inverse = 255 - mDim; + mDimColorFilter.setColor(Color.argb(0xFF, inverse, inverse, inverse)); + mLayerPaint.setColorFilter(mDimColorFilter); + mContent.setLayerType(LAYER_TYPE_HARDWARE, mLayerPaint); + } + } else { + float dimAlpha = mDim / 255.0f; + if (mThumbnailView != null) { + mThumbnailView.setDimAlpha(dimAlpha); + } + if (mHeaderView != null) { + mHeaderView.setDimAlpha(dim); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java index 1743433..396d441 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java @@ -30,10 +30,13 @@ import android.graphics.Color; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffXfermode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.RippleDrawable; +import android.graphics.drawable.ShapeDrawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -58,17 +61,20 @@ public class TaskViewHeader extends FrameLayout { TextView mActivityDescription; RippleDrawable mBackground; - ColorDrawable mBackgroundColor; + GradientDrawable mBackgroundColorDrawable; + int mBackgroundColor; Drawable mLightDismissDrawable; Drawable mDarkDismissDrawable; AnimatorSet mFocusAnimator; ValueAnimator backgroundColorAnimator; + PorterDuffColorFilter mDimFilter = new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_ATOP); boolean mIsFullscreen; boolean mCurrentPrimaryColorIsDark; int mCurrentPrimaryColor; static Paint sHighlightPaint; + private Paint mDimPaint = new Paint(); public TaskViewHeader(Context context) { this(context, null); @@ -140,13 +146,14 @@ public class TaskViewHeader extends FrameLayout { } } - mBackgroundColor = new ColorDrawable(0); + mBackgroundColorDrawable = (GradientDrawable) getContext().getDrawable(R.drawable + .recents_task_view_header_bg_color); // Copy the ripple drawable since we are going to be manipulating it mBackground = (RippleDrawable) getContext().getDrawable(R.drawable.recents_task_view_header_bg); mBackground = (RippleDrawable) mBackground.mutate().getConstantState().newDrawable(); mBackground.setColor(ColorStateList.valueOf(0)); - mBackground.setDrawableByLayerId(mBackground.getId(0), mBackgroundColor); + mBackground.setDrawableByLayerId(mBackground.getId(0), mBackgroundColorDrawable); setBackground(mBackground); } @@ -197,7 +204,8 @@ public class TaskViewHeader extends FrameLayout { int existingBgColor = (getBackground() instanceof ColorDrawable) ? ((ColorDrawable) getBackground()).getColor() : 0; if (existingBgColor != t.colorPrimary) { - mBackgroundColor.setColor(t.colorPrimary); + mBackgroundColorDrawable.setColor(t.colorPrimary); + mBackgroundColor = t.colorPrimary; } mCurrentPrimaryColor = t.colorPrimary; mCurrentPrimaryColorIsDark = t.useLightOnPrimaryColor; @@ -251,6 +259,14 @@ public class TaskViewHeader extends FrameLayout { } } + @Override + protected int[] onCreateDrawableState(int extraSpace) { + + // Don't forward our state to the drawable - we do it manually in onTaskViewFocusChanged. + // This is to prevent layer trashing when the view is pressed. + return new int[] {}; + } + /** Notifies the associated TaskView has been focused. */ void onTaskViewFocusChanged(boolean focused) { boolean isRunning = false; @@ -276,7 +292,7 @@ public class TaskViewHeader extends FrameLayout { mBackground.setColor(new ColorStateList(states, colors)); mBackground.setState(newStates); // Pulse the background color - int currentColor = mBackgroundColor.getColor(); + int currentColor = mBackgroundColor; int lightPrimaryColor = getSecondaryColor(mCurrentPrimaryColor, mCurrentPrimaryColorIsDark); ValueAnimator backgroundColor = ValueAnimator.ofObject(new ArgbEvaluator(), lightPrimaryColor, currentColor); @@ -289,7 +305,9 @@ public class TaskViewHeader extends FrameLayout { backgroundColor.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { - mBackgroundColor.setColor((Integer) animation.getAnimatedValue()); + int color = (int) animation.getAnimatedValue(); + mBackgroundColorDrawable.setColor(color); + mBackgroundColor = color; } }); backgroundColor.setRepeatCount(ValueAnimator.INFINITE); @@ -307,13 +325,15 @@ public class TaskViewHeader extends FrameLayout { } else { if (isRunning) { // Restore the background color - int currentColor = mBackgroundColor.getColor(); + int currentColor = mBackgroundColor; ValueAnimator backgroundColor = ValueAnimator.ofObject(new ArgbEvaluator(), currentColor, mCurrentPrimaryColor); backgroundColor.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { - mBackgroundColor.setColor((Integer) animation.getAnimatedValue()); + int color = (int) animation.getAnimatedValue(); + mBackgroundColorDrawable.setColor(color); + mBackgroundColor = color; } }); // Restore the translation @@ -329,4 +349,11 @@ public class TaskViewHeader extends FrameLayout { } } } + + public void setDimAlpha(int alpha) { + int color = Color.argb(alpha, 0, 0, 0); + mDimFilter.setColor(color); + mDimPaint.setColorFilter(mDimFilter); + setLayerType(LAYER_TYPE_HARDWARE, mDimPaint); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java index fe36987..a946a84 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java @@ -16,9 +16,20 @@ package com.android.systemui.recents.views; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.LightingColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; import com.android.systemui.recents.RecentsConfiguration; @@ -26,12 +37,32 @@ import com.android.systemui.recents.model.Task; /** The task thumbnail view */ -public class TaskViewThumbnail extends FixedSizeImageView { +public class TaskViewThumbnail extends View { + private final int mCornerRadius; + private final Matrix mScaleMatrix = new Matrix(); RecentsConfiguration mConfig; // Task bar clipping Rect mClipRect = new Rect(); + Paint mDrawPaint = new Paint(); + LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0); + private final RectF mBitmapRect = new RectF(); + private final RectF mLayoutRect = new RectF(); + private BitmapShader mBitmapShader; + private float mBitmapAlpha; + private float mDimAlpha; + private View mTaskBar; + private boolean mInvisible; + private ValueAnimator mAlphaAnimator; + private ValueAnimator.AnimatorUpdateListener mAlphaUpdateListener + = new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mBitmapAlpha = (float) animation.getAnimatedValue(); + updateFilter(); + } + }; public TaskViewThumbnail(Context context) { this(context, null); @@ -48,35 +79,75 @@ public class TaskViewThumbnail extends FixedSizeImageView { public TaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mConfig = RecentsConfiguration.getInstance(); - setScaleType(ScaleType.FIT_XY); + mCornerRadius = mConfig.taskViewRoundedCornerRadiusPx; + mDrawPaint.setColorFilter(mLightingColorFilter); + mDrawPaint.setFilterBitmap(true); + mDrawPaint.setAntiAlias(true); + } + + @Override + protected void onDraw(Canvas canvas) { + if (mInvisible) { + return; + } + canvas.drawRoundRect(0, + 0, + getWidth(), + getHeight(), + mCornerRadius, + mCornerRadius, + mDrawPaint); } @Override protected void onFinishInflate() { - setAlpha(0.9f); + mBitmapAlpha = 0.9f; + updateFilter(); + } + + private void updateFilter() { + if (mInvisible) { + return; + } + int mul = (int) ((1.0f - mDimAlpha) * mBitmapAlpha * 255); + int add = (int) ((1.0f - mDimAlpha) * (1 - mBitmapAlpha) * 255); + if (mBitmapShader != null) { + mLightingColorFilter.setColorMultiply(Color.argb(255, mul, mul, mul)); + mLightingColorFilter.setColorAdd(Color.argb(0, add, add, add)); + mDrawPaint.setColorFilter(mLightingColorFilter); + mDrawPaint.setColor(0xffffffff); + } else { + mDrawPaint.setColorFilter(null); + int grey = mul + add; + mDrawPaint.setColor(Color.argb(255, grey, grey, grey)); + } + invalidate(); } /** Updates the clip rect based on the given task bar. */ void enableTaskBarClip(View taskBar) { + mTaskBar = taskBar; int top = (int) Math.max(0, taskBar.getTranslationY() + taskBar.getMeasuredHeight() - 1); mClipRect.set(0, top, getMeasuredWidth(), getMeasuredHeight()); setClipBounds(mClipRect); } - /** Disables the task bar clipping. */ - void disableTaskBarClip() { - mClipRect.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); - setClipBounds(mClipRect); + void updateVisibility(int clipBottom) { + boolean invisible = mTaskBar != null && getHeight() - clipBottom < mTaskBar.getHeight(); + if (invisible != mInvisible) { + mInvisible = invisible; + if (!mInvisible) { + updateFilter(); + } + invalidate(); + } } /** Binds the thumbnail view to the screenshot. */ boolean bindToScreenshot(Bitmap ss) { - if (ss != null) { - setImageBitmap(ss); - return true; - } - return false; + setImageBitmap(ss); + return ss != null; } /** Unbinds the thumbnail view from the screenshot. */ @@ -88,12 +159,49 @@ public class TaskViewThumbnail extends FixedSizeImageView { void rebindToTask(Task t) { if (t.thumbnail != null) { setImageBitmap(t.thumbnail); + } else { + setImageBitmap(null); + } + } + + public void setImageBitmap(Bitmap bm) { + if (bm != null) { + mBitmapShader = new BitmapShader(bm, Shader.TileMode.CLAMP, + Shader.TileMode.CLAMP); + mDrawPaint.setShader(mBitmapShader); + mBitmapRect.set(0, 0, bm.getWidth(), bm.getHeight()); + updateBitmapScale(); + } else { + mBitmapShader = null; + mDrawPaint.setShader(null); + } + updateFilter(); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (changed) { + mLayoutRect.set(0, 0, getWidth(), getHeight()); + updateBitmapScale(); + } + } + + private void updateBitmapScale() { + if (mBitmapShader != null) { + mScaleMatrix.setRectToRect(mBitmapRect, mLayoutRect, Matrix.ScaleToFit.FILL); + mBitmapShader.setLocalMatrix(mScaleMatrix); } } + public void setDimAlpha(float dimAlpha) { + mDimAlpha = dimAlpha; + updateFilter(); + } + /** Unbinds the thumbnail view from the task */ void unbindFromTask() { - setImageDrawable(null); + setImageBitmap(null); } /** Handles focus changes. */ @@ -112,10 +220,11 @@ public class TaskViewThumbnail extends FixedSizeImageView { /** Prepares for the enter recents animation. */ void prepareEnterRecentsAnimation(boolean isTaskViewLaunchTargetTask) { if (isTaskViewLaunchTargetTask) { - setAlpha(1f); + mBitmapAlpha = 1f; } else { - setAlpha(mConfig.taskViewThumbnailAlpha); + mBitmapAlpha = mConfig.taskViewThumbnailAlpha; } + updateFilter(); } /** Animates this task thumbnail as it enters recents */ @@ -130,16 +239,32 @@ public class TaskViewThumbnail extends FixedSizeImageView { } /** Animates the thumbnail alpha. */ - void startFadeAnimation(float finalAlpha, int delay, int duration, Runnable postAnimRunnable) { + void startFadeAnimation(float finalAlpha, int delay, int duration, final Runnable postAnimRunnable) { + if (mAlphaAnimator != null) { + mAlphaAnimator.cancel(); + } + mAlphaAnimator = ValueAnimator.ofFloat(mBitmapAlpha, finalAlpha); + mAlphaAnimator.addUpdateListener(mAlphaUpdateListener); + mAlphaAnimator.setStartDelay(delay); + mAlphaAnimator.setInterpolator(mConfig.fastOutSlowInInterpolator); + mAlphaAnimator.setDuration(duration); + mAlphaAnimator.start(); if (postAnimRunnable != null) { - animate().withEndAction(postAnimRunnable); + mAlphaAnimator.addListener(new AnimatorListenerAdapter() { + public boolean mCancelled; + + @Override + public void onAnimationCancel(Animator animation) { + mCancelled = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (!mCancelled) { + postAnimRunnable.run(); + } + } + }); } - animate() - .alpha(finalAlpha) - .setStartDelay(delay) - .setInterpolator(mConfig.fastOutSlowInInterpolator) - .setDuration(duration) - .withLayer() - .start(); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java index ce2e80b..42c0f9f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java @@ -77,7 +77,8 @@ public class TaskViewTransform { } /** Applies this transform to a view. */ - public void applyToTaskView(View v, int duration, Interpolator interp, boolean allowLayers) { + public void applyToTaskView(View v, int duration, Interpolator interp, boolean allowLayers, + boolean allowShadows, ValueAnimator.AnimatorUpdateListener updateCallback) { // Check to see if any properties have changed, and update the task view if (duration > 0) { ViewPropertyAnimator anim = v.animate(); @@ -87,8 +88,7 @@ public class TaskViewTransform { if (hasTranslationYChangedFrom(v.getTranslationY())) { anim.translationY(translationY); } - if (Constants.DebugFlags.App.EnableShadows && - hasTranslationZChangedFrom(v.getTranslationZ())) { + if (allowShadows && hasTranslationZChangedFrom(v.getTranslationZ())) { anim.translationZ(translationZ); } if (hasScaleChangedFrom(v.getScaleX())) { @@ -104,6 +104,11 @@ public class TaskViewTransform { if (requiresLayers && allowLayers) { anim.withLayer(); } + if (updateCallback != null) { + anim.setUpdateListener(updateCallback); + } else { + anim.setUpdateListener(null); + } anim.setStartDelay(startDelay) .setDuration(duration) .setInterpolator(interp) @@ -113,8 +118,7 @@ public class TaskViewTransform { if (hasTranslationYChangedFrom(v.getTranslationY())) { v.setTranslationY(translationY); } - if (Constants.DebugFlags.App.EnableShadows && - hasTranslationZChangedFrom(v.getTranslationZ())) { + if (allowShadows && hasTranslationZChangedFrom(v.getTranslationZ())) { v.setTranslationZ(translationZ); } if (hasScaleChangedFrom(v.getScaleX())) { @@ -131,9 +135,7 @@ public class TaskViewTransform { public static void reset(View v) { v.setTranslationX(0f); v.setTranslationY(0f); - if (Constants.DebugFlags.App.EnableShadows) { - v.setTranslationZ(0f); - } + v.setTranslationZ(0f); v.setScaleX(1f); v.setScaleY(1f); v.setAlpha(1f); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/ViewAnimation.java b/packages/SystemUI/src/com/android/systemui/recents/views/ViewAnimation.java index a1fc40f..4586f12 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/ViewAnimation.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/ViewAnimation.java @@ -16,6 +16,7 @@ package com.android.systemui.recents.views; +import android.animation.ValueAnimator; import android.graphics.Rect; import com.android.systemui.recents.misc.ReferenceCountedTrigger; @@ -27,6 +28,8 @@ public class ViewAnimation { // A trigger to run some logic when all the animations complete. This works around the fact // that it is difficult to coordinate ViewPropertyAnimators ReferenceCountedTrigger postAnimationTrigger; + // An update listener to notify as the enter animation progresses (used for the home transition) + ValueAnimator.AnimatorUpdateListener updateListener; // These following properties are updated for each task view we start the enter animation on 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 e323dd6..754fade 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -25,6 +25,8 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.InsetDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; @@ -91,6 +93,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private final TrustDrawable mTrustDrawable; + private int mLastUnlockIconRes = 0; + public KeyguardBottomAreaView(Context context) { this(context, null); } @@ -380,7 +384,17 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL ? com.android.internal.R.drawable.ic_account_circle : mUnlockMethodCache.isMethodInsecure() ? R.drawable.ic_lock_open_24dp : R.drawable.ic_lock_24dp; - mLockIcon.setImageResource(iconRes); + if (mLastUnlockIconRes != iconRes) { + Drawable icon = mContext.getDrawable(iconRes); + int iconHeight = getResources().getDimensionPixelSize( + R.dimen.keyguard_affordance_icon_height); + int iconWidth = getResources().getDimensionPixelSize( + R.dimen.keyguard_affordance_icon_width); + if (icon.getIntrinsicHeight() != iconHeight || icon.getIntrinsicWidth() != iconWidth) { + icon = new IntrinsicSizeDrawable(icon, iconWidth, iconHeight); + } + mLockIcon.setImageDrawable(icon); + } boolean trustManaged = mUnlockMethodCache.isTrustManaged(); mTrustDrawable.setTrustManaged(trustManaged); updateLockIconClickability(); @@ -469,4 +483,30 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL KeyguardIndicationController keyguardIndicationController) { mIndicationController = keyguardIndicationController; } + + + /** + * A wrapper around another Drawable that overrides the intrinsic size. + */ + private static class IntrinsicSizeDrawable extends InsetDrawable { + + private final int mIntrinsicWidth; + private final int mIntrinsicHeight; + + public IntrinsicSizeDrawable(Drawable drawable, int intrinsicWidth, int intrinsicHeight) { + super(drawable, 0); + mIntrinsicWidth = intrinsicWidth; + mIntrinsicHeight = intrinsicHeight; + } + + @Override + public int getIntrinsicWidth() { + return mIntrinsicWidth; + } + + @Override + public int getIntrinsicHeight() { + return mIntrinsicHeight; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java index 685c184..4715d0a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java @@ -67,8 +67,7 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener @Override public void onClick(View v) { - final UserManager um = UserManager.get(getContext()); - if (um.isUserSwitcherEnabled()) { + if (opensUserSwitcherWhenClicked()) { if (mKeyguardMode) { if (mKeyguardUserSwitcher != null) { mKeyguardUserSwitcher.show(true /* animate */); @@ -92,9 +91,8 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener super.onPopulateAccessibilityEvent(event); if (isClickable()) { - final UserManager um = UserManager.get(getContext()); String text; - if (um.isUserSwitcherEnabled()) { + if (opensUserSwitcherWhenClicked()) { String currentUser = null; if (mQsPanel != null) { UserSwitcherController controller = mQsPanel.getHost() @@ -122,4 +120,9 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener public boolean hasOverlappingRendering() { return false; } + + private boolean opensUserSwitcherWhenClicked() { + UserManager um = UserManager.get(getContext()); + return UserManager.supportsMultipleUsers() && um.isUserSwitcherEnabled(); + } } 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 1b4254c..353c887 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1485,7 +1485,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateClearAll(); updateEmptyShadeView(); - mNotificationPanel.setQsExpansionEnabled(isDeviceProvisioned()); + // Disable QS if device not provisioned. + // If the user switcher is simple then disable QS during setup because + // the user intends to use the lock screen user switcher, QS in not needed. + mNotificationPanel.setQsExpansionEnabled(isDeviceProvisioned() + && (!mUserSwitcherController.isSimpleUserSwitcher() || mUserSetup)); mShadeUpdates.check(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 15a7229..cb9abfd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -207,6 +207,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL FontSizeUtils.updateFontSize(mAmPm, R.dimen.qs_time_collapsed_size); FontSizeUtils.updateFontSize(this, R.id.empty_time_view, R.dimen.qs_time_expanded_size); + mEmergencyCallsOnly.setText(com.android.internal.R.string.emergency_calls_only); + mClockCollapsedSize = getResources().getDimensionPixelSize(R.dimen.qs_time_collapsed_size); mClockExpandedSize = getResources().getDimensionPixelSize(R.dimen.qs_time_expanded_size); mClockCollapsedScaleFactor = (float) mClockCollapsedSize / (float) mClockExpandedSize; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index e8f35fd..bbe6622 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -227,7 +227,14 @@ public class UserSwitcherController { int id; if (record.isGuest && record.info == null) { // No guest user. Create one. - id = mUserManager.createGuest(mContext, mContext.getString(R.string.guest_nickname)).id; + UserInfo guest = mUserManager.createGuest( + mContext, mContext.getString(R.string.guest_nickname)); + if (guest == null) { + // Couldn't create guest, most likely because there already exists one, we just + // haven't reloaded the user list yet. + return; + } + id = guest.id; } else if (record.isAddUser) { showAddUserDialog(); return; @@ -564,8 +571,14 @@ public class UserSwitcherController { cancel(); } else { dismiss(); - int id = mUserManager.createUser( - mContext.getString(R.string.user_new_user_name), 0 /* flags */).id; + UserInfo user = mUserManager.createUser( + mContext.getString(R.string.user_new_user_name), 0 /* flags */); + if (user == null) { + // Couldn't create user, most likely because there are too many, but we haven't + // been able to reload the list yet. + return; + } + int id = user.id; Bitmap icon = UserIcons.convertToBitmap(UserIcons.getDefaultUserIcon( id, /* light= */ false)); mUserManager.setUserIcon(id, icon); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index c516874..3419119 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -2125,8 +2125,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } - private final class DecorView extends FrameLayout implements RootViewSurfaceTaker, - View.OnSystemUiVisibilityChangeListener { + private final class DecorView extends FrameLayout implements RootViewSurfaceTaker { /* package */int mDefaultOpacity = PixelFormat.OPAQUE; /** The feature ID of the panel, or -1 if this is the application's DecorView */ @@ -2163,8 +2162,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private int mLastTopInset = 0; private int mLastBottomInset = 0; private int mLastRightInset = 0; - private int mLastSystemUiVisibility = 0; - private int mLastWindowSystemUiVisibility = 0; public DecorView(Context context, int featureId) { @@ -2643,19 +2640,35 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } else { if (mActionModeView == null) { if (isFloating()) { - mActionModeView = new ActionBarContextView(mContext); - mActionModePopup = new PopupWindow(mContext, null, + // Use the action bar theme. + final TypedValue outValue = new TypedValue(); + final Theme baseTheme = mContext.getTheme(); + baseTheme.resolveAttribute(R.attr.actionBarTheme, outValue, true); + + final Context actionBarContext; + if (outValue.resourceId != 0) { + final Theme actionBarTheme = mContext.getResources().newTheme(); + actionBarTheme.setTo(baseTheme); + actionBarTheme.applyStyle(outValue.resourceId, true); + + actionBarContext = new ContextThemeWrapper(mContext, 0); + actionBarContext.getTheme().setTo(actionBarTheme); + } else { + actionBarContext = mContext; + } + + mActionModeView = new ActionBarContextView(actionBarContext); + mActionModePopup = new PopupWindow(actionBarContext, null, R.attr.actionModePopupWindowStyle); mActionModePopup.setWindowLayoutType( WindowManager.LayoutParams.TYPE_APPLICATION); mActionModePopup.setContentView(mActionModeView); mActionModePopup.setWidth(MATCH_PARENT); - TypedValue heightValue = new TypedValue(); - mContext.getTheme().resolveAttribute( - R.attr.actionBarSize, heightValue, true); - final int height = TypedValue.complexToDimensionPixelSize(heightValue.data, - mContext.getResources().getDisplayMetrics()); + actionBarContext.getTheme().resolveAttribute( + R.attr.actionBarSize, outValue, true); + final int height = TypedValue.complexToDimensionPixelSize(outValue.data, + actionBarContext.getResources().getDisplayMetrics()); mActionModeView.setContentHeight(height); mActionModePopup.setHeight(WRAP_CONTENT); mShowActionModePopup = new Runnable() { @@ -2676,8 +2689,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { if (mActionModeView != null) { mActionModeView.killMode(); - mode = new StandaloneActionMode(getContext(), mActionModeView, wrappedCallback, - mActionModePopup == null); + mode = new StandaloneActionMode(mActionModeView.getContext(), mActionModeView, + wrappedCallback, mActionModePopup == null); if (callback.onCreateActionMode(mode, mode.getMenu())) { mode.invalidate(); mActionModeView.initForMode(mode); @@ -2745,14 +2758,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } @Override - public void onSystemUiVisibilityChange(int visible) { - mLastSystemUiVisibility = visible; - updateColorViews(null /* insets */); - } - - @Override public void onWindowSystemUiVisibilityChanged(int visible) { - mLastWindowSystemUiVisibility = visible; updateColorViews(null /* insets */); } @@ -2774,6 +2780,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } private WindowInsets updateColorViews(WindowInsets insets) { + WindowManager.LayoutParams attrs = getAttributes(); + int sysUiVisibility = attrs.systemUiVisibility | getWindowSystemUiVisibility(); + if (!mIsFloating && ActivityManager.isHighEndGfx()) { if (insets != null) { mLastTopInset = Math.min(insets.getStableInsetTop(), @@ -2783,13 +2792,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { mLastRightInset = Math.min(insets.getStableInsetRight(), insets.getSystemWindowInsetRight()); } - mStatusColorView = updateColorViewInt(mStatusColorView, + mStatusColorView = updateColorViewInt(mStatusColorView, sysUiVisibility, SYSTEM_UI_FLAG_FULLSCREEN, FLAG_TRANSLUCENT_STATUS, mStatusBarColor, mLastTopInset, Gravity.TOP, STATUS_BAR_BACKGROUND_TRANSITION_NAME, com.android.internal.R.id.statusBarBackground, (getAttributes().flags & FLAG_FULLSCREEN) != 0); - mNavigationColorView = updateColorViewInt(mNavigationColorView, + mNavigationColorView = updateColorViewInt(mNavigationColorView, sysUiVisibility, SYSTEM_UI_FLAG_HIDE_NAVIGATION, FLAG_TRANSLUCENT_NAVIGATION, mNavigationBarColor, mLastBottomInset, Gravity.BOTTOM, NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, @@ -2797,9 +2806,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { false /* hiddenByWindowFlag */); } - WindowManager.LayoutParams attrs = getAttributes(); - int sysUiVisibility = attrs.systemUiVisibility | mLastWindowSystemUiVisibility; - // When we expand the window with FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, we still need // to ensure that the rest of the view hierarchy doesn't notice it, unless they've // explicitly asked for it. @@ -2807,7 +2813,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { boolean consumingNavBar = (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 - && (mLastSystemUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + && (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; int consumedRight = consumingNavBar ? mLastRightInset : 0; int consumedBottom = consumingNavBar ? mLastBottomInset : 0; @@ -2841,10 +2847,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { return insets; } - private View updateColorViewInt(View view, int systemUiHideFlag, int translucentFlag, - int color, int height, int verticalGravity, String transitionName, int id, - boolean hiddenByWindowFlag) { - boolean show = height > 0 && (mLastSystemUiVisibility & systemUiHideFlag) == 0 + private View updateColorViewInt(View view, int sysUiVis, int systemUiHideFlag, + int translucentFlag, int color, int height, int verticalGravity, + String transitionName, int id, boolean hiddenByWindowFlag) { + boolean show = height > 0 && (sysUiVis & systemUiHideFlag) == 0 && !hiddenByWindowFlag && (getAttributes().flags & translucentFlag) == 0 && (color & Color.BLACK) != 0 @@ -3320,7 +3326,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { setFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS & ~getForcedWindowFlags()); } - decor.setOnSystemUiVisibilityChangeListener(decor); } if (!mForcedStatusBarColor) { mStatusBarColor = a.getColor(R.styleable.Window_statusBarColor, 0xFF000000); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 02adef4..fbaaf74 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -1827,6 +1827,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { params.packageName = packageName; params.windowAnimations = win.getWindowStyle().getResourceId( com.android.internal.R.styleable.Window_windowAnimationStyle, 0); + params.privateFlags |= + WindowManager.LayoutParams.PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED; params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; if (!compatInfo.supportsScreen()) { diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index ebe21ff..24bfba6 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3277,7 +3277,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // But we still have not gotten the window state from the // window manager, so delay the notification until then. AccessibilityWindowInfo window = findWindowById(event.getWindowId()); - if (window == null || !window.isFocused()) { + if (window == null) { mShowingFocusedWindowEvent = AccessibilityEvent.obtain(event); return false; } @@ -3377,7 +3377,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (mShowingFocusedWindowEvent != null) { final int windowId = mShowingFocusedWindowEvent.getWindowId(); AccessibilityWindowInfo window = findWindowById(windowId); - if (window != null && window.isFocused()) { + if (window != null) { // Sending does the recycle. sendAccessibilityEvent(mShowingFocusedWindowEvent, mCurrentUserId); } diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 7716385..47396bd 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -1537,7 +1537,9 @@ class AlarmManagerService extends SystemService { for (int i=0; i<triggerList.size(); i++) { Alarm alarm = triggerList.get(i); try { - Slog.v(TAG, "sending alarm " + alarm); + if (localLOGV) { + Slog.v(TAG, "sending alarm " + alarm); + } alarm.operation.send(getContext(), 0, mBackgroundIntent.putExtra( Intent.EXTRA_ALARM_COUNT, alarm.count), diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6d8e105..741cffe 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8375,12 +8375,17 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r != null) { - r.taskDescription = td; + r.setTaskDescription(td); r.task.updateTaskDescription(); } } } + @Override + public Bitmap getTaskDescriptionIcon(String filename) { + return mTaskPersister.getTaskDescriptionIcon(filename); + } + private void cleanUpRemovedTaskLocked(TaskRecord tr, int flags) { mRecentTasks.remove(tr); tr.removedFromRecents(mTaskPersister); diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index adea271..2db7cec 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -205,14 +205,18 @@ final class ActivityRecord { pw.print(" resultWho="); pw.print(resultWho); pw.print(" resultCode="); pw.println(requestCode); } - if (taskDescription.getIcon() != null || taskDescription.getLabel() != null || + final String iconFilename = taskDescription.getIconFilename(); + if (iconFilename != null || taskDescription.getLabel() != null || taskDescription.getPrimaryColor() != 0) { pw.print(prefix); pw.print("taskDescription:"); - pw.print(" icon="); pw.print(taskDescription.getIcon()); + pw.print(" iconFilename="); pw.print(taskDescription.getIconFilename()); pw.print(" label=\""); pw.print(taskDescription.getLabel()); pw.print("\""); pw.print(" color="); pw.println(Integer.toHexString(taskDescription.getPrimaryColor())); } + if (iconFilename == null && taskDescription.getIcon() != null) { + pw.print(prefix); pw.println("taskDescription contains Bitmap"); + } if (results != null) { pw.print(prefix); pw.print("results="); pw.println(results); } @@ -1093,6 +1097,17 @@ final class ActivityRecord { TaskPersister.IMAGE_EXTENSION; } + void setTaskDescription(TaskDescription _taskDescription) { + Bitmap icon; + if (_taskDescription.getIconFilename() == null && + (icon = _taskDescription.getIcon()) != null) { + final String iconFilename = createImageFilename(createTime, task.taskId); + mStackSupervisor.mService.mTaskPersister.saveImage(icon, iconFilename); + _taskDescription.setIconFilename(iconFilename); + } + taskDescription = _taskDescription; + } + void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException { out.attribute(null, ATTR_ID, String.valueOf(createTime)); out.attribute(null, ATTR_LAUNCHEDFROMUID, String.valueOf(launchedFromUid)); @@ -1106,8 +1121,7 @@ final class ActivityRecord { out.attribute(null, ATTR_USERID, String.valueOf(userId)); if (taskDescription != null) { - task.saveTaskDescription(taskDescription, createImageFilename(createTime, task.taskId), - out); + taskDescription.saveToXml(out); } out.startTag(null, TAG_INTENT); @@ -1151,9 +1165,8 @@ final class ActivityRecord { componentSpecified = Boolean.valueOf(attrValue); } else if (ATTR_USERID.equals(attrName)) { userId = Integer.valueOf(attrValue); - } else if (TaskRecord.readTaskDescriptionAttribute(taskDescription, attrName, - attrValue)) { - // Completed in TaskRecord.readTaskDescriptionAttribute() + } else if (attrName.startsWith(TaskDescription.ATTR_TASKDESCRIPTION_PREFIX)) { + taskDescription.restoreFromXml(attrName, attrValue); } else { Log.d(TAG, "Unknown ActivityRecord attribute=" + attrName); } @@ -1197,11 +1210,6 @@ final class ActivityRecord { null, null, 0, componentSpecified, stackSupervisor, null, null); r.persistentState = persistentState; - - if (createTime >= 0) { - taskDescription.setIcon(TaskPersister.restoreImage(createImageFilename(createTime, - taskId))); - } r.taskDescription = taskDescription; r.createTime = createTime; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index ebd0d4e..482a582 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3689,7 +3689,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } } - private void detachLocked() { + protected void detachLocked() { if (DEBUG_STACK) Slog.d(TAG, "detachLocked: " + this + " from display=" + mActivityDisplay + " Callers=" + Debug.getCallers(2)); if (mActivityDisplay != null) { @@ -3813,12 +3813,6 @@ public final class ActivityStackSupervisor implements DisplayListener { } void onTaskListEmptyLocked() { - mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this); - if (!mStack.isHomeStack()) { - detachLocked(); - deleteActivityContainer(this); - } - mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override @@ -3907,6 +3901,13 @@ public final class ActivityStackSupervisor implements DisplayListener { return false; } + void onTaskListEmptyLocked() { + mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this); + detachLocked(); + deleteActivityContainer(this); + mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); + } + private void setSurfaceIfReadyLocked() { if (DEBUG_STACK) Slog.v(TAG, "setSurfaceIfReadyLocked: mDrawn=" + mDrawn + " mContainerState=" + mContainerState + " mSurface=" + mSurface); diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java index df1772a..1c0564f 100644 --- a/services/core/java/com/android/server/am/TaskPersister.java +++ b/services/core/java/com/android/server/am/TaskPersister.java @@ -218,7 +218,16 @@ public class TaskPersister { yieldIfQueueTooDeep(); } - Bitmap getThumbnail(String filename) { + Bitmap getTaskDescriptionIcon(String filename) { + // See if it is in the write queue + final Bitmap icon = getImageFromWriteQueue(filename); + if (icon != null) { + return icon; + } + return restoreImage(filename); + } + + Bitmap getImageFromWriteQueue(String filename) { synchronized (this) { for (int queueNdx = mWriteQueue.size() - 1; queueNdx >= 0; --queueNdx) { final WriteQueueItem item = mWriteQueue.get(queueNdx); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 4de7367..73c9783 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -25,6 +25,7 @@ import static com.android.server.am.ActivityStackSupervisor.DEBUG_ADD_REMOVE; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.TaskThumbnail; +import android.app.ActivityManager.TaskDescription; import android.app.ActivityOptions; import android.app.AppGlobals; import android.content.ComponentName; @@ -70,15 +71,12 @@ final class TaskRecord { private static final String ATTR_LASTDESCRIPTION = "last_description"; private static final String ATTR_LASTTIMEMOVED = "last_time_moved"; private static final String ATTR_NEVERRELINQUISH = "never_relinquish_identity"; - private static final String ATTR_TASKDESCRIPTIONLABEL = "task_description_label"; - private static final String ATTR_TASKDESCRIPTIONCOLOR = "task_description_color"; private static final String ATTR_TASK_AFFILIATION = "task_affiliation"; private static final String ATTR_PREV_AFFILIATION = "prev_affiliation"; private static final String ATTR_NEXT_AFFILIATION = "next_affiliation"; private static final String ATTR_TASK_AFFILIATION_COLOR = "task_affiliation_color"; private static final String ATTR_CALLING_UID = "calling_uid"; private static final String ATTR_CALLING_PACKAGE = "calling_package"; - private static final String LAST_ACTIVITY_ICON_SUFFIX = "_last_activity_icon_"; private static final String TASK_THUMBNAIL_SUFFIX = "_task_thumbnail"; @@ -113,8 +111,7 @@ final class TaskRecord { // This represents the last resolved activity values for this task // NOTE: This value needs to be persisted with each task - ActivityManager.TaskDescription lastTaskDescription = - new ActivityManager.TaskDescription(); + TaskDescription lastTaskDescription = new TaskDescription(); /** List of all activities in the task arranged in history order */ final ArrayList<ActivityRecord> mActivities; @@ -180,7 +177,7 @@ final class TaskRecord { } TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent, - ActivityManager.TaskDescription _taskDescription) { + TaskDescription _taskDescription) { mService = service; mFilename = String.valueOf(_taskId) + TASK_THUMBNAIL_SUFFIX + TaskPersister.IMAGE_EXTENSION; @@ -215,7 +212,7 @@ final class TaskRecord { boolean _askedCompatMode, int _taskType, int _userId, int _effectiveUid, String _lastDescription, ArrayList<ActivityRecord> activities, long _firstActiveTime, long _lastActiveTime, long lastTimeMoved, boolean neverRelinquishIdentity, - ActivityManager.TaskDescription _lastTaskDescription, int taskAffiliation, + TaskDescription _lastTaskDescription, int taskAffiliation, int prevTaskId, int nextTaskId, int taskAffiliationColor, int callingUid, String callingPackage) { mService = service; @@ -327,8 +324,8 @@ final class TaskRecord { } } - if (intent != null && - (intent.getFlags()&Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) { + final int intentFlags = intent == null ? 0 : intent.getFlags(); + if ((intentFlags & Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) { // Once we are set to an Intent with this flag, we count this // task as having a true root activity. rootWasReset = true; @@ -338,8 +335,8 @@ final class TaskRecord { if ((info.flags & ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS) != 0) { // If the activity itself has requested auto-remove, then just always do it. autoRemoveRecents = true; - } else if ((intent.getFlags()&(Intent.FLAG_ACTIVITY_NEW_DOCUMENT - |Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)) == Intent.FLAG_ACTIVITY_NEW_DOCUMENT) { + } else if ((intentFlags & (Intent.FLAG_ACTIVITY_NEW_DOCUMENT + | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)) == Intent.FLAG_ACTIVITY_NEW_DOCUMENT) { // If the caller has not asked for the document to be retained, then we may // want to turn on auto-remove, depending on whether the target has set its // own document launch mode. @@ -441,7 +438,7 @@ final class TaskRecord { thumbs.mainThumbnail = mLastThumbnail; thumbs.thumbnailFileDescriptor = null; if (mLastThumbnail == null) { - thumbs.mainThumbnail = mService.mTaskPersister.getThumbnail(mFilename); + thumbs.mainThumbnail = mService.mTaskPersister.getImageFromWriteQueue(mFilename); } // Only load the thumbnail file if we don't have a thumbnail if (thumbs.mainThumbnail == null && mLastThumbnailFile.exists()) { @@ -759,7 +756,7 @@ final class TaskRecord { // recent activity values, then we do not fall back to the last set // values in the TaskRecord. String label = null; - Bitmap icon = null; + String iconFilename = null; int colorPrimary = 0; for (--activityNdx; activityNdx >= 0; --activityNdx) { final ActivityRecord r = mActivities.get(activityNdx); @@ -767,15 +764,15 @@ final class TaskRecord { if (label == null) { label = r.taskDescription.getLabel(); } - if (icon == null) { - icon = r.taskDescription.getIcon(); + if (iconFilename == null) { + iconFilename = r.taskDescription.getIconFilename(); } if (colorPrimary == 0) { colorPrimary = r.taskDescription.getPrimaryColor(); } } } - lastTaskDescription = new ActivityManager.TaskDescription(label, icon, colorPrimary); + lastTaskDescription = new TaskDescription(label, colorPrimary, iconFilename); // Update the task affiliation color if we are the parent of the group if (taskId == mAffiliatedTaskId) { mAffiliatedTaskColor = lastTaskDescription.getPrimaryColor(); @@ -784,18 +781,19 @@ final class TaskRecord { } int findEffectiveRootIndex() { - int activityNdx; + int effectiveNdx = 0; final int topActivityNdx = mActivities.size() - 1; - for (activityNdx = 0; activityNdx < topActivityNdx; ++activityNdx) { + for (int activityNdx = 0; activityNdx < topActivityNdx; ++activityNdx) { final ActivityRecord r = mActivities.get(activityNdx); if (r.finishing) { continue; } + effectiveNdx = activityNdx; if ((r.info.flags & ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY) == 0) { break; } } - return activityNdx; + return effectiveNdx; } void updateEffectiveIntent() { @@ -804,41 +802,6 @@ final class TaskRecord { setIntent(r); } - void saveTaskDescription(ActivityManager.TaskDescription taskDescription, - String iconFilename, XmlSerializer out) throws IOException { - if (taskDescription != null) { - final String label = taskDescription.getLabel(); - if (label != null) { - out.attribute(null, ATTR_TASKDESCRIPTIONLABEL, label); - } - final int colorPrimary = taskDescription.getPrimaryColor(); - if (colorPrimary != 0) { - out.attribute(null, ATTR_TASKDESCRIPTIONCOLOR, Integer.toHexString(colorPrimary)); - } - final Bitmap icon = taskDescription.getIcon(); - if (icon != null) { - mService.mTaskPersister.saveImage(icon, iconFilename); - } - } - } - - static boolean readTaskDescriptionAttribute(ActivityManager.TaskDescription taskDescription, - String attrName, String attrValue) { - if (ATTR_TASKDESCRIPTIONLABEL.equals(attrName)) { - taskDescription.setLabel(attrValue); - } else if (ATTR_TASKDESCRIPTIONCOLOR.equals(attrName)) { - taskDescription.setPrimaryColor((int) Long.parseLong(attrValue, 16)); - } else { - return false; - } - return true; - } - - private static String createLastTaskDescriptionIconFilename(int taskId, long lastActiveTime) { - return String.valueOf(taskId) + LAST_ACTIVITY_ICON_SUFFIX + lastActiveTime + - TaskPersister.IMAGE_EXTENSION; - } - void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException { if (ActivityManagerService.DEBUG_RECENTS) Slog.i(TAG, "Saving task=" + this); @@ -875,8 +838,7 @@ final class TaskRecord { out.attribute(null, ATTR_LASTDESCRIPTION, lastDescription.toString()); } if (lastTaskDescription != null) { - saveTaskDescription(lastTaskDescription, createLastTaskDescriptionIconFilename(taskId, - lastActiveTime), out); + lastTaskDescription.saveToXml(out); } out.attribute(null, ATTR_TASK_AFFILIATION_COLOR, String.valueOf(mAffiliatedTaskColor)); out.attribute(null, ATTR_TASK_AFFILIATION, String.valueOf(mAffiliatedTaskId)); @@ -934,7 +896,7 @@ final class TaskRecord { boolean neverRelinquishIdentity = true; int taskId = -1; final int outerDepth = in.getDepth(); - ActivityManager.TaskDescription taskDescription = new ActivityManager.TaskDescription(); + TaskDescription taskDescription = new TaskDescription(); int taskAffiliation = -1; int taskAffiliationColor = 0; int prevTaskId = -1; @@ -980,8 +942,8 @@ final class TaskRecord { lastTimeOnTop = Long.valueOf(attrValue); } else if (ATTR_NEVERRELINQUISH.equals(attrName)) { neverRelinquishIdentity = Boolean.valueOf(attrValue); - } else if (readTaskDescriptionAttribute(taskDescription, attrName, attrValue)) { - // Completed in TaskPersister.readTaskDescriptionAttribute() + } else if (attrName.startsWith(TaskDescription.ATTR_TASKDESCRIPTION_PREFIX)) { + taskDescription.restoreFromXml(attrName, attrValue); } else if (ATTR_TASK_AFFILIATION.equals(attrName)) { taskAffiliation = Integer.valueOf(attrValue); } else if (ATTR_PREV_AFFILIATION.equals(attrName)) { @@ -1025,11 +987,6 @@ final class TaskRecord { } } - if (lastActiveTime >= 0) { - taskDescription.setIcon(TaskPersister.restoreImage( - createLastTaskDescriptionIconFilename(taskId, lastActiveTime))); - } - if (!hasRootAffinity) { rootAffinity = affinity; } else if ("@".equals(rootAffinity)) { diff --git a/services/core/java/com/android/server/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java index df846a8..f1c5a6c 100644 --- a/services/core/java/com/android/server/location/GpsLocationProvider.java +++ b/services/core/java/com/android/server/location/GpsLocationProvider.java @@ -162,6 +162,10 @@ public class GpsLocationProvider implements LocationProviderInterface { private static final int GPS_CAPABILITY_SINGLE_SHOT = 0x0000008; private static final int GPS_CAPABILITY_ON_DEMAND_TIME = 0x0000010; + // The AGPS SUPL mode + private static final int AGPS_SUPL_MODE_MSA = 0x02; + private static final int AGPS_SUPL_MODE_MSB = 0x01; + // these need to match AGpsType enum in gps.h private static final int AGPS_TYPE_SUPL = 1; private static final int AGPS_TYPE_C2K = 2; @@ -486,12 +490,9 @@ public class GpsLocationProvider implements LocationProviderInterface { } else if (action.equals(SIM_STATE_CHANGED)) { TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); - int simState = phone.getSimState(); - Log.d(TAG, "SIM STATE CHANGED to " + simState); String mccMnc = phone.getSimOperator(); - if (simState == TelephonyManager.SIM_STATE_READY && - !TextUtils.isEmpty(mccMnc)) { - Log.d(TAG, "SIM STATE is ready, SIM MCC/MNC is " + mccMnc); + if (!TextUtils.isEmpty(mccMnc)) { + Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { reloadGpsProperties(context, mProperties); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); @@ -922,6 +923,39 @@ public class GpsLocationProvider implements LocationProviderInterface { } } + /** + * Checks what SUPL mode to use, according to the AGPS mode as well as the + * allowed mode from properties. + * + * @param properties GPS properties + * @param agpsEnabled whether AGPS is enabled by settings value + * @param singleShot whether "singleshot" is needed + * @return SUPL mode (MSA vs MSB vs STANDALONE) + */ + private int getSuplMode(Properties properties, boolean agpsEnabled, boolean singleShot) { + if (agpsEnabled) { + String modeString = properties.getProperty("SUPL_MODE"); + int suplMode = 0; + if (!TextUtils.isEmpty(modeString)) { + try { + suplMode = Integer.parseInt(modeString); + } catch (NumberFormatException e) { + Log.e(TAG, "unable to parse SUPL_MODE: " + modeString); + return GPS_POSITION_MODE_STANDALONE; + } + } + if (singleShot + && hasCapability(GPS_CAPABILITY_MSA) + && (suplMode & AGPS_SUPL_MODE_MSA) != 0) { + return GPS_POSITION_MODE_MS_ASSISTED; + } else if (hasCapability(GPS_CAPABILITY_MSB) + && (suplMode & AGPS_SUPL_MODE_MSB) != 0) { + return GPS_POSITION_MODE_MS_BASED; + } + } + return GPS_POSITION_MODE_STANDALONE; + } + private void handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); @@ -1199,14 +1233,10 @@ public class GpsLocationProvider implements LocationProviderInterface { mSingleShot = singleShot; mPositionMode = GPS_POSITION_MODE_STANDALONE; - if (Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.ASSISTED_GPS_ENABLED, 1) != 0) { - if (singleShot && hasCapability(GPS_CAPABILITY_MSA)) { - mPositionMode = GPS_POSITION_MODE_MS_ASSISTED; - } else if (hasCapability(GPS_CAPABILITY_MSB)) { - mPositionMode = GPS_POSITION_MODE_MS_BASED; - } - } + boolean agpsEnabled = + (Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.ASSISTED_GPS_ENABLED, 1) != 0); + mPositionMode = getSuplMode(mProperties, agpsEnabled, singleShot); if (DEBUG) { String mode; diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a3da1e6..fdf2fc8 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3356,7 +3356,8 @@ public class WindowManagerService extends IWindowManager.Stub } isFullScreen = ((win.mSystemUiVisibility & SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) == - SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN); + SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) || + ((win.mAttrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0); } if (atoken.mLaunchTaskBehind) { diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 1a6c52f..b0b6fb9 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -80,6 +80,15 @@ public final class Call { */ public static final int STATE_CONNECTING = 9; + /** + * The key to retrieve the optional {@code PhoneAccount}s Telecom can bundle with its Call + * extras. Used to pass the phone accounts to display on the front end to the user in order to + * select phone accounts to (for example) place a call. + * + * @hide + */ + public static final String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts"; + public static class Details { private final Uri mHandle; private final int mHandlePresentation; diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index a91d92f..481e483 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -306,22 +306,16 @@ public class TelecomManager { /** * Return the {@link PhoneAccount} which is the user-chosen default for making outgoing phone - * calls with a specified URI scheme. This {@code PhoneAccount} will always be a member of the - * list which is returned from calling {@link #getCallCapablePhoneAccounts()}. + * calls with a specified URI scheme. * <p> * Apps must be prepared for this method to return {@code null}, indicating that there currently - * exists no user-chosen default {@code PhoneAccount}. In this case, apps wishing to initiate a - * phone call must either create their {@link android.content.Intent#ACTION_CALL} or - * {@link android.content.Intent#ACTION_DIAL} {@code Intent} with no - * {@link TelecomManager#EXTRA_PHONE_ACCOUNT_HANDLE}, or present the user with an affordance to - * select one of the elements of {@link #getCallCapablePhoneAccounts()}. + * exists no user-chosen default {@code PhoneAccount}. * <p> - * An {@link android.content.Intent#ACTION_CALL} or {@link android.content.Intent#ACTION_DIAL} - * {@code Intent} with no {@link TelecomManager#EXTRA_PHONE_ACCOUNT_HANDLE} is valid, and - * subsequent steps in the phone call flow are responsible for presenting the user with an - * affordance, if necessary, to choose a {@code PhoneAccount}. - * * @param uriScheme The URI scheme. + * @return The {@link PhoneAccountHandle} corresponding to the user-chosen default for outgoing + * phone calls for a specified URI scheme. + * + * @hide */ public PhoneAccountHandle getDefaultOutgoingPhoneAccount(String uriScheme) { try { @@ -371,24 +365,6 @@ public class TelecomManager { } /** - * Return a list of {@link PhoneAccountHandle}s which can be used to make and receive phone - * calls. - * - * @see #EXTRA_PHONE_ACCOUNT_HANDLE - * @return A list of {@code PhoneAccountHandle} objects. - */ - public List<PhoneAccountHandle> getCallCapablePhoneAccounts() { - try { - if (isServiceConnected()) { - return getTelecomService().getCallCapablePhoneAccounts(); - } - } catch (RemoteException e) { - Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts", e); - } - return new ArrayList<>(); - } - - /** * Returns the current SIM call manager. Apps must be prepared for this method to return * {@code null}, indicating that there currently exists no user-chosen default * {@code PhoneAccount}. @@ -459,6 +435,8 @@ public class TelecomManager { * * @param uriScheme The URI scheme. * @return A list of {@code PhoneAccountHandle} objects supporting the URI scheme. + * + * @hide */ public List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(String uriScheme) { try { @@ -471,6 +449,27 @@ public class TelecomManager { return new ArrayList<>(); } + + /** + * Return a list of {@link PhoneAccountHandle}s which can be used to make and receive phone + * calls. + * + * @see #EXTRA_PHONE_ACCOUNT_HANDLE + * @return A list of {@code PhoneAccountHandle} objects. + * + * @hide + */ + public List<PhoneAccountHandle> getCallCapablePhoneAccounts() { + try { + if (isServiceConnected()) { + return getTelecomService().getCallCapablePhoneAccounts(); + } + } catch (RemoteException e) { + Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts", e); + } + return new ArrayList<>(); + } + /** * Determine whether the device has more than one account registered that can make and receive * phone calls. @@ -483,6 +482,22 @@ public class TelecomManager { } /** + * Returns a list of all {@link PhoneAccount}s registered for the calling package. + * + * @return A list of {@code PhoneAccountHandle} objects. + */ + public List<PhoneAccountHandle> getPhoneAccountsForPackage() { + try { + if (isServiceConnected()) { + return getTelecomService().getPhoneAccountsForPackage(mContext.getPackageName()); + } + } catch (RemoteException e) { + Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsForPackage", e); + } + return null; + } + + /** * Return the {@link PhoneAccount} for a specified {@link PhoneAccountHandle}. Object includes * resources which can be used in a user interface. * diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index 77a80fe..feb09d5 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -60,6 +60,11 @@ interface ITelecomService { List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(in String uriScheme); /** + * @see TelecomManager#getPhoneAccountsForPackage + */ + List<PhoneAccountHandle> getPhoneAccountsForPackage(in String packageName); + + /** * @see TelecomManager#getPhoneAccount */ PhoneAccount getPhoneAccount(in PhoneAccountHandle account); diff --git a/tests/Compatibility/Android.mk b/tests/Compatibility/Android.mk index 5385413..0ec4d9d 100644 --- a/tests/Compatibility/Android.mk +++ b/tests/Compatibility/Android.mk @@ -18,12 +18,12 @@ include $(CLEAR_VARS) # We only want this apk build for tests. LOCAL_MODULE_TAGS := tests +LOCAL_JAVA_LIBRARIES := android.test.runner # Include all test java files. LOCAL_SRC_FILES := \ $(call all-java-files-under, src) -LOCAL_SDK_VERSION := 8 LOCAL_PACKAGE_NAME := AppCompatibilityTest include $(BUILD_PACKAGE) diff --git a/tests/Compatibility/AndroidManifest.xml b/tests/Compatibility/AndroidManifest.xml index 103ef4c..2884532 100644 --- a/tests/Compatibility/AndroidManifest.xml +++ b/tests/Compatibility/AndroidManifest.xml @@ -24,6 +24,4 @@ android:name=".AppCompatibilityRunner" android:targetPackage="com.android.compatibilitytest" android:label="App Compability Test Runner" /> - - <uses-sdk android:minSdkVersion="8"></uses-sdk> </manifest> diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java index a2e9117..5794b2b 100644 --- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java +++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java @@ -147,11 +147,19 @@ public class AppCompatibility extends InstrumentationTestCase { * during the app launch. */ private ProcessErrorStateInfo launchActivity(String packageName) { + // the recommended way to see if this is a tv or not. + boolean isleanback = !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN) + && !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); Intent homeIntent = new Intent(Intent.ACTION_MAIN); homeIntent.addCategory(Intent.CATEGORY_HOME); homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - Intent intent = mPackageManager.getLaunchIntentForPackage(packageName); + Intent intent; + if (isleanback) { + Log.d(TAG, "Leanback and relax!"); + intent = mPackageManager.getLeanbackLaunchIntentForPackage(packageName); + } else { + intent = mPackageManager.getLaunchIntentForPackage(packageName); + } // Skip if the apk does not have a launch intent. if (intent == null) { Log.d(TAG, "Skipping " + packageName + "; missing launch intent"); |