diff options
56 files changed, 856 insertions, 2955 deletions
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java index faa2c7018d6f..e0dc568790a3 100644 --- a/core/java/android/database/sqlite/SQLiteConnection.java +++ b/core/java/android/database/sqlite/SQLiteConnection.java @@ -239,8 +239,8 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen NoPreloadHolder.DEBUG_SQL_STATEMENTS, NoPreloadHolder.DEBUG_SQL_TIME, mConfiguration.lookasideSlotSize, mConfiguration.lookasideSlotCount); } catch (SQLiteCantOpenDatabaseException e) { - final StringBuilder message = new StringBuilder("Cannot open database '") - .append(file).append('\'') + final StringBuilder message = new StringBuilder(e.getMessage()) + .append(" '").append(file).append("'") .append(" with flags 0x") .append(Integer.toHexString(mConfiguration.openFlags)); @@ -265,12 +265,10 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen message.append(": File ").append(path).append(" is not readable"); } else if (Files.isDirectory(path)) { message.append(": Path ").append(path).append(" is a directory"); - } else { - message.append(": Unable to deduct failure reason"); } } catch (Throwable th) { - message.append(": Unable to deduct failure reason" - + " because filesystem couldn't be examined: ").append(th.getMessage()); + // Ignore any exceptions generated whilst attempting to create extended diagnostic + // messages. } throw new SQLiteCantOpenDatabaseException(message.toString(), e); } finally { diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index 53771e38e4a5..21c900260d2e 100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java @@ -1025,8 +1025,18 @@ public final class InputManager { /** * Monitor input on the specified display for gestures. * + * NOTE: New usages of Gesture Monitors are strongly discouraged. Gesture Monitors are + * deprecated, in favor of spy windows (see {@link LayoutParams#INPUT_FEATURE_SPY}). + * The spy window should be configured specifically to receive the desired events, + * unlike the gesture monitor which receives all events on the display. + * * @hide + * @deprecated + * @see LayoutParams#INPUT_FEATURE_SPY + * @see android.os.InputConfig#SPY + * @see #pilferPointers(IBinder) */ + @Deprecated public InputMonitor monitorGestureInput(String name, int displayId) { return mGlobal.monitorGestureInput(name, displayId); } diff --git a/core/java/android/view/EventLogTags.logtags b/core/java/android/view/EventLogTags.logtags index f1cd671ef176..f3792930647a 100644 --- a/core/java/android/view/EventLogTags.logtags +++ b/core/java/android/view/EventLogTags.logtags @@ -62,6 +62,9 @@ option java_package android.view # following other view events defined in system/logging/logcat/event.logtags # ViewRoot Draw Events 60004 viewroot_draw_event (window|3),(event|3) +# SurfaceView Events +60005 surfaceview_layout (window|3),(format|1),(width|1),(height|1),(z|1),(sizeFrom|3),(attached|1),(lifecycleStrategy|1),(viewVisible|1) +60006 surfaceview_callback (window|3),(callback|3) # NOTE - the range 1000000-2000000 is reserved for partners and others who diff --git a/core/java/android/view/InputMonitor.java b/core/java/android/view/InputMonitor.java index 4996f5a41c82..2302dc7bd8c8 100644 --- a/core/java/android/view/InputMonitor.java +++ b/core/java/android/view/InputMonitor.java @@ -32,8 +32,11 @@ import com.android.internal.util.DataClass; * registered to monitor that type of event on the targeted display. * * @hide + * @deprecated See {@link android.hardware.input.InputManager#monitorGestureInput(String, int)} + * for more details. */ @DataClass(genToString = true) +@Deprecated public final class InputMonitor implements Parcelable { private static final String TAG = "InputMonitor"; diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 1d70d18ac4c8..fedbe4a65e07 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -49,6 +49,7 @@ import android.os.SystemClock; import android.text.TextUtils; import android.util.ArraySet; import android.util.AttributeSet; +import android.util.EventLog; import android.util.Log; import android.view.SurfaceControl.Transaction; import android.view.accessibility.AccessibilityNodeInfo; @@ -163,6 +164,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private static final boolean DEBUG_POSITION = false; private static final long FORWARD_BACK_KEY_TOLERANCE_MS = 100; + private static final int LOGTAG_SURFACEVIEW_LAYOUT = 60005; + private static final int LOGTAG_SURFACEVIEW_CALLBACK = 60006; @UnsupportedAppUsage( maxTargetSdk = Build.VERSION_CODES.TIRAMISU, @@ -320,6 +323,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private final ConcurrentLinkedQueue<WindowManager.LayoutParams> mEmbeddedWindowParams = new ConcurrentLinkedQueue<>(); + private String mTag = TAG; + private final ISurfaceControlViewHostParent mSurfaceControlViewHostParent = new ISurfaceControlViewHostParent.Stub() { @Override @@ -418,13 +423,26 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall updateSurface(); } + private void setTag() { + String windowName = ""; + ViewRootImpl viewRoot = getViewRootImpl(); + if (viewRoot != null) { + // strip package name + final String[] split = viewRoot.mWindowAttributes.getTitle().toString().split("\\."); + if (split.length > 0) { + windowName = " " + split[split.length - 1]; + } + } + + mTag = "SV[" + System.identityHashCode(this) + windowName + "]"; + } + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - + setTag(); getViewRootImpl().addSurfaceChangedCallback(this); mWindowStopped = false; - mViewVisibility = getVisibility() == VISIBLE; updateRequestedVisibility(); @@ -1146,13 +1164,22 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall + " format=" + formatChanged + " size=" + sizeChanged + " visible=" + visibleChanged + " alpha=" + alphaChanged + " hint=" + hintChanged - + " visible=" + visibleChanged + " left=" + (mWindowSpaceLeft != mLocation[0]) + " top=" + (mWindowSpaceTop != mLocation[1]) + " z=" + relativeZChanged + " attached=" + mAttachedToWindow + " lifecycleStrategy=" + surfaceLifecycleStrategyChanged); + if (creating || formatChanged || sizeChanged || visibleChanged + || layoutSizeChanged || relativeZChanged || !mAttachedToWindow + || surfaceLifecycleStrategyChanged ) { + EventLog.writeEvent(LOGTAG_SURFACEVIEW_LAYOUT, + mTag, mRequestedFormat, myWidth, myHeight, mRequestedSubLayer, + (mRequestedWidth > 0 ? "setFixedSize" : "layout"), + (mAttachedToWindow ? 1 : 0), + mRequestedSurfaceLifecycleStrategy, (mRequestedVisible ? 1 : 0)); + } + try { mVisible = mRequestedVisible; mWindowSpaceLeft = mLocation[0]; @@ -1235,6 +1262,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall mIsCreating = true; if (DEBUG) Log.i(TAG, System.identityHashCode(this) + " " + "visibleChanged -- surfaceCreated"); + EventLog.writeEvent(LOGTAG_SURFACEVIEW_CALLBACK, mTag, + "surfaceCreated"); callbacks = getSurfaceCallbacks(); for (SurfaceHolder.Callback c : callbacks) { c.surfaceCreated(mSurfaceHolder); @@ -1245,6 +1274,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall if (DEBUG) Log.i(TAG, System.identityHashCode(this) + " " + "surfaceChanged -- format=" + mFormat + " w=" + myWidth + " h=" + myHeight); + EventLog.writeEvent(LOGTAG_SURFACEVIEW_CALLBACK, mTag, + "surfaceChanged -- format=" + mFormat + + " w=" + myWidth + " h=" + myHeight); if (callbacks == null) { callbacks = getSurfaceCallbacks(); } @@ -1256,6 +1288,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall if (DEBUG) { Log.i(TAG, System.identityHashCode(this) + " surfaceRedrawNeeded"); } + EventLog.writeEvent(LOGTAG_SURFACEVIEW_CALLBACK, mTag, + "surfaceRedrawNeeded"); + if (callbacks == null) { callbacks = getSurfaceCallbacks(); } @@ -1337,7 +1372,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private void redrawNeededAsync(SurfaceHolder.Callback[] callbacks, Runnable callbacksCollected) { - SurfaceCallbackHelper sch = new SurfaceCallbackHelper(callbacksCollected); + SurfaceCallbackHelper sch = new SurfaceCallbackHelper(callbacksCollected, mTag); sch.dispatchSurfaceRedrawNeededAsync(mSurfaceHolder, callbacks); } @@ -2100,6 +2135,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall if (mSurface.isValid()) { if (DEBUG) Log.i(TAG, System.identityHashCode(this) + " " + "surfaceDestroyed"); + EventLog.writeEvent(LOGTAG_SURFACEVIEW_CALLBACK, mTag, "surfaceDestroyed"); SurfaceHolder.Callback[] callbacks = getSurfaceCallbacks(); for (SurfaceHolder.Callback c : callbacks) { c.surfaceDestroyed(mSurfaceHolder); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index ae051f96fd03..18006bb7866a 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -6387,10 +6387,6 @@ public interface WindowManager extends ViewManager { * The host is likely to be an {@link AttachedSurfaceControl} so the host token can be * retrieved via {@link AttachedSurfaceControl#getInputTransferToken()}. * <p><br> - * Only the window currently receiving touch is allowed to transfer the gesture so if the caller - * attempts to transfer touch gesture from a token that doesn't have touch, it will fail the - * transfer. - * <p><br> * When the host wants to transfer touch gesture to the embedded, it can retrieve the embedded * token via {@link SurfaceControlViewHost.SurfacePackage#getInputTransferToken()} or use the * value returned from either @@ -6414,6 +6410,23 @@ public interface WindowManager extends ViewManager { * arrives, input dispatcher will do a new round of hit testing. So, if the host window is * still the first thing that's being touched, then it will receive the new gesture again. It * will again be up to the host to transfer this new gesture to the embedded. + * <p><br> + * The call can fail for the following reasons: + * <ul> + * <li> + * Caller attempts to transfer touch gesture from a token that doesn't have an active gesture. + * </li> + * <li> + * The gesture is transferred to a token that is not associated with the transferFromToken. For + * example, if the caller transfers to a {@link SurfaceControlViewHost} not attached to the + * host window via {@link SurfaceView#setChildSurfacePackage(SurfacePackage)}. + * </li> + * <li> + * The active gesture completes before the transfer is complete, such as in the case of a + * fling. + * </li> + * </ul> + * <p> * * @param transferFromToken the InputTransferToken for the currently active gesture * @param transferToToken the InputTransferToken to transfer the gesture to. diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index 3fc9ebc7c9fb..a4cea3364998 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -19,6 +19,8 @@ package android.view.accessibility; import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_ENABLE_ACCESSIBILITY_VOLUME; import static android.annotation.SystemApi.Client.MODULE_LIBRARIES; +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE; + import android.Manifest; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; @@ -62,6 +64,7 @@ import android.os.UserHandle; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; +import android.view.Display; import android.view.IWindow; import android.view.SurfaceControl; import android.view.View; @@ -69,6 +72,7 @@ import android.view.accessibility.AccessibilityEvent.EventType; import com.android.internal.R; import com.android.internal.accessibility.common.ShortcutConstants; +import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IntPair; @@ -1565,7 +1569,7 @@ public final class AccessibilityManager { @SystemApi @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) public void performAccessibilityShortcut() { - performAccessibilityShortcut(null); + performAccessibilityShortcut(Display.DEFAULT_DISPLAY, HARDWARE, null); } /** @@ -1577,7 +1581,8 @@ public final class AccessibilityManager { * @hide */ @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) - public void performAccessibilityShortcut(@Nullable String targetName) { + public void performAccessibilityShortcut( + int displayId, @UserShortcutType int shortcutType, @Nullable String targetName) { final IAccessibilityManager service; synchronized (mLock) { service = getServiceLocked(); @@ -1586,7 +1591,7 @@ public final class AccessibilityManager { } } try { - service.performAccessibilityShortcut(targetName); + service.performAccessibilityShortcut(displayId, shortcutType, targetName); } catch (RemoteException re) { Log.e(LOG_TAG, "Error performing accessibility shortcut. ", re); } @@ -1602,7 +1607,7 @@ public final class AccessibilityManager { */ @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) public void enableShortcutsForTargets(boolean enable, - @ShortcutConstants.UserShortcutType int shortcutTypes, @NonNull Set<String> targets, + @UserShortcutType int shortcutTypes, @NonNull Set<String> targets, @UserIdInt int userId) { final IAccessibilityManager service; synchronized (mLock) { @@ -1817,7 +1822,7 @@ public final class AccessibilityManager { @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) @NonNull public List<String> getAccessibilityShortcutTargets( - @ShortcutConstants.UserShortcutType int shortcutType) { + @UserShortcutType int shortcutType) { final IAccessibilityManager service; synchronized (mLock) { service = getServiceLocked(); diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl index cd1131496be0..72a1fe424906 100644 --- a/core/java/android/view/accessibility/IAccessibilityManager.aidl +++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl @@ -92,7 +92,7 @@ interface IAccessibilityManager { void notifyAccessibilityButtonVisibilityChanged(boolean available); @EnforcePermission("MANAGE_ACCESSIBILITY") - void performAccessibilityShortcut(String targetName); + void performAccessibilityShortcut(int displayId, int shortcutType, String targetName); @EnforcePermission("MANAGE_ACCESSIBILITY") List<String> getAccessibilityShortcutTargets(int shortcutType); diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java index 66faa318666d..ec90dd242c36 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java @@ -36,6 +36,7 @@ import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; +import com.android.internal.accessibility.util.ShortcutUtils; import com.android.internal.annotations.VisibleForTesting; import java.util.Set; @@ -67,6 +68,10 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS public AccessibilityTarget(Context context, @UserShortcutType int shortcutType, @AccessibilityFragmentType int fragmentType, boolean isShortcutSwitched, String id, int uid, CharSequence label, Drawable icon, String key) { + if (!isRecognizedShortcutType(shortcutType)) { + throw new IllegalArgumentException( + "Unexpected shortcut type " + ShortcutUtils.convertToKey(shortcutType)); + } mContext = context; mShortcutType = shortcutType; mFragmentType = fragmentType; @@ -97,20 +102,15 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS holder.mStatusView.setVisibility(View.GONE); } + @SuppressLint("MissingPermission") @Override public void onSelected() { final AccessibilityManager am = getContext().getSystemService(AccessibilityManager.class); - switch (getShortcutType()) { - case SOFTWARE: - am.notifyAccessibilityButtonClicked(getContext().getDisplayId(), getId()); - return; - case HARDWARE: - am.performAccessibilityShortcut(getId()); - return; - default: - throw new IllegalStateException("Unexpected shortcut type"); + if (am == null) { + return; } + am.performAccessibilityShortcut(getContext().getDisplayId(), mShortcutType, getId()); } @SuppressLint("MissingPermission") @@ -188,4 +188,15 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS public String getKey() { return mKey; } + + /** + * Determines if the provided shortcut type is valid for use with AccessibilityTargets. + * @param shortcutType shortcut type to check. + * @return {@code true} if the shortcut type can be used, {@code false} otherwise. + */ + @VisibleForTesting + public static boolean isRecognizedShortcutType(@UserShortcutType int shortcutType) { + int mask = SOFTWARE | HARDWARE; + return (shortcutType != 0 && (shortcutType & mask) == shortcutType); + } } diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java index e523ab066074..4ccdf79da358 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java @@ -41,6 +41,7 @@ import android.view.accessibility.AccessibilityManager; import com.android.internal.R; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; +import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Collections; @@ -159,21 +160,32 @@ public final class AccessibilityTargetHelper { final List<AccessibilityTarget> targets = new ArrayList<>(installedServices.size()); for (AccessibilityServiceInfo info : installedServices) { - final int targetSdk = - info.getResolveInfo().serviceInfo.applicationInfo.targetSdkVersion; - final boolean hasRequestAccessibilityButtonFlag = - (info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; - if ((targetSdk <= Build.VERSION_CODES.Q) && !hasRequestAccessibilityButtonFlag - && (shortcutType == SOFTWARE)) { - continue; + if (isValidServiceTarget(info, shortcutType)) { + targets.add(createAccessibilityServiceTarget(context, shortcutType, info)); } - - targets.add(createAccessibilityServiceTarget(context, shortcutType, info)); } return targets; } + /** + * Check for maintaining compatibility on prior versions. + * Determines if a given service should be accumulated in a list of installed services. + * @param info service info to check. + * @param shortcutType type of shortcut to accumulate a list for. + * @return {@code true} if the service should be added (always true past version Q), + * otherwise {@code false}. + */ + @VisibleForTesting + public static boolean isValidServiceTarget( + AccessibilityServiceInfo info, @UserShortcutType int shortcutType) { + final boolean hasRequestAccessibilityButtonFlag = + (info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; + return (info.getResolveInfo().serviceInfo.applicationInfo.targetSdkVersion + > Build.VERSION_CODES.Q) || hasRequestAccessibilityButtonFlag + || shortcutType != SOFTWARE; + } + private static List<AccessibilityTarget> getAccessibilityActivityTargets(Context context, @UserShortcutType int shortcutType) { final AccessibilityManager am = (AccessibilityManager) context.getSystemService( diff --git a/core/java/com/android/internal/view/SurfaceCallbackHelper.java b/core/java/com/android/internal/view/SurfaceCallbackHelper.java index 507b673ec279..3fd51206e891 100644 --- a/core/java/com/android/internal/view/SurfaceCallbackHelper.java +++ b/core/java/com/android/internal/view/SurfaceCallbackHelper.java @@ -16,11 +16,13 @@ package com.android.internal.view; -import android.os.RemoteException; -import android.view.Surface; +import android.util.EventLog; import android.view.SurfaceHolder; public class SurfaceCallbackHelper { + private static final int LOGTAG_SURFACEVIEW_CALLBACK = 60006; + private final String mTag; + private boolean mSurfaceRedrawImplemented; Runnable mRunnable; int mFinishDrawingCollected = 0; @@ -35,12 +37,23 @@ public class SurfaceCallbackHelper { return; } mRunnable.run(); + if (mSurfaceRedrawImplemented && mTag != null) { + EventLog.writeEvent(LOGTAG_SURFACEVIEW_CALLBACK, mTag, + "surfaceRedrawNeeded implemented"); + } } } }; public SurfaceCallbackHelper(Runnable callbacksCollected) { + // skip logging surfaceRedrawNeeded calls + this(callbacksCollected, null); + } + + public SurfaceCallbackHelper(Runnable callbacksCollected, String tag) { mRunnable = callbacksCollected; + mTag = tag; + mSurfaceRedrawImplemented = false; } public void dispatchSurfaceRedrawNeededAsync(SurfaceHolder holder, SurfaceHolder.Callback callbacks[]) { @@ -58,6 +71,7 @@ public class SurfaceCallbackHelper { if (c instanceof SurfaceHolder.Callback2) { ((SurfaceHolder.Callback2) c).surfaceRedrawNeededAsync( holder, mFinishDrawingRunnable); + mSurfaceRedrawImplemented = true; } else { mFinishDrawingRunnable.run(); } diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index 8f7026859898..7410468199b8 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -134,10 +134,15 @@ static jlong nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFla String8 label(labelChars); env->ReleaseStringUTFChars(labelStr, labelChars); + errno = 0; sqlite3* db; int err = sqlite3_open_v2(path.c_str(), &db, sqliteFlags, NULL); if (err != SQLITE_OK) { - throw_sqlite3_exception_errcode(env, err, "Could not open database"); + if (errno == 0) { + throw_sqlite3_exception(env, db, "could not open database"); + } else { + throw_sqlite3_exception(env, db, strerror(errno)); + } return 0; } diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteCantOpenDatabaseExceptionTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteCantOpenDatabaseExceptionTest.java new file mode 100644 index 000000000000..09c380a49920 --- /dev/null +++ b/core/tests/coretests/src/android/database/sqlite/SQLiteCantOpenDatabaseExceptionTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.database.sqlite; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import android.content.Context; +import android.database.sqlite.SQLiteCantOpenDatabaseException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.OpenParams; +import android.util.Log; + +import androidx.test.filters.SmallTest; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.File; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class SQLiteCantOpenDatabaseExceptionTest { + private static final String TAG = "SQLiteCantOpenDatabaseExceptionTest"; + + private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext(); + + private File getDatabaseFile(String name) { + mContext.deleteDatabase(name); + + // getDatabasePath() doesn't like a filename with a / in it, so we can't use it directly. + return new File(mContext.getDatabasePath("a").getParentFile(), name); + } + + private void callWithExpectedMessage(File file, String expectedMessagePattern) { + try { + SQLiteDatabase.openDatabase(file, new OpenParams.Builder().build()); + fail("SQLiteCantOpenDatabaseException was not thrown"); + } catch (SQLiteCantOpenDatabaseException e) { + Log.i(TAG, "Caught expected exception: " + e.getMessage()); + assertTrue(e.getMessage().matches(expectedMessagePattern)); + } + } + + /** DB's directory doesn't exist. */ + @Test + public void testDirectoryDoesNotExist() { + final File file = getDatabaseFile("nonexisitentdir/mydb.db"); + + callWithExpectedMessage(file, ".*: Directory .* doesn't exist"); + } + + /** File doesn't exist */ + @Test + public void testFileDoesNotExist() { + final File file = getDatabaseFile("mydb.db"); + + callWithExpectedMessage(file, ".*: File .* doesn't exist"); + } + + /** File exists, but not readable. */ + @Test + public void testFileNotReadable() { + final File file = getDatabaseFile("mydb.db"); + + SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(file, null); + db.close(); + + file.setReadable(false); + + callWithExpectedMessage(file, ".*: File .* not readable"); + } + + /** Directory with the given name exists already. */ + @Test + public void testPathIsADirectory() { + final File file = getDatabaseFile("mydb.db"); + + file.mkdirs(); + + callWithExpectedMessage(file, ".*: Path .* is a directory"); + } +} diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java index 8071d3dff619..24d27c484912 100644 --- a/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java +++ b/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java @@ -27,7 +27,6 @@ import android.content.Context; import android.database.Cursor; import android.database.DatabaseUtils; import android.os.SystemClock; -import android.test.AndroidTestCase; import android.util.Log; import androidx.test.filters.SmallTest; diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java index 1013bf50ab94..ce36ee06bb38 100644 --- a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java +++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java @@ -20,6 +20,7 @@ import static com.android.internal.accessibility.AccessibilityShortcutController import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_TILE_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_TILE_COMPONENT_NAME; +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE; import static com.google.common.truth.Truth.assertThat; @@ -31,6 +32,8 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.doThrow; @@ -48,12 +51,14 @@ import android.graphics.drawable.Icon; import android.os.Bundle; import android.os.RemoteException; import android.os.UserHandle; +import android.view.Display; import androidx.annotation.NonNull; import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import com.android.internal.util.IntPair; import com.android.server.accessibility.test.MessageCapturingHandler; @@ -321,7 +326,7 @@ public class AccessibilityManagerTest { Throwable rethrownException = assertThrows(RuntimeException.class, () -> manager.enableShortcutsForTargets( /* enable= */ false, - UserShortcutType.HARDWARE, + HARDWARE, Set.of(DALTONIZER_COMPONENT_NAME.flattenToString()), UserHandle.USER_CURRENT )); @@ -331,7 +336,7 @@ public class AccessibilityManagerTest { @Test public void enableShortcutsForTargets_verifyServiceMethodCalled() throws Exception { AccessibilityManager manager = createManager(WITH_A11Y_ENABLED); - int shortcutTypes = UserShortcutType.HARDWARE | UserShortcutType.TRIPLETAP; + int shortcutTypes = HARDWARE | UserShortcutType.TRIPLETAP; manager.enableShortcutsForTargets( /* enable= */ false, @@ -348,6 +353,30 @@ public class AccessibilityManagerTest { ); } + @Test + public void performAccessibilityShortcut_callToService_defaultTypeIsHardware() + throws Exception { + AccessibilityManager manager = createManager(WITH_A11Y_ENABLED); + + manager.performAccessibilityShortcut(); + + verify(mMockService).performAccessibilityShortcut( + eq(Display.DEFAULT_DISPLAY), eq(HARDWARE), isNull()); + } + + @Test + public void performAccessibilityShortcut_callToService_typeParameterMatches() throws Exception { + AccessibilityManager manager = createManager(WITH_A11Y_ENABLED); + int display = Display.DEFAULT_DISPLAY; + String name = LABEL; + + for (int type: ShortcutConstants.USER_SHORTCUT_TYPES) { + manager.performAccessibilityShortcut(display, type, name); + + verify(mMockService).performAccessibilityShortcut(display, type, name); + } + } + private class MyAccessibilityProxy extends AccessibilityDisplayProxy { MyAccessibilityProxy(int displayId, @NonNull List<AccessibilityServiceInfo> serviceInfos) { diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java index 6b9dbbaaf484..f78bc9294357 100644 --- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java +++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java @@ -71,6 +71,7 @@ import android.provider.Settings; import android.speech.tts.TextToSpeech; import android.speech.tts.Voice; import android.test.mock.MockContentResolver; +import android.view.Display; import android.view.Window; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; @@ -378,7 +379,8 @@ public class AccessibilityShortcutControllerTest { verify(mAlertDialog).show(); verify(mAccessibilityManagerService, atLeastOnce()).getInstalledAccessibilityServiceList( anyInt()); - verify(mAccessibilityManagerService, times(0)).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService, times(0)).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); verify(mFrameworkObjectProvider, times(0)).getTextToSpeech(any(), any()); } @@ -397,7 +399,8 @@ public class AccessibilityShortcutControllerTest { // assertEquals(WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS, // mLayoutParams.privateFlags // & WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS); - verify(mAccessibilityManagerService, times(1)).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService, times(1)).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -630,7 +633,8 @@ public class AccessibilityShortcutControllerTest { verifyZeroInteractions(mAlertDialogBuilder, mAlertDialog); verify(mToast).show(); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -649,7 +653,8 @@ public class AccessibilityShortcutControllerTest { verify(mAccessibilityManagerService).enableShortcutsForTargets( eq(true), eq(HARDWARE), mListCaptor.capture(), anyInt()); assertThat(mListCaptor.getValue()).containsExactly(SERVICE_NAME_STRING); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -666,7 +671,8 @@ public class AccessibilityShortcutControllerTest { assertThat(Settings.Secure.getString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)).isEqualTo(SERVICE_NAME_STRING); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -726,7 +732,8 @@ public class AccessibilityShortcutControllerTest { Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, AccessibilityShortcutController.DialogStatus.SHOWN); getController().performAccessibilityShortcut(); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -739,7 +746,8 @@ public class AccessibilityShortcutControllerTest { getController().performAccessibilityShortcut(); verifyZeroInteractions(mToast); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test @@ -755,7 +763,8 @@ public class AccessibilityShortcutControllerTest { getController().performAccessibilityShortcut(); verifyZeroInteractions(mToast); - verify(mAccessibilityManagerService).performAccessibilityShortcut(null); + verify(mAccessibilityManagerService).performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, null); } @Test diff --git a/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetHelperTest.java b/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetHelperTest.java new file mode 100644 index 000000000000..64be97d63f1b --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetHelperTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 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.internal.accessibility.dialog; + +import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT; +import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON; + +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE; +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE; + +import static com.google.common.truth.Truth.assertThat; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.os.Build; + +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + + +@RunWith(AndroidJUnit4.class) +public class AccessibilityTargetHelperTest { + @Test + public void isValidServiceTarget_legacyService_hardware_isTrue() { + assertThat(AccessibilityTargetHelper.isValidServiceTarget(generateServiceInfo( + /* flags = */ 0, /* targetSdk = */ 0), HARDWARE)).isTrue(); + } + + @Test + public void isValidServiceTarget_legacyService_software_requestsButton_isTrue() { + assertThat(AccessibilityTargetHelper.isValidServiceTarget(generateServiceInfo( + FLAG_REQUEST_ACCESSIBILITY_BUTTON, /* targetSdk = */ 0), SOFTWARE)).isTrue(); + } + + @Test + public void isValidServiceTarget_legacyService_software_isFalse() { + assertThat(AccessibilityTargetHelper.isValidServiceTarget(generateServiceInfo( + /* flags = */ 0, /* targetSdk = */ 0), SOFTWARE)).isFalse(); + } + + @Test + public void isValidServiceTarget_modernService_isTrue() { + assertThat(AccessibilityTargetHelper.isValidServiceTarget(generateServiceInfo( + /* flags = */ 0, Build.VERSION_CODES.Q + 1), DEFAULT)).isTrue(); + } + + private AccessibilityServiceInfo generateServiceInfo(int flags, int targetSdk) { + AccessibilityServiceInfo info = new AccessibilityServiceInfo(); + info.flags = flags; + info.setResolveInfo(new ResolveInfo()); + info.getResolveInfo().serviceInfo = new ServiceInfo(); + info.getResolveInfo().serviceInfo.applicationInfo = new ApplicationInfo(); + info.getResolveInfo().serviceInfo.applicationInfo.targetSdkVersion = targetSdk; + return info; + } +} diff --git a/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetTest.java b/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetTest.java new file mode 100644 index 000000000000..389b677587b0 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/accessibility/dialog/AccessibilityTargetTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 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.internal.accessibility.dialog; + +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE; +import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE; + +import static com.google.common.truth.Truth.assertThat; + +import androidx.test.runner.AndroidJUnit4; + +import com.android.internal.accessibility.common.ShortcutConstants; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.stream.IntStream; + +@RunWith(AndroidJUnit4.class) +public class AccessibilityTargetTest { + private static final int[] EXPECTED_TYPES = { HARDWARE, SOFTWARE }; + + @Test + public void isRecognizedShortcutType_expectedType_isTrue() { + for (int type : EXPECTED_TYPES) { + assertThat(AccessibilityTarget.isRecognizedShortcutType(type)).isTrue(); + } + } + + @Test + public void isRecognizedShortcutType_notExpectedType_isFalse() { + for (int type: ShortcutConstants.USER_SHORTCUT_TYPES) { + if (IntStream.of(EXPECTED_TYPES).noneMatch(x -> x == type)) { + assertThat(AccessibilityTarget.isRecognizedShortcutType(type)).isFalse(); + } + } + } +} diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java index 974539f23b80..aa2d6f09508f 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java @@ -241,16 +241,16 @@ public class TvPipGravityTest extends ShellTestCase { @Test public void updateGravity_move_expanded_valid() { - mTvPipBoundsState.setTvPipExpanded(true); - // Vertical expanded PiP. mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true); + mTvPipBoundsState.setTvPipExpanded(true); mTvPipBoundsState.setTvPipGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT); moveAndCheckGravity(KEYCODE_DPAD_LEFT, Gravity.CENTER_VERTICAL | Gravity.LEFT, true); moveAndCheckGravity(KEYCODE_DPAD_RIGHT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, true); // Horizontal expanded PiP. mTvPipBoundsState.setDesiredTvExpandedAspectRatio(HORIZONTAL_EXPANDED_ASPECT_RATIO, true); + mTvPipBoundsState.setTvPipExpanded(true); mTvPipBoundsState.setTvPipGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); moveAndCheckGravity(KEYCODE_DPAD_UP, Gravity.TOP | Gravity.CENTER_HORIZONTAL, true); moveAndCheckGravity(KEYCODE_DPAD_DOWN, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, true); @@ -281,10 +281,9 @@ public class TvPipGravityTest extends ShellTestCase { @Test public void updateGravity_move_expanded_invalid() { - mTvPipBoundsState.setTvPipExpanded(true); - // Vertical expanded PiP. mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true); + mTvPipBoundsState.setTvPipExpanded(true); mTvPipBoundsState.setTvPipGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT); moveAndCheckGravity(KEYCODE_DPAD_RIGHT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, false); moveAndCheckGravity(KEYCODE_DPAD_UP, Gravity.CENTER_VERTICAL | Gravity.RIGHT, false); @@ -297,6 +296,7 @@ public class TvPipGravityTest extends ShellTestCase { // Horizontal expanded PiP. mTvPipBoundsState.setDesiredTvExpandedAspectRatio(HORIZONTAL_EXPANDED_ASPECT_RATIO, true); + mTvPipBoundsState.setTvPipExpanded(true); mTvPipBoundsState.setTvPipGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); moveAndCheckGravity(KEYCODE_DPAD_DOWN, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, false); moveAndCheckGravity(KEYCODE_DPAD_LEFT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, false); diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java index 0ab33b71178f..98a72909b276 100644 --- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java +++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java @@ -53,6 +53,12 @@ public class LottieColorUtils { ".grey900", R.color.settingslib_color_grey50); map.put( + ".red100", + R.color.settingslib_color_red500); + map.put( + ".red200", + R.color.settingslib_color_red500); + map.put( ".red400", R.color.settingslib_color_red600); map.put( @@ -65,14 +71,14 @@ public class LottieColorUtils { ".blue400", R.color.settingslib_color_blue600); map.put( - ".green400", - R.color.settingslib_color_green600); + ".green100", + R.color.settingslib_color_green500); map.put( ".green200", R.color.settingslib_color_green500); map.put( - ".red200", - R.color.settingslib_color_red500); + ".green400", + R.color.settingslib_color_green600); map.put( ".cream", R.color.settingslib_color_charcoal); diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 9d891c35c610..90885ab51539 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -1021,13 +1021,6 @@ flag { } flag { - name: "glanceable_hub_fullscreen_swipe" - namespace: "systemui" - description: "Increase swipe area for gestures to bring in glanceable hub" - bug: "339665673" -} - -flag { name: "glanceable_hub_shortcut_button" namespace: "systemui" description: "Shows a button over the dream and lock screen to open the glanceable hub" diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt index d0c40041ee6a..2ed0f6c89ebd 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt @@ -32,15 +32,12 @@ import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.compose.animation.scene.CommunalSwipeDetector -import com.android.compose.animation.scene.DefaultSwipeDetector import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.ElementMatcher -import com.android.compose.animation.scene.FixedSizeEdgeDetector import com.android.compose.animation.scene.LowestZIndexScenePicker import com.android.compose.animation.scene.MutableSceneTransitionLayoutState import com.android.compose.animation.scene.SceneKey @@ -52,7 +49,6 @@ import com.android.compose.animation.scene.observableTransitionState import com.android.compose.animation.scene.transitions import com.android.compose.theme.LocalAndroidColorScheme import com.android.systemui.Flags -import com.android.systemui.Flags.glanceableHubFullscreenSwipe import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.communal.shared.model.CommunalScenes import com.android.systemui.communal.shared.model.CommunalTransitionKeys @@ -61,7 +57,6 @@ import com.android.systemui.communal.ui.compose.extensions.allowGestures import com.android.systemui.communal.ui.viewmodel.CommunalViewModel import com.android.systemui.communal.util.CommunalColors import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor.Companion.TO_GONE_DURATION -import com.android.systemui.res.R import com.android.systemui.scene.shared.model.SceneDataSourceDelegator import com.android.systemui.scene.ui.composable.SceneTransitionLayoutDataSource import kotlin.time.DurationUnit @@ -191,25 +186,11 @@ fun CommunalContainer( onDispose { viewModel.setTransitionState(null) } } - val swipeSourceDetector = - if (glanceableHubFullscreenSwipe()) { - detector - } else { - FixedSizeEdgeDetector(dimensionResource(id = R.dimen.communal_gesture_initiation_width)) - } - - val swipeDetector = - if (glanceableHubFullscreenSwipe()) { - detector - } else { - DefaultSwipeDetector - } - SceneTransitionLayout( state = state, modifier = modifier.fillMaxSize(), - swipeSourceDetector = swipeSourceDetector, - swipeDetector = swipeDetector, + swipeSourceDetector = detector, + swipeDetector = detector, ) { scene( CommunalScenes.Blank, diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt index 69124c1f6dad..377b02bfd86f 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt @@ -1088,8 +1088,8 @@ private inline fun <T> computeValue( // range. val directionSign = if (transition.isUpOrLeft) -1 else 1 val isToScene = overscroll.scene == transition.toScene - val overscrollProgress = transition.progress.let { if (isToScene) it - 1f else it } - val progress = directionSign * overscrollProgress + val linearProgress = transition.progress.let { if (isToScene) it - 1f else it } + val progress = directionSign * overscroll.progressConverter(linearProgress) val rangeProgress = propertySpec.range?.progress(progress) ?: progress // Interpolate between the value at rest and the over scrolled value. diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitions.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitions.kt index 0f6a1d276578..e30dd356f1be 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitions.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitions.kt @@ -48,7 +48,8 @@ internal constructor( ) { private val transitionCache = mutableMapOf< - SceneKey, MutableMap<SceneKey, MutableMap<TransitionKey?, TransitionSpecImpl>> + SceneKey, + MutableMap<SceneKey, MutableMap<TransitionKey?, TransitionSpecImpl>> >() private val overscrollCache = @@ -87,8 +88,7 @@ internal constructor( return transition(from, to, key) { (it.from == to && it.to == null) || (it.to == from && it.from == null) } - ?.reversed() - ?: defaultTransition(from, to) + ?.reversed() ?: defaultTransition(from, to) } private fun transition( @@ -257,12 +257,24 @@ interface OverscrollSpec { /** The [TransformationSpec] associated to this [OverscrollSpec]. */ val transformationSpec: TransformationSpec + + /** + * Function that takes a linear overscroll progress value ranging from 0 to +/- infinity and + * outputs the desired **overscroll progress value**. + * + * When the progress value is: + * - 0, the user is not overscrolling. + * - 1, the user overscrolled by exactly the [OverscrollBuilder.distance]. + * - Greater than 1, the user overscrolled more than the [OverscrollBuilder.distance]. + */ + val progressConverter: (Float) -> Float } internal class OverscrollSpecImpl( override val scene: SceneKey, override val orientation: Orientation, override val transformationSpec: TransformationSpecImpl, + override val progressConverter: (Float) -> Float, ) : OverscrollSpec /** diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt index 465a410a6bdb..89ed8d6d37e2 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt @@ -185,6 +185,17 @@ interface TransitionBuilder : BaseTransitionBuilder { @TransitionDsl interface OverscrollBuilder : BaseTransitionBuilder { + /** + * Function that takes a linear overscroll progress value ranging from 0 to +/- infinity and + * outputs the desired **overscroll progress value**. + * + * When the progress value is: + * - 0, the user is not overscrolling. + * - 1, the user overscrolled by exactly the [distance]. + * - Greater than 1, the user overscrolled more than the [distance]. + */ + var progressConverter: (Float) -> Float + /** Translate the element(s) matching [matcher] by ([x], [y]) pixels. */ fun translate( matcher: ElementMatcher, diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDslImpl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDslImpl.kt index 802ab1f2eebb..1e67aa947559 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDslImpl.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDslImpl.kt @@ -81,16 +81,20 @@ private class SceneTransitionsBuilderImpl : SceneTransitionsBuilder { orientation: Orientation, builder: OverscrollBuilder.() -> Unit ): OverscrollSpec { - fun transformationSpec(): TransformationSpecImpl { - val impl = OverscrollBuilderImpl().apply(builder) - return TransformationSpecImpl( - progressSpec = snap(), - swipeSpec = null, - distance = impl.distance, - transformations = impl.transformations, + val impl = OverscrollBuilderImpl().apply(builder) + val spec = + OverscrollSpecImpl( + scene = scene, + orientation = orientation, + transformationSpec = + TransformationSpecImpl( + progressSpec = snap(), + swipeSpec = null, + distance = impl.distance, + transformations = impl.transformations, + ), + progressConverter = impl.progressConverter ) - } - val spec = OverscrollSpecImpl(scene, orientation, transformationSpec()) transitionOverscrollSpecs.add(spec) return spec } @@ -231,6 +235,8 @@ internal class TransitionBuilderImpl : BaseTransitionBuilderImpl(), TransitionBu } internal open class OverscrollBuilderImpl : BaseTransitionBuilderImpl(), OverscrollBuilder { + override var progressConverter: (Float) -> Float = { it } + override fun translate( matcher: ElementMatcher, x: OverscrollScope.() -> Float, diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt index fcdf76ef8737..2de6faaccca2 100644 --- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt +++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt @@ -889,6 +889,63 @@ class ElementTest { } @Test + fun elementTransitionWithDistanceDuringOverscrollWithProgressConverter() { + val layoutWidth = 200.dp + val layoutHeight = 400.dp + var animatedFloat = 0f + val state = + setupOverscrollScenario( + layoutWidth = layoutWidth, + layoutHeight = layoutHeight, + sceneTransitions = { + overscroll(SceneB, Orientation.Vertical) { + // Overscroll progress will be halved + progressConverter = { it / 2f } + + // On overscroll 100% -> Foo should translate by layoutHeight + translate(TestElements.Foo, y = { absoluteDistance }) + } + }, + firstScroll = 1f, // 100% scroll + animatedFloatRange = 0f..100f, + onAnimatedFloat = { animatedFloat = it }, + ) + + val fooElement = rule.onNodeWithTag(TestElements.Foo.testTag) + fooElement.assertTopPositionInRootIsEqualTo(0.dp) + assertThat(animatedFloat).isEqualTo(100f) + + rule.onRoot().performTouchInput { + // Scroll another 100% + moveBy(Offset(0f, layoutHeight.toPx()), delayMillis = 1_000) + } + + val transition = assertThat(state.transitionState).isTransition() + assertThat(animatedFloat).isEqualTo(100f) + + // Scroll 200% (100% scroll + 100% overscroll) + assertThat(transition).hasProgress(2f) + assertThat(transition).hasOverscrollSpec() + + // Overscroll progress is halved, we are at 50% of the overscroll progress. + fooElement.assertTopPositionInRootIsEqualTo(layoutHeight * 0.5f) + assertThat(animatedFloat).isEqualTo(100f) + + rule.onRoot().performTouchInput { + // Scroll another 100% + moveBy(Offset(0f, layoutHeight.toPx()), delayMillis = 1_000) + } + + // Scroll 300% (100% scroll + 200% overscroll) + assertThat(transition).hasProgress(3f) + assertThat(transition).hasOverscrollSpec() + + // Overscroll progress is halved, we are at 100% of the overscroll progress. + fooElement.assertTopPositionInRootIsEqualTo(layoutHeight) + assertThat(animatedFloat).isEqualTo(100f) + } + + @Test fun elementTransitionWithDistanceDuringOverscrollBouncing() { val layoutWidth = 200.dp val layoutHeight = 400.dp diff --git a/packages/SystemUI/res/drawable/face_dialog_dark_to_checkmark.xml b/packages/SystemUI/res/drawable/face_dialog_dark_to_checkmark.xml deleted file mode 100644 index fb30249d1351..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_dark_to_checkmark.xml +++ /dev/null @@ -1,637 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - ~ Copyright (C) 2018 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 - --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group - android:name="_R_G_L_0_G_N_2_T_0" - android:translateX="30" - android:translateY="30"> - <group - android:name="_R_G_L_0_G" - android:translateX="-30" - android:translateY="-30"> - <group - android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0" - android:scaleX="0.08" - android:scaleY="0.08" - android:translateX="30.1" - android:translateY="30.083"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:fillAlpha="0" - android:fillColor="@color/biometric_dialog_face_checkmark" - android:fillType="nonZero" - android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 " - android:trimPathStart="0" - android:trimPathEnd="0" - android:trimPathOffset="0" /> - </group> - <group - android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0" - android:scaleX="0.08" - android:scaleY="0.08" - android:translateX="30.1" - android:translateY="30.083"> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M-116 -16.5 C-116,-16.5 -31.25,68.5 -31.25,68.5 C-31.25,68.5 108.75,-71.5 108.75,-71.5 " - android:strokeWidth="20" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_face_checkmark" - android:trimPathStart="0" - android:trimPathEnd="0" - android:trimPathOffset="0" /> - </group> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_face_checkmark" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <group - android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0" - android:pivotX="1.05" - android:pivotY="-9.891" - android:scaleX="1" - android:scaleY="1" - android:translateX="29.044" - android:translateY="41.647"> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:pathData=" M4.71 1.1 C3.71,2.12 2.32,2.75 0.79,2.75 C-2.25,2.75 -4.7,0.29 -4.7,-2.75 " - android:strokeWidth="2" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - </group> - <group - android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="41.1" - android:translateY="23.8"> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="18.6" - android:translateY="23.8"> - <path - android:name="_R_G_L_0_G_D_5_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="30.727" - android:translateY="31.703"> - <path - android:name="_R_G_L_0_G_D_6_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " /> - </group> - </group> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="33" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="0.08" - android:valueTo="0.08" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="33" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="0.08" - android:valueTo="0.08" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:propertyName="scaleX" - android:startOffset="33" - android:valueFrom="0.08" - android:valueTo="0.12789" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:propertyName="scaleY" - android:startOffset="33" - android:valueFrom="0.08" - android:valueTo="0.12789" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="100" - android:propertyName="scaleX" - android:startOffset="200" - android:valueFrom="0.12789" - android:valueTo="0.12241" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="100" - android:propertyName="scaleY" - android:startOffset="200" - android:valueFrom="0.12789" - android:valueTo="0.12241" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleX" - android:startOffset="300" - android:valueFrom="0.12241" - android:valueTo="0.125" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleY" - android:startOffset="300" - android:valueFrom="0.12241" - android:valueTo="0.125" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="33" - android:propertyName="trimPathEnd" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="233" - android:propertyName="trimPathEnd" - android:startOffset="33" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="33" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="0.08" - android:valueTo="0.08" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="33" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="0.08" - android:valueTo="0.08" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:propertyName="scaleX" - android:startOffset="33" - android:valueFrom="0.08" - android:valueTo="0.12789" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:propertyName="scaleY" - android:startOffset="33" - android:valueFrom="0.08" - android:valueTo="0.12789" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.537,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="100" - android:propertyName="scaleX" - android:startOffset="200" - android:valueFrom="0.12789" - android:valueTo="0.12241" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="100" - android:propertyName="scaleY" - android:startOffset="200" - android:valueFrom="0.12789" - android:valueTo="0.12241" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.441,0 0.533,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleX" - android:startOffset="300" - android:valueFrom="0.12241" - android:valueTo="0.125" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleY" - android:startOffset="300" - android:valueFrom="0.12241" - android:valueTo="0.125" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.424,0 0.486,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="33" - android:propertyName="trimPathEnd" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="233" - android:propertyName="trimPathEnd" - android:startOffset="33" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.292,0 0.155,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:propertyName="strokeColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_accent" - android:valueTo="@color/biometric_dialog_face_checkmark" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="strokeColor" - android:startOffset="67" - android:valueFrom="@color/biometric_dialog_accent" - android:valueTo="@color/biometric_dialog_face_checkmark" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.65" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.65" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="trimPathStart" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="trimPathEnd" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="83" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_5_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_5_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="83" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_6_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_6_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="83" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.287,0.12 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="383" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_dark_to_error.xml b/packages/SystemUI/res/drawable/face_dialog_dark_to_error.xml deleted file mode 100644 index 0c05019bf199..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_dark_to_error.xml +++ /dev/null @@ -1,473 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - ~ Copyright (C) 2018 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 - --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group - android:name="_R_G_L_0_G_N_1_T_0" - android:translateX="30" - android:translateY="30"> - <group - android:name="_R_G_L_0_G" - android:translateX="-30" - android:translateY="-30"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_gray" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:strokeWidth="2" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_gray" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <group - android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="41.1" - android:translateY="23.8"> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="18.6" - android:translateY="23.8"> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0" - android:translateX="30.3" - android:translateY="31.45"> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " /> - </group> - </group> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="strokeColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="strokeColor" - android:startOffset="50" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="strokeColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="strokeColor" - android:startOffset="50" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="strokeWidth" - android:startOffset="0" - android:valueFrom="2" - android:valueTo="2.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="pathData" - android:startOffset="0" - android:valueFrom="M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:valueTo="M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="trimPathStart" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0.34" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="trimPathEnd" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5700000000000001" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillAlpha" - android:startOffset="50" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:pathData="M 41.1,23.8C 40.547981774806985,23.08834635019302 38.34001822519301,20.24165364980698 37.788,19.53" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillAlpha" - android:startOffset="50" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:pathData="M 18.6,23.8C 19.16757813692093,23.08502601385117 21.43742186307907,20.224973986148832 22.005,19.51" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="67" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.999,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="fillColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillColor" - android:startOffset="50" - android:valueFrom="@color/biometric_dialog_gray" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:pathData="M 30.3,31.45C 30.3,31.07740886211395 30.3,31.82259113788605 30.3,31.45" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="150" - android:pathData="M 30.3,31.45C 30.3,31.07740886211395 30.3,29.58759113788605 30.3,29.215" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="67"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="67" - android:propertyName="pathData" - android:startOffset="0" - android:valueFrom="M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " - android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="150" - android:propertyName="pathData" - android:startOffset="67" - android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c " - android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-13.15 -1.5,-13.15 C-1.5,-13.15 0.9,-13.15 0.9,-13.15 C0.9,-13.15 0.9,3.25 0.9,3.25c " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="100" - android:propertyName="pathData" - android:startOffset="217" - android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-13.15 -1.5,-13.15 C-1.5,-13.15 0.9,-13.15 0.9,-13.15 C0.9,-13.15 0.9,3.25 0.9,3.25c " - android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_error_to_idle.xml b/packages/SystemUI/res/drawable/face_dialog_error_to_idle.xml deleted file mode 100644 index d3cee25a2146..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_error_to_idle.xml +++ /dev/null @@ -1,509 +0,0 @@ -<!-- - ~ Copyright (C) 2019 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 - --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group android:name="_R_G_L_0_G"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_error" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_error" - android:trimPathStart="0.34" - android:trimPathEnd="0.5700000000000001" - android:trimPathOffset="0" /> - <group - android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0" - android:scaleX="0.3" - android:scaleY="0.3" - android:translateX="37.788" - android:translateY="19.53"> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="0" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.1,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0" - android:scaleX="0.3" - android:scaleY="0.3" - android:translateX="22.005" - android:translateY="19.51"> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="0" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <group - android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0" - android:translateX="30.3" - android:translateY="29.215"> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_error" - android:fillType="nonZero" - android:pathData=" M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c " /> - </group> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="strokeColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="strokeColor" - android:startOffset="83" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="strokeColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="strokeColor" - android:startOffset="83" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="strokeWidth" - android:startOffset="0" - android:valueFrom="2.5" - android:valueTo="2" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="pathData" - android:startOffset="0" - android:valueFrom="M34.78 38.76 C33.83,38.75 31.54,38.75 30.01,38.75 C26.97,38.75 26.14,38.75 24.3,38.76 " - android:valueTo="M33.75 42.75 C32.75,43.76 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="trimPathStart" - android:startOffset="0" - android:valueFrom="0.34" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="217" - android:propertyName="trimPathEnd" - android:startOffset="0" - android:valueFrom="0.5700000000000001" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillAlpha" - android:startOffset="83" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:pathData="M 37.788,19.53C 38.3400184636116,20.241653709411622 37.235981536388394,18.81834629058838 37.788,19.53" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:pathData="M 37.788,19.53C 38.3400184636116,20.241653709411622 40.5479815363884,23.08834629058838 41.1,23.8" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="50"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="0.3" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="50" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="0.3" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="117" - android:propertyName="scaleX" - android:startOffset="50" - android:valueFrom="0.3" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="117" - android:propertyName="scaleY" - android:startOffset="50" - android:valueFrom="0.3" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillAlpha" - android:startOffset="83" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:pathData="M 22.005,19.51C 21.43742198228836,20.224974105358122 22.57257801771164,18.79502589464188 22.005,19.51" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="167" - android:pathData="M 22.005,19.51C 21.43742198228836,20.224974105358122 19.16757801771164,23.08502589464188 18.6,23.8" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="50"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="50" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="0.3" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="50" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="0.3" - android:valueTo="0.3" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="117" - android:propertyName="scaleX" - android:startOffset="50" - android:valueFrom="0.3" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="117" - android:propertyName="scaleY" - android:startOffset="50" - android:valueFrom="0.3" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="fillColor" - android:startOffset="0" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_error" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="17" - android:propertyName="fillColor" - android:startOffset="83" - android:valueFrom="@color/biometric_dialog_error" - android:valueTo="@color/biometric_dialog_gray" - android:valueType="colorType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="150" - android:pathData="M 30.3,29.215C 30.3,29.58759101867676 30.3,31.077408981323238 30.3,31.45" - android:propertyName="translateXY" - android:propertyXName="translateX" - android:propertyYName="translateY" - android:startOffset="0"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="83" - android:propertyName="pathData" - android:startOffset="0" - android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-11.71 -1.5,-11.71 C-1.5,-11.71 0.9,-11.71 0.9,-11.71 C0.9,-11.71 0.9,3.25 0.9,3.25c " - android:valueTo="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.321,0 0.67,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="133" - android:propertyName="pathData" - android:startOffset="83" - android:valueFrom="M0.9 3.25 C0.9,3.25 -1.5,3.25 -1.5,3.25 C-1.5,3.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,1.25 -1.5,1.25 C-1.5,1.25 -1.5,-3.25 -1.5,-3.25 C-1.5,-3.25 0.9,-3.25 0.9,-3.25 C0.9,-3.25 0.9,3.25 0.9,3.25c " - android:valueTo="M2.6 3.25 C2.6,3.25 -2.6,3.25 -2.6,3.25 C-2.6,3.25 -2.6,1.25 -2.6,1.25 C-2.6,1.25 0.6,1.25 0.6,1.25 C0.6,1.25 0.6,-3.25 0.6,-3.25 C0.6,-3.25 2.6,-3.25 2.6,-3.25 C2.6,-3.25 2.6,3.25 2.6,3.25c " - android:valueType="pathType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.568,0 0.456,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="267" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_idle_static.xml b/packages/SystemUI/res/drawable/face_dialog_idle_static.xml deleted file mode 100644 index 6ad8e83989d3..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_idle_static.xml +++ /dev/null @@ -1,276 +0,0 @@ -<!-- - ~ Copyright (C) 2019 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 - --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group - android:name="_R_G_L_0_G" - android:pivotX="30" - android:pivotY="30" - android:scaleX="1.03" - android:scaleY="1.03"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1.0" - android:strokeColor="@color/biometric_dialog_gray" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M33.75 42.75 C32.75,43.77 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:strokeWidth="2" - android:strokeAlpha="1.0" - android:strokeColor="@color/biometric_dialog_gray" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="1.0" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M39 23.8 C39,25 39.9,25.9 41.1,25.9 C42.2,25.9 43.2,25 43.2,23.8 C43.2,22.6 42.3,21.7 41.1,21.7 C39.9,21.7 39,22.6 39,23.8c " /> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="1.0" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M16.5 23.8 C16.5,25 17.4,25.9 18.6,25.9 C19.8,25.9 20.7,25 20.7,23.8 C20.7,22.6 19.8,21.7 18.6,21.7 C17.4,21.7 16.5,22.6 16.5,23.8c " /> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="1.0" - android:fillColor="@color/biometric_dialog_gray" - android:fillType="nonZero" - android:pathData=" M33.33 34.95 C33.33,34.95 28.13,34.95 28.13,34.95 C28.13,34.95 28.13,32.95 28.13,32.95 C28.13,32.95 31.33,32.95 31.33,32.95 C31.33,32.95 31.33,28.45 31.33,28.45 C31.33,28.45 33.33,28.45 33.33,28.45 C33.33,28.45 33.33,34.95 33.33,34.95c " /> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.118,1.266 0.419,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="strokeAlpha" - android:startOffset="500" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.118,1.266 0.419,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="strokeAlpha" - android:startOffset="500" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.118,1.266 0.419,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="500" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.118,1.266 0.419,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="500" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.118,1.266 0.419,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="fillAlpha" - android:startOffset="500" - android:valueFrom="1.0" - android:valueTo="1.0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="500" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1.03" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1.03" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="scaleX" - android:startOffset="500" - android:valueFrom="1" - android:valueTo="1.03" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.204,0.46 0.568,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="500" - android:propertyName="scaleY" - android:startOffset="500" - android:valueFrom="1" - android:valueTo="1.03" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.204,0.46 0.568,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="1017" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_pulse_dark_to_light.xml b/packages/SystemUI/res/drawable/face_dialog_pulse_dark_to_light.xml deleted file mode 100644 index 427be1447679..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_pulse_dark_to_light.xml +++ /dev/null @@ -1,183 +0,0 @@ -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group - android:name="_R_G_L_0_G" - android:pivotX="30" - android:pivotY="30" - android:scaleX="1" - android:scaleY="1"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M33.75 42.75 C32.75,43.77 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:strokeWidth="2" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M39 23.8 C39,25 39.9,25.9 41.1,25.9 C42.2,25.9 43.2,25 43.2,23.8 C43.2,22.6 42.3,21.7 41.1,21.7 C39.9,21.7 39,22.6 39,23.8c " /> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M16.5 23.8 C16.5,25 17.4,25.9 18.6,25.9 C19.8,25.9 20.7,25 20.7,23.8 C20.7,22.6 19.8,21.7 18.6,21.7 C17.4,21.7 16.5,22.6 16.5,23.8c " /> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M33.33 34.95 C33.33,34.95 28.13,34.95 28.13,34.95 C28.13,34.95 28.13,32.95 28.13,32.95 C28.13,32.95 31.33,32.95 31.33,32.95 C31.33,32.95 31.33,28.45 31.33,28.45 C31.33,28.45 33.33,28.45 33.33,28.45 C33.33,28.45 33.33,34.95 33.33,34.95c " /> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.5" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1.03" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="333" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1.03" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="350" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_pulse_light_to_dark.xml b/packages/SystemUI/res/drawable/face_dialog_pulse_light_to_dark.xml deleted file mode 100644 index ab26408a2ed6..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_pulse_light_to_dark.xml +++ /dev/null @@ -1,183 +0,0 @@ -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group - android:name="_R_G_L_0_G" - android:pivotX="30" - android:pivotY="30" - android:scaleX="1.03" - android:scaleY="1.03"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="0.5" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:pathData=" M33.75 42.75 C32.75,43.77 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:strokeWidth="2" - android:strokeAlpha="0.5" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="0.5" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M39 23.8 C39,25 39.9,25.9 41.1,25.9 C42.2,25.9 43.2,25 43.2,23.8 C43.2,22.6 42.3,21.7 41.1,21.7 C39.9,21.7 39,22.6 39,23.8c " /> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="0.5" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M16.5 23.8 C16.5,25 17.4,25.9 18.6,25.9 C19.8,25.9 20.7,25 20.7,23.8 C20.7,22.6 19.8,21.7 18.6,21.7 C17.4,21.7 16.5,22.6 16.5,23.8c " /> - <path - android:name="_R_G_L_0_G_D_4_P_0" - android:fillAlpha="0.5" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M33.33 34.95 C33.33,34.95 28.13,34.95 28.13,34.95 C28.13,34.95 28.13,32.95 28.13,32.95 C28.13,32.95 31.33,32.95 31.33,32.95 C31.33,32.95 31.33,28.45 31.33,28.45 C31.33,28.45 33.33,28.45 33.33,28.45 C33.33,28.45 33.33,34.95 33.33,34.95c " /> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_0_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="0.5" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_1_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="strokeAlpha" - android:startOffset="0" - android:valueFrom="0.5" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_2_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="0.5" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_3_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="0.5" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G_D_4_P_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="fillAlpha" - android:startOffset="0" - android:valueFrom="0.5" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="333" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1.03" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="333" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1.03" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.317,0 0.287,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="350" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/face_dialog_wink_from_dark.xml b/packages/SystemUI/res/drawable/face_dialog_wink_from_dark.xml deleted file mode 100644 index 0cd542d51b51..000000000000 --- a/packages/SystemUI/res/drawable/face_dialog_wink_from_dark.xml +++ /dev/null @@ -1,208 +0,0 @@ -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt"> - <aapt:attr name="android:drawable"> - <vector - android:width="60dp" - android:height="60dp" - android:viewportWidth="60" - android:viewportHeight="60"> - <group android:name="_R_G"> - <group android:name="_R_G_L_1_G"> - <path - android:name="_R_G_L_1_G_D_0_P_0" - android:pathData=" M30 6.2 C16.9,6.2 6.3,16.8 6.3,30 C6.3,43.2 16.9,53.8 30,53.8 C43.1,53.8 53.8,43.2 53.8,30 C53.8,16.8 43.1,6.2 30,6.2c " - android:strokeWidth="2.5" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - </group> - <group - android:name="_R_G_L_0_G" - android:pivotX="30" - android:pivotY="30" - android:rotation="0" - android:scaleX="1" - android:scaleY="1"> - <path - android:name="_R_G_L_0_G_D_0_P_0" - android:pathData=" M33.75 42.75 C32.75,43.77 31.37,44.39 29.83,44.39 C26.8,44.39 24.34,41.93 24.34,38.9 " - android:strokeWidth="2" - android:strokeAlpha="1" - android:strokeColor="@color/biometric_dialog_accent" - android:trimPathStart="0" - android:trimPathEnd="1" - android:trimPathOffset="0" /> - <path - android:name="_R_G_L_0_G_D_1_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M39 23.8 C39,25 39.9,25.9 41.1,25.9 C42.2,25.9 43.2,25 43.2,23.8 C43.2,22.6 42.3,21.7 41.1,21.7 C39.9,21.7 39,22.6 39,23.8c " /> - <group - android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0" - android:scaleX="1" - android:scaleY="1" - android:translateX="18.6" - android:translateY="23.8"> - <path - android:name="_R_G_L_0_G_D_2_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M-2.1 0 C-2.1,1.2 -1.2,2.1 0,2.1 C1.2,2.1 2.1,1.2 2.1,0 C2.1,-1.2 1.2,-2.1 0,-2.1 C-1.2,-2.1 -2.1,-1.2 -2.1,0c " /> - </group> - <path - android:name="_R_G_L_0_G_D_3_P_0" - android:fillAlpha="1" - android:fillColor="@color/biometric_dialog_accent" - android:fillType="nonZero" - android:pathData=" M33.33 34.95 C33.33,34.95 28.13,34.95 28.13,34.95 C28.13,34.95 28.13,32.95 28.13,32.95 C28.13,32.95 31.33,32.95 31.33,32.95 C31.33,32.95 31.33,28.45 31.33,28.45 C31.33,28.45 33.33,28.45 33.33,28.45 C33.33,28.45 33.33,34.95 33.33,34.95c " /> - </group> - </group> - <group android:name="time_group" /> - </vector> - </aapt:attr> - <target android:name="_R_G_L_0_G_D_2_P_0_G_0_T_0"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="433" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="433" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="0.26" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="317" - android:propertyName="scaleX" - android:startOffset="433" - android:valueFrom="1" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="317" - android:propertyName="scaleY" - android:startOffset="433" - android:valueFrom="0.26" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="433" - android:propertyName="rotation" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="-14" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="317" - android:propertyName="rotation" - android:startOffset="433" - android:valueFrom="-14" - android:valueTo="0" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.305,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="_R_G_L_0_G"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="433" - android:propertyName="scaleX" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1.06" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="433" - android:propertyName="scaleY" - android:startOffset="0" - android:valueFrom="1" - android:valueTo="1.06" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.2,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="317" - android:propertyName="scaleX" - android:startOffset="433" - android:valueFrom="1.06" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.305,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - <objectAnimator - android:duration="317" - android:propertyName="scaleY" - android:startOffset="433" - android:valueFrom="1.06" - android:valueTo="1" - android:valueType="floatType"> - <aapt:attr name="android:interpolator"> - <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.305,1 1.0,1.0" /> - </aapt:attr> - </objectAnimator> - </set> - </aapt:attr> - </target> - <target android:name="time_group"> - <aapt:attr name="android:animation"> - <set android:ordering="together"> - <objectAnimator - android:duration="1017" - android:propertyName="translateX" - android:startOffset="0" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" /> - </set> - </aapt:attr> - </target> -</animated-vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_authenticating.json b/packages/SystemUI/res/raw/face_dialog_authenticating.json index 4e25e6d933c4..896816ec2009 100644 --- a/packages/SystemUI/res/raw/face_dialog_authenticating.json +++ b/packages/SystemUI/res/raw/face_dialog_authenticating.json @@ -1 +1 @@ -{"v":"5.7.13","fr":60,"ip":0,"op":61,"w":64,"h":64,"nm":"face_scanning 3","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[32,32,0],"ix":2,"l":2},"a":{"a":0,"k":[27.25,27.25,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[95,95,100]},{"t":60,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.243],[-1.244,0],[0,1.243],[1.242,0]],"o":[[0,1.243],[1.242,0],[0,-1.243],[-1.244,0]],"v":[[-2.249,0.001],[0.001,2.251],[2.249,0.001],[0.001,-2.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15.1,20.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.243],[-1.242,0],[0,1.243],[1.242,0]],"o":[[0,1.243],[1.242,0],[0,-1.243],[-1.242,0]],"v":[[-2.249,0],[0.001,2.25],[2.249,0],[0.001,-2.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.4,20.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.814,3.523],[-2.814,3.523],[-2.814,1.363],[0.652,1.363],[0.652,-3.523],[2.814,-3.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.791,28.479],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.154,0.15],[0,0],[0.117,-0.095],[0,0],[0.228,-0.121],[0.358,-0.103],[0.922,0.261],[0.3,0.16],[0.24,0.185],[0.14,0.139],[0.178,0.261],[0.143,0.451],[0,0],[0,0.494],[0,0],[-0.214,-0.676],[-0.392,-0.572],[-0.323,-0.317],[-0.228,-0.177],[-0.333,-0.179],[-0.503,-0.145],[-0.662,0],[-0.653,0.184],[-0.437,0.233],[-0.336,0.258],[0,0],[0,0]],"o":[[0,0],[-0.107,0.106],[0,0],[-0.24,0.185],[-0.301,0.16],[-0.92,0.261],[-0.357,-0.103],[-0.228,-0.121],[-0.158,-0.122],[-0.225,-0.221],[-0.272,-0.393],[0,0],[-0.147,-0.466],[0,0],[0,0.716],[0.206,0.656],[0.256,0.372],[0.204,0.201],[0.336,0.258],[0.436,0.233],[0.655,0.184],[0.662,0],[0.503,-0.145],[0.332,-0.179],[0,0],[0,0],[0.165,-0.136]],"v":[[6.094,1.465],[4.579,-0.076],[4.242,0.225],[4.124,0.315],[3.43,0.771],[2.439,1.165],[-0.342,1.165],[-1.331,0.771],[-2.027,0.315],[-2.48,-0.075],[-3.087,-0.801],[-3.712,-2.075],[-3.712,-2.075],[-3.934,-3.523],[-6.094,-3.523],[-5.771,-1.424],[-4.868,0.424],[-3.995,1.465],[-3.344,2.027],[-2.35,2.676],[-0.934,3.243],[1.049,3.523],[3.031,3.243],[4.449,2.676],[5.441,2.027],[5.482,1.997],[5.615,1.895]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.201,40.411],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.398,0],[0,-13.4],[13.398,0],[0,13.4]],"o":[[13.398,0],[0,13.4],[-13.398,0],[0,-13.4]],"v":[[0,-24.3],[24.3,0],[0,24.3],[-24.3,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[14.904,0],[0,-14.904],[-14.904,0],[0,14.904]],"o":[[-14.904,0],[0,14.904],[14.904,0],[0,-14.904]],"v":[[0,-27],[-27,0],[0,27],[27,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.25,27.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file +{"v":"5.7.13","fr":60,"ip":0,"op":61,"w":68,"h":68,"nm":"face_dialog_authenticating","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[27.25,27.25,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[95,95,100]},{"t":60,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.243],[-1.244,0],[0,1.243],[1.242,0]],"o":[[0,1.243],[1.242,0],[0,-1.243],[-1.244,0]],"v":[[-2.249,0.001],[0.001,2.251],[2.249,0.001],[0.001,-2.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15.1,20.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.243],[-1.242,0],[0,1.243],[1.242,0]],"o":[[0,1.243],[1.242,0],[0,-1.243],[-1.242,0]],"v":[[-2.249,0],[0.001,2.25],[2.249,0],[0.001,-2.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.4,20.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.814,3.523],[-2.814,3.523],[-2.814,1.363],[0.652,1.363],[0.652,-3.523],[2.814,-3.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.791,28.479],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.154,0.15],[0,0],[0.117,-0.095],[0,0],[0.228,-0.121],[0.358,-0.103],[0.922,0.261],[0.3,0.16],[0.24,0.185],[0.14,0.139],[0.178,0.261],[0.143,0.451],[0,0],[0,0.494],[0,0],[-0.214,-0.676],[-0.392,-0.572],[-0.323,-0.317],[-0.228,-0.177],[-0.333,-0.179],[-0.503,-0.145],[-0.662,0],[-0.653,0.184],[-0.437,0.233],[-0.336,0.258],[0,0],[0,0]],"o":[[0,0],[-0.107,0.106],[0,0],[-0.24,0.185],[-0.301,0.16],[-0.92,0.261],[-0.357,-0.103],[-0.228,-0.121],[-0.158,-0.122],[-0.225,-0.221],[-0.272,-0.393],[0,0],[-0.147,-0.466],[0,0],[0,0.716],[0.206,0.656],[0.256,0.372],[0.204,0.201],[0.336,0.258],[0.436,0.233],[0.655,0.184],[0.662,0],[0.503,-0.145],[0.332,-0.179],[0,0],[0,0],[0.165,-0.136]],"v":[[6.094,1.465],[4.579,-0.076],[4.242,0.225],[4.124,0.315],[3.43,0.771],[2.439,1.165],[-0.342,1.165],[-1.331,0.771],[-2.027,0.315],[-2.48,-0.075],[-3.087,-0.801],[-3.712,-2.075],[-3.712,-2.075],[-3.934,-3.523],[-6.094,-3.523],[-5.771,-1.424],[-4.868,0.424],[-3.995,1.465],[-3.344,2.027],[-2.35,2.676],[-0.934,3.243],[1.049,3.523],[3.031,3.243],[4.449,2.676],[5.441,2.027],[5.482,1.997],[5.615,1.895]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.201,40.411],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.398,0],[0,-13.4],[13.398,0],[0,13.4]],"o":[[13.398,0],[0,13.4],[-13.398,0],[0,-13.4]],"v":[[0,-24.3],[24.3,0],[0,24.3],[-24.3,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[14.904,0],[0,-14.904],[-14.904,0],[0,14.904]],"o":[[-14.904,0],[0,14.904],[14.904,0],[0,-14.904]],"v":[[0,-27],[-27,0],[0,27],[27,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823529412,0.780392216701,0.980392216701,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[60]},{"t":60,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.25,27.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_dark_to_checkmark.json b/packages/SystemUI/res/raw/face_dialog_dark_to_checkmark.json new file mode 100644 index 000000000000..512ca30cf40d --- /dev/null +++ b/packages/SystemUI/res/raw/face_dialog_dark_to_checkmark.json @@ -0,0 +1 @@ +{"v":"5.7.13","fr":60,"ip":0,"op":23,"w":68,"h":68,"nm":"face_dialog_dark_to_checkmark","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".green100","cl":"green100","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-116,-16.5],[-31.25,68.5],[108.75,-71.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.155],"y":[1]},"o":{"x":[0.292],"y":[0]},"t":2,"s":[0]},{"t":16,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.76862745098,0.933333333333,0.81568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.1,30.083],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.537,0.537],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":2,"s":[8,8]},{"i":{"x":[0.533,0.533],"y":[1,1]},"o":{"x":[0.441,0.441],"y":[0,0]},"t":12,"s":[12.789,12.789]},{"i":{"x":[0.486,0.486],"y":[1,1]},"o":{"x":[0.424,0.424],"y":[0,0]},"t":18,"s":[12.241,12.241]},{"t":22,"s":[12.5,12.5]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Checkmark","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":23,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".green100","cl":"green100","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.768627464771,0.933333337307,0.815686285496,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0]},{"t":7,"s":[100]}],"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":23,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823529412,0.780392156863,0.980392156863,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":7,"s":[0]}],"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":23,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":3,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.727,31.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.287,0.287],"y":[0.12,0.12]},"t":0,"s":[100,100]},{"t":5,"s":[0,0]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":3,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.6,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":5,"s":[0,0]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":3,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.1,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":5,"s":[0,0]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0]},{"t":5,"s":[50]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[100]},{"t":5,"s":[50]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":3,"s":[0]}],"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.094,31.756],"ix":2},"a":{"a":0,"k":[1.05,-9.891],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":4,"s":[65,65]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":23,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_dark_to_error.json b/packages/SystemUI/res/raw/face_dialog_dark_to_error.json new file mode 100644 index 000000000000..9578cb40ac71 --- /dev/null +++ b/packages/SystemUI/res/raw/face_dialog_dark_to_error.json @@ -0,0 +1 @@ +{"v":"5.7.13","fr":60,"ip":0,"op":20,"w":68,"h":68,"nm":"face_dialog_dark_to_error","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".red100","cl":"red100","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-3.25],[0.9,-3.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-13.15],[0.9,-13.15]],"c":true}]},{"t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-11.712],[0.9,-11.712]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":4,"s":[30.3,31.45],"to":[0,-0.373],"ti":[0,0.373]},{"t":13,"s":[30.3,29.215]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":4,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[18.6,23.8],"to":[0.568,-0.715],"ti":[-0.568,0.715]},{"t":4,"s":[22.005,19.51]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":4,"s":[30,30]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":4,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[41.1,23.8],"to":[-0.552,-0.712],"ti":[0.552,0.712]},{"t":4,"s":[37.788,19.53]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":4,"s":[30,30]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false}]},{"t":13,"s":[{"i":[[0,0],[1.534,0],[1.832,-0.006]],"o":[[-0.948,-0.005],[-3.033,0],[0,0]],"v":[[5.734,-2.889],[0.961,-2.894],[-4.74,-2.887]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0]},{"t":13,"s":[34]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[100]},{"t":13,"s":[57]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[2]},{"t":13,"s":[2.5]}],"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.044,41.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":4,"op":20,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.667,106.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-3.25],[0.9,-3.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-13.15],[0.9,-13.15]],"c":true}]},{"t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-11.712],[0.9,-11.712]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":4,"s":[30.3,31.45],"to":[0,-0.373],"ti":[0,0.373]},{"t":13,"s":[30.3,29.215]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":4,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[18.6,23.8],"to":[0.568,-0.715],"ti":[-0.568,0.715]},{"t":4,"s":[22.005,19.51]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":4,"s":[30,30]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":4,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[41.1,23.8],"to":[-0.552,-0.712],"ti":[0.552,0.712]},{"t":4,"s":[37.788,19.53]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"t":4,"s":[30,30]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false}]},{"t":13,"s":[{"i":[[0,0],[1.534,0],[1.832,-0.006]],"o":[[-0.948,-0.005],[-3.033,0],[0,0]],"v":[[5.734,-2.889],[0.961,-2.894],[-4.74,-2.887]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0]},{"t":13,"s":[34]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[100]},{"t":13,"s":[57]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[2]},{"t":13,"s":[2.5]}],"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.044,41.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0.658823549747,0.780392169952,0.980392158031,1]},{"t":4,"s":[0.949019610882,0.721568644047,0.709803938866,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":4,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_error_to_idle.json b/packages/SystemUI/res/raw/face_dialog_error_to_idle.json new file mode 100644 index 000000000000..f94431492565 --- /dev/null +++ b/packages/SystemUI/res/raw/face_dialog_error_to_idle.json @@ -0,0 +1 @@ +{"v":"5.7.13","fr":60,"ip":0,"op":14,"w":68,"h":68,"nm":"face_error_to_idle","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.329,106.329,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.67,"y":1},"o":{"x":0.321,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-11.712],[0.9,-11.712]],"c":true}]},{"i":{"x":0.456,"y":1},"o":{"x":0.568,"y":0},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-3.25],[0.9,-3.25]],"c":true}]},{"t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[30.3,29.215],"to":[0,0.373],"ti":[0,-0.373]},{"t":9,"s":[30.3,31.45]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"t":6,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":3,"s":[22.005,19.51],"to":[-0.568,0.715],"ti":[0.568,-0.715]},{"t":13,"s":[18.6,23.8]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":3,"s":[30,30]},{"t":10,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"t":6,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":3,"s":[37.788,19.53],"to":[0.552,0.712],"ti":[-0.552,-0.712]},{"t":13,"s":[41.1,23.8]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":3,"s":[30,30]},{"t":10,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[1.534,0],[1.832,-0.006]],"o":[[-0.948,-0.005],[-3.033,0],[0,0]],"v":[[5.734,-2.889],[0.961,-2.894],[-4.74,-2.887]],"c":false}]},{"t":13,"s":[{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[34]},{"t":13,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[57]},{"t":13,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0.949019610882,0.721568644047,0.709803938866,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[0.741176486015,0.75686275959,0.776470601559,1]},{"t":7,"s":[0.658823549747,0.780392169952,0.980392158031,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[2.5]},{"t":13,"s":[2]}],"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.044,41.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0.949019610882,0.721568644047,0.709803938866,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[0.741176486015,0.75686275959,0.776470601559,1]},{"t":7,"s":[0.658823549747,0.780392169952,0.980392158031,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":6,"op":14,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".red100","cl":"red100","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.329,106.329,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.67,"y":1},"o":{"x":0.321,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-11.712],[0.9,-11.712]],"c":true}]},{"i":{"x":0.456,"y":1},"o":{"x":0.568,"y":0},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.9,3.25],[-1.5,3.25],[-1.5,1.25],[-1.5,1.25],[-1.5,-3.25],[0.9,-3.25]],"c":true}]},{"t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0.949019610882,0.721568644047,0.709803938866,1]},{"t":6,"s":[0.741176486015,0.75686275959,0.776470601559,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[30.3,29.215],"to":[0,0.373],"ti":[0,-0.373]},{"t":9,"s":[30.3,31.45]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176486015,0.75686275959,0.776470601559,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"t":6,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":3,"s":[22.005,19.51],"to":[-0.568,0.715],"ti":[0.568,-0.715]},{"t":13,"s":[18.6,23.8]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":3,"s":[30,30]},{"t":10,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176486015,0.75686275959,0.776470601559,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"t":6,"s":[100]}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":3,"s":[37.788,19.53],"to":[0.552,0.712],"ti":[-0.552,-0.712]},{"t":13,"s":[41.1,23.8]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":3,"s":[30,30]},{"t":10,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[1.534,0],[1.832,-0.006]],"o":[[-0.948,-0.005],[-3.033,0],[0,0]],"v":[[5.734,-2.889],[0.961,-2.894],[-4.74,-2.887]],"c":false}]},{"t":13,"s":[{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[34]},{"t":13,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[57]},{"t":13,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0.949019610882,0.721568644047,0.709803938866,1]},{"t":6,"s":[0.741176486015,0.75686275959,0.776470601559,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[2.5]},{"t":13,"s":[2]}],"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.044,41.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0.949019610882,0.721568644047,0.709803938866,1]},{"t":6,"s":[0.741176486015,0.75686275959,0.776470601559,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":6,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_idle_static.json b/packages/SystemUI/res/raw/face_dialog_idle_static.json new file mode 100644 index 000000000000..2d3a7a46e8f2 --- /dev/null +++ b/packages/SystemUI/res/raw/face_dialog_idle_static.json @@ -0,0 +1 @@ +{"v":"5.7.13","fr":60,"ip":0,"op":14,"w":68,"h":68,"nm":"face_dialog_idle_static","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.329,106.329,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.3,31.45],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.6,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.1,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.044,41.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":14,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/res/raw/face_dialog_wink_from_dark.json b/packages/SystemUI/res/raw/face_dialog_wink_from_dark.json new file mode 100644 index 000000000000..05b55c99edc6 --- /dev/null +++ b/packages/SystemUI/res/raw/face_dialog_wink_from_dark.json @@ -0,0 +1 @@ +{"v":"5.7.13","fr":60,"ip":0,"op":61,"w":68,"h":68,"nm":"face_dialog_wink_from_dark","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".blue200","cl":"blue200","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.305],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":26,"s":[-14]},{"t":45,"s":[0]}],"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.4],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.305,0.305,0.2],"y":[1,1,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":26,"s":[106,106,100]},{"t":45,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.6,3.25],[-2.6,3.25],[-2.6,1.25],[0.6,1.25],[0.6,-3.25],[2.6,-3.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.727,31.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Nose","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.2,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.6,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":0,"s":[100,100]},{"i":{"x":[0.2,0.2],"y":[1,1]},"o":{"x":[0.4,0.4],"y":[0,0]},"t":26,"s":[100,26]},{"t":45,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_L","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.2],[-1.2,0],[0,1.2],[1.2,0]],"o":[[0,1.2],[1.1,0],[0,-1.2],[-1.2,0]],"v":[[-2.1,0],[0,2.1],[2.1,0],[0,-2.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.780392169952,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.1,23.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Eye_R\r","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.534,0],[0,3.034]],"o":[[-0.996,1.015],[-3.033,0],[0,0]],"v":[[4.705,1.103],[0.787,2.747],[-4.705,-2.747]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823529412,0.780392156863,0.980392156863,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.094,31.756],"ix":2},"a":{"a":0,"k":[1.05,-9.891],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Mouth","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":80,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".blue200","cl":"blue200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,34,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[106.329,106.329,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.1,0],[0,-13.2],[-13.1,0],[0,13.2]],"o":[[-13.1,0],[0,13.2],[13.1,0],[0,-13.2]],"v":[[-0.05,-23.8],[-23.75,0],[-0.05,23.8],[23.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.658823529412,0.780392156863,0.980392156863,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30.05,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":80,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt index 900d7cc791f2..5e0e2bb9556e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptIconViewBinder.kt @@ -17,15 +17,11 @@ package com.android.systemui.biometrics.ui.binder -import android.graphics.drawable.AnimatedVectorDrawable import android.util.Log -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.constraintlayout.widget.ConstraintSet import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.airbnb.lottie.LottieAnimationView import com.airbnb.lottie.LottieOnCompositionLoadedListener -import com.airbnb.lottie.LottieListener import com.android.settingslib.widget.LottieColorUtils import com.android.systemui.Flags.constraintBp import com.android.systemui.biometrics.ui.viewmodel.PromptIconViewModel @@ -66,85 +62,35 @@ object PromptIconViewBinder { iconOverlayView.layoutParams.height = iconViewLayoutParamSizeOverride.second } - var faceIcon: AnimatedVectorDrawable? = null - - fun updateXmlIconAsset( - iconAsset: Int, - shouldAnimateIconView: Boolean, - activeAuthType: AuthType - ) { - faceIcon?.stop() - faceIcon = iconView.context.getDrawable(iconAsset) as AnimatedVectorDrawable - faceIcon?.apply { - iconView.setIconFailureListener(iconAsset, activeAuthType) - iconView.setImageDrawable(this) - if (shouldAnimateIconView) { - forceAnimationOnUI() - start() - } - } - } - - fun updateJsonIconAsset( - iconAsset: Int, - shouldAnimateIconView: Boolean, - activeAuthType: AuthType - ) { - iconView.setIconFailureListener(iconAsset, activeAuthType) - iconView.setAnimation(iconAsset) - iconView.frame = 0 - - if (shouldAnimateIconView) { - iconView.playAnimation() - } - } - if (!constraintBp()) { launch { var lottieOnCompositionLoadedListener: LottieOnCompositionLoadedListener? = null - combine(viewModel.activeAuthType, viewModel.iconSize, ::Pair).collect { - (activeAuthType, iconSize) -> - // Every time after bp shows, [isIconViewLoaded] is set to false in - // [BiometricViewSizeBinder]. Then when biometric prompt view is redrew - // (when size or activeAuthType changes), we need to update - // [isIconViewLoaded] here to keep it correct. - when (activeAuthType) { - AuthType.Fingerprint, - AuthType.Coex -> { - /** - * View is only set visible in BiometricViewSizeBinder once - * PromptSize is determined that accounts for iconView size, to - * prevent prompt resizing being visible to the user. - * - * TODO(b/288175072): May be able to remove this once constraint - * layout is implemented - */ - if (lottieOnCompositionLoadedListener != null) { - iconView.removeLottieOnCompositionLoadedListener( - lottieOnCompositionLoadedListener!! - ) - } - lottieOnCompositionLoadedListener = - LottieOnCompositionLoadedListener { - promptViewModel.setIsIconViewLoaded(true) - } - iconView.addLottieOnCompositionLoadedListener( - lottieOnCompositionLoadedListener!! - ) - } - AuthType.Face -> { - /** - * Set to true by default since face icon is a drawable, which - * doesn't have a LottieOnCompositionLoadedListener equivalent. - * - * TODO(b/318569643): To be updated once face assets are updated - * from drawables - */ - promptViewModel.setIsIconViewLoaded(true) - } + viewModel.iconSize.collect { iconSize -> + /** + * When we bind the BiometricPrompt View and ViewModel in + * [BiometricViewBinder], the view is set invisible and + * [isIconViewLoaded] is set to false. We configure the iconView with a + * LottieOnCompositionLoadedListener that sets [isIconViewLoaded] to + * true, in order to wait for the iconView to load before determining + * the prompt size, and prevent any prompt resizing from being visible + * to the user. + * + * TODO(b/288175072): May be able to remove this once constraint layout + * is unflagged + */ + if (lottieOnCompositionLoadedListener != null) { + iconView.removeLottieOnCompositionLoadedListener( + lottieOnCompositionLoadedListener!! + ) + } + lottieOnCompositionLoadedListener = LottieOnCompositionLoadedListener { + promptViewModel.setIsIconViewLoaded(true) } + iconView.addLottieOnCompositionLoadedListener( + lottieOnCompositionLoadedListener!! + ) if (iconViewLayoutParamSizeOverride == null) { iconView.layoutParams.width = iconSize.first @@ -171,51 +117,12 @@ object PromptIconViewBinder { .collect { (iconAsset, activeAuthType, shouldAnimateIconView, showingError) -> if (iconAsset != -1) { - when (activeAuthType) { - AuthType.Fingerprint, - AuthType.Coex -> { - // TODO(b/318569643): Until assets unified to one type, this - // check - // is needed in face-auth-error-triggered implicit -> - // explicit - // coex auth transition, in case iconAsset updates to - // face_dialog_dark_to_error (XML) after activeAuthType - // updates - // from AuthType.Face (which expects XML) - // to AuthType.Coex (which expects JSON) - if (iconAsset == R.drawable.face_dialog_dark_to_error) { - updateXmlIconAsset( - iconAsset, - shouldAnimateIconView, - activeAuthType - ) - } else { - updateJsonIconAsset( - iconAsset, - shouldAnimateIconView, - activeAuthType - ) - } - } - AuthType.Face -> { - // TODO(b/318569643): Consolidate logic once all face auth - // assets are migrated from drawable to json - if (iconAsset == R.raw.face_dialog_authenticating) { - updateJsonIconAsset( - iconAsset, - shouldAnimateIconView, - activeAuthType - ) - } else { - updateXmlIconAsset( - iconAsset, - shouldAnimateIconView, - activeAuthType - ) - } - } - } - LottieColorUtils.applyDynamicColors(iconView.context, iconView) + iconView.updateAsset( + "iconAsset", + iconAsset, + shouldAnimateIconView, + activeAuthType + ) viewModel.setPreviousIconWasError(showingError) } } @@ -233,17 +140,12 @@ object PromptIconViewBinder { ) .collect { (iconOverlayAsset, shouldAnimateIconOverlay, showingError) -> if (iconOverlayAsset != -1) { - iconOverlayView.setIconOverlayFailureListener(iconOverlayAsset) - iconOverlayView.setAnimation(iconOverlayAsset) - iconOverlayView.frame = 0 - LottieColorUtils.applyDynamicColors( - iconOverlayView.context, - iconOverlayView + iconOverlayView.updateAsset( + "iconOverlayAsset", + iconOverlayAsset, + shouldAnimateIconOverlay, + AuthType.Fingerprint ) - - if (shouldAnimateIconOverlay) { - iconOverlayView.playAnimation() - } viewModel.setPreviousIconOverlayWasError(showingError) } } @@ -313,11 +215,11 @@ private val assetIdToString: Map<Int, String> = R.raw.biometricprompt_symbol_fingerprint_to_success_portrait_topleft to "biometricprompt_symbol_fingerprint_to_success_portrait_topleft", // Face assets - R.drawable.face_dialog_wink_from_dark to "face_dialog_wink_from_dark", - R.drawable.face_dialog_dark_to_checkmark to "face_dialog_dark_to_checkmark", - R.drawable.face_dialog_dark_to_error to "face_dialog_dark_to_error", - R.drawable.face_dialog_error_to_idle to "face_dialog_error_to_idle", - R.drawable.face_dialog_idle_static to "face_dialog_idle_static", + R.raw.face_dialog_wink_from_dark to "face_dialog_wink_from_dark", + R.raw.face_dialog_dark_to_checkmark to "face_dialog_dark_to_checkmark", + R.raw.face_dialog_dark_to_error to "face_dialog_dark_to_error", + R.raw.face_dialog_error_to_idle to "face_dialog_error_to_idle", + R.raw.face_dialog_idle_static to "face_dialog_idle_static", R.raw.face_dialog_authenticating to "face_dialog_authenticating", // Co-ex assets R.raw.fingerprint_dialogue_unlocked_to_checkmark_success_lottie to @@ -332,31 +234,35 @@ private fun getAssetNameFromId(id: Int): String { return assetIdToString.getOrDefault(id, "Asset $id not found") } -private fun LottieAnimationView.setIconFailureListener(iconAsset: Int, activeAuthType: AuthType) { - setFailureListener( - LottieListener<Throwable> { result: Throwable? -> - Log.d( - TAG, - "Collecting iconAsset | " + - "activeAuthType = $activeAuthType | " + - "Invalid resource id: $iconAsset, " + - "name ${getAssetNameFromId(iconAsset)}", - result - ) +fun LottieAnimationView.updateAsset( + type: String, + asset: Int, + shouldAnimateIconView: Boolean, + activeAuthType: AuthType +) { + setFailureListener(type, asset, activeAuthType) + setAnimation(asset) + frame = 0 + if (shouldAnimateIconView) { + if (asset == R.raw.face_dialog_authenticating) { + loop(true) + } else { + loop(false) } - ) + playAnimation() + } + LottieColorUtils.applyDynamicColors(context, this) } -private fun LottieAnimationView.setIconOverlayFailureListener(iconOverlayAsset: Int) { - setFailureListener( - LottieListener<Throwable> { result: Throwable? -> - Log.d( - TAG, - "Collecting iconOverlayAsset | " + - "Invalid resource id: $iconOverlayAsset, " + - "name ${getAssetNameFromId(iconOverlayAsset)}", - result - ) - } - ) +private fun LottieAnimationView.setFailureListener(type: String, asset: Int, authType: AuthType) { + setFailureListener { result: Throwable? -> + Log.d( + TAG, + "Collecting $type | " + + "activeAuthType = $authType | " + + "Invalid resource id: $asset, " + + "name ${getAssetNameFromId(asset)}", + result + ) + } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptIconViewModel.kt index 6c6ef5ac175e..6c83dac148b2 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptIconViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptIconViewModel.kt @@ -17,7 +17,6 @@ package com.android.systemui.biometrics.ui.viewmodel -import android.annotation.DrawableRes import android.annotation.RawRes import android.content.res.Configuration import android.graphics.Rect @@ -267,7 +266,7 @@ constructor( } } - @DrawableRes + @RawRes private fun getFaceIconViewAsset( authState: PromptAuthState, isAuthenticating: Boolean, @@ -275,17 +274,17 @@ constructor( showingError: Boolean ): Int = if (authState.isAuthenticated && isPendingConfirmation) { - R.drawable.face_dialog_wink_from_dark + R.raw.face_dialog_wink_from_dark } else if (authState.isAuthenticated) { - R.drawable.face_dialog_dark_to_checkmark + R.raw.face_dialog_dark_to_checkmark } else if (isAuthenticating) { R.raw.face_dialog_authenticating } else if (showingError) { - R.drawable.face_dialog_dark_to_error + R.raw.face_dialog_dark_to_error } else if (_previousIconWasError.value) { - R.drawable.face_dialog_error_to_idle + R.raw.face_dialog_error_to_idle } else { - R.drawable.face_dialog_idle_static + R.raw.face_dialog_idle_static } @RawRes diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt index 53794d2d2225..886cb7f85b82 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt @@ -42,6 +42,7 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.Dumpable import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager @@ -106,6 +107,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @@ -123,6 +125,7 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG) class MediaCarouselController @Inject constructor( + @Application applicationScope: CoroutineScope, private val context: Context, private val mediaControlPanelFactory: Provider<MediaControlPanel>, private val visualStabilityProvider: VisualStabilityProvider, @@ -387,18 +390,18 @@ constructor( repeatOnLifecycle(Lifecycle.State.STARTED) { listenForAnyStateToGoneKeyguardTransition(this) listenForAnyStateToLockscreenTransition(this) - listenForLockscreenSettingChanges(this) if (!mediaFlags.isSceneContainerEnabled()) return@repeatOnLifecycle listenForMediaItemsChanges(this) } } + listenForLockscreenSettingChanges(applicationScope) // Notifies all active players about animation scale changes. bgExecutor.execute { globalSettings.registerContentObserverSync( - Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE), - animationScaleObserver + Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE), + animationScaleObserver ) } } @@ -696,6 +699,7 @@ constructor( .onStart { emit(Unit) } .map { getMediaLockScreenSetting() } .distinctUntilChanged() + .flowOn(backgroundDispatcher) .collectLatest { allowMediaPlayerOnLockScreen = it updateHostVisibility() @@ -884,8 +888,7 @@ constructor( val previousVisibleIndex = MediaPlayerData.playerKeys().indexOfFirst { key -> it == key } mediaCarouselScrollHandler.scrollToPlayer(previousVisibleIndex, mediaIndex) - } - ?: mediaCarouselScrollHandler.scrollToPlayer(destIndex = mediaIndex) + } ?: mediaCarouselScrollHandler.scrollToPlayer(destIndex = mediaIndex) } } else if (isRtl && mediaContent.childCount > 0) { // In RTL, Scroll to the first player as it is the rightmost player in media carousel. diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt index 2def6c7cfdc2..59c1592c1485 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt @@ -37,7 +37,6 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.compose.theme.PlatformTheme import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.Flags.glanceableHubFullscreenSwipe import com.android.systemui.ambient.touch.TouchMonitor import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent import com.android.systemui.communal.dagger.Communal @@ -309,13 +308,9 @@ constructor( ) collectFlow(containerView, keyguardInteractor.isDreaming, { isDreaming = it }) - if (glanceableHubFullscreenSwipe()) { - communalContainerWrapper = CommunalWrapper(containerView.context) - communalContainerWrapper?.addView(communalContainerView) - return communalContainerWrapper!! - } else { - return containerView - } + communalContainerWrapper = CommunalWrapper(containerView.context) + communalContainerWrapper?.addView(communalContainerView) + return communalContainerWrapper!! } /** @@ -371,8 +366,7 @@ constructor( // and the touch is within the horizontal notification band on the screen, do not process // the touch. if ( - glanceableHubFullscreenSwipe() && - !hubShowing && + !hubShowing && !notificationStackScrollLayoutController.isBelowLastNotification(ev.x, ev.y) ) { return false @@ -389,17 +383,7 @@ constructor( val hubOccluded = anyBouncerShowing || shadeShowing if (isDown && !hubOccluded) { - if (glanceableHubFullscreenSwipe()) { - isTrackingHubTouch = true - } else { - val x = ev.rawX - val inOpeningSwipeRegion: Boolean = x >= view.width - rightEdgeSwipeRegionWidth - if (inOpeningSwipeRegion || hubShowing) { - // Steal touch events when the hub is open, or if the touch started in the - // opening gesture region. - isTrackingHubTouch = true - } - } + isTrackingHubTouch = true } if (isTrackingHubTouch) { @@ -419,20 +403,12 @@ constructor( private fun dispatchTouchEvent(view: View, ev: MotionEvent): Boolean { try { var handled = false - if (glanceableHubFullscreenSwipe()) { - communalContainerWrapper?.dispatchTouchEvent(ev) { - if (it) { - handled = true - } + communalContainerWrapper?.dispatchTouchEvent(ev) { + if (it) { + handled = true } - return handled || hubShowing - } else { - view.dispatchTouchEvent(ev) - // Return true regardless of dispatch result as some touches at the start of a - // gesture - // may return false from dispatchTouchEvent. - return true } + return handled || hubShowing } finally { powerManager.userActivity( SystemClock.uptimeMillis(), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index 05d71967321f..24f27ecfcd5b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -111,6 +111,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationChildrenCon import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainerLogger; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.SwipeableView; +import com.android.systemui.statusbar.phone.ExpandHeadsUpOnInlineReply; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.InflatedSmartReplyState; @@ -354,6 +355,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView nowExpanded = !isExpanded(); setUserExpanded(nowExpanded); } + + if (ExpandHeadsUpOnInlineReply.isEnabled() && mExpandable) { + // it is triggered by the user. + // So, mHasUserChangedExpansion should be marked true. + mHasUserChangedExpansion = true; + } + notifyHeightChanged(/* needsAnimation= */ true); mOnExpandClickListener.onExpandClicked(mEntry, v, nowExpanded); mMetricsLogger.action(MetricsEvent.ACTION_NOTIFICATION_EXPANDER, nowExpanded); @@ -2845,9 +2853,16 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } public boolean isExpanded(boolean allowOnKeyguard) { + // System expanded should be ignored in heads up state + final boolean isHeadsUpState = ExpandHeadsUpOnInlineReply.isEnabled() + && canShowHeadsUp() && isHeadsUpState(); + // Heads Up Notification can be expanded when it is pinned. + final boolean isPinnedAndExpanded = + isHeadsUpState && isPinnedAndExpanded(); return (!shouldShowPublic()) && (!mOnKeyguard || allowOnKeyguard) - && (!hasUserChangedExpansion() && (isSystemExpanded() || isSystemChildExpanded()) - || isUserExpanded()); + && (!hasUserChangedExpansion() && !isHeadsUpState + && (isSystemExpanded() || isSystemChildExpanded()) + || isUserExpanded() || isPinnedAndExpanded); } private boolean isSystemChildExpanded() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt index 93c6d9ee732c..c3397b92c28f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt @@ -527,14 +527,14 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa } if (testCase.isFaceOnly) { - assertThat(iconAsset).isEqualTo(R.drawable.face_dialog_dark_to_error) + assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_error) assertThat(iconContentDescriptionId).isEqualTo(R.string.keyguard_face_failed) assertThat(shouldAnimateIconView).isEqualTo(true) // Clear error, go to idle errorJob.join() - assertThat(iconAsset).isEqualTo(R.drawable.face_dialog_error_to_idle) + assertThat(iconAsset).isEqualTo(R.raw.face_dialog_error_to_idle) assertThat(iconContentDescriptionId) .isEqualTo(R.string.biometric_dialog_face_icon_description_idle) assertThat(shouldAnimateIconView).isEqualTo(true) @@ -620,7 +620,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa // If co-ex, using implicit flow (explicit flow always requires confirmation) if (testCase.isFaceOnly || testCase.isCoex) { - assertThat(iconAsset).isEqualTo(R.drawable.face_dialog_dark_to_checkmark) + assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_checkmark) assertThat(iconContentDescriptionId) .isEqualTo(R.string.biometric_dialog_face_icon_description_authenticated) assertThat(shouldAnimateIconView).isEqualTo(true) @@ -645,7 +645,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa ) if (testCase.isFaceOnly) { - assertThat(iconAsset).isEqualTo(R.drawable.face_dialog_wink_from_dark) + assertThat(iconAsset).isEqualTo(R.raw.face_dialog_wink_from_dark) assertThat(iconContentDescriptionId) .isEqualTo(R.string.biometric_dialog_face_icon_description_authenticated) assertThat(shouldAnimateIconView).isEqualTo(true) @@ -690,7 +690,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa viewModel.confirmAuthenticated() if (testCase.isFaceOnly) { - assertThat(iconAsset).isEqualTo(R.drawable.face_dialog_dark_to_checkmark) + assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_checkmark) assertThat(iconContentDescriptionId) .isEqualTo(R.string.biometric_dialog_face_icon_description_confirmed) assertThat(shouldAnimateIconView).isEqualTo(true) diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt index ccf926a535e4..f8358c51ed5c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt @@ -40,6 +40,7 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.KeyguardState +import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testDispatcher import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.MediaTestUtils @@ -158,6 +159,7 @@ class MediaCarouselControllerTest : SysuiTestCase() { testDispatcher = UnconfinedTestDispatcher() mediaCarouselController = MediaCarouselController( + applicationScope = kosmos.applicationCoroutineScope, context = context, mediaControlPanelFactory = mediaControlPanelFactory, visualStabilityProvider = visualStabilityProvider, @@ -195,10 +197,10 @@ class MediaCarouselControllerTest : SysuiTestCase() { MediaPlayerData.clear() FakeExecutor.exhaustExecutors(bgExecutor) verify(globalSettings) - .registerContentObserverSync( - eq(Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE)), - capture(settingsObserverCaptor) - ) + .registerContentObserverSync( + eq(Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE)), + capture(settingsObserverCaptor) + ) } @After @@ -894,7 +896,10 @@ class MediaCarouselControllerTest : SysuiTestCase() { mediaCarouselController.updateHostVisibility = { updatedVisibility = true } mediaCarouselController.mediaCarousel = mediaCarousel - val settingsJob = mediaCarouselController.listenForLockscreenSettingChanges(this) + val settingsJob = + mediaCarouselController.listenForLockscreenSettingChanges( + kosmos.applicationCoroutineScope + ) secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, false) val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this) @@ -921,7 +926,10 @@ class MediaCarouselControllerTest : SysuiTestCase() { mediaCarouselController.updateHostVisibility = { updatedVisibility = true } mediaCarouselController.mediaCarousel = mediaCarousel - val settingsJob = mediaCarouselController.listenForLockscreenSettingChanges(this) + val settingsJob = + mediaCarouselController.listenForLockscreenSettingChanges( + kosmos.applicationCoroutineScope + ) secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, true) val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this) diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt index b8267a0e83d4..b0213a4b6421 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt @@ -18,8 +18,6 @@ package com.android.systemui.shade import android.graphics.Rect import android.os.PowerManager -import android.platform.test.annotations.DisableFlags -import android.platform.test.annotations.EnableFlags import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.testing.ViewUtils @@ -29,10 +27,8 @@ import android.widget.FrameLayout import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.test.filters.SmallTest -import com.android.compose.animation.scene.ObservableTransitionState import com.android.compose.animation.scene.SceneKey import com.android.systemui.Flags -import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE import com.android.systemui.SysuiTestCase import com.android.systemui.ambient.touch.TouchHandler import com.android.systemui.ambient.touch.TouchMonitor @@ -56,10 +52,8 @@ import com.android.systemui.scene.shared.model.sceneDataSourceDelegator import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.notification.stack.notificationStackScrollLayoutController import com.android.systemui.testKosmos -import com.android.systemui.util.mockito.any import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest @@ -70,8 +64,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyFloat import org.mockito.Mock -import org.mockito.Mockito.times -import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations @@ -184,133 +176,6 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() { } } - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_communalClosed_doesNotIntercept() = - with(kosmos) { - testScope.runTest { - // Communal is closed. - goToScene(CommunalScenes.Blank) - - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse() - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_openGesture_interceptsTouches() = - with(kosmos) { - testScope.runTest { - // Communal is closed. - goToScene(CommunalScenes.Blank) - - // Initial touch down is intercepted, and so are touches outside of the region, - // until an - // up event is received. - assertThat(underTest.onTouchEvent(DOWN_IN_RIGHT_SWIPE_REGION_EVENT)).isTrue() - assertThat(underTest.onTouchEvent(MOVE_EVENT)).isTrue() - assertThat(underTest.onTouchEvent(UP_EVENT)).isTrue() - assertThat(underTest.onTouchEvent(MOVE_EVENT)).isFalse() - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_communalTransitioning_interceptsTouches() = - with(kosmos) { - testScope.runTest { - // Communal is opening. - communalRepository.setTransitionState( - flowOf( - ObservableTransitionState.Transition( - fromScene = CommunalScenes.Blank, - toScene = CommunalScenes.Communal, - currentScene = flowOf(CommunalScenes.Blank), - progress = flowOf(0.5f), - isInitiatedByUserInput = true, - isUserInputOngoing = flowOf(true) - ) - ) - ) - testableLooper.processAllMessages() - - // Touch events are intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue() - // User activity sent to PowerManager. - verify(powerManager).userActivity(any(), any(), any()) - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_communalOpen_interceptsTouches() = - with(kosmos) { - testScope.runTest { - // Communal is open. - goToScene(CommunalScenes.Communal) - - // Touch events are intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue() - // User activity sent to PowerManager. - verify(powerManager).userActivity(any(), any(), any()) - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_communalAndBouncerShowing_doesNotIntercept() = - with(kosmos) { - testScope.runTest { - // Communal is open. - goToScene(CommunalScenes.Communal) - - // Bouncer is visible. - fakeKeyguardBouncerRepository.setPrimaryShow(true) - testableLooper.processAllMessages() - - // Touch events are not intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse() - // User activity is not sent to PowerManager. - verify(powerManager, times(0)).userActivity(any(), any(), any()) - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_communalAndShadeShowing_doesNotIntercept() = - with(kosmos) { - testScope.runTest { - // Communal is open. - goToScene(CommunalScenes.Communal) - - // Shade shows up. - shadeTestUtil.setQsExpansion(1.0f) - testableLooper.processAllMessages() - - // Touch events are not intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse() - } - } - - @DisableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) - @Test - fun onTouchEvent_containerViewDisposed_doesNotIntercept() = - with(kosmos) { - testScope.runTest { - // Communal is open. - goToScene(CommunalScenes.Communal) - - // Touch events are intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue() - - // Container view disposed. - underTest.disposeView() - - // Touch events are not intercepted. - assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse() - } - } - @Test fun lifecycle_initializedAfterConstruction() = with(kosmos) { @@ -517,7 +382,6 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() { } @Test - @EnableFlags(FLAG_GLANCEABLE_HUB_FULLSCREEN_SWIPE) fun fullScreenSwipeGesture_doNotProcessTouchesInNotificationStack() = with(kosmos) { testScope.runTest { @@ -572,9 +436,5 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() { CONTAINER_HEIGHT.toFloat() / 2, 0 ) - private val DOWN_IN_RIGHT_SWIPE_REGION_EVENT = - MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, CONTAINER_WIDTH.toFloat(), 0f, 0) - private val MOVE_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0) - private val UP_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java index b8f802600b3b..164a06e68dc3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java @@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableView.OnHeightCh import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper; import com.android.systemui.statusbar.notification.shared.NotificationContentAlphaOptimization; import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer; +import com.android.systemui.statusbar.phone.ExpandHeadsUpOnInlineReply; import com.android.systemui.statusbar.phone.KeyguardBypassController; import org.junit.Assert; @@ -860,6 +861,133 @@ public class ExpandableNotificationRowTest extends SysuiTestCase { } @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_systemExpandedTrueForHeadsUp_notExpanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUp(true); + + // THEN + assertThat(row.isExpanded()).isFalse(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_systemExpandedTrueForHeadsUpDisappearRunning_notExpanded() + throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUpAnimatingAway(true); + + // THEN + assertThat(row.isExpanded()).isFalse(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_userExpandedTrueForHeadsUp_expanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUpAnimatingAway(true); + row.setUserExpanded(true); + + // THEN + assertThat(row.isExpanded()).isTrue(); + } + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_userExpandedTrueForHeadsUpDisappearRunning_expanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUpAnimatingAway(true); + row.setUserExpanded(true); + + // THEN + assertThat(row.isExpanded()).isTrue(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_userExpandedFalseForHeadsUp_notExpanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUpAnimatingAway(true); + row.setUserExpanded(false); + + // THEN + assertThat(row.isExpanded()).isFalse(); + } + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_userExpandedFalseForHeadsUpDisappearRunning_notExpanded() + throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUpAnimatingAway(true); + row.setUserExpanded(false); + + // THEN + assertThat(row.isExpanded()).isFalse(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_HUNexpandedWhenPinningTrue_expanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(true); + row.setHeadsUp(true); + row.setPinned(true); + + // WHEN + row.expandNotification(); + + // THEN + assertThat(row.isExpanded()).isTrue(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void isExpanded_HUNexpandedWhenPinningFalse_notExpanded() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setOnKeyguard(false); + row.setSystemExpanded(false); + row.setHeadsUp(true); + row.setPinned(true); + + // THEN + assertThat(row.isExpanded()).isFalse(); + } + + @Test + @EnableFlags(ExpandHeadsUpOnInlineReply.FLAG_NAME) + public void hasUserChangedExpansion_expandPinned_returnTrue() throws Exception { + // GIVEN + final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); + row.setPinned(true); + + // WHEN + row.expandNotification(); + + // THEN + assertThat(row.hasUserChangedExpansion()).isTrue(); + } + + @Test public void onDisappearAnimationFinished_shouldSetFalse_headsUpAnimatingAway() throws Exception { final ExpandableNotificationRow row = mNotificationTestHelper.createRow(); diff --git a/ravenwood/Android.bp b/ravenwood/Android.bp index 13f2f36528c4..ad216b59c93d 100644 --- a/ravenwood/Android.bp +++ b/ravenwood/Android.bp @@ -170,7 +170,7 @@ java_library { srcs: [ "junit-flag-src/**/*.java", ], - sdk_version: "test_current", + sdk_version: "module_current", libs: [ "junit", "flag-junit", diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index acd80eeac558..1654a8de6422 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2075,10 +2075,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mContext, shortcutType, userState.mUserId)) : userState.getShortcutTargetsLocked(shortcutType); - // If dealing with the hardware shortcut, - // remove the default service if it wasn't present before restore, - // but only if the raw shortcut setting is not null (edge case during SUW). - // Otherwise, merge the old and new targets normally. if (Flags.clearDefaultFromA11yShortcutTargetServiceRestore() && shortcutType == HARDWARE) { final String defaultService = @@ -2087,8 +2083,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub ? null : ComponentName.unflattenFromString(defaultService); boolean shouldClearDefaultService = defaultServiceComponent != null && !stringSetContainsComponentName(mergedTargets, defaultServiceComponent); - readColonDelimitedStringToSet(newValue, str -> str, - mergedTargets, /*doMerge=*/true); + readColonDelimitedStringToSet(newValue, str -> str, mergedTargets, + /* doMerge = */ true); if (shouldClearDefaultService && stringSetContainsComponentName( mergedTargets, defaultServiceComponent)) { @@ -3889,7 +3885,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub */ @EnforcePermission(MANAGE_ACCESSIBILITY) @Override - public void performAccessibilityShortcut(String targetName) { + public void performAccessibilityShortcut( + int displayId, @UserShortcutType int shortcutType, String targetName) { performAccessibilityShortcut_enforcePermission(); if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".performAccessibilityShortcut", @@ -3898,7 +3895,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMainHandler.sendMessage(obtainMessage( AccessibilityManagerService::performAccessibilityShortcutInternal, this, - Display.DEFAULT_DISPLAY, HARDWARE, targetName)); + displayId, shortcutType, targetName)); } /** diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index f59ae168bdc3..ee0159d722b1 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -2207,11 +2207,17 @@ public class ComputerEngine implements Computer { if (PackageManagerServiceUtils.isSystemOrRoot(callingUid)) { return true; } - if (requireFullPermission) { - return hasPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL); + boolean permissionGranted = requireFullPermission ? hasPermission( + Manifest.permission.INTERACT_ACROSS_USERS_FULL) + : (hasPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + || hasPermission(Manifest.permission.INTERACT_ACROSS_USERS)); + if (!permissionGranted) { + if (Process.isIsolatedUid(callingUid) && isKnownIsolatedComputeApp(callingUid)) { + return checkIsolatedOwnerHasPermission(callingUid, requireFullPermission); + } } - return hasPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) - || hasPermission(Manifest.permission.INTERACT_ACROSS_USERS); + return permissionGranted; } /** @@ -2227,6 +2233,24 @@ public class ComputerEngine implements Computer { == PackageManager.PERMISSION_GRANTED; } + private boolean hasPermission(String permission, int uid) { + return mContext.checkPermission(permission, Process.INVALID_PID, uid) + == PackageManager.PERMISSION_GRANTED; + } + + /** + * Since isolated process cannot hold permissions, we check the permissions on the owner app + * for known isolated_compute_app cases because they belong to the same package. + */ + private boolean checkIsolatedOwnerHasPermission(int callingUid, boolean requireFullPermission) { + int ownerUid = getIsolatedOwner(callingUid); + if (requireFullPermission) { + return hasPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, ownerUid); + } + return hasPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, ownerUid) + || hasPermission(Manifest.permission.INTERACT_ACROSS_USERS, ownerUid); + } + public final boolean isCallerSameApp(String packageName, int uid) { return isCallerSameApp(packageName, uid, false /* resolveIsolatedUid */); } diff --git a/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java b/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java index 4d3b95b72073..c22b07a4efa1 100644 --- a/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java +++ b/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java @@ -104,10 +104,9 @@ public class RemoteDisplayChangeController { final IDisplayChangeWindowCallback remoteCallback = createCallback(callback); try { - mService.mH.removeCallbacks(mTimeoutRunnable); - mService.mH.postDelayed(mTimeoutRunnable, REMOTE_DISPLAY_CHANGE_TIMEOUT_MS); mService.mDisplayChangeController.onDisplayChange(mDisplayContent.mDisplayId, fromRotation, toRotation, newDisplayAreaInfo, remoteCallback); + mService.mH.postDelayed(mTimeoutRunnable, callback, REMOTE_DISPLAY_CHANGE_TIMEOUT_MS); return true; } catch (RemoteException e) { Slog.e(TAG, "Exception while dispatching remote display-change", e); @@ -118,6 +117,7 @@ public class RemoteDisplayChangeController { private void onContinueTimedOut() { Slog.e(TAG, "RemoteDisplayChange timed-out, UI might get messed-up after this."); + mService.mH.removeCallbacks(mTimeoutRunnable); // timed-out, so run all continue callbacks and clear the list synchronized (mService.mGlobalLock) { for (int i = 0; i < mCallbacks.size(); ++i) { @@ -172,9 +172,6 @@ public class RemoteDisplayChangeController { // The "toIndex" is exclusive, so it needs +1 to clear the current calling callback. mCallbacks.subList(0, idx + 1).clear(); final boolean completed = mCallbacks.isEmpty(); - if (completed) { - mService.mH.removeCallbacks(mTimeoutRunnable); - } callback.onContinueRemoteDisplayChange(transaction); if (completed) { onCompleted(); @@ -198,6 +195,7 @@ public class RemoteDisplayChangeController { } mService.mH.post(() -> RemoteDisplayChangeController.this .continueDisplayChange(callback, t)); + mService.mH.removeCallbacks(mTimeoutRunnable, callback); } } }; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java index 9884085cc3f7..a40bbd27fa8a 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java @@ -803,6 +803,7 @@ public class AccessibilityManagerServiceTest { ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()); mA11yms.performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()); mTestableLooper.processAllMessages(); @@ -821,6 +822,7 @@ public class AccessibilityManagerServiceTest { ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()); mA11yms.performAccessibilityShortcut( + Display.DEFAULT_DISPLAY, HARDWARE, ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()); mTestableLooper.processAllMessages(); diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 1d014201cf46..7e7a53148603 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -1055,15 +1055,22 @@ public class VoiceInteractionManagerService extends SystemService { if (sessionArgs != null && sessionArgs.containsKey(csKey)) { if (sessionArgs.getBoolean(csEnabledKey, true)) { // If Contextual Search is enabled, try to follow that path. - Intent launchIntent = getContextualSearchIntent(sessionArgs); + Intent launchIntent; + final long getSearchIntentCaller = Binder.clearCallingIdentity(); + try { + launchIntent = getContextualSearchIntent(sessionArgs); + } finally { + Binder.restoreCallingIdentity(getSearchIntentCaller); + } if (launchIntent != null) { // Hand over to contextual search helper. Slog.d(TAG, "Handed over to contextual search helper."); - final long caller = Binder.clearCallingIdentity(); + final int userId = Binder.getCallingUserHandle().getIdentifier(); + final long startSearchCaller = Binder.clearCallingIdentity(); try { - return startContextualSearch(launchIntent); + return startContextualSearch(launchIntent, userId); } finally { - Binder.restoreCallingIdentity(caller); + Binder.restoreCallingIdentity(startSearchCaller); } } } @@ -2761,7 +2768,7 @@ public class VoiceInteractionManagerService extends SystemService { } @RequiresPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS) - private boolean startContextualSearch(Intent launchIntent) { + private boolean startContextualSearch(Intent launchIntent, final int userId) { // Contextual search starts with a frozen screen - so we launch without // any system animations or starting window. final ActivityOptions opts = ActivityOptions.makeCustomTaskAnimation(mContext, @@ -2769,7 +2776,7 @@ public class VoiceInteractionManagerService extends SystemService { opts.setDisableStartingWindow(true); int resultCode = mAtmInternal.startActivityWithScreenshot(launchIntent, mContext.getPackageName(), Binder.getCallingUid(), Binder.getCallingPid(), null, - opts.toBundle(), Binder.getCallingUserHandle().getIdentifier()); + opts.toBundle(), userId); return resultCode == ActivityManager.START_SUCCESS; } diff --git a/tests/Input/src/com/android/test/input/UnresponsiveGestureMonitorActivity.kt b/tests/Input/src/com/android/test/input/UnresponsiveGestureMonitorActivity.kt index 63782f1bf955..1842f0a64a83 100644 --- a/tests/Input/src/com/android/test/input/UnresponsiveGestureMonitorActivity.kt +++ b/tests/Input/src/com/android/test/input/UnresponsiveGestureMonitorActivity.kt @@ -14,6 +14,9 @@ * limitations under the License. */ +// InputMonitor is deprecated, but we still need to test it. +@file:Suppress("DEPRECATION") + package com.android.test.input import android.app.Activity @@ -43,6 +46,7 @@ class UnresponsiveGestureMonitorActivity : Activity() { } private lateinit var mInputEventReceiver: InputEventReceiver private lateinit var mInputMonitor: InputMonitor + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val inputManager = checkNotNull(getSystemService(InputManager::class.java)) |