diff --git a/AconfigFlags.bp b/AconfigFlags.bp index 3abaa69270ef5fe7a4e17c215a780f74b39ce325..0ec68d7f94e8e19545e784316de77c3612ae50e5 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -21,6 +21,7 @@ aconfig_srcjars = [ ":android.view.flags-aconfig-java{.generated_srcjars}", ":camera_platform_flags_core_java_lib{.generated_srcjars}", ":com.android.window.flags.window-aconfig-java{.generated_srcjars}", + ":android.hardware.biometrics.flags-aconfig-java{.generated_srcjars}", ":com.android.hardware.input-aconfig-java{.generated_srcjars}", ":com.android.text.flags-aconfig-java{.generated_srcjars}", ":telecom_flags_core_java_lib{.generated_srcjars}", @@ -271,6 +272,19 @@ java_aconfig_library { defaults: ["framework-minus-apex-aconfig-java-defaults"], } +// Biometrics +aconfig_declarations { + name: "android.hardware.biometrics.flags-aconfig", + package: "android.hardware.biometrics", + srcs: ["core/java/android/hardware/biometrics/flags.aconfig"], +} + +java_aconfig_library { + name: "android.hardware.biometrics.flags-aconfig-java", + aconfig_declarations: "android.hardware.biometrics.flags-aconfig", + defaults: ["framework-minus-apex-aconfig-java-defaults"], +} + // Graphics java_aconfig_library { name: "hwui_flags_java_lib", diff --git a/apct-tests/perftests/core/src/android/view/ViewConfigurationPerfTest.java b/apct-tests/perftests/core/src/android/view/ViewConfigurationPerfTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7a7250b9e910d75c63677a70ebd240d4575dde32 --- /dev/null +++ b/apct-tests/perftests/core/src/android/view/ViewConfigurationPerfTest.java @@ -0,0 +1,61 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; + +import android.content.Context; + +import androidx.benchmark.BenchmarkState; +import androidx.benchmark.junit4.BenchmarkRule; +import androidx.test.filters.SmallTest; + +import org.junit.Rule; +import org.junit.Test; + +@SmallTest +public class ViewConfigurationPerfTest { + @Rule + public final BenchmarkRule mBenchmarkRule = new BenchmarkRule(); + + private final Context mContext = getInstrumentation().getTargetContext(); + + @Test + public void testGet_newViewConfiguration() { + final BenchmarkState state = mBenchmarkRule.getState(); + + while (state.keepRunning()) { + state.pauseTiming(); + // Reset cache so that `ViewConfiguration#get` creates a new instance. + ViewConfiguration.resetCacheForTesting(); + state.resumeTiming(); + + ViewConfiguration.get(mContext); + } + } + + @Test + public void testGet_cachedViewConfiguration() { + final BenchmarkState state = mBenchmarkRule.getState(); + // Do `get` once to make sure there's something cached. + ViewConfiguration.get(mContext); + + while (state.keepRunning()) { + ViewConfiguration.get(mContext); + } + } +} diff --git a/apct-tests/perftests/surfaceflinger/Android.bp b/apct-tests/perftests/surfaceflinger/Android.bp index 0c28bcef469c24c8f7717f319d12d0de991a396e..21d0d44fdd2ffe6324202ff3578586431a70c847 100644 --- a/apct-tests/perftests/surfaceflinger/Android.bp +++ b/apct-tests/perftests/surfaceflinger/Android.bp @@ -32,6 +32,7 @@ android_test { "apct-perftests-utils", "collector-device-lib", "platform-test-annotations", + "cts-wm-util", ], test_suites: ["device-tests"], data: [":perfetto_artifacts"], diff --git a/apct-tests/perftests/surfaceflinger/AndroidManifest.xml b/apct-tests/perftests/surfaceflinger/AndroidManifest.xml index 26f25863f055629459bd91ac0032f1db6dd49751..aa55b01cc7870554930a19358c270f05d5c24ae1 100644 --- a/apct-tests/perftests/surfaceflinger/AndroidManifest.xml +++ b/apct-tests/perftests/surfaceflinger/AndroidManifest.xml @@ -16,9 +16,11 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.perftests.surfaceflinger"> - <!-- permission needed to write perfetto trace and read/write simpleperf report --> + <!-- permission needed to read/write simpleperf report --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <!-- permission needed to disable tracing --> + <uses-permission android:name="android.permission.HARDWARE_TEST" /> <application android:label="SurfaceFlingerPerfTests"> <uses-library android:name="android.test.runner" /> diff --git a/apct-tests/perftests/surfaceflinger/AndroidTest.xml b/apct-tests/perftests/surfaceflinger/AndroidTest.xml index 58cf58b89782c3485e989f88f39f82ce04770eec..6dcd86e156d969181da8f92d65fdadaf5c9d1732 100644 --- a/apct-tests/perftests/surfaceflinger/AndroidTest.xml +++ b/apct-tests/perftests/surfaceflinger/AndroidTest.xml @@ -44,17 +44,12 @@ <option name="hidden-api-checks" value="false"/> <!-- Listener related args for collecting the traces and waiting for the device to stabilize. --> - <option name="device-listeners" value="android.device.collectors.ProcLoadListener,android.device.collectors.PerfettoListener,android.device.collectors.SimpleperfListener" /> - - <!-- Guarantee that user defined RunListeners will be running before any of the default listeners defined in this runner. --> - <option name="instrumentation-arg" key="newRunListenerMode" value="true" /> + <option name="device-listeners" value="android.device.collectors.ProcLoadListener,android.device.collectors.SimpleperfListener" /> <option name="instrumentation-arg" key="profiling-iterations" value="525" /> - <!-- PerfettoListener related arguments --> - <option name="instrumentation-arg" key="perfetto_config_text_proto" value="true" /> - <option name="instrumentation-arg" key="perfetto_config_file" value="trace_config.textproto" /> <!-- SimpleperfListener related arguments --> + <option name="instrumentation-arg" key="record" value="false"/> <option name="instrumentation-arg" key="report" value="true" /> <option name="instrumentation-arg" key="arguments" value="-g" /> <option name="instrumentation-arg" key="events_to_record" value="instructions,cpu-cycles,raw-l3d-cache-refill,sched:sched_waking" /> @@ -70,13 +65,11 @@ <option name="instrumentation-arg" key="proc-loadavg-threshold" value="3" /> <option name="instrumentation-arg" key="proc-loadavg-timeout" value="120000" /> <option name="instrumentation-arg" key="proc-loadavg-interval" value="10000" /> - </test> <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector"> <option name="directory-keys" value="/data/local/tmp/SurfaceFlingerPerfTests" /> <!-- Needed for pulling the collected trace config on to the host --> - <option name="pull-pattern-keys" value="perfetto_file_path" /> <option name="pull-pattern-keys" value="simpleperf_file_path" /> </metrics_collector> diff --git a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/BufferFlinger.java b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/BufferFlinger.java index 8a447bb801f202a98e42888215eec88a2aa9a096..8d6dd127645fefeb01d007f35a2e8baaf4dcc1e3 100644 --- a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/BufferFlinger.java +++ b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/BufferFlinger.java @@ -16,6 +16,10 @@ package android.surfaceflinger; +import static android.view.SurfaceControl.BUFFER_TRANSFORM_IDENTITY; +import static android.view.SurfaceControl.BUFFER_TRANSFORM_ROTATE_270; +import static android.view.SurfaceControl.BUFFER_TRANSFORM_ROTATE_90; + import android.annotation.ColorInt; import android.graphics.Canvas; import android.graphics.GraphicBuffer; @@ -33,9 +37,11 @@ import java.util.concurrent.ArrayBlockingQueue; * @hide */ public class BufferFlinger { + private final int mTransformHint; ArrayBlockingQueue<GraphicBuffer> mBufferQ; - public BufferFlinger(int numOfBuffers, @ColorInt int color) { + public BufferFlinger(int numOfBuffers, @ColorInt int color, int bufferTransformHint) { + mTransformHint = bufferTransformHint; mBufferQ = new ArrayBlockingQueue<>(numOfBuffers); while (numOfBuffers > 0) { @@ -56,12 +62,18 @@ public class BufferFlinger { public void addBuffer(SurfaceControl.Transaction t, SurfaceControl surfaceControl) { try { final GraphicBuffer buffer = mBufferQ.take(); - t.setBuffer(surfaceControl, + int transform = BUFFER_TRANSFORM_IDENTITY; + if (mTransformHint == BUFFER_TRANSFORM_ROTATE_90) { + transform = BUFFER_TRANSFORM_ROTATE_270; + } else if (mTransformHint == BUFFER_TRANSFORM_ROTATE_270) { + transform = BUFFER_TRANSFORM_ROTATE_90; + } + t.setBufferTransform(surfaceControl, transform); + t.setBuffer( + surfaceControl, HardwareBuffer.createFromGraphicBuffer(buffer), null, - (SyncFence fence) -> { - releaseCallback(fence, buffer); - }); + (SyncFence fence) -> releaseCallback(fence, buffer)); } catch (InterruptedException ignore) { } } diff --git a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java index dca818ec970834742ecef7826a4c5ad69253f4dd..fd9d99181fbfbe0c054ae9ed86839e51ff05fa50 100644 --- a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java +++ b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java @@ -16,6 +16,9 @@ package android.surfaceflinger; +import static android.server.wm.CtsWindowInfoUtils.waitForWindowOnTop; + +import android.app.Instrumentation; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -25,12 +28,13 @@ import android.view.SurfaceControl; import android.view.SurfaceHolder; import android.view.SurfaceView; - import androidx.test.ext.junit.rules.ActivityScenarioRule; import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; +import com.android.helpers.SimpleperfHelper; + import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -39,6 +43,8 @@ import org.junit.Test; import org.junit.rules.RuleChain; import org.junit.runner.RunWith; +import java.io.IOException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Random; @@ -63,12 +69,33 @@ public class SurfaceFlingerPerfTest { public final RuleChain mAllRules = RuleChain .outerRule(mActivityRule); + private int mTransformHint; + private SimpleperfHelper mSimpleperfHelper = new SimpleperfHelper(); + + /** Start simpleperf sampling. */ + public void startSimpleperf(String subcommand, String arguments) { + if (!mSimpleperfHelper.startCollecting(subcommand, arguments)) { + Log.e(TAG, "Simpleperf did not start successfully."); + } + } + + /** Stop simpleperf sampling and dump the collected file into the given path. */ + private void stopSimpleperf(Path path) { + if (!mSimpleperfHelper.stopCollecting(path.toString())) { + Log.e(TAG, "Failed to collect the simpleperf output."); + } + } + @BeforeClass public static void suiteSetup() { final Bundle arguments = InstrumentationRegistry.getArguments(); sProfilingIterations = Integer.parseInt( arguments.getString(ARGUMENT_PROFILING_ITERATIONS, DEFAULT_PROFILING_ITERATIONS)); Log.d(TAG, "suiteSetup: mProfilingIterations = " + sProfilingIterations); + // disable transaction tracing + InstrumentationRegistry.getInstrumentation() + .getUiAutomation() + .executeShellCommand("service call SurfaceFlinger 1041 i32 -1"); } @Before @@ -77,17 +104,45 @@ public class SurfaceFlingerPerfTest { SurfaceControl.Transaction t = new SurfaceControl.Transaction(); for (int i = 0; i < MAX_BUFFERS; i++) { SurfaceControl sc = createSurfaceControl(); - BufferFlinger bufferTracker = createBufferTracker(Color.argb(getRandomColorComponent(), - getRandomColorComponent(), getRandomColorComponent(), - getRandomColorComponent())); + BufferFlinger bufferTracker = + createBufferTracker( + Color.argb( + getRandomColorComponent(), + getRandomColorComponent(), + getRandomColorComponent(), + getRandomColorComponent()), + mActivity.getBufferTransformHint()); bufferTracker.addBuffer(t, sc); t.setPosition(sc, i * 10, i * 10); } t.apply(true); + mBufferTrackers.get(0).addBuffer(mTransaction, mSurfaceControls.get(0)); + mTransaction.show(mSurfaceControls.get(0)).apply(true); + Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); + + instrumentation.waitForIdleSync(); + // Wait for device animation that shows above the activity to leave. + try { + waitForWindowOnTop(mActivity.getWindow()); + } catch (InterruptedException e) { + Log.e(TAG, "Failed to wait for window", e); + } + String args = + "-o /data/local/tmp/perf.data -g -e" + + " instructions,cpu-cycles,raw-l3d-cache-refill,sched:sched_waking -p " + + mSimpleperfHelper.getPID("surfaceflinger") + + "," + + mSimpleperfHelper.getPID("android.perftests.surfaceflinger"); + startSimpleperf("record", args); } @After public void teardown() { + try { + mSimpleperfHelper.stopSimpleperf(); + } catch (IOException e) { + Log.e(TAG, "Failed to stop simpleperf", e); + } mSurfaceControls.forEach(SurfaceControl::release); mBufferTrackers.forEach(BufferFlinger::freeBuffers); } @@ -97,8 +152,9 @@ public class SurfaceFlingerPerfTest { } private final ArrayList<BufferFlinger> mBufferTrackers = new ArrayList<>(); - private BufferFlinger createBufferTracker(int color) { - BufferFlinger bufferTracker = new BufferFlinger(BUFFER_COUNT, color); + + private BufferFlinger createBufferTracker(int color, int bufferTransformHint) { + BufferFlinger bufferTracker = new BufferFlinger(BUFFER_COUNT, color, bufferTransformHint); mBufferTrackers.add(bufferTracker); return bufferTracker; } diff --git a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerTestActivity.java b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerTestActivity.java index bb956596c7ebdd6382bac73946dc0f5398596386..5f1f44d826e54e1b5d7cc1ae158b1848c13fb30a 100644 --- a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerTestActivity.java +++ b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerTestActivity.java @@ -16,12 +16,15 @@ package android.surfaceflinger; +import static android.view.Surface.FRAME_RATE_COMPATIBILITY_DEFAULT; + import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.SurfaceControl; import android.view.SurfaceHolder; import android.view.SurfaceView; +import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -42,6 +45,11 @@ public class SurfaceFlingerTestActivity extends Activity { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + View decorView = getWindow().getDecorView(); + // Hide both the navigation bar and the status bar. + int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; + decorView.setSystemUiVisibility(uiOptions); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mTestSurfaceView = new TestSurfaceView(this); setContentView(mTestSurfaceView); @@ -51,6 +59,10 @@ public class SurfaceFlingerTestActivity extends Activity { return mTestSurfaceView.getChildSurfaceControlHelper(); } + public int getBufferTransformHint() { + return mTestSurfaceView.getRootSurfaceControl().getBufferTransformHint(); + } + public class TestSurfaceView extends SurfaceView { public TestSurfaceView(Context context) { super(context); @@ -79,6 +91,9 @@ public class SurfaceFlingerTestActivity extends Activity { // check to see if surface is valid if (holder.getSurface().isValid()) { mSurfaceControl = getSurfaceControl(); + new SurfaceControl.Transaction() + .setFrameRate(mSurfaceControl, 1000, FRAME_RATE_COMPATIBILITY_DEFAULT) + .apply(true); } return new SurfaceControl.Builder() .setName("ChildSurfaceControl") diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java index 9dedf70251430e7f87895aa4b0a9570f182e1e71..0d3dc4901d8ddacc2893f223bc40cdfa1aee4c16 100644 --- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -1246,6 +1246,40 @@ public class Bmgr { return "TRANSPORT_IS_NULL"; case BackupManagerMonitor.LOG_EVENT_ID_AGENT_LOGGING_RESULTS: return "AGENT_LOGGING_RESULTS"; + case BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE: + return "START_SYSTEM_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL: + return "START_RESTORE_AT_INSTALL"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE: + return "TRANSPORT_ERROR_DURING_START_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME: + return "CANNOT_GET_NEXT_PKG_NAME"; + case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE: + return "UNKNOWN_RESTORE_TYPE"; + case BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE: + return "KV_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE: + return "FULL_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET: + return "NO_NEXT_RESTORE_TARGET"; + case BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR: + return "KV_AGENT_ERROR"; + case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED: + return "PACKAGE_RESTORE_FINISHED"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE: + return "TRANSPORT_ERROR_KV_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD: + return "NO_FEEDER_THREAD"; + case BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR: + return "FULL_AGENT_ERROR"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE: + return "TRANSPORT_ERROR_FULL_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE: + return "RESTORE_COMPLETE"; + case BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE: + return "START_PACKAGE_RESTORE"; + case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE: + return "AGENT_FAILURE"; default: return "UNKNOWN_ID"; } diff --git a/core/api/current.txt b/core/api/current.txt index d48685ba6f66284bb58fcfbb7b22977ebff190b4..1eb9e97db42bb43447afd8487b4e92495d277974 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -44888,6 +44888,7 @@ package android.telephony { method public int getSubscriptionType(); method public int getUsageSetting(); method public boolean isEmbedded(); + method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public boolean isNtn(); method public boolean isOpportunistic(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 7c78f09f005784ac09fdbaf8593d68674a649c69..69ed5aeda7de648912e90965548b62cc15fc316f 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10635,12 +10635,14 @@ package android.permission { method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable); method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void onGetUnusedAppCount(@NonNull java.util.function.IntConsumer); method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable); - method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String); + method @Deprecated @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String); + method @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String, int); method @Deprecated @BinderThread public void onRestoreDelayedRuntimePermissionsBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @Deprecated @BinderThread public void onRestoreRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable); method @BinderThread public abstract void onRevokeRuntimePermission(@NonNull String, @NonNull String, @NonNull Runnable); method @BinderThread public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull String, @NonNull java.util.function.Consumer<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>); - method @BinderThread public void onRevokeSelfPermissionsOnKill(@NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull Runnable); + method @Deprecated @BinderThread public void onRevokeSelfPermissionsOnKill(@NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull Runnable); + method @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) @BinderThread public void onRevokeSelfPermissionsOnKill(@NonNull String, @NonNull java.util.List<java.lang.String>, int, @NonNull Runnable); method @Deprecated @BinderThread public abstract void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @BinderThread public void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull android.permission.AdminPermissionControlParams, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @BinderThread public void onStageAndApplyRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 01912012f04adc51e4e7f37289e94fd597769bbb..9f03030b35186d04f91d8b9473145917b95ddc6d 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -36,6 +36,7 @@ import static android.view.Display.INVALID_DISPLAY; import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded; import static android.window.ConfigurationHelper.isDifferentDisplay; import static android.window.ConfigurationHelper.shouldUpdateResources; + import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.internal.os.SafeZipPathValidatorCallback.VALIDATE_ZIP_PATH_FOR_PATH_TRAVERSAL; import static com.android.sdksandbox.flags.Flags.sandboxActivitySdkBasedContext; @@ -265,6 +266,7 @@ import java.util.Objects; import java.util.TimeZone; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; /** * This manages the execution of the main thread in an @@ -382,6 +384,11 @@ public final class ActivityThread extends ClientTransactionHandler @GuardedBy("mAppThread") private int mLastProcessState = PROCESS_STATE_UNKNOWN; final ArrayList<WeakReference<AssistStructure>> mLastAssistStructures = new ArrayList<>(); + + @NonNull + private final ConfigurationChangedListenerController mConfigurationChangedListenerController = + new ConfigurationChangedListenerController(); + private int mLastSessionId; // Holds the value of the last reported device ID value from the server for the top activity. int mLastReportedDeviceId; @@ -3608,6 +3615,21 @@ public final class ActivityThread extends ClientTransactionHandler return mConfigurationController.getConfiguration(); } + /** + * @hide + */ + public void addConfigurationChangedListener(Executor executor, + Consumer<IBinder> consumer) { + mConfigurationChangedListenerController.addListener(executor, consumer); + } + + /** + * @hide + */ + public void removeConfigurationChangedListener(Consumer<IBinder> consumer) { + mConfigurationChangedListenerController.removeListener(consumer); + } + @Override public void updatePendingConfiguration(Configuration config) { final Configuration updatedConfig = @@ -3663,10 +3685,9 @@ public final class ActivityThread extends ClientTransactionHandler int resultCode, Intent data) { if (DEBUG_RESULTS) Slog.v(TAG, "sendActivityResult: id=" + id + " req=" + requestCode + " res=" + resultCode + " data=" + data); - ArrayList<ResultInfo> list = new ArrayList<ResultInfo>(); + final ArrayList<ResultInfo> list = new ArrayList<>(); list.add(new ResultInfo(id, requestCode, resultCode, data)); - final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread, - activityToken); + final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread); clientTransaction.addCallback(ActivityResultItem.obtain(activityToken, list)); try { mAppThread.scheduleTransaction(clientTransaction); @@ -4441,7 +4462,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) { - final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); + final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.token, r.activity.isFinishing(), /* userLeaving */ true, r.activity.mConfigChangeFlags, /* dontReport */ false, /* autoEnteringPip */ false)); @@ -4449,7 +4470,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void scheduleResume(ActivityClientRecord r) { - final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); + final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(r.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false)); executeTransaction(transaction); @@ -6041,7 +6062,7 @@ public final class ActivityThread extends ClientTransactionHandler final ActivityLifecycleItem lifecycleRequest = TransactionExecutorHelper.getLifecycleRequestForCurrentState(r); // Schedule the transaction. - final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); + final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.addCallback(activityRelaunchItem); transaction.setLifecycleStateRequest(lifecycleRequest); executeTransaction(transaction); @@ -6252,6 +6273,8 @@ public final class ActivityThread extends ClientTransactionHandler " did not call through to super.onConfigurationChanged()"); } } + mConfigurationChangedListenerController + .dispatchOnConfigurationChanged(activity.getActivityToken()); return configToReport; } diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 04d04b9adbdd37386558bf22a77d4dbadcb8e7b8..e5a73be5023a2ccabe0a63cda4fa5acbd80eb0ee 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2943,6 +2943,17 @@ public class ApplicationPackageManager extends PackageManager { return isPackageSuspendedForUser(mContext.getOpPackageName(), getUserId()); } + @Override + public boolean isPackageQuarantined(@NonNull String packageName) throws NameNotFoundException { + try { + return mPM.isPackageQuarantinedForUser(packageName, getUserId()); + } catch (IllegalArgumentException ie) { + throw new NameNotFoundException(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** @hide */ @Override public void setApplicationCategoryHint(String packageName, int categoryHint) { diff --git a/core/java/android/app/ConfigurationChangedListenerController.java b/core/java/android/app/ConfigurationChangedListenerController.java new file mode 100644 index 0000000000000000000000000000000000000000..c644d57fb9a761ee8d35fb835378c653fabd06cd --- /dev/null +++ b/core/java/android/app/ConfigurationChangedListenerController.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2023 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.app; + +import android.annotation.NonNull; +import android.os.IBinder; + +import com.android.internal.annotations.GuardedBy; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.function.Consumer; + +/** + * Manages listeners for unfiltered configuration changes. + * @hide + */ +class ConfigurationChangedListenerController { + + private final Object mLock = new Object(); + + @GuardedBy("mLock") + private final List<ListenerContainer> mListenerContainers = new ArrayList<>(); + + /** + * Adds a listener to receive updates when they are dispatched. This only dispatches updates and + * does not relay the last emitted value. If called with the same listener then this method does + * not have any effect. + * @param executor an executor that is used to dispatch the updates. + * @param consumer a listener interested in receiving updates. + */ + void addListener(@NonNull Executor executor, + @NonNull Consumer<IBinder> consumer) { + synchronized (mLock) { + if (indexOf(consumer) > -1) { + return; + } + mListenerContainers.add(new ListenerContainer(executor, consumer)); + } + } + + /** + * Removes the listener that was previously registered. If the listener was not registered this + * method does not have any effect. + */ + void removeListener(@NonNull Consumer<IBinder> consumer) { + synchronized (mLock) { + final int index = indexOf(consumer); + if (index > -1) { + mListenerContainers.remove(index); + } + } + } + + /** + * Dispatches the update to all registered listeners + * @param activityToken a token for the {@link Activity} that received a configuration update. + */ + void dispatchOnConfigurationChanged(@NonNull IBinder activityToken) { + final List<ListenerContainer> consumers; + synchronized (mLock) { + consumers = new ArrayList<>(mListenerContainers); + } + for (int i = 0; i < consumers.size(); i++) { + consumers.get(i).accept(activityToken); + } + } + + @GuardedBy("mLock") + private int indexOf(Consumer<IBinder> consumer) { + for (int i = 0; i < mListenerContainers.size(); i++) { + if (mListenerContainers.get(i).isMatch(consumer)) { + return i; + } + } + return -1; + } + + private static final class ListenerContainer { + + @NonNull + private final Executor mExecutor; + @NonNull + private final Consumer<IBinder> mConsumer; + + ListenerContainer(@NonNull Executor executor, + @NonNull Consumer<IBinder> consumer) { + mExecutor = executor; + mConsumer = consumer; + } + + public boolean isMatch(@NonNull Consumer<IBinder> consumer) { + return mConsumer.equals(consumer); + } + + public void accept(@NonNull IBinder activityToken) { + mExecutor.execute(() -> mConsumer.accept(activityToken)); + } + + } +} diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index cbbf4e0f9adc847b262fcf4547f0b0d1b0784134..fa52968e4554eb62f6ee8de2bec9f1ea25a55391 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -1647,6 +1647,12 @@ public final class SystemServiceRegistry { case Context.VIRTUALIZATION_SERVICE: case Context.VIRTUAL_DEVICE_SERVICE: return null; + case Context.SEARCH_SERVICE: + // Wear device does not support SEARCH_SERVICE so we do not print WTF here + PackageManager manager = ctx.getPackageManager(); + if (manager != null && manager.hasSystemFeature(PackageManager.FEATURE_WATCH)) { + return null; + } } Slog.wtf(TAG, "Manager wrapper not available: " + name); return null; diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java index 634089b736189ff9d06821ecbf34c1e4363a21f7..5f8b76508ef37680b9102a994003025a452eaca1 100644 --- a/core/java/android/app/TaskInfo.java +++ b/core/java/android/app/TaskInfo.java @@ -254,6 +254,12 @@ public class TaskInfo { */ public boolean isUserFullscreenOverrideEnabled; + /** + * Whether the top activity fillsParent() is false + * @hide + */ + public boolean isTopActivityTransparent; + /** * Hint about the letterbox state of the top activity. * @hide @@ -551,7 +557,8 @@ public class TaskInfo { && Objects.equals(mTopActivityLocusId, that.mTopActivityLocusId) && parentTaskId == that.parentTaskId && Objects.equals(topActivity, that.topActivity) - && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled; + && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled + && isTopActivityTransparent == that.isTopActivityTransparent; } /** @@ -583,7 +590,9 @@ public class TaskInfo { == that.configuration.getLayoutDirection()) && (!hasCompatUI() || configuration.uiMode == that.configuration.uiMode) && (!hasCompatUI() || isVisible == that.isVisible) - && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled; + && isFocused == that.isFocused + && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled + && isTopActivityTransparent == that.isTopActivityTransparent; } /** @@ -640,6 +649,7 @@ public class TaskInfo { topActivityLetterboxWidth = source.readInt(); topActivityLetterboxHeight = source.readInt(); isUserFullscreenOverrideEnabled = source.readBoolean(); + isTopActivityTransparent = source.readBoolean(); } /** @@ -697,6 +707,7 @@ public class TaskInfo { dest.writeInt(topActivityLetterboxWidth); dest.writeInt(topActivityLetterboxHeight); dest.writeBoolean(isUserFullscreenOverrideEnabled); + dest.writeBoolean(isTopActivityTransparent); } @Override @@ -744,6 +755,7 @@ public class TaskInfo { + " topActivityLetterboxWidth=" + topActivityLetterboxWidth + " topActivityLetterboxHeight=" + topActivityLetterboxHeight + " isUserFullscreenOverrideEnabled=" + isUserFullscreenOverrideEnabled + + " isTopActivityTransparent=" + isTopActivityTransparent + " locusId=" + mTopActivityLocusId + " displayAreaFeatureId=" + displayAreaFeatureId + " cameraCompatControlState=" diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index c31aa01a6b7cc6d39ef256cdaab7e1d092b63ce1..fce5e4f1fd21edb9ff8564233a6e91e4d05f27b8 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -2429,11 +2429,8 @@ public class WallpaperManager { } /** - * Reset all wallpaper to the factory default. As opposed to {@link #clear()}, if the device - * is configured to have a live wallpaper by default, apply it. - * - * <p>This method requires the caller to hold the permission - * {@link android.Manifest.permission#SET_WALLPAPER}. + * Equivalent to {@link #clear()}. + * @see #clear() */ @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clearWallpaper() { @@ -2767,8 +2764,7 @@ public class WallpaperManager { /** * Remove any currently set system wallpaper, reverting to the system's built-in - * wallpaper. As opposed to {@link #clearWallpaper()}, this method always set a static wallpaper - * with the default image, even if the device is configured to have a live wallpaper by default. + * wallpaper. * On success, the intent {@link Intent#ACTION_WALLPAPER_CHANGED} is broadcast. * * <p>This method requires the caller to hold the permission @@ -2779,6 +2775,10 @@ public class WallpaperManager { */ @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear() throws IOException { + if (isLockscreenLiveWallpaperEnabled()) { + clear(FLAG_SYSTEM | FLAG_LOCK); + return; + } setStream(openDefaultWallpaper(mContext, FLAG_SYSTEM), null, false); } @@ -2787,10 +2787,15 @@ public class WallpaperManager { * display for each one. On success, the intent {@link Intent#ACTION_WALLPAPER_CHANGED} * is broadcast. * <ul> - * <li> If {@link #FLAG_SYSTEM} is set in the {@code which} parameter, put the default - * wallpaper on both home and lock screen, removing any user defined wallpaper. </li> * <li> When called with {@code which=}{@link #FLAG_LOCK}, clear the lockscreen wallpaper. * The home screen wallpaper will become visible on the lock screen. </li> + * + * <li> When called with {@code which=}{@link #FLAG_SYSTEM}, revert the home screen + * wallpaper to default. The lockscreen wallpaper will be unchanged: if the previous + * wallpaper was shared between home and lock screen, it will become lock screen only. </li> + * + * <li> When called with {@code which=}({@link #FLAG_LOCK} | {@link #FLAG_SYSTEM}), put the + * default wallpaper on both home and lock screen, removing any user defined wallpaper.</li> * </ul> * * @param which A bitwise combination of {@link #FLAG_SYSTEM} or @@ -2799,9 +2804,12 @@ public class WallpaperManager { */ @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear(@SetWallpaperFlags int which) throws IOException { + if (isLockscreenLiveWallpaperEnabled()) { + clearWallpaper(which, mContext.getUserId()); + return; + } if ((which & FLAG_SYSTEM) != 0) { clear(); - if (isLockscreenLiveWallpaperEnabled()) return; } if ((which & FLAG_LOCK) != 0) { clearWallpaper(FLAG_LOCK, mContext.getUserId()); diff --git a/core/java/android/app/backup/BackupManagerMonitor.java b/core/java/android/app/backup/BackupManagerMonitor.java index f73366b6af0c517572c5409ece49df9395cb311d..812bf8e6be6a96ee9e43230b8178db478fdf5bc4 100644 --- a/core/java/android/app/backup/BackupManagerMonitor.java +++ b/core/java/android/app/backup/BackupManagerMonitor.java @@ -18,6 +18,7 @@ package android.app.backup; import android.annotation.SystemApi; import android.app.backup.BackupAnnotations.OperationType; +import android.content.pm.PackageInfo; import android.os.Bundle; /** @@ -190,6 +191,56 @@ public class BackupManagerMonitor { public static final int LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = 51; public static final int LOG_EVENT_ID_AGENT_LOGGING_RESULTS = 52; + /** @hide */ + public static final int LOG_EVENT_ID_START_SYSTEM_RESTORE = 53; + /** @hide */ + public static final int LOG_EVENT_ID_START_RESTORE_AT_INSTALL = 54; + /** A transport error happened during {@link PerformUnifiedRestoreTask#startRestore()} + @hide */ + public static final int LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE = 55; + /** Unable to get the name of the next package in the queue during a restore operation + @hide */ + public static final int LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME = 56; + /** Attempting a restore operation that is neither KV nor full + @hide */ + public static final int LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE = 57; + /** The package is part of KeyValue restore + @hide */ + public static final int LOG_EVENT_ID_KV_RESTORE = 58; + /** The package is part of Full restore + @hide */ + public static final int LOG_EVENT_ID_FULL_RESTORE = 59; + /** Unable to fetch the nest restore target in the queue + @hide */ + public static final int LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET = 60; + /** An error occurred while attempting KeyValueRestore + @hide */ + public static final int LOG_EVENT_ID_KV_AGENT_ERROR = 61; + /** Restore operation finished for the given package + @hide */ + public static final int LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED= 62; + /** A transport error happened during + * {@link PerformUnifiedRestoreTask#initiateOneRestore(PackageInfo, long)} + @hide */ + public static final int LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE = 63; + /** Unable to instantiate the feeder thread in full restore + @hide */ + public static final int LOG_EVENT_ID_NO_FEEDER_THREAD = 64; + /** An error occurred while attempting Full restore + @hide */ + public static final int LOG_EVENT_ID_FULL_AGENT_ERROR = 65; + /** A transport error happened during a full restore + @hide */ + public static final int LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE = 66; + /** Start restore operation for a given package + @hide */ + public static final int LOG_EVENT_ID_START_PACKAGE_RESTORE = 67; + /** Whole restore operation is complete + @hide */ + public static final int LOG_EVENT_ID_RESTORE_COMPLETE = 68; + /** Agent error during {@link PerformUnifiedRestoreTask#restoreFinished()} + @hide */ + public static final int LOG_EVENT_ID_AGENT_FAILURE = 69; /** * This method will be called each time something important happens on BackupManager. diff --git a/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java b/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java index c2c54278a84e3f20494c21875f637204fec72ee4..dd332c850d5d1b3ea145f84a7d324bcff1227db9 100644 --- a/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java @@ -41,7 +41,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { private Configuration mConfiguration; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration); // Notify the client of an upcoming change in the token configuration. This ensures that // batches of config change items only process the newest configuration. @@ -59,8 +59,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { @Nullable @Override - public Context getContextToUpdate(@NonNull ClientTransactionHandler client, - @Nullable IBinder token) { + public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return client.getActivity(getActivityToken()); } diff --git a/core/java/android/app/servertransaction/ActivityRelaunchItem.java b/core/java/android/app/servertransaction/ActivityRelaunchItem.java index 491d0260f6fb54991c9c86f660269ebd131b64cf..a5dd115d78b3f3dc5b6b364057e25343e0ed93d2 100644 --- a/core/java/android/app/servertransaction/ActivityRelaunchItem.java +++ b/core/java/android/app/servertransaction/ActivityRelaunchItem.java @@ -56,7 +56,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { private ActivityClientRecord mActivityClientRecord; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { // The local config is already scaled so only apply if this item is from server side. if (!client.isExecutingLocalTransaction()) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig); @@ -78,7 +78,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); client.reportRelaunch(r); diff --git a/core/java/android/app/servertransaction/ActivityTransactionItem.java b/core/java/android/app/servertransaction/ActivityTransactionItem.java index 0f8879e1429be04d08eccee4a78f3bd794125f4f..2a65b3528145910aa18084c5e84e382ef0846988 100644 --- a/core/java/android/app/servertransaction/ActivityTransactionItem.java +++ b/core/java/android/app/servertransaction/ActivityTransactionItem.java @@ -16,6 +16,8 @@ package android.app.servertransaction; +import static android.app.servertransaction.TransactionExecutorHelper.getActivityName; + import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import android.annotation.CallSuper; @@ -28,6 +30,7 @@ import android.os.Parcel; import com.android.internal.annotations.VisibleForTesting; +import java.io.PrintWriter; import java.util.Objects; /** @@ -49,14 +52,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { ActivityTransactionItem() {} @Override - public final void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public final void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); execute(client, r, pendingActions); } /** - * Like {@link #execute(ClientTransactionHandler, IBinder, PendingTransactionActions)}, + * Like {@link #execute(ClientTransactionHandler, PendingTransactionActions)}, * but take non-null {@link ActivityClientRecord} as a parameter. */ @VisibleForTesting(visibility = PACKAGE) @@ -111,6 +114,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { mActivityToken = null; } + @Override + void dump(@NonNull String prefix, @NonNull PrintWriter pw, + @NonNull ClientTransactionHandler transactionHandler) { + super.dump(prefix, pw, transactionHandler); + pw.append(prefix).append("Target activity: ") + .println(getActivityName(mActivityToken, transactionHandler)); + } + // Subclass must override and call super.equals to compare the mActivityToken. @SuppressWarnings("EqualsGetClass") @CallSuper diff --git a/core/java/android/app/servertransaction/BaseClientRequest.java b/core/java/android/app/servertransaction/BaseClientRequest.java index c91e0ca5ffc111bc602591e915f19b58d167af3d..f2751752abd8477e568f176560b8b8044129361c 100644 --- a/core/java/android/app/servertransaction/BaseClientRequest.java +++ b/core/java/android/app/servertransaction/BaseClientRequest.java @@ -16,8 +16,8 @@ package android.app.servertransaction; +import android.annotation.NonNull; import android.app.ClientTransactionHandler; -import android.os.IBinder; /** * Base interface for individual requests from server to client. @@ -27,31 +27,28 @@ import android.os.IBinder; public interface BaseClientRequest extends ObjectPoolItem { /** - * Prepare the client request before scheduling. + * Prepares the client request before scheduling. * An example of this might be informing about pending updates for some values. * * @param client Target client handler. - * @param token Target activity token. */ - default void preExecute(ClientTransactionHandler client, IBinder token) { + default void preExecute(@NonNull ClientTransactionHandler client) { } /** - * Execute the request. + * Executes the request. * @param client Target client handler. - * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ - void execute(ClientTransactionHandler client, IBinder token, - PendingTransactionActions pendingActions); + void execute(@NonNull ClientTransactionHandler client, + @NonNull PendingTransactionActions pendingActions); /** - * Perform all actions that need to happen after execution, e.g. report the result to server. + * Performs all actions that need to happen after execution, e.g. report the result to server. * @param client Target client handler. - * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ - default void postExecute(ClientTransactionHandler client, IBinder token, - PendingTransactionActions pendingActions) { + default void postExecute(@NonNull ClientTransactionHandler client, + @NonNull PendingTransactionActions pendingActions) { } } diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java index ee14708c38a8436a013d022c5a8d7fefe867076d..a5b0f18dad3b19cb97cf957bbec12218c1000306 100644 --- a/core/java/android/app/servertransaction/ClientTransaction.java +++ b/core/java/android/app/servertransaction/ClientTransaction.java @@ -16,6 +16,9 @@ package android.app.servertransaction; +import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; + +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ClientTransactionHandler; import android.app.IApplicationThread; @@ -36,7 +39,7 @@ import java.util.Objects; * A container that holds a sequence of messages, which may be sent to a client. * This includes a list of callbacks and a final lifecycle state. * - * @see com.android.server.am.ClientLifecycleManager + * @see com.android.server.wm.ClientLifecycleManager * @see ClientTransactionItem * @see ActivityLifecycleItem * @hide @@ -56,9 +59,6 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { /** Target client. */ private IApplicationThread mClient; - /** Target client activity. Might be null if the entire transaction is targeting an app. */ - private IBinder mActivityToken; - /** Get the target client of the transaction. */ public IApplicationThread getClient() { return mClient; @@ -68,7 +68,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { * Add a message to the end of the sequence of callbacks. * @param activityCallback A single message that can contain a lifecycle request/callback. */ - public void addCallback(ClientTransactionItem activityCallback) { + public void addCallback(@NonNull ClientTransactionItem activityCallback) { if (mActivityCallbacks == null) { mActivityCallbacks = new ArrayList<>(); } @@ -87,11 +87,21 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { @Nullable @UnsupportedAppUsage public IBinder getActivityToken() { - return mActivityToken; + // TODO(b/260873529): remove after we allow multiple activity items in one transaction. + if (mLifecycleStateRequest != null) { + return mLifecycleStateRequest.getActivityToken(); + } + for (int i = mActivityCallbacks.size() - 1; i >= 0; i--) { + final IBinder token = mActivityCallbacks.get(i).getActivityToken(); + if (token != null) { + return token; + } + } + return null; } /** Get the target state lifecycle request. */ - @VisibleForTesting + @VisibleForTesting(visibility = PACKAGE) @UnsupportedAppUsage public ActivityLifecycleItem getLifecycleStateRequest() { return mLifecycleStateRequest; @@ -101,7 +111,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { * Set the lifecycle state in which the client should be after executing the transaction. * @param stateRequest A lifecycle request initialized with right parameters. */ - public void setLifecycleStateRequest(ActivityLifecycleItem stateRequest) { + public void setLifecycleStateRequest(@NonNull ActivityLifecycleItem stateRequest) { mLifecycleStateRequest = stateRequest; } @@ -110,15 +120,15 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { * @param clientTransactionHandler Handler on the client side that will executed all operations * requested by transaction items. */ - public void preExecute(android.app.ClientTransactionHandler clientTransactionHandler) { + public void preExecute(@NonNull ClientTransactionHandler clientTransactionHandler) { if (mActivityCallbacks != null) { final int size = mActivityCallbacks.size(); for (int i = 0; i < size; ++i) { - mActivityCallbacks.get(i).preExecute(clientTransactionHandler, mActivityToken); + mActivityCallbacks.get(i).preExecute(clientTransactionHandler); } } if (mLifecycleStateRequest != null) { - mLifecycleStateRequest.preExecute(clientTransactionHandler, mActivityToken); + mLifecycleStateRequest.preExecute(clientTransactionHandler); } } @@ -141,14 +151,14 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { private ClientTransaction() {} - /** Obtain an instance initialized with provided params. */ - public static ClientTransaction obtain(IApplicationThread client, IBinder activityToken) { + /** Obtains an instance initialized with provided params. */ + @NonNull + public static ClientTransaction obtain(@Nullable IApplicationThread client) { ClientTransaction instance = ObjectPool.obtain(ClientTransaction.class); if (instance == null) { instance = new ClientTransaction(); } instance.mClient = client; - instance.mActivityToken = activityToken; return instance; } @@ -167,7 +177,6 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { mLifecycleStateRequest = null; } mClient = null; - mActivityToken = null; ObjectPool.recycle(this); } @@ -175,12 +184,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { /** Write to Parcel. */ @Override - public void writeToParcel(Parcel dest, int flags) { - final boolean writeActivityToken = mActivityToken != null; - dest.writeBoolean(writeActivityToken); - if (writeActivityToken) { - dest.writeStrongBinder(mActivityToken); - } + public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeParcelable(mLifecycleStateRequest, flags); final boolean writeActivityCallbacks = mActivityCallbacks != null; dest.writeBoolean(writeActivityCallbacks); @@ -190,11 +194,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { } /** Read from Parcel. */ - private ClientTransaction(Parcel in) { - final boolean readActivityToken = in.readBoolean(); - if (readActivityToken) { - mActivityToken = in.readStrongBinder(); - } + private ClientTransaction(@NonNull Parcel in) { mLifecycleStateRequest = in.readParcelable(getClass().getClassLoader(), android.app.servertransaction.ActivityLifecycleItem.class); final boolean readActivityCallbacks = in.readBoolean(); if (readActivityCallbacks) { @@ -203,9 +203,8 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { } } - public static final @android.annotation.NonNull Creator<ClientTransaction> CREATOR = - new Creator<ClientTransaction>() { - public ClientTransaction createFromParcel(Parcel in) { + public static final @NonNull Creator<ClientTransaction> CREATOR = new Creator<>() { + public ClientTransaction createFromParcel(@NonNull Parcel in) { return new ClientTransaction(in); } @@ -230,8 +229,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { final ClientTransaction other = (ClientTransaction) o; return Objects.equals(mActivityCallbacks, other.mActivityCallbacks) && Objects.equals(mLifecycleStateRequest, other.mLifecycleStateRequest) - && mClient == other.mClient - && mActivityToken == other.mActivityToken; + && mClient == other.mClient; } @Override @@ -240,26 +238,32 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { result = 31 * result + Objects.hashCode(mActivityCallbacks); result = 31 * result + Objects.hashCode(mLifecycleStateRequest); result = 31 * result + Objects.hashCode(mClient); - result = 31 * result + Objects.hashCode(mActivityToken); return result; } /** Dump transaction items callback items and final lifecycle state request. */ - public void dump(String prefix, PrintWriter pw) { + void dump(@NonNull String prefix, @NonNull PrintWriter pw, + @NonNull ClientTransactionHandler transactionHandler) { pw.append(prefix).println("ClientTransaction{"); pw.append(prefix).print(" callbacks=["); + final String itemPrefix = prefix + " "; final int size = mActivityCallbacks != null ? mActivityCallbacks.size() : 0; if (size > 0) { pw.println(); for (int i = 0; i < size; i++) { - pw.append(prefix).append(" ").println(mActivityCallbacks.get(i).toString()); + mActivityCallbacks.get(i).dump(itemPrefix, pw, transactionHandler); } pw.append(prefix).println(" ]"); } else { pw.println("]"); } - pw.append(prefix).append(" stateRequest=").println(mLifecycleStateRequest != null - ? mLifecycleStateRequest.toString() : null); + + pw.append(prefix).println(" stateRequest="); + if (mLifecycleStateRequest != null) { + mLifecycleStateRequest.dump(itemPrefix, pw, transactionHandler); + } else { + pw.append(itemPrefix).println("null"); + } pw.append(prefix).println("}"); } } diff --git a/core/java/android/app/servertransaction/ClientTransactionItem.java b/core/java/android/app/servertransaction/ClientTransactionItem.java index 30fc104a71b754bf946f913ef35dcd6ef0cfca6f..07e5a7dc5f0272695f6d09059b45468217d463e3 100644 --- a/core/java/android/app/servertransaction/ClientTransactionItem.java +++ b/core/java/android/app/servertransaction/ClientTransactionItem.java @@ -30,6 +30,8 @@ import android.os.Parcelable; import com.android.internal.annotations.VisibleForTesting; +import java.io.PrintWriter; + /** * A callback message to a client that can be scheduled and executed. * Examples of these might be activity configuration change, multi-window mode change, activity @@ -56,8 +58,7 @@ public abstract class ClientTransactionItem implements BaseClientRequest, Parcel * it is updating; otherwise, returns {@code null}. */ @Nullable - public Context getContextToUpdate(@NonNull ClientTransactionHandler client, - @NonNull IBinder token) { + public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return null; } @@ -71,6 +72,12 @@ public abstract class ClientTransactionItem implements BaseClientRequest, Parcel return null; } + /** Dumps this transaction item. */ + void dump(@NonNull String prefix, @NonNull PrintWriter pw, + @NonNull ClientTransactionHandler transactionHandler) { + pw.append(prefix).println(this); + } + // Parcelable @Override diff --git a/core/java/android/app/servertransaction/ConfigurationChangeItem.java b/core/java/android/app/servertransaction/ConfigurationChangeItem.java index f72e2e04deca800b1ad0b4bb2a4495449d3de3c4..96961aced987bca3266a6d6cfef1808ebf5c8608 100644 --- a/core/java/android/app/servertransaction/ConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ConfigurationChangeItem.java @@ -23,7 +23,6 @@ import android.app.ClientTransactionHandler; import android.content.Context; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; -import android.os.IBinder; import android.os.Parcel; import java.util.Objects; @@ -38,21 +37,20 @@ public class ConfigurationChangeItem extends ClientTransactionItem { private int mDeviceId; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration); client.updatePendingConfiguration(mConfiguration); } @Override - public void execute(@NonNull ClientTransactionHandler client, @Nullable IBinder token, + public void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { client.handleConfigurationChanged(mConfiguration, mDeviceId); } @Nullable @Override - public Context getContextToUpdate(@NonNull ClientTransactionHandler client, - @Nullable IBinder token) { + public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return ActivityThread.currentApplication(); } diff --git a/core/java/android/app/servertransaction/DestroyActivityItem.java b/core/java/android/app/servertransaction/DestroyActivityItem.java index a327a99435ceb4dc24c205c111a4264e18e58852..ddb6df10517cfe6c79d007eacd44a3a244c43c1d 100644 --- a/core/java/android/app/servertransaction/DestroyActivityItem.java +++ b/core/java/android/app/servertransaction/DestroyActivityItem.java @@ -36,7 +36,7 @@ public class DestroyActivityItem extends ActivityLifecycleItem { private int mConfigChanges; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { client.getActivitiesToBeDestroyed().put(getActivityToken(), this); } diff --git a/core/java/android/app/servertransaction/LaunchActivityItem.java b/core/java/android/app/servertransaction/LaunchActivityItem.java index 9b37a35cdb8fc047fc5d65c01e38968bb03f77aa..a64c744c70ba968688900a382b045c80014c4936 100644 --- a/core/java/android/app/servertransaction/LaunchActivityItem.java +++ b/core/java/android/app/servertransaction/LaunchActivityItem.java @@ -84,7 +84,7 @@ public class LaunchActivityItem extends ClientTransactionItem { private IActivityClientController mActivityClientController; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { client.countLaunchingActivities(1); client.updateProcessState(mProcState, false); CompatibilityInfo.applyOverrideScaleIfNeeded(mCurConfig); @@ -96,7 +96,7 @@ public class LaunchActivityItem extends ClientTransactionItem { } @Override - public void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityStart"); ActivityClientRecord r = new ActivityClientRecord(mActivityToken, mIntent, mIdent, mInfo, @@ -109,7 +109,7 @@ public class LaunchActivityItem extends ClientTransactionItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { client.countLaunchingActivities(-1); } diff --git a/core/java/android/app/servertransaction/MoveToDisplayItem.java b/core/java/android/app/servertransaction/MoveToDisplayItem.java index fb57bed94160a3dbba6bacab653018bb63179f70..e56d3f862b1beb281d0ce4acfa5325033011301e 100644 --- a/core/java/android/app/servertransaction/MoveToDisplayItem.java +++ b/core/java/android/app/servertransaction/MoveToDisplayItem.java @@ -40,7 +40,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem { private Configuration mConfiguration; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration); // Notify the client of an upcoming change in the token configuration. This ensures that // batches of config change items only process the newest configuration. diff --git a/core/java/android/app/servertransaction/PauseActivityItem.java b/core/java/android/app/servertransaction/PauseActivityItem.java index a8e6772b4e32211a29a8ee19ea086b379c153d65..8f1e90b985e64a94a88a8e7c6bc8b4b6321b61ba 100644 --- a/core/java/android/app/servertransaction/PauseActivityItem.java +++ b/core/java/android/app/servertransaction/PauseActivityItem.java @@ -56,7 +56,7 @@ public class PauseActivityItem extends ActivityLifecycleItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { if (mDontReport) { return; diff --git a/core/java/android/app/servertransaction/RefreshCallbackItem.java b/core/java/android/app/servertransaction/RefreshCallbackItem.java index 00128f0d298f05d93d9d1a36768e65a7f57bea7a..368ed765b92257d4be3ac104b855a8542c8907c7 100644 --- a/core/java/android/app/servertransaction/RefreshCallbackItem.java +++ b/core/java/android/app/servertransaction/RefreshCallbackItem.java @@ -51,7 +51,7 @@ public class RefreshCallbackItem extends ActivityTransactionItem { @NonNull ActivityClientRecord r, @NonNull PendingTransactionActions pendingActions) {} @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); client.reportRefresh(r); diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java index b11e73cbef96a4fcd89a206f8cdb9d8f4d222532..4a0ea98ccb890d8a75ea9c6704de5b7fa48932b2 100644 --- a/core/java/android/app/servertransaction/ResumeActivityItem.java +++ b/core/java/android/app/servertransaction/ResumeActivityItem.java @@ -44,7 +44,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { private boolean mShouldSendCompatFakeFocus; @Override - public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { + public void preExecute(@NonNull ClientTransactionHandler client) { if (mUpdateProcState) { client.updateProcessState(mProcState, false); } @@ -60,7 +60,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { // TODO(lifecycler): Use interface callback instead of actual implementation. ActivityClient.getInstance().activityResumed(getActivityToken(), diff --git a/core/java/android/app/servertransaction/StopActivityItem.java b/core/java/android/app/servertransaction/StopActivityItem.java index f4325670c4fc530fd797505cc37494f41ffa2c5b..b8ce52da5a0cf76b702f96e90cc495eb1baa62f1 100644 --- a/core/java/android/app/servertransaction/StopActivityItem.java +++ b/core/java/android/app/servertransaction/StopActivityItem.java @@ -46,7 +46,7 @@ public class StopActivityItem extends ActivityLifecycleItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { client.reportStop(pendingActions); } diff --git a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java index 693599fa229c981206aade65ffd4c05fe2d0aaa7..23d4505c1c9e285d255dc4a445aa858a92cef38a 100644 --- a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java +++ b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java @@ -43,7 +43,7 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem { } @Override - public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { if (mOnTop) { return; diff --git a/core/java/android/app/servertransaction/TransactionExecutor.java b/core/java/android/app/servertransaction/TransactionExecutor.java index d080162e4b8c8598ab3cb7b33c0a3526ae91be87..44336735254df606abee2cf5f5ca9eb1eb5f4774 100644 --- a/core/java/android/app/servertransaction/TransactionExecutor.java +++ b/core/java/android/app/servertransaction/TransactionExecutor.java @@ -74,7 +74,7 @@ public class TransactionExecutor { * Then the client will cycle to the final lifecycle state if provided. Otherwise, it will * either remain in the initial state, or last state needed by a callback. */ - public void execute(ClientTransaction transaction) { + public void execute(@NonNull ClientTransaction transaction) { if (DEBUG_RESOLVER) Slog.d(TAG, tId(transaction) + "Start resolving transaction"); final IBinder token = transaction.getActivityToken(); @@ -109,7 +109,7 @@ public class TransactionExecutor { /** Cycle through all states requested by callbacks and execute them at proper times. */ @VisibleForTesting - public void executeCallbacks(ClientTransaction transaction) { + public void executeCallbacks(@NonNull ClientTransaction transaction) { final List<ClientTransactionItem> callbacks = transaction.getCallbacks(); if (callbacks == null || callbacks.isEmpty()) { // No callbacks to execute, return early. @@ -117,9 +117,6 @@ public class TransactionExecutor { } if (DEBUG_RESOLVER) Slog.d(TAG, tId(transaction) + "Resolving callbacks in transaction"); - final IBinder token = transaction.getActivityToken(); - ActivityClientRecord r = mTransactionHandler.getActivityClient(token); - // In case when post-execution state of the last callback matches the final state requested // for the activity in this transaction, we won't do the last transition here and do it when // moving to final state instead (because it may contain additional parameters from server). @@ -135,6 +132,9 @@ public class TransactionExecutor { final int size = callbacks.size(); for (int i = 0; i < size; ++i) { final ClientTransactionItem item = callbacks.get(i); + final IBinder token = item.getActivityToken(); + ActivityClientRecord r = mTransactionHandler.getActivityClient(token); + if (DEBUG_RESOLVER) Slog.d(TAG, tId(transaction) + "Resolving callback: " + item); final int postExecutionState = item.getPostExecutionState(); @@ -150,13 +150,13 @@ public class TransactionExecutor { final boolean isSyncWindowConfigUpdateFlagEnabled = !Process.isIsolated() && syncWindowConfigUpdateFlag(); final Context configUpdatedContext = isSyncWindowConfigUpdateFlagEnabled - ? item.getContextToUpdate(mTransactionHandler, token) + ? item.getContextToUpdate(mTransactionHandler) : null; final Configuration preExecutedConfig = configUpdatedContext != null ? new Configuration(configUpdatedContext.getResources().getConfiguration()) : null; - item.execute(mTransactionHandler, token, mPendingActions); + item.execute(mTransactionHandler, mPendingActions); if (configUpdatedContext != null) { final Configuration postExecutedConfig = configUpdatedContext.getResources() @@ -169,7 +169,7 @@ public class TransactionExecutor { } } - item.postExecute(mTransactionHandler, token, mPendingActions); + item.postExecute(mTransactionHandler, mPendingActions); if (r == null) { // Launch activity request will create an activity record. r = mTransactionHandler.getActivityClient(token); @@ -195,14 +195,14 @@ public class TransactionExecutor { } /** Transition to the final state if requested by the transaction. */ - private void executeLifecycleState(ClientTransaction transaction) { + private void executeLifecycleState(@NonNull ClientTransaction transaction) { final ActivityLifecycleItem lifecycleItem = transaction.getLifecycleStateRequest(); if (lifecycleItem == null) { // No lifecycle request, return early. return; } - final IBinder token = transaction.getActivityToken(); + final IBinder token = lifecycleItem.getActivityToken(); final ActivityClientRecord r = mTransactionHandler.getActivityClient(token); if (DEBUG_RESOLVER) { Slog.d(TAG, tId(transaction) + "Resolving lifecycle state: " @@ -219,8 +219,8 @@ public class TransactionExecutor { cycleToPath(r, lifecycleItem.getTargetState(), true /* excludeLastState */, transaction); // Execute the final transition with proper parameters. - lifecycleItem.execute(mTransactionHandler, token, mPendingActions); - lifecycleItem.postExecute(mTransactionHandler, token, mPendingActions); + lifecycleItem.execute(mTransactionHandler, mPendingActions); + lifecycleItem.postExecute(mTransactionHandler, mPendingActions); } /** Transition the client between states. */ diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java index 0f9c517e291631e21abcd90fc0d80e52af3a2401..7e89a5b45a2d44369ef480f004fd1b0de724ebba 100644 --- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java +++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java @@ -26,6 +26,7 @@ import static android.app.servertransaction.ActivityLifecycleItem.ON_STOP; import static android.app.servertransaction.ActivityLifecycleItem.PRE_ON_CREATE; import static android.app.servertransaction.ActivityLifecycleItem.UNDEFINED; +import android.annotation.NonNull; import android.app.Activity; import android.app.ActivityThread.ActivityClientRecord; import android.app.ClientTransactionHandler; @@ -266,14 +267,12 @@ public class TransactionExecutorHelper { } /** Dump transaction to string. */ - static String transactionToString(ClientTransaction transaction, - ClientTransactionHandler transactionHandler) { + static String transactionToString(@NonNull ClientTransaction transaction, + @NonNull ClientTransactionHandler transactionHandler) { final StringWriter stringWriter = new StringWriter(); final PrintWriter pw = new PrintWriter(stringWriter); final String prefix = tId(transaction); - transaction.dump(prefix, pw); - pw.append(prefix + "Target activity: ") - .println(getActivityName(transaction.getActivityToken(), transactionHandler)); + transaction.dump(prefix, pw, transactionHandler); return stringWriter.toString(); } diff --git a/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java b/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java index 99824b000b70fb026549f593ca29a3e80e73e0d1..375d1bf571742eae77b86cbfd7140d5a5f525ebf 100644 --- a/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java +++ b/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java @@ -41,15 +41,14 @@ public class WindowContextInfoChangeItem extends ClientTransactionItem { private WindowContextInfo mInfo; @Override - public void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { client.handleWindowContextInfoChanged(mClientToken, mInfo); } @Nullable @Override - public Context getContextToUpdate(@NonNull ClientTransactionHandler client, - @Nullable IBinder token) { + public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return client.getWindowContext(mClientToken); } diff --git a/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java b/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java index ed52a6496e957a253ac2d1b3982033bb172a1d06..1bea4682928ac75a278a67a290198bc32345691f 100644 --- a/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java +++ b/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java @@ -36,7 +36,7 @@ public class WindowContextWindowRemovalItem extends ClientTransactionItem { private IBinder mClientToken; @Override - public void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, + public void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { client.handleWindowContextWindowRemoval(mClientToken); } diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 3165e292166bce8fb5adbcb4f464d9282e4d7a39..dbaa4c93d71c9cbb1c129a795fc5bd79cfede130 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -75,7 +75,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.infra.AndroidFuture; import com.android.internal.util.function.pooled.PooledLambda; -import java.io.FileNotFoundException; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -1424,8 +1423,8 @@ public class LauncherApps { } try { return mContext.getContentResolver().openFileDescriptor(Uri.parse(uri), "r"); - } catch (FileNotFoundException e) { - Log.e(TAG, "Icon file not found: " + uri); + } catch (Exception e) { + Log.e(TAG, "Failed to open icon file: " + uri, e); return null; } } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 3bd6a099ba2f1e9b52587718e680af7728b8df39..3fc515d3d37d2a52778badd6759b7f0eef4e6f34 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -9876,6 +9876,18 @@ public abstract class PackageManager { throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented"); } + /** + * Query if an app is currently quarantined. + * + * @return {@code true} if the given package is quarantined, {@code false} otherwise + * @throws NameNotFoundException if the package could not be found. + * + * @hide + */ + public boolean isPackageQuarantined(@NonNull String packageName) throws NameNotFoundException { + throw new UnsupportedOperationException("isPackageQuarantined not implemented"); + } + /** * Provide a hint of what the {@link ApplicationInfo#category} value should * be for the given package. diff --git a/core/java/android/hardware/CameraSessionStats.java b/core/java/android/hardware/CameraSessionStats.java index 1c2cbbc819713a02dfe53b657a1d2a4bc20fa0ac..b1d6ac4b4cd2e1abdf2c76ee2340900c9c3f9c86 100644 --- a/core/java/android/hardware/CameraSessionStats.java +++ b/core/java/android/hardware/CameraSessionStats.java @@ -64,6 +64,7 @@ public class CameraSessionStats implements Parcelable { private ArrayList<CameraStreamStats> mStreamStats; private String mUserTag; private int mVideoStabilizationMode; + private boolean mUsedUltraWide; private int mSessionIndex; private CameraExtensionSessionStats mCameraExtensionSessionStats; @@ -82,6 +83,7 @@ public class CameraSessionStats implements Parcelable { mDeviceError = false; mStreamStats = new ArrayList<CameraStreamStats>(); mVideoStabilizationMode = -1; + mUsedUltraWide = false; mSessionIndex = 0; mCameraExtensionSessionStats = new CameraExtensionSessionStats(); } @@ -102,6 +104,8 @@ public class CameraSessionStats implements Parcelable { mSessionType = sessionType; mInternalReconfigure = internalReconfigure; mStreamStats = new ArrayList<CameraStreamStats>(); + mVideoStabilizationMode = -1; + mUsedUltraWide = false; mSessionIndex = sessionIdx; mCameraExtensionSessionStats = new CameraExtensionSessionStats(); } @@ -147,6 +151,7 @@ public class CameraSessionStats implements Parcelable { dest.writeTypedList(mStreamStats); dest.writeString(mUserTag); dest.writeInt(mVideoStabilizationMode); + dest.writeBoolean(mUsedUltraWide); dest.writeInt(mSessionIndex); mCameraExtensionSessionStats.writeToParcel(dest, 0); } @@ -173,6 +178,9 @@ public class CameraSessionStats implements Parcelable { mUserTag = in.readString(); mVideoStabilizationMode = in.readInt(); + + mUsedUltraWide = in.readBoolean(); + mSessionIndex = in.readInt(); mCameraExtensionSessionStats = CameraExtensionSessionStats.CREATOR.createFromParcel(in); } @@ -245,6 +253,10 @@ public class CameraSessionStats implements Parcelable { return mVideoStabilizationMode; } + public boolean getUsedUltraWide() { + return mUsedUltraWide; + } + public int getSessionIndex() { return mSessionIndex; } diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java index 257ad7162e9e95b5c79c89c39342fb4113734a11..5b24fb6860a2d7d6316559c8a0bc677ff7950c8f 100644 --- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java +++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java @@ -218,7 +218,8 @@ public interface BiometricFingerprintConstants { FINGERPRINT_ACQUIRED_UNKNOWN, FINGERPRINT_ACQUIRED_IMMOBILE, FINGERPRINT_ACQUIRED_TOO_BRIGHT, - FINGERPRINT_ACQUIRED_POWER_PRESSED}) + FINGERPRINT_ACQUIRED_POWER_PRESSED, + FINGERPRINT_ACQUIRED_RE_ENROLL}) @Retention(RetentionPolicy.SOURCE) @interface FingerprintAcquired {} @@ -309,6 +310,12 @@ public interface BiometricFingerprintConstants { */ int FINGERPRINT_ACQUIRED_POWER_PRESSED = 11; + /** + * This message is sent to encourage the user to re-enroll their fingerprints. + * @hide + */ + int FINGERPRINT_ACQUIRED_RE_ENROLL = 12; + /** * @hide */ diff --git a/core/java/android/hardware/biometrics/flags.aconfig b/core/java/android/hardware/biometrics/flags.aconfig new file mode 100644 index 0000000000000000000000000000000000000000..66429e5046d89c9cbcf60d280a81c5bc8dc7464a --- /dev/null +++ b/core/java/android/hardware/biometrics/flags.aconfig @@ -0,0 +1,9 @@ +package: "android.hardware.biometrics" + +flag { + name: "add_key_agreement_crypto_object" + namespace: "biometrics" + description: "Feature flag for adding KeyAgreement api to CryptoObject." + bug: "282058146" +} + diff --git a/core/java/android/os/incremental/V4Signature.java b/core/java/android/os/incremental/V4Signature.java index 2044502b10e8d513cfc607a343bc63bae51731a9..38d885f503c528dd0c7833049ed0fbcbbfd7d120 100644 --- a/core/java/android/os/incremental/V4Signature.java +++ b/core/java/android/os/incremental/V4Signature.java @@ -254,7 +254,10 @@ public class V4Signature { this.signingInfos = signingInfos; } - private static V4Signature readFrom(InputStream stream) throws IOException { + /** + * Constructs a V4Signature from an InputStream. + */ + public static V4Signature readFrom(InputStream stream) throws IOException { final int version = readIntLE(stream); int maxSize = INCFS_MAX_SIGNATURE_SIZE; final byte[] hashingInfo = readBytes(stream, maxSize); diff --git a/core/java/android/permission/IPermissionController.aidl b/core/java/android/permission/IPermissionController.aidl index e3f02e73a41fd8e41523591bde4d69fa7ad976b3..1cb7930928d05c79e54d6e5c1b888a1f75eb9e2a 100644 --- a/core/java/android/permission/IPermissionController.aidl +++ b/core/java/android/permission/IPermissionController.aidl @@ -43,7 +43,7 @@ oneway interface IPermissionController { void setRuntimePermissionGrantStateByDeviceAdminFromParams(String callerPackageName, in AdminPermissionControlParams params, in AndroidFuture callback); void grantOrUpgradeDefaultRuntimePermissions(in AndroidFuture callback); - void notifyOneTimePermissionSessionTimeout(String packageName); + void notifyOneTimePermissionSessionTimeout(String packageName, int deviceId); void updateUserSensitiveForApp(int uid, in AndroidFuture callback); void getPrivilegesDescriptionStringForProfile( in String deviceProfileName, @@ -60,5 +60,5 @@ oneway interface IPermissionController { in String packageName, in AndroidFuture callback); void revokeSelfPermissionsOnKill(in String packageName, in List<String> permissions, - in AndroidFuture callback); + int deviceId, in AndroidFuture callback); } diff --git a/core/java/android/permission/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl index 18ede44dca200c46c16f89db381d1b77bff4256b..7cecfdca851a9826cd448539fe1fd8f52ef803b1 100644 --- a/core/java/android/permission/IPermissionManager.aidl +++ b/core/java/android/permission/IPermissionManager.aidl @@ -78,7 +78,7 @@ interface IPermissionManager { List<SplitPermissionInfoParcelable> getSplitPermissions(); @EnforcePermission("MANAGE_ONE_TIME_PERMISSION_SESSIONS") - void startOneTimePermissionSession(String packageName, int userId, long timeout, + void startOneTimePermissionSession(String packageName, int deviceId, int userId, long timeout, long revokeAfterKilledDelay); @EnforcePermission("MANAGE_ONE_TIME_PERMISSION_SESSIONS") diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java index 84a197a965318bfe00180ce1416eb4903e73cb26..ba7591814a7b2866e9657d779736eb87ef6cad03 100644 --- a/core/java/android/permission/PermissionControllerManager.java +++ b/core/java/android/permission/PermissionControllerManager.java @@ -764,13 +764,14 @@ public final class PermissionControllerManager { * inactive. * * @param packageName The package which became inactive - * + * @param deviceId The device ID refers either the primary device i.e. the phone or + * a virtual device. See {@link Context#DEVICE_ID_DEFAULT} * @hide */ @RequiresPermission(Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) - public void notifyOneTimePermissionSessionTimeout(@NonNull String packageName) { - mRemoteService.run( - service -> service.notifyOneTimePermissionSessionTimeout(packageName)); + public void notifyOneTimePermissionSessionTimeout(@NonNull String packageName, int deviceId) { + mRemoteService.run(service -> service.notifyOneTimePermissionSessionTimeout( + packageName, deviceId)); } /** @@ -930,12 +931,14 @@ public final class PermissionControllerManager { @NonNull List<String> permissions) { mRemoteService.postAsync(service -> { AndroidFuture<Void> callback = new AndroidFuture<>(); - service.revokeSelfPermissionsOnKill(packageName, permissions, callback); + service.revokeSelfPermissionsOnKill(packageName, permissions, mContext.getDeviceId(), + callback); return callback; }).whenComplete((result, err) -> { if (err != null) { Log.e(TAG, "Failed to self revoke " + String.join(",", permissions) - + " for package " + packageName, err); + + " for package " + packageName + ", and device " + mContext.getDeviceId(), + err); } }); } diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java index 11005a6d265ba7dae2a971ee775444037e4d07b3..9fe2599dd39ba5cd2942d596be9a5ba9e175bf66 100644 --- a/core/java/android/permission/PermissionControllerService.java +++ b/core/java/android/permission/PermissionControllerService.java @@ -30,6 +30,7 @@ import static com.android.internal.util.Preconditions.checkStringNotEmpty; import android.Manifest; import android.annotation.BinderThread; +import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; @@ -37,6 +38,7 @@ import android.app.Service; import android.app.admin.DevicePolicyManager.PermissionGrantState; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -46,6 +48,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.UserHandle; import android.permission.PermissionControllerManager.CountPermissionAppsFlag; +import android.permission.flags.Flags; import android.util.ArrayMap; import android.util.Log; @@ -296,12 +299,31 @@ public abstract class PermissionControllerService extends Service { * This method is called at the end of a one-time permission session * * @param packageName The package that has been inactive + * + * @deprecated Implement {@link #onOneTimePermissionSessionTimeout(String, int)} instead. */ + @Deprecated @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String packageName) { throw new AbstractMethodError("Must be overridden in implementing class"); } + /** + * Called when a package is considered inactive based on the criteria given by + * {@link PermissionManager#startOneTimePermissionSession(String, long, long, int, int)}. + * This method is called at the end of a one-time permission session + * + * @param packageName The package that has been inactive + * @param deviceId The device ID refers either the primary device i.e. the phone or + * a virtual device. See {@link Context#DEVICE_ID_DEFAULT} + */ + @BinderThread + @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + public void onOneTimePermissionSessionTimeout(@NonNull String packageName, + int deviceId) { + onOneTimePermissionSessionTimeout(packageName); + } + /** * Get the platform permissions which belong to a particular permission group * @@ -341,13 +363,42 @@ public abstract class PermissionControllerService extends Service { * @param callback Callback waiting for operation to be complete. * * @see android.content.Context#revokeSelfPermissionsOnKill(java.util.Collection) + * + * @deprecated Implement {@link #onRevokeSelfPermissionsOnKill(String, List, int, Runnable)} + * instead. */ + @Deprecated @BinderThread public void onRevokeSelfPermissionsOnKill(@NonNull String packageName, @NonNull List<String> permissions, @NonNull Runnable callback) { throw new AbstractMethodError("Must be overridden in implementing class"); } + /** + * Triggers the revocation of one or more permissions for a package and device. + * This should only be called at the request of {@code packageName}. + * <p> + * Background permissions which have no corresponding foreground permission still granted once + * the revocation is effective will also be revoked. + * <p> + * This revocation happens asynchronously and kills all processes running in the same UID as + * {@code packageName}. It will be triggered once it is safe to do so. + * + * @param packageName The name of the package for which the permissions will be revoked. + * @param permissions List of permissions to be revoked. + * @param deviceId The device ID refers either the primary device i.e. the phone or + * a virtual device. See {@link Context#DEVICE_ID_DEFAULT} + * @param callback Callback waiting for operation to be complete. + * + * @see android.content.Context#revokeSelfPermissionsOnKill(java.util.Collection) + */ + @BinderThread + @FlaggedApi(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + public void onRevokeSelfPermissionsOnKill(@NonNull String packageName, + @NonNull List<String> permissions, int deviceId, @NonNull Runnable callback) { + onRevokeSelfPermissionsOnKill(packageName, permissions, callback); + } + // TODO(b/272129940): Remove this API and device profile role description when we drop T // support. /** @@ -613,12 +664,12 @@ public abstract class PermissionControllerService extends Service { } @Override - public void notifyOneTimePermissionSessionTimeout(String packageName) { + public void notifyOneTimePermissionSessionTimeout(String packageName, int deviceId) { enforceSomePermissionsGrantedToCaller( Manifest.permission.REVOKE_RUNTIME_PERMISSIONS); packageName = Preconditions.checkNotNull(packageName, "packageName cannot be null"); - onOneTimePermissionSessionTimeout(packageName); + onOneTimePermissionSessionTimeout(packageName, deviceId); } @Override @@ -710,7 +761,8 @@ public abstract class PermissionControllerService extends Service { @Override public void revokeSelfPermissionsOnKill(@NonNull String packageName, - @NonNull List<String> permissions, @NonNull AndroidFuture callback) { + @NonNull List<String> permissions, int deviceId, + @NonNull AndroidFuture callback) { try { Objects.requireNonNull(callback); @@ -721,7 +773,7 @@ public abstract class PermissionControllerService extends Service { enforceSomePermissionsGrantedToCaller( Manifest.permission.REVOKE_RUNTIME_PERMISSIONS); } - onRevokeSelfPermissionsOnKill(packageName, permissions, + onRevokeSelfPermissionsOnKill(packageName, permissions, deviceId, () -> callback.complete(null)); } catch (Throwable t) { callback.completeExceptionally(t); diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index 7d392104971276d448e3f85614a62441dd87aaaf..e10ea10e2a29d205814577e52ed214804a92da12 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -213,6 +213,12 @@ public final class PermissionManager { */ public static final boolean DEBUG_TRACE_PERMISSION_UPDATES = false; + /** + * Additional debug log for virtual device permissions. + * @hide + */ + public static final boolean DEBUG_DEVICE_PERMISSIONS = false; + /** * Intent extra: List of PermissionGroupUsages * <p> @@ -1392,8 +1398,8 @@ public final class PermissionManager { @ActivityManager.RunningAppProcessInfo.Importance int importanceToResetTimer, @ActivityManager.RunningAppProcessInfo.Importance int importanceToKeepSessionAlive) { try { - mPermissionManager.startOneTimePermissionSession(packageName, mContext.getUserId(), - timeoutMillis, revokeAfterKilledDelayMillis); + mPermissionManager.startOneTimePermissionSession(packageName, mContext.getDeviceId(), + mContext.getUserId(), timeoutMillis, revokeAfterKilledDelayMillis); } catch (RemoteException e) { e.rethrowFromSystemServer(); } diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index cf3707b8e105faf5f7bccf4b0bf493b1096848e5..a39157103f716ae066345e8a87e2584c9be9e7bc 100644 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -4915,6 +4915,14 @@ public final class Telephony { public static final String COLUMN_SATELLITE_ATTACH_ENABLED_FOR_CARRIER = "satellite_attach_enabled_for_carrier"; + /** + * TelephonyProvider column name to identify eSIM profile of a non-terrestrial network. + * By default, it's disabled. + * + * @hide + */ + public static final String COLUMN_IS_NTN = "is_ntn"; + /** All columns in {@link SimInfo} table. */ private static final List<String> ALL_COLUMNS = List.of( COLUMN_UNIQUE_KEY_SUBSCRIPTION_ID, @@ -4985,7 +4993,8 @@ public final class Telephony { COLUMN_TP_MESSAGE_REF, COLUMN_USER_HANDLE, COLUMN_SATELLITE_ENABLED, - COLUMN_SATELLITE_ATTACH_ENABLED_FOR_CARRIER + COLUMN_SATELLITE_ATTACH_ENABLED_FOR_CARRIER, + COLUMN_IS_NTN ); /** diff --git a/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java index 6b26155eced4aaadeaac0536f8a0a90b2aaeaac3..52102714eb5f4b4d4381c956b2525d85d8345c3c 100644 --- a/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java +++ b/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java @@ -27,9 +27,14 @@ import android.os.incremental.V4Signature; import android.util.ArrayMap; import android.util.Pair; +import com.android.internal.security.VerityUtils; + import java.io.ByteArrayInputStream; +import java.io.EOFException; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.security.DigestException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.KeyFactory; @@ -60,7 +65,7 @@ public class ApkSignatureSchemeV4Verifier { * certificates associated with each signer. */ public static VerifiedSigner extractCertificates(String apkFile) - throws SignatureNotFoundException, SecurityException { + throws SignatureNotFoundException, SignatureException, SecurityException { Pair<V4Signature.HashingInfo, V4Signature.SigningInfos> pair = extractSignature(apkFile); return verify(apkFile, pair.first, pair.second, APK_SIGNATURE_SCHEME_DEFAULT); } @@ -69,15 +74,37 @@ public class ApkSignatureSchemeV4Verifier { * Extracts APK Signature Scheme v4 signature of the provided APK. */ public static Pair<V4Signature.HashingInfo, V4Signature.SigningInfos> extractSignature( - String apkFile) throws SignatureNotFoundException { - final File apk = new File(apkFile); - final byte[] signatureBytes = IncrementalManager.unsafeGetFileSignature( - apk.getAbsolutePath()); - if (signatureBytes == null || signatureBytes.length == 0) { - throw new SignatureNotFoundException("Failed to obtain signature bytes from IncFS."); - } + String apkFile) throws SignatureNotFoundException, SignatureException { try { - final V4Signature signature = V4Signature.readFrom(signatureBytes); + final File apk = new File(apkFile); + boolean needsConsistencyCheck; + + // 1. Try IncFS first. IncFS verifies the file according to the integrity metadata + // (including the root hash of Merkle tree) it keeps track of with signature check. No + // further consistentcy check is needed. + byte[] signatureBytes = IncrementalManager.unsafeGetFileSignature( + apk.getAbsolutePath()); + V4Signature signature; + if (signatureBytes != null && signatureBytes.length > 0) { + needsConsistencyCheck = false; + signature = V4Signature.readFrom(signatureBytes); + } else if (android.security.Flags.extendVbChainToUpdatedApk()) { + // 2. Try fs-verity next. fs-verity checks against the Merkle tree, but the + // v4 signature file (including a raw root hash) is managed separately. We need to + // ensure the signed data from the file is consistent with the actual file. + needsConsistencyCheck = true; + + final File idsig = new File(apk.getAbsolutePath() + V4Signature.EXT); + try (var fis = new FileInputStream(idsig.getAbsolutePath())) { + signature = V4Signature.readFrom(fis); + } catch (IOException e) { + throw new SignatureNotFoundException( + "Failed to obtain signature bytes from .idsig"); + } + } else { + throw new SignatureNotFoundException( + "Failed to obtain signature bytes from IncFS."); + } if (!signature.isVersionSupported()) { throw new SecurityException( "v4 signature version " + signature.version + " is not supported"); @@ -86,9 +113,26 @@ public class ApkSignatureSchemeV4Verifier { signature.hashingInfo); final V4Signature.SigningInfos signingInfos = V4Signature.SigningInfos.fromByteArray( signature.signingInfos); + + if (needsConsistencyCheck) { + final byte[] actualDigest = VerityUtils.getFsverityDigest(apk.getAbsolutePath()); + if (actualDigest == null) { + throw new SecurityException("The APK does not have fs-verity"); + } + final byte[] computedDigest = + VerityUtils.generateFsVerityDigest(apk.length(), hashingInfo); + if (!Arrays.equals(computedDigest, actualDigest)) { + throw new SignatureException("Actual digest does not match the v4 signature"); + } + } + return Pair.create(hashingInfo, signingInfos); + } catch (EOFException e) { + throw new SignatureException("V4 signature is invalid.", e); } catch (IOException e) { throw new SignatureNotFoundException("Failed to read V4 signature.", e); + } catch (DigestException | NoSuchAlgorithmException e) { + throw new SecurityException("Failed to calculate the digest", e); } } @@ -107,7 +151,7 @@ public class ApkSignatureSchemeV4Verifier { signingInfo); final Pair<Certificate, byte[]> result = verifySigner(signingInfo, signedData); - // Populate digests enforced by IncFS driver. + // Populate digests enforced by IncFS driver and fs-verity. Map<Integer, byte[]> contentDigests = new ArrayMap<>(); contentDigests.put(convertToContentDigestType(hashingInfo.hashAlgorithm), hashingInfo.rawRootHash); @@ -217,7 +261,7 @@ public class ApkSignatureSchemeV4Verifier { public final byte[] apkDigest; // Algorithm -> digest map of signed digests in the signature. - // These are continuously enforced by the IncFS driver. + // These are continuously enforced by the IncFS driver and fs-verity. public final Map<Integer, byte[]> contentDigests; public VerifiedSigner(Certificate[] certs, byte[] apkDigest, diff --git a/core/java/android/view/HapticScrollFeedbackProvider.java b/core/java/android/view/HapticScrollFeedbackProvider.java index a2f1d37c2c1100c2d63146b5d18720c640855aea..1310b0ccd3a962c7cb2fe176a13981161b5cd0fc 100644 --- a/core/java/android/view/HapticScrollFeedbackProvider.java +++ b/core/java/android/view/HapticScrollFeedbackProvider.java @@ -47,9 +47,17 @@ public class HapticScrollFeedbackProvider implements ScrollFeedbackProvider { public @interface HapticScrollFeedbackAxis {} private static final int TICK_INTERVAL_NO_TICK = 0; + private static final boolean INITIAL_END_OF_LIST_HAPTICS_ENABLED = false; private final View mView; private final ViewConfiguration mViewConfig; + /** + * Flag to disable the logic in this class if the View-based scroll haptics implementation is + * enabled. If {@code false}, this class will continue to run despite the View's scroll + * haptics implementation being enabled. This value should be set to {@code true} when this + * class is directly used by the View class. + */ + private final boolean mDisabledIfViewPlaysScrollHaptics; // Info about the cause of the latest scroll event. @@ -63,18 +71,21 @@ public class HapticScrollFeedbackProvider implements ScrollFeedbackProvider { /** The tick interval corresponding to the current InputDevice/source/axis. */ private int mTickIntervalPixels = TICK_INTERVAL_NO_TICK; private int mTotalScrollPixels = 0; - private boolean mCanPlayLimitFeedback = true; + private boolean mCanPlayLimitFeedback = INITIAL_END_OF_LIST_HAPTICS_ENABLED; private boolean mHapticScrollFeedbackEnabled = false; public HapticScrollFeedbackProvider(@NonNull View view) { - this(view, ViewConfiguration.get(view.getContext())); + this(view, ViewConfiguration.get(view.getContext()), + /* disabledIfViewPlaysScrollHaptics= */ true); } /** @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) - public HapticScrollFeedbackProvider(View view, ViewConfiguration viewConfig) { + public HapticScrollFeedbackProvider( + View view, ViewConfiguration viewConfig, boolean disabledIfViewPlaysScrollHaptics) { mView = view; mViewConfig = viewConfig; + mDisabledIfViewPlaysScrollHaptics = disabledIfViewPlaysScrollHaptics; } @Override @@ -136,13 +147,19 @@ public class HapticScrollFeedbackProvider implements ScrollFeedbackProvider { private void maybeUpdateCurrentConfig(int deviceId, int source, int axis) { if (mAxis != axis || mSource != source || mDeviceId != deviceId) { + if (mDisabledIfViewPlaysScrollHaptics + && (source == InputDevice.SOURCE_ROTARY_ENCODER) + && mViewConfig.isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) { + mHapticScrollFeedbackEnabled = false; + return; + } mSource = source; mAxis = axis; mDeviceId = deviceId; mHapticScrollFeedbackEnabled = mViewConfig.isHapticScrollFeedbackEnabled(deviceId, axis, source); - mCanPlayLimitFeedback = true; + mCanPlayLimitFeedback = INITIAL_END_OF_LIST_HAPTICS_ENABLED; mTotalScrollPixels = 0; updateTickIntervals(deviceId, source, axis); } diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index bb4cc8fc8d456453649696ff81518366440995de..b17d2d1800e5b1c7c97212f52760a550f26dabea 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1990,8 +1990,23 @@ public class KeyEvent extends InputEvent implements Parcelable { } /** - * Returns whether this key will be sent to the - * {@link android.media.session.MediaSession.Callback} if not handled. + * Returns whether this key will be sent to the {@link + * android.media.session.MediaSession.Callback} if not handled. + * + * <p>The following key codes are considered {@link android.media.session.MediaSession} keys: + * + * <ul> + * <li>{@link #KEYCODE_MEDIA_PLAY} + * <li>{@link #KEYCODE_MEDIA_PAUSE} + * <li>{@link #KEYCODE_MEDIA_PLAY_PAUSE} + * <li>{@link #KEYCODE_HEADSETHOOK} + * <li>{@link #KEYCODE_MEDIA_STOP} + * <li>{@link #KEYCODE_MEDIA_NEXT} + * <li>{@link #KEYCODE_MEDIA_PREVIOUS} + * <li>{@link #KEYCODE_MEDIA_REWIND} + * <li>{@link #KEYCODE_MEDIA_RECORD} + * <li>{@link #KEYCODE_MEDIA_FAST_FORWARD} + * </ul> */ public static final boolean isMediaSessionKey(int keyCode) { switch (keyCode) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 4d53b2c6b82175d0dbe8e9159eb76a62c03bc405..55374b994cd4e8b2e67e4e60f30e188c71a47051 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -919,6 +919,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ private static boolean sCompatibilityDone = false; + /** @hide */ + public HapticScrollFeedbackProvider mScrollFeedbackProvider = null; + /** * Use the old (broken) way of building MeasureSpecs. */ @@ -3605,6 +3608,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * 1 PFLAG4_IMPORTANT_FOR_CREDENTIAL_MANAGER * 1 PFLAG4_TRAVERSAL_TRACING_ENABLED * 1 PFLAG4_RELAYOUT_TRACING_ENABLED + * 1 PFLAG4_ROTARY_HAPTICS_DETERMINED + * 1 PFLAG4_ROTARY_HAPTICS_ENABLED + * 1 PFLAG4_ROTARY_HAPTICS_SCROLL_SINCE_LAST_ROTARY_INPUT + * 1 PFLAG4_ROTARY_HAPTICS_WAITING_FOR_SCROLL_EVENT * |-------|-------|-------|-------| */ @@ -3703,6 +3710,24 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ private static final int PFLAG4_RELAYOUT_TRACING_ENABLED = 0x000080000; + /** Indicates if rotary scroll haptics support for the view has been determined. */ + private static final int PFLAG4_ROTARY_HAPTICS_DETERMINED = 0x100000; + + /** + * Indicates if rotary scroll haptics is enabled for this view. + * The source of truth for this info is a ViewConfiguration API; this bit only caches the value. + */ + private static final int PFLAG4_ROTARY_HAPTICS_ENABLED = 0x200000; + + /** Indicates if there has been a scroll event since the last rotary input. */ + private static final int PFLAG4_ROTARY_HAPTICS_SCROLL_SINCE_LAST_ROTARY_INPUT = 0x400000; + + /** + * Indicates if there has been a rotary input that may generate a scroll event. + * This flag is important so that a scroll event can be properly attributed to a rotary input. + */ + private static final int PFLAG4_ROTARY_HAPTICS_WAITING_FOR_SCROLL_EVENT = 0x800000; + /* End of masks for mPrivateFlags4 */ /** @hide */ @@ -15894,6 +15919,28 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private boolean dispatchGenericMotionEventInternal(MotionEvent event) { + final boolean isRotaryEncoderEvent = event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER); + if (isRotaryEncoderEvent) { + // Determine and cache rotary scroll haptics support if it's not yet determined. + // Caching the support is important for two reasons: + // 1) Limits call to `ViewConfiguration#get`, which we should avoid if possible. + // 2) Limits latency from the `ViewConfiguration` API, which may be slow due to feature + // flag querying. + if ((mPrivateFlags4 & PFLAG4_ROTARY_HAPTICS_DETERMINED) == 0) { + if (ViewConfiguration.get(mContext) + .isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) { + mPrivateFlags4 |= PFLAG4_ROTARY_HAPTICS_ENABLED; + } + mPrivateFlags4 |= PFLAG4_ROTARY_HAPTICS_DETERMINED; + } + } + final boolean processForRotaryScrollHaptics = + isRotaryEncoderEvent && ((mPrivateFlags4 & PFLAG4_ROTARY_HAPTICS_ENABLED) != 0); + if (processForRotaryScrollHaptics) { + mPrivateFlags4 &= ~PFLAG4_ROTARY_HAPTICS_SCROLL_SINCE_LAST_ROTARY_INPUT; + mPrivateFlags4 |= PFLAG4_ROTARY_HAPTICS_WAITING_FOR_SCROLL_EVENT; + } + //noinspection SimplifiableIfStatement ListenerInfo li = mListenerInfo; if (li != null && li.mOnGenericMotionListener != null @@ -15902,7 +15949,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; } - if (onGenericMotionEvent(event)) { + final boolean onGenericMotionEventResult = onGenericMotionEvent(event); + // Process scroll haptics after `onGenericMotionEvent`, since that's where scrolling usually + // happens. Some views may return false from `onGenericMotionEvent` even if they have done + // scrolling, so disregard the return value when processing for scroll haptics. + if (processForRotaryScrollHaptics) { + if ((mPrivateFlags4 & PFLAG4_ROTARY_HAPTICS_SCROLL_SINCE_LAST_ROTARY_INPUT) != 0) { + doRotaryProgressForScrollHaptics(event); + } else { + doRotaryLimitForScrollHaptics(event); + } + } + if (onGenericMotionEventResult) { return true; } @@ -17783,6 +17841,38 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + private HapticScrollFeedbackProvider getScrollFeedbackProvider() { + if (mScrollFeedbackProvider == null) { + mScrollFeedbackProvider = new HapticScrollFeedbackProvider(this, + ViewConfiguration.get(mContext), /* disabledIfViewPlaysScrollHaptics= */ false); + } + return mScrollFeedbackProvider; + } + + private void doRotaryProgressForScrollHaptics(MotionEvent rotaryEvent) { + final float axisScrollValue = rotaryEvent.getAxisValue(MotionEvent.AXIS_SCROLL); + final float verticalScrollFactor = + ViewConfiguration.get(mContext).getScaledVerticalScrollFactor(); + final int scrollAmount = -Math.round(axisScrollValue * verticalScrollFactor); + getScrollFeedbackProvider().onScrollProgress( + rotaryEvent.getDeviceId(), InputDevice.SOURCE_ROTARY_ENCODER, + MotionEvent.AXIS_SCROLL, scrollAmount); + } + + private void doRotaryLimitForScrollHaptics(MotionEvent rotaryEvent) { + final boolean isStart = rotaryEvent.getAxisValue(MotionEvent.AXIS_SCROLL) > 0; + getScrollFeedbackProvider().onScrollLimit( + rotaryEvent.getDeviceId(), InputDevice.SOURCE_ROTARY_ENCODER, + MotionEvent.AXIS_SCROLL, isStart); + } + + private void processScrollEventForRotaryEncoderHaptics() { + if ((mPrivateFlags4 |= PFLAG4_ROTARY_HAPTICS_WAITING_FOR_SCROLL_EVENT) != 0) { + mPrivateFlags4 |= PFLAG4_ROTARY_HAPTICS_SCROLL_SINCE_LAST_ROTARY_INPUT; + mPrivateFlags4 &= ~PFLAG4_ROTARY_HAPTICS_WAITING_FOR_SCROLL_EVENT; + } + } + /** * This is called in response to an internal scroll in this view (i.e., the * view scrolled its own contents). This is typically as a result of @@ -17798,6 +17888,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, notifySubtreeAccessibilityStateChangedIfNeeded(); postSendViewScrolledAccessibilityEventCallback(l - oldl, t - oldt); + processScrollEventForRotaryEncoderHaptics(); + mBackgroundSizeChanged = true; mDefaultFocusHighlightSizeChanged = true; if (mForegroundInfo != null) { diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index a3ae6cf20725cd6c861aa3283abe6305bef2155a..2cf5d5d63596fe8ceab0b8e3b0c8a7356043a696 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -40,6 +40,8 @@ import android.util.SparseArray; import android.util.TypedValue; import android.view.flags.Flags; +import com.android.internal.annotations.VisibleForTesting; + /** * Contains methods to standard constants used in the UI for timeouts, sizes, and distances. */ @@ -375,6 +377,7 @@ public class ViewConfiguration { private final int mSmartSelectionInitializedTimeout; private final int mSmartSelectionInitializingTimeout; private final boolean mPreferKeepClearForFocusEnabled; + private final boolean mViewBasedRotaryEncoderScrollHapticsEnabledConfig; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768915) private boolean sHasPermanentMenuKey; @@ -399,6 +402,7 @@ public class ViewConfiguration { mMaximumRotaryEncoderFlingVelocity = MAXIMUM_FLING_VELOCITY; mRotaryEncoderHapticScrollFeedbackEnabled = false; mRotaryEncoderHapticScrollFeedbackTickIntervalPixels = NO_HAPTIC_SCROLL_TICK_INTERVAL; + mViewBasedRotaryEncoderScrollHapticsEnabledConfig = false; mScrollbarSize = SCROLL_BAR_SIZE; mTouchSlop = TOUCH_SLOP; mHandwritingSlop = HANDWRITING_SLOP; @@ -575,6 +579,9 @@ public class ViewConfiguration { com.android.internal.R.integer.config_smartSelectionInitializingTimeoutMillis); mPreferKeepClearForFocusEnabled = res.getBoolean( com.android.internal.R.bool.config_preferKeepClearForFocus); + mViewBasedRotaryEncoderScrollHapticsEnabledConfig = + res.getBoolean( + com.android.internal.R.bool.config_viewBasedRotaryEncoderHapticsEnabled); } /** @@ -590,8 +597,7 @@ public class ViewConfiguration { public static ViewConfiguration get(@NonNull @UiContext Context context) { StrictMode.assertConfigurationContext(context, "ViewConfiguration"); - final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); - final int density = (int) (100.0f * metrics.density); + final int density = getDisplayDensity(context); ViewConfiguration configuration = sConfigurations.get(density); if (configuration == null) { @@ -602,6 +608,28 @@ public class ViewConfiguration { return configuration; } + /** + * Removes cached ViewConfiguration instances, so that we can ensure `get` constructs a new + * ViewConfiguration instance. This is useful for testing the behavior and performance of + * creating ViewConfiguration the first time. + * + * @hide + */ + @VisibleForTesting + public static void resetCacheForTesting() { + sConfigurations.clear(); + } + + /** + * Sets the ViewConfiguration cached instanc for a given Context for testing. + * + * @hide + */ + @VisibleForTesting + public static void setInstanceForTesting(Context context, ViewConfiguration instance) { + sConfigurations.put(getDisplayDensity(context), instance); + } + /** * @return The width of the horizontal scrollbar and the height of the vertical * scrollbar in dips @@ -1311,6 +1339,20 @@ public class ViewConfiguration { return NO_HAPTIC_SCROLL_TICK_INTERVAL; } + /** + * Checks if the View-based haptic scroll feedback implementation is enabled for + * {@link InputDevice#SOURCE_ROTARY_ENCODER}s. + * + * <p>If this method returns {@code true}, the {@link HapticScrollFeedbackProvider} will be + * muted for rotary encoders in favor of View's scroll haptics implementation. + * + * @hide + */ + public boolean isViewBasedRotaryEncoderHapticScrollFeedbackEnabled() { + return mViewBasedRotaryEncoderScrollHapticsEnabledConfig + && Flags.useViewBasedRotaryEncoderScrollHaptics(); + } + private static boolean isInputDeviceInfoValid(int id, int axis, int source) { InputDevice device = InputManagerGlobal.getInstance().getInputDevice(id); return device != null && device.getMotionRange(axis, source) != null; @@ -1420,4 +1462,9 @@ public class ViewConfiguration { public static int getHoverTooltipHideShortTimeout() { return HOVER_TOOLTIP_HIDE_SHORT_TIMEOUT; } + + private static final int getDisplayDensity(Context context) { + final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + return (int) (100.0f * metrics.density); + } } diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 432f6e183731faaa1e5c550ed7713be129a5e84c..4cb8788ab9f2c16d20064bb6d5a562404b22a348 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -1474,7 +1474,7 @@ public final class AutofillManager { } for (int i = 0; i < infos.size(); i++) { final VirtualViewFillInfo info = infos.valueAt(i); - final int virtualId = infos.indexOfKey(i); + final int virtualId = infos.keyAt(i); notifyViewReadyInner(getAutofillId(view, virtualId), (info == null) ? null : info.getAutofillHints()); } @@ -1488,9 +1488,6 @@ public final class AutofillManager { * @hide */ public void notifyViewEnteredForFillDialog(View v) { - if (sDebug) { - Log.d(TAG, "notifyViewEnteredForFillDialog:" + v.getAutofillId()); - } if (v.isCredential() && mIsFillAndSaveDialogDisabledForCredentialManager) { if (sDebug) { @@ -1503,11 +1500,14 @@ public final class AutofillManager { notifyViewReadyInner(v.getAutofillId(), v.getAutofillHints()); } - private void notifyViewReadyInner(AutofillId id, String[] autofillHints) { + private void notifyViewReadyInner(AutofillId id, @Nullable String[] autofillHints) { + if (sDebug) { + Log.d(TAG, "notifyViewReadyInner:" + id); + } + if (!hasAutofillFeature()) { return; } - synchronized (mLock) { if (mAllTrackedViews.contains(id)) { // The id is tracked and will not trigger pre-fill request again. @@ -1543,26 +1543,38 @@ public final class AutofillManager { final boolean clientAdded = tryAddServiceClientIfNeededLocked(); if (clientAdded) { startSessionLocked(/* id= */ AutofillId.NO_AUTOFILL_ID, /* bounds= */ null, - /* value= */ null, /* flags= */ FLAG_PCC_DETECTION); + /* value= */ null, /* flags= */ FLAG_PCC_DETECTION); } else { if (sVerbose) { Log.v(TAG, "not starting session: no service client"); } } - } } } - if (mIsFillDialogEnabled - || ArrayUtils.containsAny(autofillHints, mFillDialogEnabledHints)) { + // Check if framework should send pre-fill request for fill dialog + boolean shouldSendPreFillRequestForFillDialog = false; + if (mIsFillDialogEnabled) { + shouldSendPreFillRequestForFillDialog = true; + } else if (autofillHints != null) { + // check if supported autofill hint is present + for (String autofillHint : autofillHints) { + for (String filldialogEnabledHint : mFillDialogEnabledHints) { + if (filldialogEnabledHint.equalsIgnoreCase(autofillHint)) { + shouldSendPreFillRequestForFillDialog = true; + break; + } + } + if (shouldSendPreFillRequestForFillDialog) break; + } + } + if (shouldSendPreFillRequestForFillDialog) { if (sDebug) { Log.d(TAG, "Triggering pre-emptive request for fill dialog."); } - int flags = FLAG_SUPPORTS_FILL_DIALOG; flags |= FLAG_VIEW_NOT_FOCUSED; - synchronized (mLock) { // To match the id of the IME served view, used AutofillId.NO_AUTOFILL_ID on prefill // request, because IME will reset the id of IME served view to 0 when activity @@ -1570,9 +1582,10 @@ public final class AutofillManager { // not match the IME served view's, Autofill will be blocking to wait inline // request from the IME. notifyViewEnteredLocked(/* view= */ null, AutofillId.NO_AUTOFILL_ID, - /* bounds= */ null, /* value= */ null, flags); + /* bounds= */ null, /* value= */ null, flags); } } + return; } private boolean hasFillDialogUiFeature() { diff --git a/core/java/android/view/flags/scroll_feedback_flags.aconfig b/core/java/android/view/flags/scroll_feedback_flags.aconfig index 62c569152ee980b167d3e040a6b9000a4bb6b933..d1d871c2dbda95c89f2c2d45c21eb914b34adf77 100644 --- a/core/java/android/view/flags/scroll_feedback_flags.aconfig +++ b/core/java/android/view/flags/scroll_feedback_flags.aconfig @@ -5,4 +5,11 @@ flag { name: "scroll_feedback_api" description: "Enable the scroll feedback APIs" bug: "239594271" +} + +flag { + namespace: "toolkit" + name: "use_view_based_rotary_encoder_scroll_haptics" + description: "If enabled, the rotary encoder scroll haptic implementation in the View class will be used, and the HapticScrollFeedbackProvider logic for rotary encoder haptic will be muted." + bug: "299587011" } \ No newline at end of file diff --git a/core/java/android/window/ScreenCapture.java b/core/java/android/window/ScreenCapture.java index e42193d459498b2442fa3e33b5a9c8fa677947c8..95e9e861bea276babebc3c6996c09aef0d5e781e 100644 --- a/core/java/android/window/ScreenCapture.java +++ b/core/java/android/window/ScreenCapture.java @@ -24,6 +24,7 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.hardware.HardwareBuffer; import android.os.Build; +import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; @@ -34,6 +35,7 @@ import libcore.util.NativeAllocationRegistry; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.ObjIntConsumer; + /** * Handles display and layer captures for the system. * @@ -43,6 +45,8 @@ public class ScreenCapture { private static final String TAG = "ScreenCapture"; private static final int SCREENSHOT_WAIT_TIME_S = 4 * Build.HW_TIMEOUT_MULTIPLIER; + private static native int nativeCaptureDisplay(DisplayCaptureArgs captureArgs, + long captureListener); private static native int nativeCaptureLayers(LayerCaptureArgs captureArgs, long captureListener); private static native long nativeCreateScreenCaptureListener( @@ -51,6 +55,37 @@ public class ScreenCapture { private static native long nativeReadListenerFromParcel(Parcel in); private static native long getNativeListenerFinalizer(); + /** + * @param captureArgs Arguments about how to take the screenshot + * @param captureListener A listener to receive the screenshot callback + * @hide + */ + public static int captureDisplay(@NonNull DisplayCaptureArgs captureArgs, + @NonNull ScreenCaptureListener captureListener) { + return nativeCaptureDisplay(captureArgs, captureListener.mNativeObject); + } + + /** + * Captures all the surfaces in a display and returns a {@link ScreenshotHardwareBuffer} with + * the content. + * + * @hide + */ + public static ScreenshotHardwareBuffer captureDisplay( + DisplayCaptureArgs captureArgs) { + SynchronousScreenCaptureListener syncScreenCapture = createSyncCaptureListener(); + int status = captureDisplay(captureArgs, syncScreenCapture); + if (status != 0) { + return null; + } + + try { + return syncScreenCapture.getBuffer(); + } catch (Exception e) { + return null; + } + } + /** * Captures a layer and its children and returns a {@link HardwareBuffer} with the content. * @@ -483,6 +518,92 @@ public class ScreenCapture { }; } + /** + * The arguments class used to make display capture requests. + * + * @hide + * @see #nativeCaptureDisplay(DisplayCaptureArgs, long) + */ + public static class DisplayCaptureArgs extends CaptureArgs { + private final IBinder mDisplayToken; + private final int mWidth; + private final int mHeight; + private final boolean mUseIdentityTransform; + + private DisplayCaptureArgs(Builder builder) { + super(builder); + mDisplayToken = builder.mDisplayToken; + mWidth = builder.mWidth; + mHeight = builder.mHeight; + mUseIdentityTransform = builder.mUseIdentityTransform; + } + + /** + * The Builder class used to construct {@link DisplayCaptureArgs} + */ + public static class Builder extends CaptureArgs.Builder<Builder> { + private IBinder mDisplayToken; + private int mWidth; + private int mHeight; + private boolean mUseIdentityTransform; + + /** + * Construct a new {@link LayerCaptureArgs} with the set parameters. The builder + * remains valid. + */ + public DisplayCaptureArgs build() { + if (mDisplayToken == null) { + throw new IllegalStateException( + "Can't take screenshot with null display token"); + } + return new DisplayCaptureArgs(this); + } + + public Builder(IBinder displayToken) { + setDisplayToken(displayToken); + } + + /** + * The display to take the screenshot of. + */ + public Builder setDisplayToken(IBinder displayToken) { + mDisplayToken = displayToken; + return this; + } + + /** + * Set the desired size of the returned buffer. The raw screen will be scaled down to + * this size + * + * @param width The desired width of the returned buffer. Caller may pass in 0 if no + * scaling is desired. + * @param height The desired height of the returned buffer. Caller may pass in 0 if no + * scaling is desired. + */ + public Builder setSize(int width, int height) { + mWidth = width; + mHeight = height; + return this; + } + + /** + * Replace the rotation transform of the display with the identity transformation while + * taking the screenshot. This ensures the screenshot is taken in the ROTATION_0 + * orientation. Set this value to false if the screenshot should be taken in the + * current screen orientation. + */ + public Builder setUseIdentityTransform(boolean useIdentityTransform) { + mUseIdentityTransform = useIdentityTransform; + return this; + } + + @Override + Builder getThis() { + return this; + } + } + } + /** * The arguments class used to make layer capture requests. * @@ -561,6 +682,7 @@ public class ScreenCapture { /** * The object used to receive the results when invoking screen capture requests via + * {@link #captureDisplay(DisplayCaptureArgs, ScreenCaptureListener)} or * {@link #captureLayers(LayerCaptureArgs, ScreenCaptureListener)} * * This listener can only be used for a single call to capture content call. @@ -662,7 +784,8 @@ public class ScreenCapture { /** * Helper class to synchronously get the {@link ScreenshotHardwareBuffer} when calling - * {@link #captureLayers(LayerCaptureArgs, ScreenCaptureListener)} + * {@link #captureLayers(LayerCaptureArgs, ScreenCaptureListener)} or + * {@link #captureDisplay(DisplayCaptureArgs, ScreenCaptureListener)} */ public abstract static class SynchronousScreenCaptureListener extends ScreenCaptureListener { SynchronousScreenCaptureListener(ObjIntConsumer<ScreenshotHardwareBuffer> consumer) { diff --git a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java index 4a848f68abab8d4e4cc4ba81c783870b4696ab4b..cb2d9347497120c2eb12a96364560e145154c848 100644 --- a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java +++ b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java @@ -81,6 +81,11 @@ public class SystemUiSystemPropertiesFlags { public static final Flag PROPAGATE_CHANNEL_UPDATES_TO_CONVERSATIONS = releasedFlag( "persist.sysui.notification.propagate_channel_updates_to_conversations"); + // TODO: b/291907312 - remove feature flags + /** Gating the NMS->NotificationAttentionHelper buzzBeepBlink refactor */ + public static final Flag ENABLE_ATTENTION_HELPER_REFACTOR = devFlag( + "persist.debug.sysui.notification.enable_attention_helper_refactor"); + /** b/301242692: Visit extra URIs used in notifications to prevent security issues. */ public static final Flag VISIT_RISKY_URIS = devFlag( "persist.sysui.notification.visit_risky_uris"); diff --git a/core/java/com/android/internal/infra/AbstractRemoteService.java b/core/java/com/android/internal/infra/AbstractRemoteService.java index 18414cf93bc83aa51e43fb4cfa3034dec9523660..556c246e16d6167f9781405110a6ef2c016f8984 100644 --- a/core/java/com/android/internal/infra/AbstractRemoteService.java +++ b/core/java/com/android/internal/infra/AbstractRemoteService.java @@ -355,9 +355,10 @@ public abstract class AbstractRemoteService<S extends AbstractRemoteService<S, I obtainMessage(AbstractRemoteService::handleFinishRequest, this, finshedRequest)); } - private void handleFinishRequest(@NonNull BasePendingRequest<S, I> finshedRequest) { - mUnfinishedRequests.remove(finshedRequest); - + private void handleFinishRequest(@NonNull BasePendingRequest<S, I> finishedRequest) { + synchronized (mUnfinishedRequests) { + mUnfinishedRequests.remove(finishedRequest); + } if (mUnfinishedRequests.isEmpty()) { scheduleUnbind(); } @@ -460,7 +461,9 @@ public abstract class AbstractRemoteService<S extends AbstractRemoteService<S, I } else { if (mVerbose) Slog.v(mTag, "handlePendingRequest(): " + pendingRequest); - mUnfinishedRequests.add(pendingRequest); + synchronized (mUnfinishedRequests) { + mUnfinishedRequests.add(pendingRequest); + } cancelScheduledUnbind(); pendingRequest.run(); diff --git a/core/java/com/android/internal/security/VerityUtils.java b/core/java/com/android/internal/security/VerityUtils.java index 74a9d16c890d30445c70b5e1edd07e9340f8104c..7f7ea8b28546095dc94f880b5416d3efe4c0d764 100644 --- a/core/java/com/android/internal/security/VerityUtils.java +++ b/core/java/com/android/internal/security/VerityUtils.java @@ -17,8 +17,10 @@ package com.android.internal.security; import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.Build; import android.os.SystemProperties; +import android.os.incremental.V4Signature; import android.system.Os; import android.system.OsConstants; import android.util.Slog; @@ -40,6 +42,9 @@ import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; +import java.security.DigestException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; @@ -192,9 +197,9 @@ public abstract class VerityUtils { * * @see <a href="https://www.kernel.org/doc/html/latest/filesystems/fsverity.html#file-digest-computation"> * File digest computation in Linux kernel documentation</a> - * @return Bytes of fs-verity digest + * @return Bytes of fs-verity digest, or null if the file does not have fs-verity enabled */ - public static byte[] getFsverityDigest(@NonNull String filePath) { + public static @Nullable byte[] getFsverityDigest(@NonNull String filePath) { byte[] result = new byte[HASH_SIZE_BYTES]; int retval = measureFsverityNative(filePath, result); if (retval < 0) { @@ -206,6 +211,34 @@ public abstract class VerityUtils { return result; } + /** + * Generates an fs-verity digest from a V4Signature.HashingInfo and the file's size. + */ + public static @NonNull byte[] generateFsVerityDigest(long fileSize, + @NonNull V4Signature.HashingInfo hashingInfo) + throws DigestException, NoSuchAlgorithmException { + if (hashingInfo.rawRootHash == null || hashingInfo.rawRootHash.length != 32) { + throw new IllegalArgumentException("Expect a 32-byte rootHash for SHA256"); + } + if (hashingInfo.log2BlockSize != 12) { + throw new IllegalArgumentException( + "Unsupported log2BlockSize: " + hashingInfo.log2BlockSize); + } + + var buffer = ByteBuffer.allocate(256); // sizeof(fsverity_descriptor) + buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) 1); // version + buffer.put((byte) 1); // Merkle tree hash algorithm, 1 for SHA256 + buffer.put(hashingInfo.log2BlockSize); // log2(block-size), only log2(4096) is supported + buffer.put((byte) 0); // size of salt in bytes; 0 if none + buffer.putInt(0); // reserved, must be 0 + buffer.putLong(fileSize); // size of file the Merkle tree is built over + buffer.put(hashingInfo.rawRootHash); // Merkle tree root hash + // The rest are zeros, including the latter half of root hash unused for SHA256. + + return MessageDigest.getInstance("SHA-256").digest(buffer.array()); + } + /** @hide */ @VisibleForTesting public static byte[] toFormattedDigest(byte[] digest) { diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index 6ed0a8a047f5d744036ad792dcb7981de587bdcb..041f9c7edeefc6ef22809358d74372e900ecaa1c 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -158,12 +158,8 @@ static struct thread_dispatch_offsets_t // **************************************************************************** // **************************************************************************** -static constexpr int32_t PROXY_WARN_INTERVAL = 5000; static constexpr uint32_t GC_INTERVAL = 1000; -static std::atomic<uint32_t> gNumProxies(0); -static std::atomic<uint32_t> gProxiesWarned(0); - // Number of GlobalRefs held by JavaBBinders. static std::atomic<uint32_t> gNumLocalRefsCreated(0); static std::atomic<uint32_t> gNumLocalRefsDeleted(0); @@ -776,19 +772,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val) return NULL; } BinderProxyNativeData* actualNativeData = getBPNativeData(env, object); - if (actualNativeData == nativeData) { - // Created a new Proxy - uint32_t numProxies = gNumProxies.fetch_add(1, std::memory_order_relaxed); - uint32_t numLastWarned = gProxiesWarned.load(std::memory_order_relaxed); - if (numProxies >= numLastWarned + PROXY_WARN_INTERVAL) { - // Multiple threads can get here, make sure only one of them gets to - // update the warn counter. - if (gProxiesWarned.compare_exchange_strong(numLastWarned, - numLastWarned + PROXY_WARN_INTERVAL, std::memory_order_relaxed)) { - ALOGW("Unexpectedly many live BinderProxies: %d\n", numProxies); - } - } - } else { + if (actualNativeData != nativeData) { delete nativeData; } @@ -1143,7 +1127,7 @@ jint android_os_Debug_getLocalObjectCount(JNIEnv* env, jobject clazz) jint android_os_Debug_getProxyObjectCount(JNIEnv* env, jobject clazz) { - return gNumProxies.load(); + return BpBinder::getBinderProxyCount(); } jint android_os_Debug_getDeathObjectCount(JNIEnv* env, jobject clazz) @@ -1428,7 +1412,6 @@ static void BinderProxy_destroy(void* rawNativeData) nativeData->mObject.get(), nativeData->mOrgue.get()); delete nativeData; IPCThreadState::self()->flushCommands(); - --gNumProxies; } JNIEXPORT jlong JNICALL android_os_BinderProxy_getNativeFinalizer(JNIEnv*, jclass) { diff --git a/core/jni/android_window_ScreenCapture.cpp b/core/jni/android_window_ScreenCapture.cpp index beb8c9b2d12f9e3d8b4e64310c99884b40bc4fe6..bdf7eaa8aace954d0a84bb53d4b75b8ba58433a3 100644 --- a/core/jni/android_window_ScreenCapture.cpp +++ b/core/jni/android_window_ScreenCapture.cpp @@ -49,6 +49,13 @@ static struct { jfieldID hintForSeamlessTransition; } gCaptureArgsClassInfo; +static struct { + jfieldID displayToken; + jfieldID width; + jfieldID height; + jfieldID useIdentityTransform; +} gDisplayCaptureArgsClassInfo; + static struct { jfieldID layer; jfieldID childrenOnly; @@ -174,6 +181,39 @@ static void getCaptureArgs(JNIEnv* env, jobject captureArgsObject, CaptureArgs& gCaptureArgsClassInfo.hintForSeamlessTransition); } +static DisplayCaptureArgs displayCaptureArgsFromObject(JNIEnv* env, + jobject displayCaptureArgsObject) { + DisplayCaptureArgs captureArgs; + getCaptureArgs(env, displayCaptureArgsObject, captureArgs); + + captureArgs.displayToken = + ibinderForJavaObject(env, + env->GetObjectField(displayCaptureArgsObject, + gDisplayCaptureArgsClassInfo.displayToken)); + captureArgs.width = + env->GetIntField(displayCaptureArgsObject, gDisplayCaptureArgsClassInfo.width); + captureArgs.height = + env->GetIntField(displayCaptureArgsObject, gDisplayCaptureArgsClassInfo.height); + captureArgs.useIdentityTransform = + env->GetBooleanField(displayCaptureArgsObject, + gDisplayCaptureArgsClassInfo.useIdentityTransform); + return captureArgs; +} + +static jint nativeCaptureDisplay(JNIEnv* env, jclass clazz, jobject displayCaptureArgsObject, + jlong screenCaptureListenerObject) { + const DisplayCaptureArgs captureArgs = + displayCaptureArgsFromObject(env, displayCaptureArgsObject); + + if (captureArgs.displayToken == nullptr) { + return BAD_VALUE; + } + + sp<gui::IScreenCaptureListener> captureListener = + reinterpret_cast<gui::IScreenCaptureListener*>(screenCaptureListenerObject); + return ScreenshotClient::captureDisplay(captureArgs, captureListener); +} + static jint nativeCaptureLayers(JNIEnv* env, jclass clazz, jobject layerCaptureArgsObject, jlong screenCaptureListenerObject) { LayerCaptureArgs captureArgs; @@ -243,6 +283,8 @@ static jlong getNativeListenerFinalizer(JNIEnv* env, jclass clazz) { static const JNINativeMethod sScreenCaptureMethods[] = { // clang-format off + {"nativeCaptureDisplay", "(Landroid/window/ScreenCapture$DisplayCaptureArgs;J)I", + (void*)nativeCaptureDisplay }, {"nativeCaptureLayers", "(Landroid/window/ScreenCapture$LayerCaptureArgs;J)I", (void*)nativeCaptureLayers }, {"nativeCreateScreenCaptureListener", "(Ljava/util/function/ObjIntConsumer;)J", @@ -275,6 +317,17 @@ int register_android_window_ScreenCapture(JNIEnv* env) { gCaptureArgsClassInfo.hintForSeamlessTransition = GetFieldIDOrDie(env, captureArgsClazz, "mHintForSeamlessTransition", "Z"); + jclass displayCaptureArgsClazz = + FindClassOrDie(env, "android/window/ScreenCapture$DisplayCaptureArgs"); + gDisplayCaptureArgsClassInfo.displayToken = + GetFieldIDOrDie(env, displayCaptureArgsClazz, "mDisplayToken", "Landroid/os/IBinder;"); + gDisplayCaptureArgsClassInfo.width = + GetFieldIDOrDie(env, displayCaptureArgsClazz, "mWidth", "I"); + gDisplayCaptureArgsClassInfo.height = + GetFieldIDOrDie(env, displayCaptureArgsClazz, "mHeight", "I"); + gDisplayCaptureArgsClassInfo.useIdentityTransform = + GetFieldIDOrDie(env, displayCaptureArgsClazz, "mUseIdentityTransform", "Z"); + jclass layerCaptureArgsClazz = FindClassOrDie(env, "android/window/ScreenCapture$LayerCaptureArgs"); gLayerCaptureArgsClassInfo.layer = diff --git a/core/res/res/layout/autofill_fill_dialog.xml b/core/res/res/layout/autofill_fill_dialog.xml index 37d2fa0540f08ebd74ffded281865c64c1777905..196af6dfb6df5165969d0108c45d8e15d61f235c 100644 --- a/core/res/res/layout/autofill_fill_dialog.xml +++ b/core/res/res/layout/autofill_fill_dialog.xml @@ -27,7 +27,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" - android:layout_marginTop="@dimen/autofill_save_outer_top_margin" + android:layout_marginTop="@dimen/autofill_save_outer_margin" android:layout_marginBottom="24dp" android:layout_marginStart="24dp" android:layout_marginEnd="24dp" diff --git a/core/res/res/layout/autofill_save.xml b/core/res/res/layout/autofill_save.xml index bed19a87eb168e7cf5a209d2c849d5301ec3bb7b..8b6c90141bb76c95d47853111de2b46280fb34c0 100644 --- a/core/res/res/layout/autofill_save.xml +++ b/core/res/res/layout/autofill_save.xml @@ -22,59 +22,66 @@ android:background="@drawable/autofill_bottomsheet_background" android:orientation="vertical"> - <LinearLayout + <com.android.server.autofill.ui.BottomSheetLayout android:id="@+id/autofill_save" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/autofill_save_outer_top_margin" - android:layout_marginStart="24dp" - android:layout_marginEnd="24dp" + android:layout_marginTop="@dimen/autofill_save_outer_margin" android:background="?android:attr/colorSurface" android:gravity="center_horizontal" android:orientation="vertical"> - - <LinearLayout + <ScrollView android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <ImageView - android:id="@+id/autofill_save_icon" - android:scaleType="fitCenter" - android:layout_gravity="center" - android:layout_height="@dimen/autofill_save_icon_max_height" - android:layout_width="fill_parent"/> - - <TextView - android:id="@+id/autofill_save_title" + android:layout_height="0dp" + android:fillViewport="true" + android:layout_weight="1" + android:layout_marginBottom="8dp"> + <LinearLayout + android:layout_marginStart="@dimen/autofill_save_outer_margin" + android:layout_marginEnd="@dimen/autofill_save_outer_margin" android:layout_width="fill_parent" + android:orientation="vertical" android:layout_height="wrap_content" - android:text="@string/autofill_save_title" - android:layout_marginTop="16dp" - android:paddingBottom="24dp" - android:gravity="center" - android:textAppearance="@style/AutofillSaveUiTitle"> - </TextView> - - <com.android.server.autofill.ui.CustomScrollView - android:id="@+id/autofill_save_custom_subtitle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:visibility="gone"/> - - </LinearLayout> + > + <ImageView + android:id="@+id/autofill_save_icon" + android:scaleType="fitCenter" + android:layout_gravity="center" + android:layout_height="@dimen/autofill_save_icon_max_height" + android:layout_width="fill_parent"/> + + <TextView + android:id="@+id/autofill_save_title" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/autofill_save_title" + android:layout_marginTop="16dp" + android:paddingBottom="24dp" + android:gravity="center" + android:textAppearance="@style/AutofillSaveUiTitle"> + </TextView> + <LinearLayout + android:id="@+id/autofill_save_custom_subtitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="gone"/> + + </LinearLayout> + </ScrollView> <com.android.internal.widget.ButtonBarLayout android:layout_width="match_parent" android:layout_height="48dp" android:layout_gravity="end" android:clipToPadding="false" - android:layout_marginTop="32dp" - android:layout_marginBottom="18dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="8dp" android:theme="@style/Theme.DeviceDefault.AutofillHalfScreenDialogButton" android:orientation="horizontal" - android:gravity="center_vertical"> - + android:gravity="center_vertical" + android:layout_marginStart="@dimen/autofill_save_outer_margin" + android:layout_marginEnd="@dimen/autofill_save_outer_margin" + > <Button android:id="@+id/autofill_save_no" android:layout_width="wrap_content" @@ -106,6 +113,5 @@ </com.android.internal.widget.ButtonBarLayout> - </LinearLayout> - -</LinearLayout> + </com.android.server.autofill.ui.BottomSheetLayout> +</LinearLayout> \ No newline at end of file diff --git a/core/res/res/layout/simple_list_item_multiple_choice.xml b/core/res/res/layout/simple_list_item_multiple_choice.xml index 440b6fd8e1b11ecdc67c9ceef217876140d3521f..fd9bf76aade55580e43af270c7ffa1adc00d69d2 100644 --- a/core/res/res/layout/simple_list_item_multiple_choice.xml +++ b/core/res/res/layout/simple_list_item_multiple_choice.xml @@ -17,7 +17,8 @@ <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" - android:layout_height="?android:attr/listPreferredItemHeightSmall" + android:layout_height="wrap_content" + android:minHeight="?android:attr/listPreferredItemHeightSmall" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:checkMark="?android:attr/listChoiceIndicatorMultiple" diff --git a/core/res/res/layout/simple_list_item_single_choice.xml b/core/res/res/layout/simple_list_item_single_choice.xml index 02cb7f77645ce080a1d2127252cd25aa1f26efdd..a66308e1ad02a6ee3d01da71eff3779fda3e33e7 100644 --- a/core/res/res/layout/simple_list_item_single_choice.xml +++ b/core/res/res/layout/simple_list_item_single_choice.xml @@ -17,7 +17,8 @@ <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" - android:layout_height="?android:attr/listPreferredItemHeightSmall" + android:layout_height="wrap_content" + android:minHeight="?android:attr/listPreferredItemHeightSmall" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:checkMark="?android:attr/listChoiceIndicatorSingle" diff --git a/core/res/res/values-sw640dp/dimens.xml b/core/res/res/values-sw640dp/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..c632176ba1dd10d4e15bf1de64d7392d6944f3e3 --- /dev/null +++ b/core/res/res/values-sw640dp/dimens.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> +<resources> + <!-- Top and side margins for autofill dialog on tablets --> + <dimen name="autofill_save_outer_margin">32dp</dimen> +</resources> \ No newline at end of file diff --git a/core/res/res/values-w640dp/bools.xml b/core/res/res/values-w640dp/bools.xml new file mode 100644 index 0000000000000000000000000000000000000000..64b20f7eaa9656ae8c98c12f3eb5971ed311285a --- /dev/null +++ b/core/res/res/values-w640dp/bools.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources> + <!-- Whether or not to include horizontal space around the dialog --> + <bool name="autofill_dialog_horizontal_space_included">true</bool> +</resources> \ No newline at end of file diff --git a/core/res/res/values-w640dp/dimens.xml b/core/res/res/values-w640dp/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f0c0b8786101ec49d033e5afd8c10895b7c46c1 --- /dev/null +++ b/core/res/res/values-w640dp/dimens.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> +<resources> + <!-- How much extra space should be left around the autofill dialog --> + <dimen name="autofill_dialog_offset">56dp</dimen> +</resources> \ No newline at end of file diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml index 4027f5c78035f71e8227a1b768a51ea3a249a97d..af305329da1adf681afd13670d5a54ee4e28e390 100644 --- a/core/res/res/values-watch/config.xml +++ b/core/res/res/values-watch/config.xml @@ -41,6 +41,10 @@ measured in dips per second. Setting this to -1dp disables rotary encoder fling. --> <dimen name="config_viewMaxRotaryEncoderFlingVelocity">8000dp</dimen> + <!-- Whether the View-based scroll haptic feedback implementation is enabled for + {@link InputDevice#SOURCE_ROTARY_ENCODER}s. --> + <bool name="config_viewBasedRotaryEncoderHapticsEnabled">true</bool> + <!-- Number of notifications to keep in the notification service historical archive. Reduced intentionally for watches to retain minimal memory footprint --> <integer name="config_notificationServiceArchiveSize">1</integer> diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index fe296c70409572644be20f787ff9017d377c3c5f..b097a613ebc1cdd53cbba11637ac8159479e3a4d 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -30,4 +30,6 @@ lockscreen, setting this to true should come with customized drawables. --> <bool name="use_lock_pattern_drawable">false</bool> <bool name="resolver_landscape_phone">true</bool> + <!-- Whether or not to include horizontal space around the dialog --> + <bool name="autofill_dialog_horizontal_space_included">false</bool> </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 2e2ec5ba52b30c58340921e05ef2761c300129ff..3d0af3dbde3d53920d5ad146e9347371dd9bcb14 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -6711,4 +6711,7 @@ {@link MotionEvent#AXIS_SCROLL} generated by {@link InputDevice#SOURCE_ROTARY_ENCODER} devices. --> <bool name="config_viewRotaryEncoderHapticScrollFedbackEnabled">false</bool> + <!-- Whether the View-based scroll haptic feedback implementation is enabled for + {@link InputDevice#SOURCE_ROTARY_ENCODER}s. --> + <bool name="config_viewBasedRotaryEncoderHapticsEnabled">false</bool> </resources> diff --git a/core/res/res/values/config_telephony.xml b/core/res/res/values/config_telephony.xml index 9bf3ce4268dd0d0944c2531864e654cef6679985..878e6b306571427241095957744f20dbd0c96248 100644 --- a/core/res/res/values/config_telephony.xml +++ b/core/res/res/values/config_telephony.xml @@ -190,6 +190,11 @@ </string-array> <java-symbol type="array" name="config_satellite_services_supported_by_providers" /> + <!-- The identifier of the satellite's eSIM profile preloaded on the device. The identifier is + composed of MCC and MNC of the satellite PLMN with the format "mccmnc". --> + <string name="config_satellite_esim_identifier" translatable="false"></string> + <java-symbol type="string" name="config_satellite_esim_identifier" /> + <!-- Whether enhanced IWLAN handover check is enabled. If enabled, telephony frameworks will not perform handover if the target transport is out of service, or VoPS not supported. The network will be torn down on the source transport, and will be diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 0f2c264a5bd663d8fea4c92523c548cd190da929..49295fd235aef9e740e802132c58bad89a2fbe35 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -874,7 +874,7 @@ <dimen name="autofill_dataset_picker_max_height">90%</dimen> <!-- Autofill save dialog padding --> - <dimen name="autofill_save_outer_top_margin">24dp</dimen> + <dimen name="autofill_save_outer_margin">24dp</dimen> <dimen name="autofill_save_outer_top_padding">16dp</dimen> <dimen name="autofill_elevation">32dp</dimen> <dimen name="autofill_save_inner_padding">16dp</dimen> @@ -885,6 +885,9 @@ <dimen name="autofill_save_button_bar_padding">16dp</dimen> <dimen name="autofill_dialog_corner_radius">24dp</dimen> + <!-- How much extra space should be left around the autofill dialog --> + <dimen name="autofill_dialog_offset">72dp</dimen> + <!-- Max height of the the autofill save custom subtitle as a fraction of the screen width/height --> <dimen name="autofill_save_custom_subtitle_max_height">20%</dimen> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index fe1144958c520f1588c8ce244d33c7104146e79e..83fb0986a19fa34b57211a340129267b10ce7e31 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3653,6 +3653,7 @@ <java-symbol type="layout" name="autofill_dataset_picker_fullscreen"/> <java-symbol type="layout" name="autofill_dataset_picker_header_footer"/> <java-symbol type="layout" name="autofill_fill_dialog"/> + <java-symbol type="id" name="autofill_save_icon"/> <java-symbol type="id" name="autofill" /> <java-symbol type="id" name="autofill_dataset_footer"/> <java-symbol type="id" name="autofill_dataset_header"/> @@ -3709,6 +3710,10 @@ <java-symbol type="dimen" name="autofill_save_custom_subtitle_max_height"/> <java-symbol type="integer" name="autofill_max_visible_datasets" /> <java-symbol type="dimen" name="autofill_dialog_max_width" /> + <java-symbol type="dimen" name="autofill_dialog_offset"/> + <java-symbol type="dimen" name="autofill_save_outer_margin"/> + + <java-symbol type="bool" name="autofill_dialog_horizontal_space_included"/> <java-symbol type="style" name="Theme.DeviceDefault.Autofill" /> <java-symbol type="style" name="Theme.DeviceDefault.Light.Autofill" /> @@ -5235,4 +5240,5 @@ <java-symbol type="array" name="config_tvExternalInputLoggingDeviceOnScreenDisplayNames" /> <java-symbol type="array" name="config_tvExternalInputLoggingDeviceBrandNames" /> <java-symbol type="bool" name="config_viewRotaryEncoderHapticScrollFedbackEnabled" /> + <java-symbol type="bool" name="config_viewBasedRotaryEncoderHapticsEnabled" /> </resources> diff --git a/core/tests/GameManagerTests/src/android/app/GameManagerTests.java b/core/tests/GameManagerTests/src/android/app/GameManagerTests.java index fac3a0ecdec2a30e3de2c4b51f1c082a69f3120e..d34c91ee48bad50e2b70fd760222fa5f3eebb112 100644 --- a/core/tests/GameManagerTests/src/android/app/GameManagerTests.java +++ b/core/tests/GameManagerTests/src/android/app/GameManagerTests.java @@ -86,16 +86,6 @@ public final class GameManagerTests { GameModeInfo gameModeInfo = mGameManager.getGameModeInfo(mPackageName); assertNotNull(gameModeInfo); assertNull(gameModeInfo.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM)); - GameModeConfiguration unsupportedFpsConfig = - new GameModeConfiguration.Builder().setFpsOverride( - 70).setScalingFactor(0.5f).build(); - mGameManager.updateCustomGameModeConfiguration(mPackageName, unsupportedFpsConfig); - gameModeInfo = mGameManager.getGameModeInfo(mPackageName); - assertNotNull(gameModeInfo); - // TODO(b/243448953): update to non-zero FPS when matching is implemented - assertEquals(new GameModeConfiguration.Builder().setFpsOverride( - GameModeConfiguration.FPS_OVERRIDE_NONE).setScalingFactor(0.5f).build(), - gameModeInfo.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM)); GameModeConfiguration supportedFpsConfig = new GameModeConfiguration.Builder().setFpsOverride( diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index 89355072e29efaa1cb9f9d9ca353f4a0a5521122..36e122301ba2f439593820c9ef823b83671cbec5 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -33,7 +33,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import android.annotation.Nullable; +import android.annotation.NonNull; import android.app.Activity; import android.app.ActivityThread; import android.app.ActivityThread.ActivityClientRecord; @@ -226,7 +226,7 @@ public class ActivityThreadTest { CompatibilityInfo.setOverrideInvertedScale(scale); try { // Send process level config change. - ClientTransaction transaction = newTransaction(activityThread, null); + ClientTransaction transaction = newTransaction(activityThread); transaction.addCallback(ConfigurationChangeItem.obtain( new Configuration(newConfig), DEVICE_ID_INVALID)); appThread.scheduleTransaction(transaction); @@ -243,7 +243,7 @@ public class ActivityThreadTest { // Send activity level config change. newConfig.seq++; newConfig.smallestScreenWidthDp++; - transaction = newTransaction(activityThread, activity.getActivityToken()); + transaction = newTransaction(activityThread); transaction.addCallback(ActivityConfigurationChangeItem.obtain( activity.getActivityToken(), new Configuration(newConfig))); appThread.scheduleTransaction(transaction); @@ -444,12 +444,12 @@ public class ActivityThreadTest { activity.mConfigLatch = new CountDownLatch(1); activity.mTestLatch = new CountDownLatch(1); - ClientTransaction transaction = newTransaction(activityThread, null); + ClientTransaction transaction = newTransaction(activityThread); transaction.addCallback(ConfigurationChangeItem.obtain( processConfigLandscape, DEVICE_ID_INVALID)); appThread.scheduleTransaction(transaction); - transaction = newTransaction(activityThread, activity.getActivityToken()); + transaction = newTransaction(activityThread); transaction.addCallback(ActivityConfigurationChangeItem.obtain( activity.getActivityToken(), activityConfigLandscape)); transaction.addCallback(ConfigurationChangeItem.obtain( @@ -829,7 +829,8 @@ public class ActivityThreadTest { return thread.getActivityClient(token); } - private static ClientTransaction newRelaunchResumeTransaction(Activity activity) { + @NonNull + private static ClientTransaction newRelaunchResumeTransaction(@NonNull Activity activity) { final Configuration currentConfig = activity.getResources().getConfiguration(); final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain( activity.getActivityToken(), null, null, 0, @@ -846,7 +847,8 @@ public class ActivityThreadTest { return transaction; } - private static ClientTransaction newResumeTransaction(Activity activity) { + @NonNull + private static ClientTransaction newResumeTransaction(@NonNull Activity activity) { final ResumeActivityItem resumeStateRequest = ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */, false /* shouldSendCompatFakeFocus */); @@ -857,7 +859,8 @@ public class ActivityThreadTest { return transaction; } - private static ClientTransaction newStopTransaction(Activity activity) { + @NonNull + private static ClientTransaction newStopTransaction(@NonNull Activity activity) { final StopActivityItem stopStateRequest = StopActivityItem.obtain( activity.getActivityToken(), 0 /* configChanges */); @@ -867,8 +870,9 @@ public class ActivityThreadTest { return transaction; } - private static ClientTransaction newActivityConfigTransaction(Activity activity, - Configuration config) { + @NonNull + private static ClientTransaction newActivityConfigTransaction(@NonNull Activity activity, + @NonNull Configuration config) { final ActivityConfigurationChangeItem item = ActivityConfigurationChangeItem.obtain( activity.getActivityToken(), config); @@ -878,8 +882,9 @@ public class ActivityThreadTest { return transaction; } - private static ClientTransaction newNewIntentTransaction(Activity activity, - List<ReferrerIntent> intents, boolean resume) { + @NonNull + private static ClientTransaction newNewIntentTransaction(@NonNull Activity activity, + @NonNull List<ReferrerIntent> intents, boolean resume) { final NewIntentItem item = NewIntentItem.obtain(activity.getActivityToken(), intents, resume); @@ -889,13 +894,14 @@ public class ActivityThreadTest { return transaction; } - private static ClientTransaction newTransaction(Activity activity) { - return newTransaction(activity.getActivityThread(), activity.getActivityToken()); + @NonNull + private static ClientTransaction newTransaction(@NonNull Activity activity) { + return newTransaction(activity.getActivityThread()); } - private static ClientTransaction newTransaction(ActivityThread activityThread, - @Nullable IBinder activityToken) { - return ClientTransaction.obtain(activityThread.getApplicationThread(), activityToken); + @NonNull + private static ClientTransaction newTransaction(@NonNull ActivityThread activityThread) { + return ClientTransaction.obtain(activityThread.getApplicationThread()); } // Test activity diff --git a/core/tests/coretests/src/android/app/servertransaction/ActivityConfigurationChangeItemTest.java b/core/tests/coretests/src/android/app/servertransaction/ActivityConfigurationChangeItemTest.java index 08033cc4009c3c481134d94a84f6908faa73744e..785a8a1ced601b97576f32cd882f341098ec0f63 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ActivityConfigurationChangeItemTest.java +++ b/core/tests/coretests/src/android/app/servertransaction/ActivityConfigurationChangeItemTest.java @@ -66,7 +66,7 @@ public class ActivityConfigurationChangeItemTest { final ActivityConfigurationChangeItem item = ActivityConfigurationChangeItem .obtain(mToken, mConfiguration); - final Context context = item.getContextToUpdate(mHandler, mToken); + final Context context = item.getContextToUpdate(mHandler); assertEquals(mActivity, context); } diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java index 3d252fbddb80244d88054cba9e9b8442f0ee7be8..531404bffd5080ecfa9291b6117ba5e1ebadb939 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java @@ -21,7 +21,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.app.ClientTransactionHandler; -import android.os.IBinder; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -46,22 +45,21 @@ public class ClientTransactionTests { @Test public void testPreExecute() { - ClientTransactionItem callback1 = mock(ClientTransactionItem.class); - ClientTransactionItem callback2 = mock(ClientTransactionItem.class); - ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class); - ClientTransactionHandler clientTransactionHandler = mock(ClientTransactionHandler.class); - IBinder token = mock(IBinder.class); + final ClientTransactionItem callback1 = mock(ClientTransactionItem.class); + final ClientTransactionItem callback2 = mock(ClientTransactionItem.class); + final ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class); + final ClientTransactionHandler clientTransactionHandler = + mock(ClientTransactionHandler.class); - ClientTransaction transaction = ClientTransaction.obtain(null /* client */, - token /* activityToken */); + final ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(callback1); transaction.addCallback(callback2); transaction.setLifecycleStateRequest(stateRequest); transaction.preExecute(clientTransactionHandler); - verify(callback1, times(1)).preExecute(clientTransactionHandler, token); - verify(callback2, times(1)).preExecute(clientTransactionHandler, token); - verify(stateRequest, times(1)).preExecute(clientTransactionHandler, token); + verify(callback1, times(1)).preExecute(clientTransactionHandler); + verify(callback2, times(1)).preExecute(clientTransactionHandler); + verify(stateRequest, times(1)).preExecute(clientTransactionHandler); } } diff --git a/core/tests/coretests/src/android/app/servertransaction/ConfigurationChangeItemTest.java b/core/tests/coretests/src/android/app/servertransaction/ConfigurationChangeItemTest.java index 3926cfb14194d0bd49e25bd5b7e9236b571816fd..d9f5523c9782808b1a7aa3de19625657c57cd12d 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ConfigurationChangeItemTest.java +++ b/core/tests/coretests/src/android/app/servertransaction/ConfigurationChangeItemTest.java @@ -24,7 +24,6 @@ import android.app.ActivityThread; import android.app.ClientTransactionHandler; import android.content.Context; import android.content.res.Configuration; -import android.os.IBinder; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -49,8 +48,6 @@ public class ConfigurationChangeItemTest { @Mock private ClientTransactionHandler mHandler; - @Mock - private IBinder mToken; // Can't mock final class. private final Configuration mConfiguration = new Configuration(); @@ -63,7 +60,7 @@ public class ConfigurationChangeItemTest { public void testGetContextToUpdate() { final ConfigurationChangeItem item = ConfigurationChangeItem .obtain(mConfiguration, DEVICE_ID_DEFAULT); - final Context context = item.getContextToUpdate(mHandler, mToken); + final Context context = item.getContextToUpdate(mHandler); assertEquals(ActivityThread.currentApplication(), context); } diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index c8d8f4be9e0ade314c2b5a47b34c8ccddee43f36..4bbde0cd6366029efe617d2acee3da4549af98f9 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -27,6 +27,7 @@ import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import android.app.ActivityOptions; +import android.app.IApplicationThread; import android.app.servertransaction.TestUtils.LaunchActivityItemBuilder; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -41,8 +42,11 @@ import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import java.util.function.Supplier; @@ -60,7 +64,15 @@ import java.util.function.Supplier; @Presubmit public class ObjectPoolTests { - private final IBinder mActivityToken = new Binder(); + @Mock + private IApplicationThread mApplicationThread; + @Mock + private IBinder mActivityToken; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } // 1. Check if two obtained objects from pool are not the same. // 2. Check if the state of the object is cleared after recycling. @@ -309,15 +321,15 @@ public class ObjectPoolTests { @Test public void testRecycleClientTransaction() { - ClientTransaction emptyItem = ClientTransaction.obtain(null, null); - ClientTransaction item = ClientTransaction.obtain(null, new Binder()); + ClientTransaction emptyItem = ClientTransaction.obtain(null); + ClientTransaction item = ClientTransaction.obtain(mApplicationThread); assertNotSame(item, emptyItem); assertNotEquals(item, emptyItem); item.recycle(); assertEquals(item, emptyItem); - ClientTransaction item2 = ClientTransaction.obtain(null, new Binder()); + ClientTransaction item2 = ClientTransaction.obtain(mApplicationThread); assertSame(item, item2); assertNotEquals(item2, emptyItem); } diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java index a998b26b09c1d810787729f53374f3443cd77fdf..a1a2bdbe0f151d07acf7806350ac638c102cfe59 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java @@ -37,6 +37,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.annotation.NonNull; import android.app.Activity; import android.app.ActivityThread.ActivityClientRecord; import android.app.ClientTransactionHandler; @@ -230,8 +231,7 @@ public class TransactionExecutorTests { when(stateRequest.getActivityToken()).thenReturn(token); when(mTransactionHandler.getActivity(token)).thenReturn(mock(Activity.class)); - ClientTransaction transaction = ClientTransaction.obtain(null /* client */, - token /* activityToken */); + ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(callback1); transaction.addCallback(callback2); transaction.setLifecycleStateRequest(stateRequest); @@ -240,8 +240,8 @@ public class TransactionExecutorTests { mExecutor.execute(transaction); InOrder inOrder = inOrder(mTransactionHandler, callback1, callback2, stateRequest); - inOrder.verify(callback1).execute(eq(mTransactionHandler), eq(token), any()); - inOrder.verify(callback2).execute(eq(mTransactionHandler), eq(token), any()); + inOrder.verify(callback1).execute(eq(mTransactionHandler), any()); + inOrder.verify(callback2).execute(eq(mTransactionHandler), any()); inOrder.verify(stateRequest).execute(eq(mTransactionHandler), eq(mClientRecord), any()); } @@ -254,8 +254,7 @@ public class TransactionExecutorTests { // An incoming destroy transaction enters binder thread (preExecute). final IBinder token = mock(IBinder.class); - final ClientTransaction destroyTransaction = ClientTransaction.obtain(null /* client */, - token /* activityToken */); + final ClientTransaction destroyTransaction = ClientTransaction.obtain(null /* client */); destroyTransaction.setLifecycleStateRequest( DestroyActivityItem.obtain(token, false /* finished */, 0 /* configChanges */)); destroyTransaction.preExecute(mTransactionHandler); @@ -263,8 +262,7 @@ public class TransactionExecutorTests { assertEquals(1, mTransactionHandler.getActivitiesToBeDestroyed().size()); // A previous queued launch transaction runs on main thread (execute). - final ClientTransaction launchTransaction = ClientTransaction.obtain(null /* client */, - token /* activityToken */); + final ClientTransaction launchTransaction = ClientTransaction.obtain(null /* client */); final LaunchActivityItem launchItem = spy(new LaunchActivityItemBuilder().setActivityToken(token).build()); launchTransaction.addCallback(launchItem); @@ -272,7 +270,7 @@ public class TransactionExecutorTests { // The launch transaction should not be executed because its token is in the // to-be-destroyed container. - verify(launchItem, never()).execute(any(), any(), any()); + verify(launchItem, never()).execute(any(), any()); // After the destroy transaction has been executed, the token should be removed. mExecutor.execute(destroyTransaction); @@ -286,8 +284,7 @@ public class TransactionExecutorTests { PostExecItem postExecItem = new PostExecItem(ON_RESUME); IBinder token = mock(IBinder.class); - ClientTransaction transaction = ClientTransaction.obtain(null /* client */, - token /* activityToken */); + ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(postExecItem); // Verify resolution that should get to onPause @@ -439,7 +436,7 @@ public class TransactionExecutorTests { final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class); when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED); final IBinder token = mock(IBinder.class); - final ClientTransaction transaction = ClientTransaction.obtain(null /* client */, token); + final ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(activityItem); when(mTransactionHandler.getActivityClient(token)).thenReturn(null); @@ -449,7 +446,7 @@ public class TransactionExecutorTests { @Test public void testActivityItemExecute() { final IBinder token = mock(IBinder.class); - final ClientTransaction transaction = ClientTransaction.obtain(null /* client */, token); + final ClientTransaction transaction = ClientTransaction.obtain(null /* client */); final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class); when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED); when(activityItem.getActivityToken()).thenReturn(token); @@ -504,12 +501,12 @@ public class TransactionExecutorTests { private StubItem() { } - private StubItem(Parcel in) { + private StubItem(@NonNull Parcel in) { } @Override - public void execute(ClientTransactionHandler client, IBinder token, - PendingTransactionActions pendingActions) { + public void execute(@NonNull ClientTransactionHandler client, + @NonNull PendingTransactionActions pendingActions) { } @Override @@ -517,12 +514,11 @@ public class TransactionExecutorTests { } @Override - public void writeToParcel(Parcel dest, int flags) { + public void writeToParcel(@NonNull Parcel dest, int flags) { } - public static final Parcelable.Creator<StubItem> CREATOR = - new Parcelable.Creator<StubItem>() { - public StubItem createFromParcel(Parcel in) { + public static final Parcelable.Creator<StubItem> CREATOR = new Parcelable.Creator<>() { + public StubItem createFromParcel(@NonNull Parcel in) { return new StubItem(in); } diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index abc5d6b35b0207ff603fa721897db7ffff2928cb..7d047c93520f490998f98040586d57e6e9ab42df 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -284,9 +284,7 @@ public class TransactionParcelTests { StopActivityItem lifecycleRequest = StopActivityItem.obtain(mActivityToken, 78 /* configChanges */); - Binder activityToken = new Binder(); - - ClientTransaction transaction = ClientTransaction.obtain(null, activityToken); + ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(callback1); transaction.addCallback(callback2); transaction.setLifecycleStateRequest(lifecycleRequest); @@ -307,9 +305,7 @@ public class TransactionParcelTests { ActivityConfigurationChangeItem callback2 = ActivityConfigurationChangeItem.obtain( mActivityToken, config()); - Binder activityToken = new Binder(); - - ClientTransaction transaction = ClientTransaction.obtain(null, activityToken); + ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.addCallback(callback1); transaction.addCallback(callback2); @@ -328,9 +324,7 @@ public class TransactionParcelTests { StopActivityItem lifecycleRequest = StopActivityItem.obtain(mActivityToken, 78 /* configChanges */); - Binder activityToken = new Binder(); - - ClientTransaction transaction = ClientTransaction.obtain(null, activityToken); + ClientTransaction transaction = ClientTransaction.obtain(null /* client */); transaction.setLifecycleStateRequest(lifecycleRequest); writeAndPrepareForReading(transaction); diff --git a/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java b/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java index db76d26b063ec6ff0a013708555a33166d5cd72f..a801a76d16c9cb0011ccbbff5ddadbf22bef4dcf 100644 --- a/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java +++ b/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java @@ -53,8 +53,6 @@ public class WindowContextInfoChangeItemTest { @Mock private ClientTransactionHandler mHandler; @Mock - private IBinder mToken; - @Mock private PendingTransactionActions mPendingActions; @Mock private IBinder mClientToken; @@ -72,7 +70,7 @@ public class WindowContextInfoChangeItemTest { public void testExecute() { final WindowContextInfoChangeItem item = WindowContextInfoChangeItem .obtain(mClientToken, mConfiguration, DEFAULT_DISPLAY); - item.execute(mHandler, mToken, mPendingActions); + item.execute(mHandler, mPendingActions); verify(mHandler).handleWindowContextInfoChanged(mClientToken, new WindowContextInfo(mConfiguration, DEFAULT_DISPLAY)); @@ -84,7 +82,7 @@ public class WindowContextInfoChangeItemTest { final WindowContextInfoChangeItem item = WindowContextInfoChangeItem .obtain(mClientToken, mConfiguration, DEFAULT_DISPLAY); - final Context context = item.getContextToUpdate(mHandler, mToken); + final Context context = item.getContextToUpdate(mHandler); assertEquals(mWindowContext, context); } diff --git a/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java b/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java index 17e0ebc1edbc6166506d1b16ed022386c63eef89..cf9935f2822f0f6a58ae3131886423653c679911 100644 --- a/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java +++ b/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java @@ -45,8 +45,6 @@ public class WindowContextWindowRemovalItemTest { @Mock private ClientTransactionHandler mHandler; @Mock - private IBinder mToken; - @Mock private PendingTransactionActions mPendingActions; @Mock private IBinder mClientToken; @@ -60,7 +58,7 @@ public class WindowContextWindowRemovalItemTest { public void testExecute() { final WindowContextWindowRemovalItem item = WindowContextWindowRemovalItem.obtain( mClientToken); - item.execute(mHandler, mToken, mPendingActions); + item.execute(mHandler, mPendingActions); verify(mHandler).handleWindowContextWindowRemoval(mClientToken); } diff --git a/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java b/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java index d2af2a734330e11aab8db0aca86a3cdee65285a2..3dfeb7f0fc05d518af17fa7411ab4c5413f32896 100644 --- a/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java +++ b/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.platform.test.annotations.Presubmit; +import android.view.flags.FeatureFlags; import androidx.test.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -49,6 +50,7 @@ public final class HapticScrollFeedbackProviderTest { private TestView mView; @Mock ViewConfiguration mMockViewConfig; + @Mock FeatureFlags mMockFeatureFlags; private HapticScrollFeedbackProvider mProvider; @@ -56,9 +58,52 @@ public final class HapticScrollFeedbackProviderTest { public void setUp() { mMockViewConfig = mock(ViewConfiguration.class); setHapticScrollFeedbackEnabled(true); + when(mMockViewConfig.isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) + .thenReturn(false); mView = new TestView(InstrumentationRegistry.getContext()); - mProvider = new HapticScrollFeedbackProvider(mView, mMockViewConfig); + mProvider = new HapticScrollFeedbackProvider(mView, mMockViewConfig, + /* disabledIfViewPlaysScrollHaptics= */ true); + } + + @Test + public void testRotaryEncoder_noFeedbackWhenViewBasedFeedbackIsEnabled() { + when(mMockViewConfig.isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) + .thenReturn(true); + setHapticScrollTickInterval(5); + + mProvider.onScrollProgress( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, + /* deltaInPixels= */ 10); + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, + /* isStart= */ true); + + assertNoFeedback(mView); + } + + @Test + public void testRotaryEncoder_feedbackWhenDisregardingViewBasedScrollHaptics() { + mProvider = new HapticScrollFeedbackProvider(mView, mMockViewConfig, + /* disabledIfViewPlaysScrollHaptics= */ false); + when(mMockViewConfig.isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) + .thenReturn(true); + setHapticScrollTickInterval(5); + + mProvider.onScrollProgress( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, + /* deltaInPixels= */ 10); + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, + /* isStart= */ true); + + assertFeedbackCount(mView, SCROLL_TICK, 1); + assertFeedbackCount(mView, SCROLL_ITEM_FOCUS, 1); + assertFeedbackCount(mView, SCROLL_LIMIT, 1); } @Test @@ -94,20 +139,26 @@ public final class HapticScrollFeedbackProviderTest { @Test public void testScrollLimit_start() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ true); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_stop() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test @@ -207,8 +258,6 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 60); - - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 2); } @@ -225,6 +274,9 @@ public final class HapticScrollFeedbackProviderTest { @Test public void testScrollLimit_startAndEndLimit_playsOnlyOneFeedback() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -232,11 +284,14 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ true); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_doubleStartLimit_playsOnlyOneFeedback() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ true); @@ -244,11 +299,14 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ true); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_doubleEndLimit_playsOnlyOneFeedback() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); + mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -256,11 +314,13 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_notEnabledWithZeroProgress() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -275,11 +335,13 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_enabledWithProgress() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -291,11 +353,13 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2); } @Test public void testScrollLimit_enabledWithSnap() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -310,7 +374,9 @@ public final class HapticScrollFeedbackProviderTest { } @Test - public void testScrollLimit_enabledWithDissimilarSnap() { + public void testScrollLimit_notEnabledWithDissimilarSnap() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -321,11 +387,13 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } @Test public void testScrollLimit_enabledWithDissimilarProgress() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); @@ -337,28 +405,27 @@ public final class HapticScrollFeedbackProviderTest { INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2); } @Test - public void testScrollLimit_enabledWithMotionFromDifferentDeviceId() { + public void testScrollLimit_doesNotEnabledWithMotionFromDifferentDeviceId() { + mProvider.onSnapToItem( + INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - mProvider.onScrollLimit( - INPUT_DEVICE_2, - InputDevice.SOURCE_ROTARY_ENCODER, - MotionEvent.AXIS_SCROLL, - /* isStart= */ false); + mProvider.onSnapToItem( + INPUT_DEVICE_2, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL); mProvider.onScrollLimit( INPUT_DEVICE_1, InputDevice.SOURCE_ROTARY_ENCODER, MotionEvent.AXIS_SCROLL, /* isStart= */ false); - assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 3); + assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 1); } diff --git a/core/tests/coretests/src/android/view/RotaryScrollHapticsTest.java b/core/tests/coretests/src/android/view/RotaryScrollHapticsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9a5c1c5112e6a130b4ca1b8204a51fde47133dca --- /dev/null +++ b/core/tests/coretests/src/android/view/RotaryScrollHapticsTest.java @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import static android.view.InputDevice.SOURCE_CLASS_POINTER; +import static android.view.InputDevice.SOURCE_ROTARY_ENCODER; +import static android.view.MotionEvent.ACTION_SCROLL; +import static android.view.MotionEvent.AXIS_HSCROLL; +import static android.view.MotionEvent.AXIS_SCROLL; +import static android.view.MotionEvent.AXIS_VSCROLL; + +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.platform.test.annotations.Presubmit; + +import androidx.test.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; + +/** Test for the rotary scroll haptics implementation in the View class. */ +@SmallTest +@RunWith(AndroidJUnit4.class) +@Presubmit +public final class RotaryScrollHapticsTest { + private static final int TEST_ROTARY_DEVICE_ID = 1; + private static final int TEST_RANDOM_DEVICE_ID = 2; + + private static final float TEST_SCALED_VERTICAL_SCROLL_FACTOR = 5f; + + @Mock ViewConfiguration mMockViewConfig; + @Mock HapticScrollFeedbackProvider mMockScrollFeedbackProvider; + + private TestGenericMotionEventControllingView mView; + + @Before + public void setUp() { + mMockViewConfig = mock(ViewConfiguration.class); + mMockScrollFeedbackProvider = mock(HapticScrollFeedbackProvider.class); + + Context context = InstrumentationRegistry.getTargetContext(); + mView = new TestGenericMotionEventControllingView(context); + mView.mScrollFeedbackProvider = mMockScrollFeedbackProvider; + + ViewConfiguration.setInstanceForTesting(context, mMockViewConfig); + when(mMockViewConfig.getScaledVerticalScrollFactor()) + .thenReturn(TEST_SCALED_VERTICAL_SCROLL_FACTOR); + mockRotaryScrollHapticsEnabled(true); + } + + @After + public void tearDown() { + ViewConfiguration.resetCacheForTesting(); + } + + @Test + public void testRotaryScrollHapticsDisabled_producesNoHapticEvent() { + mockRotaryScrollHapticsEnabled(false); + + mView.configureGenericMotion(/* result= */ false, /* scroll= */ false); + mView.dispatchGenericMotionEvent(createRotaryEvent(-20)); + + mView.configureGenericMotion(/* result= */ false, /* scroll= */ true); + mView.dispatchGenericMotionEvent(createRotaryEvent(20)); + + mView.configureGenericMotion(/* result= */ true, /* scroll= */ true); + mView.dispatchGenericMotionEvent(createRotaryEvent(10)); + + mView.configureGenericMotion(/* result= */ true, /* scroll= */ false); + mView.dispatchGenericMotionEvent(createRotaryEvent(-10)); + + verifyNoScrollLimit(); + verifyNoScrollProgress(); + } + + @Test + public void testNonRotaryEncoderMotion_producesNoHapticEvent() { + mView.configureGenericMotion(/* result= */ false, /* scroll= */ false); + mView.dispatchGenericMotionEvent(createGenericPointerEvent(1, 2)); + + mView.configureGenericMotion(/* result= */ false, /* scroll= */ true); + mView.dispatchGenericMotionEvent(createGenericPointerEvent(2, 2)); + + mView.configureGenericMotion(/* result= */ true, /* scroll= */ true); + mView.dispatchGenericMotionEvent(createGenericPointerEvent(1, 3)); + + mView.configureGenericMotion(/* result= */ true, /* scroll= */ false); + mView.dispatchGenericMotionEvent(createGenericPointerEvent(-1, -2)); + + verifyNoScrollLimit(); + verifyNoScrollProgress(); + } + + @Test + public void testScrollLimit_start_genericMotionEventCallbackReturningFalse_doesScrollLimit() { + mView.configureGenericMotion(/* result= */ false, /* scroll= */ false); + + mView.dispatchGenericMotionEvent(createRotaryEvent(20)); + + verifyScrollLimit(/* isStart= */ true); + verifyNoScrollProgress(); + } + + @Test + public void testScrollLimit_start_genericMotionEventCallbackReturningTrue_doesScrollLimit() { + mView.configureGenericMotion(/* result= */ true, /* scroll= */ false); + + mView.dispatchGenericMotionEvent(createRotaryEvent(20)); + + verifyScrollLimit(/* isStart= */ true); + verifyNoScrollProgress(); + } + + @Test + public void testScrollLimit_end_genericMotionEventCallbackReturningFalse_doesScrollLimit() { + mView.configureGenericMotion(/* result= */ false, /* scroll= */ false); + + mView.dispatchGenericMotionEvent(createRotaryEvent(-20)); + + verifyScrollLimit(/* isStart= */ false); + verifyNoScrollProgress(); + } + + @Test + public void testScrollLimit_end_genericMotionEventCallbackReturningTrue_doesScrollLimit() { + mView.configureGenericMotion(/* result= */ true, /* scroll= */ false); + + mView.dispatchGenericMotionEvent(createRotaryEvent(-20)); + + verifyScrollLimit(/* isStart= */ false); + verifyNoScrollProgress(); + } + + @Test + public void testScrollProgress_genericMotionEventCallbackReturningFalse_doesScrollProgress() { + mView.configureGenericMotion(/* result= */ false, /* scroll= */ true); + + mView.dispatchGenericMotionEvent(createRotaryEvent(20)); + + verifyScrollProgress(-1 * 20 * (int) TEST_SCALED_VERTICAL_SCROLL_FACTOR); + verifyNoScrollLimit(); + } + + @Test + public void testScrollProgress_genericMotionEventCallbackReturningTrue_doesScrollProgress() { + mView.configureGenericMotion(/* result= */ true, /* scroll= */ true); + + mView.dispatchGenericMotionEvent(createRotaryEvent(-20)); + + verifyScrollProgress(-1 * -20 * (int) TEST_SCALED_VERTICAL_SCROLL_FACTOR); + verifyNoScrollLimit(); + } + + private void verifyScrollProgress(int scrollPixels) { + verify(mMockScrollFeedbackProvider).onScrollProgress( + TEST_ROTARY_DEVICE_ID, SOURCE_ROTARY_ENCODER, AXIS_SCROLL, scrollPixels); + } + + private void verifyNoScrollProgress() { + verify(mMockScrollFeedbackProvider, never()).onScrollProgress( + anyInt(), anyInt(), anyInt(), anyInt()); + } + + private void verifyScrollLimit(boolean isStart) { + verify(mMockScrollFeedbackProvider).onScrollLimit( + TEST_ROTARY_DEVICE_ID, SOURCE_ROTARY_ENCODER, AXIS_SCROLL, isStart); + } + + private void verifyNoScrollLimit() { + verify(mMockScrollFeedbackProvider, never()).onScrollLimit( + anyInt(), anyInt(), anyInt(), anyBoolean()); + } + + private void mockRotaryScrollHapticsEnabled(boolean enabled) { + when(mMockViewConfig.isViewBasedRotaryEncoderHapticScrollFeedbackEnabled()) + .thenReturn(enabled); + } + + /** + * Test implementation for View giving control on behavior of + * {@link View#onGenericMotionEvent(MotionEvent)}. + */ + private static final class TestGenericMotionEventControllingView extends View { + private boolean mGenericMotionResult; + private boolean mScrollOnGenericMotion; + + TestGenericMotionEventControllingView(Context context) { + super(context); + } + + void configureGenericMotion(boolean result, boolean scroll) { + mGenericMotionResult = result; + mScrollOnGenericMotion = scroll; + } + + @Override + public boolean onGenericMotionEvent(MotionEvent event) { + if (mScrollOnGenericMotion) { + scrollTo(100, 200); // scroll values random (not relevant for tests). + } + return mGenericMotionResult; + } + } + + private static MotionEvent createRotaryEvent(float scroll) { + MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords(); + coords.setAxisValue(AXIS_SCROLL, scroll); + + return createGenericMotionEvent( + TEST_ROTARY_DEVICE_ID, SOURCE_ROTARY_ENCODER, ACTION_SCROLL, coords); + } + + private static MotionEvent createGenericPointerEvent(float hScroll, float vScroll) { + MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords(); + coords.setAxisValue(AXIS_HSCROLL, hScroll); + coords.setAxisValue(AXIS_VSCROLL, vScroll); + + return createGenericMotionEvent( + TEST_RANDOM_DEVICE_ID, SOURCE_CLASS_POINTER, ACTION_SCROLL, coords); + } + + private static MotionEvent createGenericMotionEvent( + int deviceId, int source, int action, MotionEvent.PointerCoords coords) { + MotionEvent.PointerProperties props = new MotionEvent.PointerProperties(); + props.id = 0; + + return MotionEvent.obtain( + /* downTime= */ 0, /* eventTime= */ 100, action, /* pointerCount= */ 1, + new MotionEvent.PointerProperties[] {props}, + new MotionEvent.PointerCoords[] {coords}, + /* metaState= */ 0, /* buttonState= */ 0, /* xPrecision= */ 0, /* yPrecision= */ 0, + deviceId, /* edgeFlags= */ 0, source, /* flags= */ 0); + } +} diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.bp b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.bp index d0645b0d8b12e191fd2dd9459eb12a459ed72154..23a2a7fbf0e5f3978560fa87bec52186cf29f4c2 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.bp +++ b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.bp @@ -28,7 +28,7 @@ android_test_helper_app { srcs: ["src/**/*.java"], - sdk_version: "16", + sdk_version: "19", javacflags: ["-nowarn"], @@ -43,5 +43,5 @@ android_test_helper_app { enabled: false, }, - min_sdk_version: "16", + min_sdk_version: "19", } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.bp b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.bp index c0c8aba2d2f03ddb8dafc51c982b5075cc2248cc..4ddaeef0e4a2dd6d700383caa6d07159564b682a 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.bp +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.bp @@ -40,7 +40,7 @@ android_test_helper_app { enabled: false, }, - min_sdk_version: "16", + min_sdk_version: "19", } android_test_helper_app { @@ -66,5 +66,5 @@ android_test_helper_app { enabled: false, }, - min_sdk_version: "16", + min_sdk_version: "19", } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.bp b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.bp index fe294168586d88b3172e095774a5569a36a5a722..afb111d7e2d45bb1bfbc18cec6a2a76973e5a8e2 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.bp +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.bp @@ -28,7 +28,7 @@ android_test { javacflags: ["-nowarn"], - min_sdk_version: "16", + min_sdk_version: "19", instrumentation_for: "MultiDexLegacyTestApp", } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.bp b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.bp index c558153c6a4e5912edc7b558587427b16617070b..8c57df6707f25c4359018a321ed1ee7c9c2185d9 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.bp +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.bp @@ -31,7 +31,7 @@ android_test { javacflags: ["-nowarn"], - min_sdk_version: "16", + min_sdk_version: "19", instrumentation_for: "MultiDexLegacyTestApp", } @@ -51,7 +51,7 @@ android_test { javacflags: ["-nowarn"], - min_sdk_version: "16", + min_sdk_version: "19", instrumentation_for: "MultiDexLegacyTestApp", } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/AndroidManifest.xml index 9a4c3c5d6e81aa630abb00f30e46a9b8264a6f25..840daabc2ba90e5b860639133300f20bae468f43 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/AndroidManifest.xml +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/AndroidManifest.xml @@ -5,8 +5,8 @@ android:versionCode="1" android:versionName="1.0"> - <uses-sdk android:minSdkVersion="18" - android:targetSdkVersion="18"/> + <uses-sdk android:minSdkVersion="19" + android:targetSdkVersion="19"/> <application android:name="androidx.multidex.MultiDexApplication" android:allowBackup="true" diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.bp b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.bp index 75c753cef0fdbb494de4b4fc99559edb1b38e62e..2244a830e2547ed3df27336724d9c97ab2399b47 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.bp +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.bp @@ -24,5 +24,5 @@ android_test { libs: ["android-support-multidex"], static_libs: ["androidx.test.rules"], - sdk_version: "16", + sdk_version: "19", } diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index e46ba9abc9a60444ece44caeb509255d46630de4..ad0ead78f49216d094b3c0a9eae59da00884392f 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -3973,12 +3973,6 @@ "group": "WM_ERROR", "at": "com\/android\/server\/wm\/WindowManagerService.java" }, - "1563836923": { - "message": "Content Recording: Unable to record task since feature is disabled %d", - "level": "VERBOSE", - "group": "WM_DEBUG_CONTENT_RECORDING", - "at": "com\/android\/server\/wm\/ContentRecorder.java" - }, "1577579529": { "message": "win=%s destroySurfaces: appStopped=%b win.mWindowRemovalAllowed=%b win.mRemoveOnExit=%b", "level": "ERROR", diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java index c3d8f9a99d795fdbd24583b4cf1c2dbc5547b5ac..a663f9fafb502ee34517cb585938e9a0e5af4566 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java @@ -20,7 +20,6 @@ import android.app.ActivityTaskManager; import android.app.ActivityThread; import android.app.Application; import android.content.Context; -import android.window.TaskFragmentOrganizer; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -83,13 +82,7 @@ public class WindowExtensionsImpl implements WindowExtensions { Context context = getApplication(); DeviceStateManagerFoldingFeatureProducer producer = getFoldingFeatureProducer(); - // TODO(b/263263909) Use the organizer to tell if an Activity is embededed. - // Need to improve our Dependency Injection and centralize the logic. - TaskFragmentOrganizer organizer = new TaskFragmentOrganizer(command -> { - throw new RuntimeException("Not allowed!"); - }); - mWindowLayoutComponent = new WindowLayoutComponentImpl(context, organizer, - producer); + mWindowLayoutComponent = new WindowLayoutComponentImpl(context, producer); } } } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java index ba57b76020b4da3337ae4128608490797aa66bd1..9b84a48cdbda06349c627448af6e6bd916b67aae 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java @@ -17,6 +17,7 @@ package androidx.window.extensions.layout; import static android.view.Display.DEFAULT_DISPLAY; + import static androidx.window.common.CommonFoldingFeature.COMMON_STATE_FLAT; import static androidx.window.common.CommonFoldingFeature.COMMON_STATE_HALF_OPENED; import static androidx.window.util.ExtensionHelper.isZero; @@ -24,7 +25,7 @@ import static androidx.window.util.ExtensionHelper.rotateRectToDisplayRotation; import static androidx.window.util.ExtensionHelper.transformToWindowSpaceRect; import android.app.Activity; -import android.app.ActivityClient; +import android.app.ActivityThread; import android.app.Application; import android.app.WindowConfiguration; import android.content.ComponentCallbacks; @@ -34,8 +35,7 @@ import android.graphics.Rect; import android.os.Bundle; import android.os.IBinder; import android.util.ArrayMap; -import android.view.WindowManager; -import android.window.TaskFragmentOrganizer; +import android.util.Log; import androidx.annotation.GuardedBy; import androidx.annotation.NonNull; @@ -51,7 +51,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; /** @@ -63,7 +62,7 @@ import java.util.Set; * Please refer to {@link androidx.window.sidecar.SampleSidecarImpl} instead. */ public class WindowLayoutComponentImpl implements WindowLayoutComponent { - private static final String TAG = "SampleExtension"; + private static final String TAG = WindowLayoutComponentImpl.class.getSimpleName(); private final Object mLock = new Object(); @@ -85,16 +84,15 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { private final Map<java.util.function.Consumer<WindowLayoutInfo>, Consumer<WindowLayoutInfo>> mJavaToExtConsumers = new ArrayMap<>(); - private final TaskFragmentOrganizer mTaskFragmentOrganizer; + private final RawConfigurationChangedListener mRawConfigurationChangedListener = + new RawConfigurationChangedListener(); public WindowLayoutComponentImpl(@NonNull Context context, - @NonNull TaskFragmentOrganizer taskFragmentOrganizer, @NonNull DeviceStateManagerFoldingFeatureProducer foldingFeatureProducer) { ((Application) context.getApplicationContext()) .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged()); mFoldingFeatureProducer = foldingFeatureProducer; mFoldingFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); - mTaskFragmentOrganizer = taskFragmentOrganizer; } /** @@ -109,6 +107,7 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { final Consumer<WindowLayoutInfo> extConsumer = consumer::accept; synchronized (mLock) { mJavaToExtConsumers.put(consumer, extConsumer); + updateListenerRegistrations(); } addWindowLayoutInfoListener(activity, extConsumer); } @@ -162,6 +161,7 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { final Consumer<WindowLayoutInfo> extConsumer; synchronized (mLock) { extConsumer = mJavaToExtConsumers.remove(consumer); + updateListenerRegistrations(); } if (extConsumer != null) { removeWindowLayoutInfoListener(extConsumer); @@ -191,6 +191,17 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } } + @GuardedBy("mLock") + private void updateListenerRegistrations() { + ActivityThread currentThread = ActivityThread.currentActivityThread(); + if (mJavaToExtConsumers.isEmpty()) { + currentThread.removeConfigurationChangedListener(mRawConfigurationChangedListener); + } else { + currentThread.addConfigurationChangedListener(Runnable::run, + mRawConfigurationChangedListener); + } + } + @GuardedBy("mLock") @NonNull private Set<Context> getContextsListeningForLayoutChanges() { @@ -336,25 +347,28 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { continue; } if (featureRect.left != 0 && featureRect.top != 0) { - throw new IllegalArgumentException("Bounding rectangle must start at the top or " + Log.wtf(TAG, "Bounding rectangle must start at the top or " + "left of the window. BaseFeatureRect: " + baseFeature.getRect() + ", FeatureRect: " + featureRect + ", WindowConfiguration: " + windowConfiguration); + continue; } if (featureRect.left == 0 && featureRect.width() != windowConfiguration.getBounds().width()) { - throw new IllegalArgumentException("Horizontal FoldingFeature must have full width." + Log.wtf(TAG, "Horizontal FoldingFeature must have full width." + " BaseFeatureRect: " + baseFeature.getRect() + ", FeatureRect: " + featureRect + ", WindowConfiguration: " + windowConfiguration); + continue; } if (featureRect.top == 0 && featureRect.height() != windowConfiguration.getBounds().height()) { - throw new IllegalArgumentException("Vertical FoldingFeature must have full height." + Log.wtf(TAG, "Vertical FoldingFeature must have full height." + " BaseFeatureRect: " + baseFeature.getRect() + ", FeatureRect: " + featureRect + ", WindowConfiguration: " + windowConfiguration); + continue; } features.add(new FoldingFeature(featureRect, baseFeature.getType(), state)); } @@ -374,38 +388,11 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { // Display features are not supported on secondary displays. return false; } - final int windowingMode; - IBinder activityToken = context.getActivityToken(); - if (activityToken != null) { - final Configuration taskConfig = ActivityClient.getInstance().getTaskConfiguration( - activityToken); - if (taskConfig == null) { - // If we cannot determine the task configuration for any reason, it is likely that - // we won't be able to determine its position correctly as well. DisplayFeatures' - // bounds in this case can't be computed correctly, so we should skip. - return false; - } - final Rect taskBounds = taskConfig.windowConfiguration.getBounds(); - final WindowManager windowManager = Objects.requireNonNull( - context.getSystemService(WindowManager.class)); - final Rect maxBounds = windowManager.getMaximumWindowMetrics().getBounds(); - boolean isTaskExpanded = maxBounds.equals(taskBounds); - /* - * We need to proxy being in full screen because when a user enters PiP and exits PiP - * the task windowingMode will report multi-window/pinned until the transition is - * finished in WM Shell. - * maxBounds == taskWindowBounds is a proxy check to verify the window is full screen - */ - return isTaskExpanded; - } else { - // TODO(b/242674941): use task windowing mode for window context that associates with - // activity. - windowingMode = context.getResources().getConfiguration().windowConfiguration - .getWindowingMode(); - } - // It is recommended not to report any display features in multi-window mode, since it - // won't be possible to synchronize the display feature positions with window movement. - return !WindowConfiguration.inMultiWindowMode(windowingMode); + + // We do not report folding features for Activities in PiP because the bounds are + // not updated fast enough and the window is too small for the UI to adapt. + return context.getResources().getConfiguration().windowConfiguration + .getWindowingMode() != WindowConfiguration.WINDOWING_MODE_PINNED; } @GuardedBy("mLock") @@ -434,6 +421,16 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } } + private final class RawConfigurationChangedListener implements + java.util.function.Consumer<IBinder> { + @Override + public void accept(IBinder activityToken) { + synchronized (mLock) { + onDisplayFeaturesChangedIfListening(activityToken); + } + } + } + private final class ConfigurationChangeListener implements ComponentCallbacks { final IBinder mToken; diff --git a/libs/WindowManager/Shell/res/drawable/ic_baseline_expand_more_24.xml b/libs/WindowManager/Shell/res/drawable/ic_baseline_expand_more_24.xml index 3e0297ab612bf14abe3385a8daaf371282bf72a2..e9df936c3f94a889f922e3f5e5c71512efd4a7b6 100644 --- a/libs/WindowManager/Shell/res/drawable/ic_baseline_expand_more_24.xml +++ b/libs/WindowManager/Shell/res/drawable/ic_baseline_expand_more_24.xml @@ -14,8 +14,14 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<vector android:height="24dp" android:tint="#000000" - android:viewportHeight="24" android:viewportWidth="24" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="@android:color/black" android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?android:attr/textColorSecondary"> + <path + android:fillColor="#FF000000" + android:pathData="M5.41,7.59L4,9l8,8 8,-8 -1.41,-1.41L12,14.17"/> </vector> + diff --git a/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml b/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml index 7e0c2071dc868c2351afc77a55d5c9a14b5da6c9..fa56516e0d226c1b3cf421637913c8c4e0fc99bc 100644 --- a/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml +++ b/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml @@ -31,35 +31,35 @@ android:orientation="horizontal" android:clickable="true" android:focusable="true" - android:paddingStart="8dp"> + android:paddingStart="16dp"> <ImageView android:id="@+id/application_icon" android:layout_width="24dp" android:layout_height="24dp" - android:layout_margin="4dp" android:layout_gravity="center_vertical" android:contentDescription="@string/app_icon_text" /> <TextView android:id="@+id/application_name" android:layout_width="0dp" - android:layout_height="match_parent" + android:layout_height="20dp" android:minWidth="80dp" android:textColor="@color/desktop_mode_caption_app_name_dark" + android:textAppearance="@android:style/TextAppearance.Material.Title" android:textSize="14sp" android:textFontWeight="500" - android:gravity="center_vertical" + android:lineHeight="20dp" + android:layout_gravity="center_vertical" android:layout_weight="1" - android:paddingStart="4dp" - android:paddingEnd="4dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" tools:text="Gmail"/> <ImageButton android:id="@+id/expand_menu_button" - android:layout_width="32dp" - android:layout_height="32dp" - android:padding="4dp" + android:layout_width="16dp" + android:layout_height="16dp" android:contentDescription="@string/expand_menu_text" android:src="@drawable/ic_baseline_expand_more_24" android:tint="@color/desktop_mode_caption_expand_button_dark" diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java index 39e3180ffe2a219e9eff9af46fc0e49d99c560fa..bb30c5eeebcfa6978655d5aec596638415643b9c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java @@ -155,14 +155,14 @@ public class BubbleViewInfoTask extends AsyncTask<Void, Void, BubbleViewInfoTask Bitmap rawBadgeBitmap; // Only populated when showing in taskbar - BubbleBarExpandedView bubbleBarExpandedView; + @Nullable BubbleBarExpandedView bubbleBarExpandedView; // These are only populated when not showing in taskbar - BadgedImageView imageView; - BubbleExpandedView expandedView; + @Nullable BadgedImageView imageView; + @Nullable BubbleExpandedView expandedView; int dotColor; Path dotPath; - Bubble.FlyoutMessage flyoutMessage; + @Nullable Bubble.FlyoutMessage flyoutMessage; Bitmap bubbleBitmap; Bitmap badgeBitmap; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java index a5000feae239d7787f75d7b94cc3eb0cb5114792..f9a286ec804f515cafef417a069fcc0e6b9ca5be 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerSnapAlgorithm.java @@ -19,6 +19,7 @@ package com.android.wm.shell.common.split; import static android.view.WindowManager.DOCKED_INVALID; import static android.view.WindowManager.DOCKED_LEFT; import static android.view.WindowManager.DOCKED_RIGHT; + import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_30_70; import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50; import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_70_30; @@ -36,6 +37,8 @@ import android.hardware.display.DisplayManager; import android.view.Display; import android.view.DisplayInfo; +import androidx.annotation.Nullable; + import java.util.ArrayList; /** @@ -203,6 +206,21 @@ public class DividerSnapAlgorithm { } } + /** + * Gets the SnapTarget corresponding to the given {@link SnapPosition}, or null if no such + * SnapTarget exists. + */ + @Nullable + public SnapTarget findSnapTarget(@SnapPosition int snapPosition) { + for (SnapTarget t : mTargets) { + if (t.snapPosition == snapPosition) { + return t; + } + } + + return null; + } + public float calculateDismissingFraction(int position) { if (position < mFirstSplitTarget.position) { return 1f - (float) (position - getStartInset()) @@ -356,9 +374,9 @@ public class DividerSnapAlgorithm { * Adds a target at {@param position} but only if the area with size of {@param smallerSize} * meets the minimal size requirement. */ - private void maybeAddTarget(int position, int smallerSize, @SnapPosition int snapTo) { + private void maybeAddTarget(int position, int smallerSize, @SnapPosition int snapPosition) { if (smallerSize >= mMinimalSizeResizableTask) { - mTargets.add(new SnapTarget(position, position, snapTo)); + mTargets.add(new SnapTarget(position, position, snapPosition)); } } @@ -418,6 +436,13 @@ public class DividerSnapAlgorithm { return mLastSplitTarget != mMiddleTarget; } + /** + * Finds the {@link SnapPosition} nearest to the given position. + */ + public int calculateNearestSnapPosition(int currentPosition) { + return snap(currentPosition, /* hardDismiss */ true).snapPosition; + } + /** * Cycles through all non-dismiss targets with a stepping of {@param increment}. It moves left * if {@param increment} is negative and moves right otherwise. @@ -454,7 +479,7 @@ public class DividerSnapAlgorithm { /** * An int describing the placement of the divider in this snap target. */ - public final @SnapPosition int snapTo; + public final @SnapPosition int snapPosition; public boolean isMiddleTarget; @@ -464,15 +489,15 @@ public class DividerSnapAlgorithm { */ private final float distanceMultiplier; - public SnapTarget(int position, int taskPosition, @SnapPosition int snapTo) { - this(position, taskPosition, snapTo, 1f); + public SnapTarget(int position, int taskPosition, @SnapPosition int snapPosition) { + this(position, taskPosition, snapPosition, 1f); } - public SnapTarget(int position, int taskPosition, @SnapPosition int snapTo, + public SnapTarget(int position, int taskPosition, @SnapPosition int snapPosition, float distanceMultiplier) { this.position = position; this.taskPosition = taskPosition; - this.snapTo = snapTo; + this.snapPosition = snapPosition; this.distanceMultiplier = distanceMultiplier; } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 4af03fd5b9555e99086105b62d6739cfe723db53..26b5a50525947eea30252ba1db1274aaee9379c2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -23,6 +23,7 @@ import static android.view.WindowManager.DOCKED_INVALID; import static android.view.WindowManager.DOCKED_LEFT; import static android.view.WindowManager.DOCKED_RIGHT; import static android.view.WindowManager.DOCKED_TOP; + import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_DOUBLE_TAP_DIVIDER; import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE; import static com.android.wm.shell.animation.Interpolators.DIM_INTERPOLATOR; @@ -66,6 +67,7 @@ import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.InteractionJankMonitorUtils; +import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import java.io.PrintWriter; @@ -115,7 +117,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange @VisibleForTesting DividerSnapAlgorithm mDividerSnapAlgorithm; private WindowContainerToken mWinToken1; private WindowContainerToken mWinToken2; - private int mDividePosition; + private int mDividerPosition; private boolean mInitialized = false; private boolean mFreezeDividerWindow = false; private int mOrientation; @@ -267,7 +269,14 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } int getDividePosition() { - return mDividePosition; + return mDividerPosition; + } + + /** + * Finds the {@link SnapPosition} nearest to the current divider position. + */ + public int calculateCurrentSnapPosition() { + return mDividerSnapAlgorithm.calculateNearestSnapPosition(mDividerPosition); } /** @@ -344,16 +353,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } private void initDividerPosition(Rect oldBounds) { - final float snapRatio = (float) mDividePosition + final float snapRatio = (float) mDividerPosition / (float) (isLandscape(oldBounds) ? oldBounds.width() : oldBounds.height()); // Estimate position by previous ratio. final float length = (float) (isLandscape() ? mRootBounds.width() : mRootBounds.height()); final int estimatePosition = (int) (length * snapRatio); // Init divider position by estimated position using current bounds snap algorithm. - mDividePosition = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget( + mDividerPosition = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget( estimatePosition).position; - updateBounds(mDividePosition); + updateBounds(mDividerPosition); } private void updateBounds(int position) { @@ -467,27 +476,29 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } void setDividePosition(int position, boolean applyLayoutChange) { - mDividePosition = position; - updateBounds(mDividePosition); + mDividerPosition = position; + updateBounds(mDividerPosition); if (applyLayoutChange) { mSplitLayoutHandler.onLayoutSizeChanged(this); } } /** Updates divide position and split bounds base on the ratio within root bounds. */ - public void setDivideRatio(float ratio) { - final int position = isLandscape() - ? mRootBounds.left + (int) (mRootBounds.width() * ratio) - : mRootBounds.top + (int) (mRootBounds.height() * ratio); - final DividerSnapAlgorithm.SnapTarget snapTarget = - mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(position); + public void setDivideRatio(@SnapPosition int snapPosition) { + final DividerSnapAlgorithm.SnapTarget snapTarget = mDividerSnapAlgorithm.findSnapTarget( + snapPosition); + + if (snapTarget == null) { + throw new IllegalArgumentException("No SnapTarget for position " + snapPosition); + } + setDividePosition(snapTarget.position, false /* applyLayoutChange */); } /** Resets divider position. */ public void resetDividerPosition() { - mDividePosition = mDividerSnapAlgorithm.getMiddleTarget().position; - updateBounds(mDividePosition); + mDividerPosition = mDividerSnapAlgorithm.getMiddleTarget().position; + updateBounds(mDividerPosition); mWinToken1 = null; mWinToken2 = null; mWinBounds1.setEmpty(); @@ -510,7 +521,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange * target indicates dismissing split. */ public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) { - switch (snapTarget.snapTo) { + switch (snapTarget.snapPosition) { case SNAP_TO_START_AND_DISMISS: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */, @@ -668,8 +679,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange @Override public void onAnimationEnd(Animator animation) { - mDividePosition = dividerPos; - updateBounds(mDividePosition); + mDividerPosition = dividerPos; + updateBounds(mDividerPosition); finishCallback.accept(insets); InteractionJankMonitorUtils.endTracing(CUJ_SPLIT_SCREEN_DOUBLE_TAP_DIVIDER); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java index 0e6b20332a4fc656ba766b719979b4029e259d6e..953efa78326cc1fa878cd4fdca28c53f41e1422b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java @@ -176,6 +176,18 @@ public class CompatUIController implements OnDisplaysChangedListener, // be shown. private boolean mKeyguardShowing; + /** + * The id of the task for the application we're currently attempting to show the user aspect + * ratio settings button for, or have most recently shown the button for. + */ + private int mTopActivityTaskId; + + /** + * Whether the user aspect ratio settings button has been shown for the current application + * associated with the task id stored in {@link CompatUIController#mTopActivityTaskId}. + */ + private boolean mHasShownUserAspectRatioSettingsButton = false; + public CompatUIController(@NonNull Context context, @NonNull ShellInit shellInit, @NonNull ShellController shellController, @@ -230,6 +242,11 @@ public class CompatUIController implements OnDisplaysChangedListener, if (taskInfo != null && !taskInfo.topActivityInSizeCompat) { mSetOfTaskIdsShowingRestartDialog.remove(taskInfo.taskId); } + + if (taskInfo != null && taskListener != null) { + updateActiveTaskInfo(taskInfo); + } + if (taskInfo.configuration == null || taskListener == null) { // Null token means the current foreground activity is not in compatibility mode. removeLayouts(taskInfo.taskId); @@ -322,6 +339,46 @@ public class CompatUIController implements OnDisplaysChangedListener, forAllLayouts(layout -> layout.updateVisibility(showOnDisplay(layout.getDisplayId()))); } + /** + * Invoked when a new task is created or the info of an existing task has changed. Updates the + * shown status of the user aspect ratio settings button and the task id it relates to. + */ + void updateActiveTaskInfo(@NonNull TaskInfo taskInfo) { + // If the activity belongs to the task we are currently tracking, don't update any variables + // as they are still relevant. Else, if the activity is visible and focused (the one the + // user can see and is using), the user aspect ratio button can potentially be displayed so + // start tracking the buttons visibility for this task. + if (mTopActivityTaskId != taskInfo.taskId && !taskInfo.isTopActivityTransparent + && taskInfo.isVisible && taskInfo.isFocused) { + mTopActivityTaskId = taskInfo.taskId; + setHasShownUserAspectRatioSettingsButton(false); + } + } + + /** + * Informs the system that the user aspect ratio button has been displayed for the application + * associated with the task id in {@link CompatUIController#mTopActivityTaskId}. + */ + void setHasShownUserAspectRatioSettingsButton(boolean state) { + mHasShownUserAspectRatioSettingsButton = state; + } + + /** + * Returns whether the user aspect ratio settings button has been show for the application + * associated with the task id in {@link CompatUIController#mTopActivityTaskId}. + */ + boolean hasShownUserAspectRatioSettingsButton() { + return mHasShownUserAspectRatioSettingsButton; + } + + /** + * Returns the task id of the application we are currently attempting to show, of have most + * recently shown, the user aspect ratio settings button for. + */ + int getTopActivityTaskId() { + return mTopActivityTaskId; + } + private boolean showOnDisplay(int displayId) { return !mKeyguardShowing && !isImeShowingOnDisplay(displayId); } @@ -572,7 +629,8 @@ public class CompatUIController implements OnDisplaysChangedListener, return new UserAspectRatioSettingsWindowManager(context, taskInfo, mSyncQueue, taskListener, mDisplayController.getDisplayLayout(taskInfo.displayId), mCompatUIHintsState, this::launchUserAspectRatioSettings, mMainExecutor, - mDisappearTimeSupplier); + mDisappearTimeSupplier, this::hasShownUserAspectRatioSettingsButton, + this::setHasShownUserAspectRatioSettingsButton); } private void launchUserAspectRatioSettings( diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java index 77aefc8f7e4a6220f7d8558826c1a0f196659d07..c2dec623416bde408c72f0fc6ea6482bf400c839 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java @@ -37,7 +37,9 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.compatui.CompatUIController.CompatUIHintsState; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Supplier; /** * Window manager for the user aspect ratio settings button which allows users to go to @@ -55,6 +57,12 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract private final ShellExecutor mShellExecutor; + @NonNull + private final Supplier<Boolean> mUserAspectRatioButtonShownChecker; + + @NonNull + private final Consumer<Boolean> mUserAspectRatioButtonStateConsumer; + @VisibleForTesting @NonNull final CompatUIHintsState mCompatUIHintsState; @@ -72,9 +80,13 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract @NonNull DisplayLayout displayLayout, @NonNull CompatUIHintsState compatUIHintsState, @NonNull BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> onButtonClicked, @NonNull ShellExecutor shellExecutor, - @NonNull Function<Integer, Integer> disappearTimeSupplier) { + @NonNull Function<Integer, Integer> disappearTimeSupplier, + @NonNull Supplier<Boolean> userAspectRatioButtonStateChecker, + @NonNull Consumer<Boolean> userAspectRatioButtonShownConsumer) { super(context, taskInfo, syncQueue, taskListener, displayLayout); mShellExecutor = shellExecutor; + mUserAspectRatioButtonShownChecker = userAspectRatioButtonStateChecker; + mUserAspectRatioButtonStateConsumer = userAspectRatioButtonShownConsumer; mHasUserAspectRatioSettingsButton = getHasUserAspectRatioSettingsButton(taskInfo); mCompatUIHintsState = compatUIHintsState; mOnButtonClicked = onButtonClicked; @@ -180,11 +192,18 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract } } + @VisibleForTesting + boolean isShowingButton() { + return (mUserAspectRatioButtonShownChecker.get() + && !isHideDelayReached(mNextButtonHideTimeMs)); + } + private void showUserAspectRatioButton() { if (mLayout == null) { return; } mLayout.setUserAspectRatioButtonVisibility(true); + mUserAspectRatioButtonStateConsumer.accept(true); // Only show by default for the first time. if (!mCompatUIHintsState.mHasShownUserAspectRatioSettingsButtonHint) { mLayout.setUserAspectRatioSettingsHintVisibility(/* show= */ true); @@ -210,7 +229,8 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract private boolean getHasUserAspectRatioSettingsButton(@NonNull TaskInfo taskInfo) { return taskInfo.topActivityEligibleForUserAspectRatioButton && (taskInfo.topActivityBoundsLetterboxed - || taskInfo.isUserFullscreenOverrideEnabled); + || taskInfo.isUserFullscreenOverrideEnabled) + && (!mUserAspectRatioButtonShownChecker.get() || isShowingButton()); } private long getDisappearTimeMs() { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl index 14304a3c0aacd9803aca906e1350aebcbb4acf15..253acc49071a91d4a99a4667cbc2160c8563ccd4 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl @@ -91,42 +91,42 @@ interface ISplitScreen { * Starts tasks simultaneously in one transition. */ oneway void startTasks(int taskId1, in Bundle options1, int taskId2, in Bundle options2, - int splitPosition, float splitRatio, in RemoteTransition remoteTransition, + int splitPosition, int snapPosition, in RemoteTransition remoteTransition, in InstanceId instanceId) = 10; /** * Starts a pair of intent and task in one transition. */ oneway void startIntentAndTask(in PendingIntent pendingIntent, int userId1, in Bundle options1, - int taskId, in Bundle options2, int sidePosition, float splitRatio, + int taskId, in Bundle options2, int sidePosition, int snapPosition, in RemoteTransition remoteTransition, in InstanceId instanceId) = 16; /** * Starts a pair of shortcut and task in one transition. */ oneway void startShortcutAndTask(in ShortcutInfo shortcutInfo, in Bundle options1, int taskId, - in Bundle options2, int splitPosition, float splitRatio, + in Bundle options2, int splitPosition, int snapPosition, in RemoteTransition remoteTransition, in InstanceId instanceId) = 17; /** * Version of startTasks using legacy transition system. */ oneway void startTasksWithLegacyTransition(int taskId1, in Bundle options1, int taskId2, - in Bundle options2, int splitPosition, float splitRatio, + in Bundle options2, int splitPosition, int snapPosition, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 11; /** * Starts a pair of intent and task using legacy transition system. */ oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, int userId1, - in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio, + in Bundle options1, int taskId, in Bundle options2, int splitPosition, int snapPosition, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12; /** * Starts a pair of shortcut and task using legacy transition system. */ oneway void startShortcutAndTaskWithLegacyTransition(in ShortcutInfo shortcutInfo, - in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio, + in Bundle options1, int taskId, in Bundle options2, int splitPosition, int snapPosition, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 15; /** @@ -135,7 +135,7 @@ interface ISplitScreen { oneway void startIntentsWithLegacyTransition(in PendingIntent pendingIntent1, int userId1, in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2, int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition, - float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18; + int snapPosition, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18; /** * Start a pair of intents in one transition. @@ -143,7 +143,7 @@ interface ISplitScreen { oneway void startIntents(in PendingIntent pendingIntent1, int userId1, in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2, int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition, - float splitRatio, in RemoteTransition remoteTransition, in InstanceId instanceId) = 19; + int snapPosition, in RemoteTransition remoteTransition, in InstanceId instanceId) = 19; /** * Blocking call that notifies and gets additional split-screen targets when entering diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index f70b0fc5af48bb09a896653e31fb1233a152bea9..ccffa02a22c15dd06b8e71251f964ff13cf40e0d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -85,6 +85,7 @@ import com.android.wm.shell.common.SingleInstanceRemoteListener; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.annotations.ExternalThread; +import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.desktopmode.DesktopTasksController; @@ -600,8 +601,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { if (options1 == null) options1 = new Bundle(); final ActivityOptions activityOptions = ActivityOptions.fromBundle(options1); @@ -625,13 +626,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } mStageCoordinator.startShortcutAndTaskWithLegacyTransition(shortcutInfo, - activityOptions.toBundle(), taskId, options2, splitPosition, splitRatio, adapter, + activityOptions.toBundle(), taskId, options2, splitPosition, snapPosition, adapter, instanceId); } void startShortcutAndTask(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition, - float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, + InstanceId instanceId) { if (options1 == null) options1 = new Bundle(); final ActivityOptions activityOptions = ActivityOptions.fromBundle(options1); final String packageName1 = shortcutInfo.getPackage(); @@ -658,7 +660,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } mStageCoordinator.startShortcutAndTask(shortcutInfo, activityOptions.toBundle(), taskId, - options2, splitPosition, splitRatio, remoteTransition, instanceId); + options2, splitPosition, snapPosition, remoteTransition, instanceId); } /** @@ -673,8 +675,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, private void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, int userId1, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { Intent fillInIntent = null; final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent); final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); @@ -695,12 +697,12 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } mStageCoordinator.startIntentAndTaskWithLegacyTransition(pendingIntent, fillInIntent, - options1, taskId, options2, splitPosition, splitRatio, adapter, instanceId); + options1, taskId, options2, splitPosition, snapPosition, adapter, instanceId); } private void startIntentAndTask(PendingIntent pendingIntent, int userId1, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, + @SplitPosition int splitPosition, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { Intent fillInIntent = null; final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent); @@ -727,14 +729,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } mStageCoordinator.startIntentAndTask(pendingIntent, fillInIntent, options1, taskId, - options2, splitPosition, splitRatio, remoteTransition, instanceId); + options2, splitPosition, snapPosition, remoteTransition, instanceId); } private void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, int userId1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, - RemoteAnimationAdapter adapter, InstanceId instanceId) { + @Nullable Bundle options2, @SplitPosition int splitPosition, + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, InstanceId instanceId) { Intent fillInIntent1 = null; Intent fillInIntent2 = null; final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1); @@ -758,14 +760,15 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } mStageCoordinator.startIntentsWithLegacyTransition(pendingIntent1, fillInIntent1, shortcutInfo1, options1, pendingIntent2, fillInIntent2, shortcutInfo2, options2, - splitPosition, splitRatio, adapter, instanceId); + splitPosition, snapPosition, adapter, instanceId); } private void startIntents(PendingIntent pendingIntent1, int userId1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, - @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { + @Nullable Bundle options2, @SplitPosition int splitPosition, + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, + InstanceId instanceId) { Intent fillInIntent1 = null; Intent fillInIntent2 = null; final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1); @@ -800,7 +803,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } mStageCoordinator.startIntents(pendingIntent1, fillInIntent1, shortcutInfo1, activityOptions1.toBundle(), pendingIntent2, fillInIntent2, shortcutInfo2, - activityOptions2.toBundle(), splitPosition, splitRatio, remoteTransition, + activityOptions2.toBundle(), splitPosition, snapPosition, remoteTransition, instanceId); } @@ -1222,78 +1225,82 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, @Override public void startTasksWithLegacyTransition(int taskId1, @Nullable Bundle options1, int taskId2, @Nullable Bundle options2, @SplitPosition int splitPosition, - float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, + InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition( - taskId1, options1, taskId2, options2, splitPosition, - splitRatio, adapter, instanceId)); + taskId1, options1, taskId2, options2, splitPosition, snapPosition, + adapter, instanceId)); } @Override public void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, int userId1, - Bundle options1, int taskId, Bundle options2, int splitPosition, float splitRatio, - RemoteAnimationAdapter adapter, InstanceId instanceId) { + Bundle options1, int taskId, Bundle options2, int splitPosition, + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, + InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntentAndTaskWithLegacyTransition", (controller) -> controller.startIntentAndTaskWithLegacyTransition(pendingIntent, - userId1, options1, taskId, options2, splitPosition, splitRatio, - adapter, instanceId)); + userId1, options1, taskId, options2, splitPosition, + snapPosition, adapter, instanceId)); } @Override public void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcutAndTaskWithLegacyTransition", (controller) -> controller.startShortcutAndTaskWithLegacyTransition( shortcutInfo, options1, taskId, options2, splitPosition, - splitRatio, adapter, instanceId)); + snapPosition, adapter, instanceId)); } @Override public void startTasks(int taskId1, @Nullable Bundle options1, int taskId2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, - @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { + @Nullable Bundle options2, @SplitPosition int splitPosition, + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, + InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasks(taskId1, options1, - taskId2, options2, splitPosition, splitRatio, remoteTransition, + taskId2, options2, splitPosition, snapPosition, remoteTransition, instanceId)); } @Override public void startIntentAndTask(PendingIntent pendingIntent, int userId1, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, + @SplitPosition int splitPosition, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntentAndTask", (controller) -> controller.startIntentAndTask(pendingIntent, userId1, options1, - taskId, options2, splitPosition, splitRatio, remoteTransition, + taskId, options2, splitPosition, snapPosition, remoteTransition, instanceId)); } @Override public void startShortcutAndTask(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition, - float splitRatio, @Nullable RemoteTransition remoteTransition, + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcutAndTask", (controller) -> controller.startShortcutAndTask(shortcutInfo, options1, taskId, - options2, splitPosition, splitRatio, remoteTransition, instanceId)); + options2, splitPosition, snapPosition, remoteTransition, instanceId)); } @Override public void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, int userId1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, - RemoteAnimationAdapter adapter, InstanceId instanceId) { + @Nullable Bundle options2, @SplitPosition int splitPosition, + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, + InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntentsWithLegacyTransition", (controller) -> controller.startIntentsWithLegacyTransition(pendingIntent1, userId1, shortcutInfo1, options1, pendingIntent2, userId2, shortcutInfo2, - options2, splitPosition, splitRatio, adapter, instanceId) + options2, splitPosition, snapPosition, adapter, instanceId) ); } @@ -1301,13 +1308,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, public void startIntents(PendingIntent pendingIntent1, int userId1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, - @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { + @Nullable Bundle options2, @SplitPosition int splitPosition, + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, + InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntents", (controller) -> controller.startIntents(pendingIntent1, userId1, shortcutInfo1, options1, pendingIntent2, userId2, shortcutInfo2, options2, - splitPosition, splitRatio, remoteTransition, instanceId) + splitPosition, snapPosition, remoteTransition, instanceId) ); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index 94fa485efd5c0c1204b9726a1a7fa4fc34386882..3d825f072a6aa38237661c72b79db0fc9dcd5698 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -128,6 +128,7 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.split.SplitLayout; +import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.common.split.SplitWindowManager; @@ -631,8 +632,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, } /** Starts 2 tasks in one transition. */ - void startTasks(int taskId1, @Nullable Bundle options1, int taskId2, - @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, + void startTasks(int taskId1, @Nullable Bundle options1, int taskId2, @Nullable Bundle options2, + @SplitPosition int splitPosition, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (taskId2 == INVALID_TASK_ID) { @@ -654,13 +655,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.startTask(taskId1, options1); - startWithTask(wct, taskId2, options2, splitRatio, remoteTransition, instanceId); + startWithTask(wct, taskId2, options2, snapPosition, remoteTransition, instanceId); } /** Start an intent and a task to a split pair in one transition. */ void startIntentAndTask(PendingIntent pendingIntent, Intent fillInIntent, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, + @SplitPosition int splitPosition, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (taskId == INVALID_TASK_ID) { @@ -676,13 +677,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.sendPendingIntent(pendingIntent, fillInIntent, options1); - startWithTask(wct, taskId, options2, splitRatio, remoteTransition, instanceId); + startWithTask(wct, taskId, options2, snapPosition, remoteTransition, instanceId); } /** Starts a shortcut and a task to a split pair in one transition. */ void startShortcutAndTask(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition, - float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { + @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, + InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (taskId == INVALID_TASK_ID) { options1 = options1 != null ? options1 : new Bundle(); @@ -697,7 +699,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.startShortcut(mContext.getPackageName(), shortcutInfo, options1); - startWithTask(wct, taskId, options2, splitRatio, remoteTransition, instanceId); + startWithTask(wct, taskId, options2, snapPosition, remoteTransition, instanceId); } /** @@ -708,14 +710,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, * {@link SplitscreenEventLogger#logEnter(float, int, int, int, int, boolean)} */ private void startWithTask(WindowContainerTransaction wct, int mainTaskId, - @Nullable Bundle mainOptions, float splitRatio, + @Nullable Bundle mainOptions, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { if (!mMainStage.isActive()) { // Build a request WCT that will launch both apps such that task 0 is on the main stage // while task 1 is on the side stage. mMainStage.activate(wct, false /* reparent */); } - mSplitLayout.setDivideRatio(splitRatio); + mSplitLayout.setDivideRatio(snapPosition); updateWindowBounds(mSplitLayout, wct); wct.reorder(mRootTaskInfo.token, true); setRootForceTranslucent(false, wct); @@ -740,7 +742,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, PendingIntent pendingIntent2, Intent fillInIntent2, @Nullable ShortcutInfo shortcutInfo2, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, + @SplitPosition int splitPosition, @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (pendingIntent2 == null) { @@ -762,7 +764,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, } setSideStagePosition(splitPosition, wct); - mSplitLayout.setDivideRatio(splitRatio); + mSplitLayout.setDivideRatio(snapPosition); updateWindowBounds(mSplitLayout, wct); wct.reorder(mRootTaskInfo.token, true); setRootForceTranslucent(false, wct); @@ -790,7 +792,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, /** Starts a pair of tasks using legacy transition. */ void startTasksWithLegacyTransition(int taskId1, @Nullable Bundle options1, int taskId2, @Nullable Bundle options2, @SplitPosition int splitPosition, - float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (options1 == null) options1 = new Bundle(); if (taskId2 == INVALID_TASK_ID) { @@ -811,7 +813,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.startTask(taskId1, options1); mSplitRequest = new SplitRequest(taskId1, taskId2, splitPosition); - startWithLegacyTransition(wct, taskId2, options2, splitPosition, splitRatio, adapter, + startWithLegacyTransition(wct, taskId2, options2, splitPosition, snapPosition, adapter, instanceId); } @@ -820,8 +822,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, @Nullable PendingIntent pendingIntent2, Intent fillInIntent2, @Nullable ShortcutInfo shortcutInfo2, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (options1 == null) options1 = new Bundle(); if (pendingIntent2 == null) { @@ -840,13 +842,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, pendingIntent2 != null ? pendingIntent2.getIntent() : null, splitPosition); } startWithLegacyTransition(wct, pendingIntent2, fillInIntent2, shortcutInfo2, options2, - splitPosition, splitRatio, adapter, instanceId); + splitPosition, snapPosition, adapter, instanceId); } void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (options1 == null) options1 = new Bundle(); if (taskId == INVALID_TASK_ID) { @@ -859,15 +861,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.sendPendingIntent(pendingIntent, fillInIntent, options1); mSplitRequest = new SplitRequest(taskId, pendingIntent.getIntent(), splitPosition); - startWithLegacyTransition(wct, taskId, options2, splitPosition, splitRatio, adapter, + startWithLegacyTransition(wct, taskId, options2, splitPosition, snapPosition, adapter, instanceId); } /** Starts a pair of shortcut and task using legacy transition. */ void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, @Nullable Bundle options1, int taskId, @Nullable Bundle options2, - @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int splitPosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (options1 == null) options1 = new Bundle(); if (taskId == INVALID_TASK_ID) { @@ -878,7 +880,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, addActivityOptions(options1, mSideStage); wct.startShortcut(mContext.getPackageName(), shortcutInfo, options1); - startWithLegacyTransition(wct, taskId, options2, splitPosition, splitRatio, adapter, + startWithLegacyTransition(wct, taskId, options2, splitPosition, snapPosition, adapter, instanceId); } @@ -928,18 +930,19 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void startWithLegacyTransition(WindowContainerTransaction wct, @Nullable PendingIntent mainPendingIntent, @Nullable Intent mainFillInIntent, @Nullable ShortcutInfo mainShortcutInfo, @Nullable Bundle mainOptions, - @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int sidePosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { startWithLegacyTransition(wct, INVALID_TASK_ID, mainPendingIntent, mainFillInIntent, - mainShortcutInfo, mainOptions, sidePosition, splitRatio, adapter, instanceId); + mainShortcutInfo, mainOptions, sidePosition, snapPosition, adapter, instanceId); } private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId, - @Nullable Bundle mainOptions, @SplitPosition int sidePosition, float splitRatio, - RemoteAnimationAdapter adapter, InstanceId instanceId) { + @Nullable Bundle mainOptions, @SplitPosition int sidePosition, + @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, + InstanceId instanceId) { startWithLegacyTransition(wct, mainTaskId, null /* mainPendingIntent */, null /* mainFillInIntent */, null /* mainShortcutInfo */, mainOptions, sidePosition, - splitRatio, adapter, instanceId); + snapPosition, adapter, instanceId); } /** @@ -950,15 +953,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId, @Nullable PendingIntent mainPendingIntent, @Nullable Intent mainFillInIntent, @Nullable ShortcutInfo mainShortcutInfo, @Nullable Bundle options, - @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, - InstanceId instanceId) { + @SplitPosition int sidePosition, @SnapPosition int snapPosition, + RemoteAnimationAdapter adapter, InstanceId instanceId) { if (!isSplitScreenVisible()) { exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RECREATE_SPLIT); } // Init divider first to make divider leash for remote animation target. mSplitLayout.init(); - mSplitLayout.setDivideRatio(splitRatio); + mSplitLayout.setDivideRatio(snapPosition); // Apply surface bounds before animation start. SurfaceControl.Transaction startT = mTransactionPool.acquire(); @@ -1551,6 +1554,11 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, @Nullable ActivityManager.RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim) { onSplitScreenEnter(); + // Preemptively reset the reparenting behavior if we know that we are entering, as starting + // split tasks with activity trampolines can inadvertently trigger the task to be + // reparented out of the split root mid-launch + wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token, + false /* setReparentLeafTaskIfRelaunch */); if (isSplitActive()) { prepareBringSplit(wct, taskInfo, startPosition, resizeAnim); } else { @@ -1761,7 +1769,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, rightBottomTaskId = sideStageTopTaskId; } SplitBounds splitBounds = new SplitBounds(topLeftBounds, bottomRightBounds, - leftTopTaskId, rightBottomTaskId); + leftTopTaskId, rightBottomTaskId, mSplitLayout.calculateCurrentSnapPosition()); if (mainStageTopTaskId != INVALID_TASK_ID && sideStageTopTaskId != INVALID_TASK_ID) { // Update the pair for the top tasks recentTasks.addSplitPair(mainStageTopTaskId, sideStageTopTaskId, splitBounds); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java index 0edcff45f648bc1d1d4fed91a6caf1cdc0a9daf4..a68b41d6563a5e5f52d48490e4b04da96f8d9c73 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java @@ -19,6 +19,8 @@ import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; +import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition; + import java.util.Objects; /** @@ -37,6 +39,7 @@ public class SplitBounds implements Parcelable { public final float leftTaskPercent; public final float dividerWidthPercent; public final float dividerHeightPercent; + public final @SnapPosition int snapPosition; /** * If {@code true}, that means at the time of creation of this object, the * split-screened apps were vertically stacked. This is useful in scenarios like @@ -47,12 +50,13 @@ public class SplitBounds implements Parcelable { public final int leftTopTaskId; public final int rightBottomTaskId; - public SplitBounds(Rect leftTopBounds, Rect rightBottomBounds, - int leftTopTaskId, int rightBottomTaskId) { + public SplitBounds(Rect leftTopBounds, Rect rightBottomBounds, int leftTopTaskId, + int rightBottomTaskId, @SnapPosition int snapPosition) { this.leftTopBounds = leftTopBounds; this.rightBottomBounds = rightBottomBounds; this.leftTopTaskId = leftTopTaskId; this.rightBottomTaskId = rightBottomTaskId; + this.snapPosition = snapPosition; if (rightBottomBounds.top > leftTopBounds.top) { // vertical apps, horizontal divider @@ -83,8 +87,9 @@ public class SplitBounds implements Parcelable { appsStackedVertically = parcel.readBoolean(); leftTopTaskId = parcel.readInt(); rightBottomTaskId = parcel.readInt(); - dividerWidthPercent = parcel.readInt(); - dividerHeightPercent = parcel.readInt(); + dividerWidthPercent = parcel.readFloat(); + dividerHeightPercent = parcel.readFloat(); + snapPosition = parcel.readInt(); } @Override @@ -99,6 +104,7 @@ public class SplitBounds implements Parcelable { parcel.writeInt(rightBottomTaskId); parcel.writeFloat(dividerWidthPercent); parcel.writeFloat(dividerHeightPercent); + parcel.writeInt(snapPosition); } @Override @@ -129,7 +135,8 @@ public class SplitBounds implements Parcelable { return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n" + "RightBottom: " + rightBottomBounds + ", taskId: " + rightBottomTaskId + "\n" + "Divider: " + visualDividerBounds + "\n" - + "AppsVertical? " + appsStackedVertically; + + "AppsVertical? " + appsStackedVertically + "\n" + + "snapPosition: " + snapPosition; } public static final Creator<SplitBounds> CREATOR = new Creator<SplitBounds>() { diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt index 8cb25fe531b8479fd449bfec767aa8726d0454df..69499b9b488b9920580a5a84a7c0907976c1527b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt @@ -31,7 +31,8 @@ import org.junit.runner.RunWith class DismissSplitScreenByDividerGesturalNavLandscape : DismissSplitScreenByDivider(Rotation.ROTATION_90) { - @ExpectedScenarios(["SPLIT_SCREEN_EXIT"]) + // TODO(b/300260196): Not detecting SPLIT_SCREEN_EXIT right now + @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt index 2539fd50d7420e68ff5b207836ad28e432f9ef37..bd627f4babaa5511e31abb1fc5092a8bc646a958 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt @@ -31,7 +31,7 @@ import org.junit.runner.RunWith class DismissSplitScreenByDividerGesturalNavPortrait : DismissSplitScreenByDivider(Rotation.ROTATION_0) { - // TODO(b/300260196): Not detecting this scenario right now + // TODO(b/300260196): Not detecting SPLIT_SCREEN_EXIT right now @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt index d53adc08d2ffa2aab1bec28e0325c7751a0e4b07..6b3cfaf33c05d42c38bcb534d14a10662a26c65b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt @@ -151,8 +151,11 @@ object SplitScreenUtils { } snapshots[0].click() } else { + val rotationCheckEnabled = tapl.getExpectedRotationCheckEnabled() + tapl.setExpectedRotationCheckEnabled(false) // disable rotation check to enter overview val home = tapl.workspace .switchToOverview() + tapl.setExpectedRotationCheckEnabled(rotationCheckEnabled) // restore rotation checks ChangeDisplayOrientationRule.setRotation(rotation) home.currentTask .tapMenu() diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..f5833219869677ec544638ccb66e2112c89b0239 --- /dev/null +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleViewInfoTest.kt @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2023 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.wm.shell.bubbles + +import android.content.pm.LauncherApps +import android.content.pm.ShortcutInfo +import android.content.res.Resources +import android.graphics.Color +import android.os.Handler +import android.os.UserManager +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper.RunWithLooper +import android.view.IWindowManager +import android.view.WindowManager +import androidx.test.filters.SmallTest +import com.android.internal.R +import com.android.internal.statusbar.IStatusBarService +import com.android.launcher3.icons.BubbleIconFactory +import com.android.wm.shell.ShellTaskOrganizer +import com.android.wm.shell.ShellTestCase +import com.android.wm.shell.TestShellExecutor +import com.android.wm.shell.WindowManagerShellWrapper +import com.android.wm.shell.bubbles.bar.BubbleBarLayerView +import com.android.wm.shell.bubbles.properties.BubbleProperties +import com.android.wm.shell.common.DisplayController +import com.android.wm.shell.common.FloatingContentCoordinator +import com.android.wm.shell.common.ShellExecutor +import com.android.wm.shell.common.SyncTransactionQueue +import com.android.wm.shell.common.TaskStackListenerImpl +import com.android.wm.shell.sysui.ShellCommandHandler +import com.android.wm.shell.sysui.ShellController +import com.android.wm.shell.sysui.ShellInit +import com.android.wm.shell.taskview.TaskViewTransitions +import com.android.wm.shell.transition.Transitions +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.kotlin.any +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + +/** + * Tests for loading / inflating views & icons for a bubble. + */ +@SmallTest +@RunWith(AndroidTestingRunner::class) +@RunWithLooper(setAsMainLooper = true) +class BubbleViewInfoTest : ShellTestCase() { + + private lateinit var metadataFlagListener: Bubbles.BubbleMetadataFlagListener + private lateinit var iconFactory: BubbleIconFactory + private lateinit var bubble: Bubble + + private lateinit var bubbleController: BubbleController + private lateinit var mainExecutor: ShellExecutor + private lateinit var bubbleStackView: BubbleStackView + private lateinit var bubbleBarLayerView: BubbleBarLayerView + + @Before + fun setup() { + metadataFlagListener = Bubbles.BubbleMetadataFlagListener {} + iconFactory = BubbleIconFactory(context, + 60, + 30, + Color.RED, + mContext.resources.getDimensionPixelSize( + R.dimen.importance_ring_stroke_width)) + + mainExecutor = TestShellExecutor() + val windowManager = context.getSystemService(WindowManager::class.java) + val shellInit = ShellInit(mainExecutor) + val shellCommandHandler = ShellCommandHandler() + val shellController = ShellController(context, shellInit, shellCommandHandler, + mainExecutor) + val bubblePositioner = BubblePositioner(context, windowManager) + val bubbleData = BubbleData(context, mock<BubbleLogger>(), bubblePositioner, + BubbleEducationController(context), mainExecutor) + val surfaceSynchronizer = { obj: Runnable -> obj.run() } + + bubbleController = BubbleController( + context, + shellInit, + shellCommandHandler, + shellController, + bubbleData, + surfaceSynchronizer, + FloatingContentCoordinator(), + mock<BubbleDataRepository>(), + mock<IStatusBarService>(), + windowManager, + WindowManagerShellWrapper(mainExecutor), + mock<UserManager>(), + mock<LauncherApps>(), + mock<BubbleLogger>(), + mock<TaskStackListenerImpl>(), + ShellTaskOrganizer(mainExecutor), + bubblePositioner, + mock<DisplayController>(), + null, + null, + mainExecutor, + mock<Handler>(), + mock<ShellExecutor>(), + mock<TaskViewTransitions>(), + mock<Transitions>(), + mock<SyncTransactionQueue>(), + mock<IWindowManager>(), + mock<BubbleProperties>()) + + bubbleStackView = BubbleStackView(context, bubbleController, bubbleData, + surfaceSynchronizer, FloatingContentCoordinator(), mainExecutor) + bubbleBarLayerView = BubbleBarLayerView(context, bubbleController) + } + + @Test + fun testPopulate() { + bubble = createBubbleWithShortcut() + val info = BubbleViewInfoTask.BubbleViewInfo.populate(context, + bubbleController, bubbleStackView, iconFactory, bubble, false /* skipInflation */) + assertThat(info!!).isNotNull() + + assertThat(info.imageView).isNotNull() + assertThat(info.expandedView).isNotNull() + assertThat(info.bubbleBarExpandedView).isNull() + + assertThat(info.shortcutInfo).isNotNull() + assertThat(info.appName).isNotEmpty() + assertThat(info.rawBadgeBitmap).isNotNull() + assertThat(info.dotPath).isNotNull() + assertThat(info.bubbleBitmap).isNotNull() + assertThat(info.badgeBitmap).isNotNull() + } + + @Test + fun testPopulateForBubbleBar() { + bubble = createBubbleWithShortcut() + val info = BubbleViewInfoTask.BubbleViewInfo.populateForBubbleBar(context, + bubbleController, bubbleBarLayerView, iconFactory, bubble, + false /* skipInflation */) + assertThat(info!!).isNotNull() + + assertThat(info.imageView).isNull() + assertThat(info.expandedView).isNull() + assertThat(info.bubbleBarExpandedView).isNotNull() + + assertThat(info.shortcutInfo).isNotNull() + assertThat(info.appName).isNotEmpty() + assertThat(info.rawBadgeBitmap).isNotNull() + assertThat(info.dotPath).isNotNull() + assertThat(info.bubbleBitmap).isNotNull() + assertThat(info.badgeBitmap).isNotNull() + } + + @Test + fun testPopulate_invalidShortcutIcon() { + bubble = createBubbleWithShortcut() + + // This eventually calls down to load the shortcut icon from the app, simulate an + // exception here if the app has an issue loading the shortcut icon; we default to + // the app icon in that case / none of the icons will be null. + val mockIconFactory = mock<BubbleIconFactory>() + whenever(mockIconFactory.getBubbleDrawable(eq(context), eq(bubble.shortcutInfo), + any())).doThrow(RuntimeException()) + + val info = BubbleViewInfoTask.BubbleViewInfo.populateForBubbleBar(context, + bubbleController, bubbleBarLayerView, iconFactory, bubble, + true /* skipInflation */) + assertThat(info).isNotNull() + + assertThat(info?.shortcutInfo).isNotNull() + assertThat(info?.appName).isNotEmpty() + assertThat(info?.rawBadgeBitmap).isNotNull() + assertThat(info?.dotPath).isNotNull() + assertThat(info?.bubbleBitmap).isNotNull() + assertThat(info?.badgeBitmap).isNotNull() + } + + private fun createBubbleWithShortcut(): Bubble { + val shortcutInfo = ShortcutInfo.Builder(mContext, "mockShortcutId").build() + return Bubble("mockKey", shortcutInfo, 1000, Resources.ID_NULL, + "mockTitle", 0 /* taskId */, "mockLocus", true /* isDismissible */, + mainExecutor, metadataFlagListener) + } +} \ No newline at end of file diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java index ad84c7fb61280a5fedbdaef4f1af4609b83acdb7..56d0f8e13f082a7fb20de4266fa6c823baab5eec 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java @@ -18,9 +18,13 @@ package com.android.wm.shell.common.split; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; + +import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50; import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_END_AND_DISMISS; import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_START_AND_DISMISS; + import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -130,7 +134,7 @@ public class SplitLayoutTests extends ShellTestCase { @Test public void testSetDivideRatio() { mSplitLayout.setDividePosition(200, false /* applyLayoutChange */); - mSplitLayout.setDivideRatio(0.5f); + mSplitLayout.setDivideRatio(SNAP_TO_50_50); assertThat(mSplitLayout.getDividePosition()).isEqualTo( mSplitLayout.mDividerSnapAlgorithm.getMiddleTarget().position); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java index 9b9600e4a51ed6917145b212d269f08dc85c26d8..f85d707d55f9df4150d2b743b30ab68e099c2a54 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java @@ -61,6 +61,7 @@ import com.android.wm.shell.transition.Transitions; import dagger.Lazy; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -523,13 +524,175 @@ public class CompatUIControllerTest extends ShellTestCase { .createLayout(anyBoolean()); } + @Test + public void testUpdateActiveTaskInfo_newTask_visibleAndFocused_updated() { + // Simulate user aspect ratio button being shown for previous task + mController.setHasShownUserAspectRatioSettingsButton(true); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + // Create new task + final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ true); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo); + + // Check topActivityTaskId is updated to the taskId of the new task and + // hasShownUserAspectRatioSettingsButton has been reset to false + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertFalse(mController.hasShownUserAspectRatioSettingsButton()); + } + + @Test + public void testUpdateActiveTaskInfo_newTask_notVisibleOrFocused_notUpdated() { + // Create new task + final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ true); + + // Simulate task being shown + mController.updateActiveTaskInfo(taskInfo); + + // Check topActivityTaskId is updated to the taskId of the new task and + // hasShownUserAspectRatioSettingsButton has been reset to false + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertFalse(mController.hasShownUserAspectRatioSettingsButton()); + + // Simulate user aspect ratio button being shown + mController.setHasShownUserAspectRatioSettingsButton(true); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + final int newTaskId = TASK_ID + 1; + + // Create visible but NOT focused task + final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ false); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo1); + + // Check topActivityTaskId is NOT updated and hasShownUserAspectRatioSettingsButton + // remains true + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + // Create focused but NOT visible task + final TaskInfo taskInfo2 = createTaskInfo(DISPLAY_ID, newTaskId, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ false, + /* isFocused */ true); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo2); + + // Check topActivityTaskId is NOT updated and hasShownUserAspectRatioSettingsButton + // remains true + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + // Create NOT focused but NOT visible task + final TaskInfo taskInfo3 = createTaskInfo(DISPLAY_ID, newTaskId, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ false, + /* isFocused */ false); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo3); + + // Check topActivityTaskId is NOT updated and hasShownUserAspectRatioSettingsButton + // remains true + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + } + + @Test + public void testUpdateActiveTaskInfo_sameTask_notUpdated() { + // Create new task + final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ true); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo); + + // Check topActivityTaskId is updated to the taskId of the new task and + // hasShownUserAspectRatioSettingsButton has been reset to false + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertFalse(mController.hasShownUserAspectRatioSettingsButton()); + + // Simulate user aspect ratio button being shown + mController.setHasShownUserAspectRatioSettingsButton(true); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + // Simulate same task being re-shown + mController.updateActiveTaskInfo(taskInfo); + + // Check topActivityTaskId is NOT updated and hasShownUserAspectRatioSettingsButton + // remains true + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + } + + @Test + public void testUpdateActiveTaskInfo_transparentTask_notUpdated() { + // Create new task + final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ true); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo); + + // Check topActivityTaskId is updated to the taskId of the new task and + // hasShownUserAspectRatioSettingsButton has been reset to false + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertFalse(mController.hasShownUserAspectRatioSettingsButton()); + + // Simulate user aspect ratio button being shown + mController.setHasShownUserAspectRatioSettingsButton(true); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + + final int newTaskId = TASK_ID + 1; + + // Create transparent task + final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, + /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN, /* isVisible */ true, + /* isFocused */ true, /* isTopActivityTransparent */ true); + + // Simulate new task being shown + mController.updateActiveTaskInfo(taskInfo1); + + // Check topActivityTaskId is NOT updated and hasShownUserAspectRatioSettingsButton + // remains true + Assert.assertEquals(TASK_ID, mController.getTopActivityTaskId()); + Assert.assertTrue(mController.hasShownUserAspectRatioSettingsButton()); + } + private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, @CameraCompatControlState int cameraCompatControlState) { + return createTaskInfo(displayId, taskId, hasSizeCompat, cameraCompatControlState, + /* isVisible */ false, /* isFocused */ false, + /* isTopActivityTransparent */ false); + } + + private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, + @CameraCompatControlState int cameraCompatControlState, boolean isVisible, + boolean isFocused) { + return createTaskInfo(displayId, taskId, hasSizeCompat, cameraCompatControlState, + isVisible, isFocused, /* isTopActivityTransparent */ false); + } + + private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, + @CameraCompatControlState int cameraCompatControlState, boolean isVisible, + boolean isFocused, boolean isTopActivityTransparent) { RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.displayId = displayId; taskInfo.topActivityInSizeCompat = hasSizeCompat; taskInfo.cameraCompatControlState = cameraCompatControlState; + taskInfo.isVisible = isVisible; + taskInfo.isFocused = isFocused; + taskInfo.isTopActivityTransparent = isTopActivityTransparent; return taskInfo; } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java index ce1290b38830e619503cff0b32219f25d4872e75..f460d1b09e3471d1914d8d5d3fc9faeab7dc7bcf 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java @@ -93,7 +93,8 @@ public class UserAspectRatioSettingsLayoutTest extends ShellTestCase { mWindowManager = new UserAspectRatioSettingsWindowManager(mContext, mTaskInfo, mSyncTransactionQueue, mTaskListener, new DisplayLayout(), new CompatUIController.CompatUIHintsState(), - mOnUserAspectRatioSettingsButtonClicked, new TestShellExecutor(), flags -> 0); + mOnUserAspectRatioSettingsButtonClicked, new TestShellExecutor(), flags -> 0, + () -> false, s -> {}); mLayout = (UserAspectRatioSettingsLayout) LayoutInflater.from(mContext).inflate( R.layout.user_aspect_ratio_settings_layout, null); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java index 08cc2f76313567faa568e9b0f52b4ddd002d9374..5a4d6c812c173af2c2aaf1dd4d341bde5a0da659 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java @@ -36,6 +36,7 @@ import android.content.ComponentName; import android.content.res.Configuration; import android.graphics.Rect; import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper; import android.util.Pair; import android.view.DisplayInfo; import android.view.InsetsSource; @@ -66,6 +67,7 @@ import org.mockito.MockitoAnnotations; import java.util.HashSet; import java.util.Set; import java.util.function.BiConsumer; +import java.util.function.Supplier; /** * Tests for {@link UserAspectRatioSettingsWindowManager}. @@ -74,6 +76,7 @@ import java.util.function.BiConsumer; * atest WMShellUnitTests:UserAspectRatioSettingsWindowManagerTest */ @RunWith(AndroidTestingRunner.class) +@RunWithLooper @SmallTest public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { @@ -81,6 +84,8 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { @Mock private SyncTransactionQueue mSyncTransactionQueue; @Mock + private Supplier<Boolean> mUserAspectRatioButtonShownChecker; + @Mock private BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> mOnUserAspectRatioSettingsButtonClicked; @Mock private ShellTaskOrganizer.TaskListener mTaskListener; @@ -106,10 +111,12 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { false, /* topActivityBoundsLetterboxed */ true); mWindowManager = new UserAspectRatioSettingsWindowManager(mContext, mTaskInfo, mSyncTransactionQueue, mTaskListener, new DisplayLayout(), new CompatUIHintsState(), - mOnUserAspectRatioSettingsButtonClicked, mExecutor, flags -> 0); + mOnUserAspectRatioSettingsButtonClicked, mExecutor, flags -> 0, + mUserAspectRatioButtonShownChecker, s -> {}); spyOn(mWindowManager); doReturn(mLayout).when(mWindowManager).inflateLayout(); doReturn(mViewHost).when(mWindowManager).createSurfaceViewHost(); + doReturn(false).when(mUserAspectRatioButtonShownChecker).get(); } @Test @@ -292,6 +299,39 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { verify(mLayout).setVisibility(View.VISIBLE); } + @Test + public void testLayoutHasUserAspectRatioSettingsButton() { + clearInvocations(mWindowManager); + spyOn(mWindowManager); + TaskInfo taskInfo = createTaskInfo(/* eligibleForUserAspectRatioButton= */ + true, /* topActivityBoundsLetterboxed */ true); + + // User aspect ratio settings button has not yet been shown. + doReturn(false).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout has the user aspect ratio settings button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertTrue(mWindowManager.mHasUserAspectRatioSettingsButton); + + // User aspect ratio settings button has been shown and is still visible. + spyOn(mWindowManager); + doReturn(true).when(mWindowManager).isShowingButton(); + doReturn(true).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout still has the user aspect ratio settings button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertTrue(mWindowManager.mHasUserAspectRatioSettingsButton); + + // User aspect ratio settings button has been shown and has timed out so is no longer + // visible. + doReturn(false).when(mWindowManager).isShowingButton(); + doReturn(true).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout no longer has the user aspect ratio button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertFalse(mWindowManager.mHasUserAspectRatioSettingsButton); + } + @Test public void testAttachToParentSurface() { final SurfaceControl.Builder b = new SurfaceControl.Builder(); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedRecentTaskInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedRecentTaskInfoTest.kt index baa06f2f0c45608aae69b65e0f14d3b370eb0cf7..bbd65be9abdaaff199bb7d87d51fc8304730c709 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedRecentTaskInfoTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedRecentTaskInfoTest.kt @@ -24,6 +24,7 @@ import android.window.IWindowContainerToken import android.window.WindowContainerToken import androidx.test.filters.SmallTest import com.android.wm.shell.ShellTestCase +import com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50 import com.android.wm.shell.util.GroupedRecentTaskInfo import com.android.wm.shell.util.GroupedRecentTaskInfo.CREATOR import com.android.wm.shell.util.GroupedRecentTaskInfo.TYPE_FREEFORM @@ -123,6 +124,7 @@ class GroupedRecentTaskInfoTest : ShellTestCase() { assertThat(recentTaskInfoParcel.taskInfo2).isNotNull() assertThat(recentTaskInfoParcel.taskInfo2!!.taskId).isEqualTo(2) assertThat(recentTaskInfoParcel.splitBounds).isNotNull() + assertThat(recentTaskInfoParcel.splitBounds!!.snapPosition).isEqualTo(SNAP_TO_50_50) } @Test @@ -156,7 +158,7 @@ class GroupedRecentTaskInfoTest : ShellTestCase() { private fun splitTasksGroupInfo(): GroupedRecentTaskInfo { val task1 = createTaskInfo(id = 1) val task2 = createTaskInfo(id = 2) - val splitBounds = SplitBounds(Rect(), Rect(), 1, 2) + val splitBounds = SplitBounds(Rect(), Rect(), 1, 2, SNAP_TO_50_50) return GroupedRecentTaskInfo.forSplitTasks(task1, task2, splitBounds) } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java index 40ce7859cc7f88dca25e79b11d8fbc43a0e49e0e..10e9e11e9004fe0bdb015c400c113ac905ab1e31 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; +import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -173,10 +174,10 @@ public class RecentTasksControllerTest extends ShellTestCase { // Verify only one update if the split info is the same SplitBounds bounds1 = new SplitBounds(new Rect(0, 0, 50, 50), - new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); + new Rect(50, 50, 100, 100), t1.taskId, t2.taskId, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds1); SplitBounds bounds2 = new SplitBounds(new Rect(0, 0, 50, 50), - new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); + new Rect(50, 50, 100, 100), t1.taskId, t2.taskId, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds2); verify(mRecentTasksController, times(1)).notifyRecentTasksChanged(); } @@ -207,8 +208,10 @@ public class RecentTasksControllerTest extends ShellTestCase { setRawList(t1, t2, t3, t4, t5, t6); // Mark a couple pairs [t2, t4], [t3, t5] - SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 2, 4); - SplitBounds pair2Bounds = new SplitBounds(new Rect(), new Rect(), 3, 5); + SplitBounds pair1Bounds = + new SplitBounds(new Rect(), new Rect(), 2, 4, SNAP_TO_50_50); + SplitBounds pair2Bounds = + new SplitBounds(new Rect(), new Rect(), 3, 5, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t2.taskId, t4.taskId, pair1Bounds); mRecentTasksController.addSplitPair(t3.taskId, t5.taskId, pair2Bounds); @@ -236,8 +239,10 @@ public class RecentTasksControllerTest extends ShellTestCase { setRawList(t1, t2, t3, t4, t5, t6); // Mark a couple pairs [t2, t4], [t3, t5] - SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 2, 4); - SplitBounds pair2Bounds = new SplitBounds(new Rect(), new Rect(), 3, 5); + SplitBounds pair1Bounds = + new SplitBounds(new Rect(), new Rect(), 2, 4, SNAP_TO_50_50); + SplitBounds pair2Bounds = + new SplitBounds(new Rect(), new Rect(), 3, 5, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t2.taskId, t4.taskId, pair1Bounds); mRecentTasksController.addSplitPair(t3.taskId, t5.taskId, pair2Bounds); @@ -334,7 +339,8 @@ public class RecentTasksControllerTest extends ShellTestCase { setRawList(t1, t2, t3); // Add a pair - SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 2, 3); + SplitBounds pair1Bounds = + new SplitBounds(new Rect(), new Rect(), 2, 3, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t2.taskId, t3.taskId, pair1Bounds); reset(mRecentTasksController); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java index 50d02ae0dccd9b8a394970dc0c47a2f338250ba3..b790aee6fb0ec6d737aaaa042eabf1db7b678de4 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java @@ -1,5 +1,7 @@ package com.android.wm.shell.recents; +import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -44,21 +46,21 @@ public class SplitBoundsTest extends ShellTestCase { @Test public void testVerticalStacked() { SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); assertTrue(ssb.appsStackedVertically); } @Test public void testHorizontalStacked() { SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); assertFalse(ssb.appsStackedVertically); } @Test public void testHorizontalDividerBounds() { SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); Rect dividerBounds = ssb.visualDividerBounds; assertEquals(0, dividerBounds.left); assertEquals(DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2, dividerBounds.top); @@ -69,7 +71,7 @@ public class SplitBoundsTest extends ShellTestCase { @Test public void testVerticalDividerBounds() { SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); Rect dividerBounds = ssb.visualDividerBounds; assertEquals(DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2, dividerBounds.left); assertEquals(0, dividerBounds.top); @@ -80,7 +82,7 @@ public class SplitBoundsTest extends ShellTestCase { @Test public void testEqualVerticalTaskPercent() { SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); float topPercentSpaceTaken = (float) (DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2) / DEVICE_LENGTH; assertEquals(topPercentSpaceTaken, ssb.topTaskPercent, 0.01); } @@ -88,7 +90,7 @@ public class SplitBoundsTest extends ShellTestCase { @Test public void testEqualHorizontalTaskPercent() { SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect, - TASK_ID_1, TASK_ID_2); + TASK_ID_1, TASK_ID_2, SNAP_TO_50_50); float leftPercentSpaceTaken = (float) (DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2) / DEVICE_WIDTH; assertEquals(leftPercentSpaceTaken, ssb.leftTaskPercent, 0.01); } diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 842542f4f43bbdcd818a9a1f2e64f6a8e837ed38..adc0e16448eeb0250c1b166bb5d065ddceb6aea8 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -941,27 +941,15 @@ public class AudioManager { } /** - * Sends a simulated key event for a media button. - * To simulate a key press, you must first send a KeyEvent built with a - * {@link KeyEvent#ACTION_DOWN} action, then another event with the {@link KeyEvent#ACTION_UP} - * action. + * Sends a simulated key event for a media button. To simulate a key press, you must first send + * a KeyEvent built with a {@link KeyEvent#ACTION_DOWN} action, then another event with the + * {@link KeyEvent#ACTION_UP} action. + * * <p>The key event will be sent to the current media key event consumer which registered with * {@link AudioManager#registerMediaButtonEventReceiver(PendingIntent)}. - * @param keyEvent a {@link KeyEvent} instance whose key code is one of - * {@link KeyEvent#KEYCODE_MUTE}, - * {@link KeyEvent#KEYCODE_HEADSETHOOK}, - * {@link KeyEvent#KEYCODE_MEDIA_PLAY}, - * {@link KeyEvent#KEYCODE_MEDIA_PAUSE}, - * {@link KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE}, - * {@link KeyEvent#KEYCODE_MEDIA_STOP}, - * {@link KeyEvent#KEYCODE_MEDIA_NEXT}, - * {@link KeyEvent#KEYCODE_MEDIA_PREVIOUS}, - * {@link KeyEvent#KEYCODE_MEDIA_REWIND}, - * {@link KeyEvent#KEYCODE_MEDIA_RECORD}, - * {@link KeyEvent#KEYCODE_MEDIA_FAST_FORWARD}, - * {@link KeyEvent#KEYCODE_MEDIA_CLOSE}, - * {@link KeyEvent#KEYCODE_MEDIA_EJECT}, - * or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}. + * + * @param keyEvent a media session {@link KeyEvent}, as defined by {@link + * KeyEvent#isMediaSessionKey}. */ public void dispatchMediaKeyEvent(KeyEvent keyEvent) { MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext()); diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index a6e8fa0644df536e1ebd54973087f01f842d3ab1..aaaf25f008c770bae2a00621781a01e9a589cee2 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -220,33 +220,21 @@ import java.util.List; return -1; } - /** - * Send a simulated key event for a media button to be received by the current client. - * To simulate a key press, you must first send a KeyEvent built with - * a {@link KeyEvent#ACTION_DOWN} action, then another event with the {@link KeyEvent#ACTION_UP} - * action. - * <p>The key event will be sent to the registered receiver - * (see {@link AudioManager#registerMediaButtonEventReceiver(PendingIntent)}) whose associated - * {@link RemoteControlClient}'s metadata and playback state is published (there may be - * none under some circumstances). - * @param keyEvent a {@link KeyEvent} instance whose key code is one of - * {@link KeyEvent#KEYCODE_MUTE}, - * {@link KeyEvent#KEYCODE_HEADSETHOOK}, - * {@link KeyEvent#KEYCODE_MEDIA_PLAY}, - * {@link KeyEvent#KEYCODE_MEDIA_PAUSE}, - * {@link KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE}, - * {@link KeyEvent#KEYCODE_MEDIA_STOP}, - * {@link KeyEvent#KEYCODE_MEDIA_NEXT}, - * {@link KeyEvent#KEYCODE_MEDIA_PREVIOUS}, - * {@link KeyEvent#KEYCODE_MEDIA_REWIND}, - * {@link KeyEvent#KEYCODE_MEDIA_RECORD}, - * {@link KeyEvent#KEYCODE_MEDIA_FAST_FORWARD}, - * {@link KeyEvent#KEYCODE_MEDIA_CLOSE}, - * {@link KeyEvent#KEYCODE_MEDIA_EJECT}, - * or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}. + * Send a simulated key event for a media button to be received by the current client. To + * simulate a key press, you must first send a KeyEvent built with a {@link + * KeyEvent#ACTION_DOWN} action, then another event with the {@link KeyEvent#ACTION_UP} action. + * + * <p>The key event will be sent to the registered receiver (see {@link + * AudioManager#registerMediaButtonEventReceiver(PendingIntent)}) whose associated {@link + * RemoteControlClient}'s metadata and playback state is published (there may be none under some + * circumstances). + * + * @param keyEvent a media session {@link KeyEvent}, as defined by {@link + * KeyEvent#isMediaSessionKey}. * @return true if the event was successfully sent, false otherwise. - * @throws IllegalArgumentException + * @throws IllegalArgumentException If the provided {@link KeyEvent} is not a media session key, + * as defined by {@link KeyEvent#isMediaSessionKey}. */ public boolean sendMediaKeyEvent(KeyEvent keyEvent) throws IllegalArgumentException { if (!KeyEvent.isMediaSessionKey(keyEvent.getKeyCode())) { diff --git a/media/java/android/media/RouteDiscoveryPreference.java b/media/java/android/media/RouteDiscoveryPreference.java index 71d8261b09bfc92b8bfa5577993ee4f7eb1f04f4..161fd2fb7f961c829816a284118eb1be9536a3c0 100644 --- a/media/java/android/media/RouteDiscoveryPreference.java +++ b/media/java/android/media/RouteDiscoveryPreference.java @@ -194,6 +194,7 @@ public final class RouteDiscoveryPreference implements Parcelable { String indent = prefix + " "; + pw.println(indent + "mShouldPerformActiveScan=" + mShouldPerformActiveScan); pw.println(indent + "mPreferredFeatures=" + mPreferredFeatures); pw.println(indent + "mPackageOrder=" + mPackageOrder); pw.println(indent + "mAllowedPackages=" + mAllowedPackages); diff --git a/packages/CredentialManager/horologist/Android.bp b/packages/CredentialManager/horologist/Android.bp index bb324bb8350d68ff563a82382067b5ca54f55ca6..bb255bdb130671c90b3eaba2fb756da622e35a34 100644 --- a/packages/CredentialManager/horologist/Android.bp +++ b/packages/CredentialManager/horologist/Android.bp @@ -16,6 +16,7 @@ android_library { "androidx.compose.foundation_foundation", "androidx.compose.runtime_runtime", "androidx.compose.ui_ui", + "androidx.compose.ui_ui-tooling", "androidx.navigation_navigation-compose", "androidx.lifecycle_lifecycle-extensions", "androidx.lifecycle_lifecycle-runtime-ktx", diff --git a/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/layout/BelowTimeTextPreview.kt b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/layout/BelowTimeTextPreview.kt new file mode 100644 index 0000000000000000000000000000000000000000..e6025fc0911fac09c5a42a3c2c118ced46696db4 --- /dev/null +++ b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/layout/BelowTimeTextPreview.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2022 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 + * + * https://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.google.android.horologist.compose.layout + +import androidx.compose.runtime.Composable +import com.google.android.horologist.annotations.ExperimentalHorologistApi + +@OptIn(ExperimentalHorologistApi::class) +@Composable +public fun belowTimeTextPreview(): ScalingLazyColumnState { + return ScalingLazyColumnDefaults.belowTimeText().create() +} diff --git a/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Button.kt b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Button.kt new file mode 100644 index 0000000000000000000000000000000000000000..57e0c106b5f0e4924f92287fe74112918ea2404a --- /dev/null +++ b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Button.kt @@ -0,0 +1,143 @@ +/* + * Copyright 2023 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 + * + * https://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.google.android.horologist.compose.material + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.Dp +import androidx.wear.compose.material.Button +import androidx.wear.compose.material.ButtonColors +import androidx.wear.compose.material.ButtonDefaults +import androidx.wear.compose.material.ButtonDefaults.DefaultButtonSize +import androidx.wear.compose.material.ButtonDefaults.DefaultIconSize +import androidx.wear.compose.material.ButtonDefaults.LargeButtonSize +import androidx.wear.compose.material.ButtonDefaults.LargeIconSize +import androidx.wear.compose.material.ButtonDefaults.SmallButtonSize +import androidx.wear.compose.material.ButtonDefaults.SmallIconSize +import com.google.android.horologist.annotations.ExperimentalHorologistApi + +/** + * This component is an alternative to [Button], providing the following: + * - a convenient way of providing an icon and choosing its size from a range of sizes recommended + * by the Wear guidelines; + */ +@ExperimentalHorologistApi +@Composable +public fun Button( + imageVector: ImageVector, + contentDescription: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, + colors: ButtonColors = ButtonDefaults.primaryButtonColors(), + buttonSize: ButtonSize = ButtonSize.Default, + iconRtlMode: IconRtlMode = IconRtlMode.Default, + enabled: Boolean = true, +) { + Button( + icon = imageVector, + contentDescription = contentDescription, + onClick = onClick, + modifier = modifier, + colors = colors, + buttonSize = buttonSize, + iconRtlMode = iconRtlMode, + enabled = enabled, + ) +} + +/** + * This component is an alternative to [Button], providing the following: + * - a convenient way of providing an icon and choosing its size from a range of sizes recommended + * by the Wear guidelines; + */ +@ExperimentalHorologistApi +@Composable +public fun Button( + @DrawableRes id: Int, + contentDescription: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, + colors: ButtonColors = ButtonDefaults.primaryButtonColors(), + buttonSize: ButtonSize = ButtonSize.Default, + iconRtlMode: IconRtlMode = IconRtlMode.Default, + enabled: Boolean = true, +) { + Button( + icon = id, + contentDescription = contentDescription, + onClick = onClick, + modifier = modifier, + colors = colors, + buttonSize = buttonSize, + iconRtlMode = iconRtlMode, + enabled = enabled, + ) +} + +@OptIn(ExperimentalHorologistApi::class) +@Composable +internal fun Button( + icon: Any, + contentDescription: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, + colors: ButtonColors = ButtonDefaults.primaryButtonColors(), + buttonSize: ButtonSize = ButtonSize.Default, + iconRtlMode: IconRtlMode = IconRtlMode.Default, + enabled: Boolean = true, +) { + Button( + onClick = onClick, + modifier = modifier.size(buttonSize.tapTargetSize), + enabled = enabled, + colors = colors, + ) { + val iconModifier = Modifier + .size(buttonSize.iconSize) + .align(Alignment.Center) + + Icon( + icon = icon, + contentDescription = contentDescription, + modifier = iconModifier, + rtlMode = iconRtlMode, + ) + } +} + +@ExperimentalHorologistApi +public sealed class ButtonSize( + public val iconSize: Dp, + public val tapTargetSize: Dp, +) { + public object Default : + ButtonSize(iconSize = DefaultIconSize, tapTargetSize = DefaultButtonSize) + + public object Large : ButtonSize(iconSize = LargeIconSize, tapTargetSize = LargeButtonSize) + public object Small : ButtonSize(iconSize = SmallIconSize, tapTargetSize = SmallButtonSize) + + /** + * Custom sizes should follow the [accessibility principles and guidance for touch targets](https://developer.android.com/training/wearables/accessibility#set-minimum). + */ + public data class Custom(val customIconSize: Dp, val customTapTargetSize: Dp) : + ButtonSize(iconSize = customIconSize, tapTargetSize = customTapTargetSize) +} + diff --git a/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Icon.kt b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Icon.kt new file mode 100644 index 0000000000000000000000000000000000000000..74e54c0ba4792936324f78ec93ea922765ca536d --- /dev/null +++ b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/Icon.kt @@ -0,0 +1,129 @@ +/* + * Copyright 2023 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 + * + * https://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.google.android.horologist.compose.material + +import androidx.annotation.DrawableRes +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.LayoutDirection +import androidx.wear.compose.material.Icon +import androidx.wear.compose.material.LocalContentAlpha +import androidx.wear.compose.material.LocalContentColor +import com.google.android.horologist.annotations.ExperimentalHorologistApi + +/** + * This component is an alternative to [Icon], providing the following: + * - a convenient way of setting the icon to be mirrored in RTL mode; + */ +@ExperimentalHorologistApi +@Composable +public fun Icon( + imageVector: ImageVector, + contentDescription: String?, + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current), + rtlMode: IconRtlMode = IconRtlMode.Default, +) { + val shouldMirror = + rtlMode == IconRtlMode.Mirrored && LocalLayoutDirection.current == LayoutDirection.Rtl + Icon( + modifier = modifier.scale( + scaleX = if (shouldMirror) -1f else 1f, + scaleY = 1f, + ), + imageVector = imageVector, + contentDescription = contentDescription, + tint = tint, + ) +} + +/** + * This component is an alternative to [Icon], providing the following: + * - a convenient way of setting the icon to be mirrored in RTL mode; + */ +@ExperimentalHorologistApi +@Composable +public fun Icon( + @DrawableRes id: Int, + contentDescription: String?, + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current), + rtlMode: IconRtlMode = IconRtlMode.Default, +) { + val shouldMirror = + rtlMode == IconRtlMode.Mirrored && LocalLayoutDirection.current == LayoutDirection.Rtl + + Icon( + painter = painterResource(id = id), + contentDescription = contentDescription, + modifier = modifier.scale( + scaleX = if (shouldMirror) -1f else 1f, + scaleY = 1f, + ), + tint = tint, + ) +} + +@OptIn(ExperimentalHorologistApi::class) +@Composable +internal fun Icon( + icon: Any, + contentDescription: String?, + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current), + rtlMode: IconRtlMode = IconRtlMode.Default, +) { + val shouldMirror = + rtlMode == IconRtlMode.Mirrored && LocalLayoutDirection.current == LayoutDirection.Rtl + + val iconModifier = modifier.scale( + scaleX = if (shouldMirror) -1f else 1f, + scaleY = 1f, + ) + when (icon) { + is ImageVector -> { + Icon( + imageVector = icon, + modifier = iconModifier, + contentDescription = contentDescription, + tint = tint, + ) + } + + is Int -> { + Icon( + painter = painterResource(id = icon), + contentDescription = contentDescription, + modifier = iconModifier, + tint = tint, + ) + } + + else -> throw IllegalArgumentException("Type not supported.") + } +} + +@ExperimentalHorologistApi +public enum class IconRtlMode { + Default, + Mirrored, +} diff --git a/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/util/A11y.kt b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/util/A11y.kt new file mode 100644 index 0000000000000000000000000000000000000000..39de2e142edccae735a77b96e8f829ca1cab2740 --- /dev/null +++ b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/material/util/A11y.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2022 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 + * + * https://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.google.android.horologist.compose.material.util + +import com.google.android.horologist.annotations.ExperimentalHorologistApi + +/** + * Make explicit that a conscious decision was made to mark an element as decorative, so it does not + * have associated actions or state. + * + * https://developer.android.com/jetpack/compose/accessibility#describe-visual + */ +@ExperimentalHorologistApi +public val DECORATIVE_ELEMENT_CONTENT_DESCRIPTION: String? = null diff --git a/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/tools/WearPreview.kt b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/tools/WearPreview.kt new file mode 100644 index 0000000000000000000000000000000000000000..0bfceeea916ca39776a848674e81946376e89b2e --- /dev/null +++ b/packages/CredentialManager/horologist/src/com/google/android/horologist/compose/tools/WearPreview.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2022 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 + * + * https://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.google.android.horologist.compose.tools + +import androidx.compose.ui.tooling.preview.Preview + +@Preview( + backgroundColor = 0xff000000, + showBackground = true, +) +public annotation class WearPreview diff --git a/packages/CredentialManager/shared/Android.bp b/packages/CredentialManager/shared/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..38d98a9d47f740a92479e32b7de6cf6b4fc1f868 --- /dev/null +++ b/packages/CredentialManager/shared/Android.bp @@ -0,0 +1,19 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_library { + name: "CredentialManagerShared", + manifest: "AndroidManifest.xml", + srcs: ["src/**/*.kt"], + static_libs: [ + "androidx.core_core-ktx", + "androidx.credentials_credentials", + "guava", + ], +} diff --git a/packages/CredentialManager/shared/AndroidManifest.xml b/packages/CredentialManager/shared/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..a46088783024a76a49cc34d872136d10f4c20fb4 --- /dev/null +++ b/packages/CredentialManager/shared/AndroidManifest.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* + * Copyright (c) 2023 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.credentialmanager"> + +</manifest> diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt new file mode 100644 index 0000000000000000000000000000000000000000..defba8dacb7b08faaee5820982ff625f10fe4cc6 --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager + +import android.content.Intent +import android.credentials.ui.RequestInfo +import com.android.credentialmanager.ktx.requestInfo +import com.android.credentialmanager.mapper.toGet +import com.android.credentialmanager.mapper.toRequestCancel +import com.android.credentialmanager.model.Request + +fun Intent.parse(): Request { + this.toRequestCancel()?.let { return it } + + return when (requestInfo?.type) { + RequestInfo.TYPE_CREATE -> { + Request.Create + } + + RequestInfo.TYPE_GET -> { + this.toGet() + } + + else -> { + throw IllegalStateException("Unrecognized request type: ${requestInfo?.type}") + } + } +} diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/LogConstants.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/LogConstants.kt new file mode 100644 index 0000000000000000000000000000000000000000..44d33ff7084ab94781f07a06460ef27ae30938ca --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/LogConstants.kt @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager + +const val TAG = "CredentialSelector" diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/factory/CredentialEntryFactory.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/factory/CredentialEntryFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..a2c1f0388807fda1e6722751833db314c24629ee --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/factory/CredentialEntryFactory.kt @@ -0,0 +1,25 @@ +package com.android.credentialmanager.factory + +import android.app.slice.Slice +import android.credentials.Credential +import androidx.credentials.PublicKeyCredential +import androidx.credentials.provider.CredentialEntry +import androidx.credentials.provider.CustomCredentialEntry +import androidx.credentials.provider.PasswordCredentialEntry +import androidx.credentials.provider.PublicKeyCredentialEntry + +fun fromSlice(slice: Slice): CredentialEntry? = + try { + when (slice.spec?.type) { + Credential.TYPE_PASSWORD_CREDENTIAL -> PasswordCredentialEntry.fromSlice(slice)!! + + PublicKeyCredential.TYPE_PUBLIC_KEY_CREDENTIAL -> + PublicKeyCredentialEntry.fromSlice(slice)!! + + else -> CustomCredentialEntry.fromSlice(slice)!! + } + } catch (e: Exception) { + // Try CustomCredentialEntry.fromSlice one last time in case the cause was a failed + // password / passkey parsing attempt. + CustomCredentialEntry.fromSlice(slice) + } \ No newline at end of file diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt new file mode 100644 index 0000000000000000000000000000000000000000..a4c20bfabb35f4fe593694d16359b0c3280e4cd8 --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.ktx + +import android.content.Intent +import android.credentials.ui.CancelUiRequest +import android.credentials.ui.CreateCredentialProviderData +import android.credentials.ui.GetCredentialProviderData +import android.credentials.ui.ProviderData +import android.credentials.ui.RequestInfo + +val Intent.cancelUiRequest: CancelUiRequest? + get() = this.extras?.getParcelable( + CancelUiRequest.EXTRA_CANCEL_UI_REQUEST, + CancelUiRequest::class.java + ) + +val Intent.requestInfo: RequestInfo? + get() = this.extras?.getParcelable( + RequestInfo.EXTRA_REQUEST_INFO, + RequestInfo::class.java + ) + +val Intent.getCredentialProviderDataList: List<ProviderData> + get() = this.extras?.getParcelableArrayList( + ProviderData.EXTRA_ENABLED_PROVIDER_DATA_LIST, + GetCredentialProviderData::class.java + ) ?: emptyList() + +val Intent.createCredentialProviderDataList: List<ProviderData> + get() = this.extras?.getParcelableArrayList( + ProviderData.EXTRA_ENABLED_PROVIDER_DATA_LIST, + CreateCredentialProviderData::class.java + ) ?: emptyList() diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/PackageManagerKtx.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/PackageManagerKtx.kt new file mode 100644 index 0000000000000000000000000000000000000000..5f4f298241a181103026da32e35340e29cc67905 --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/PackageManagerKtx.kt @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.ktx + +import android.content.pm.PackageManager +import android.text.TextUtils +import android.util.Log +import com.android.credentialmanager.TAG + +fun PackageManager.appLabel(appPackageName: String): String? = + try { + val pkgInfo = this.getPackageInfo(appPackageName, PackageManager.PackageInfoFlags.of(0)) + val applicationInfo = checkNotNull(pkgInfo.applicationInfo) + applicationInfo.loadSafeLabel( + this, 0f, + TextUtils.SAFE_STRING_FLAG_FIRST_LINE or TextUtils.SAFE_STRING_FLAG_TRIM + ).toString() + } catch (e: Exception) { + Log.e(TAG, "Caller app not found", e) + null + } diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestCancelMapper.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestCancelMapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..86a6d23a76a98db81da2bca99cc322072ddfb40e --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestCancelMapper.kt @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.mapper + +import android.content.Intent +import com.android.credentialmanager.ktx.cancelUiRequest +import com.android.credentialmanager.model.Request + +fun Intent.toRequestCancel(): Request.Cancel? = + this.cancelUiRequest?.let { cancelUiRequest -> + Request.Cancel( + showCancellationUi = cancelUiRequest.shouldShowCancellationUi(), + appPackageName = cancelUiRequest.appPackageName + ) + } diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..ed9d56344853b7d7fe5a79f8d745dde7ea6e6b41 --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt @@ -0,0 +1,22 @@ +package com.android.credentialmanager.mapper + +import android.content.Intent +import android.credentials.ui.GetCredentialProviderData +import com.android.credentialmanager.ktx.getCredentialProviderDataList +import com.android.credentialmanager.model.Request +import com.google.common.collect.ImmutableList +import com.google.common.collect.ImmutableMap + +fun Intent.toGet() = Request.Get( + providers = ImmutableMap.copyOf( + getCredentialProviderDataList.associateBy { it.providerFlattenedComponentName } + ), + entries = ImmutableList.copyOf( + getCredentialProviderDataList.map { providerData -> + check(providerData is GetCredentialProviderData) { + "Invalid provider data type for GetCredentialRequest" + } + providerData + }.flatMap { it.credentialEntries } + ) +) \ No newline at end of file diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt new file mode 100644 index 0000000000000000000000000000000000000000..bc073105efe145e6da925b5336fb6b825ba4e862 --- /dev/null +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.model + +import android.credentials.ui.Entry +import android.credentials.ui.ProviderData +import com.google.common.collect.ImmutableList +import com.google.common.collect.ImmutableMap + +/** + * Represents the request made by the CredentialManager API. + */ +sealed class Request { + data class Cancel( + val showCancellationUi: Boolean, + val appPackageName: String? + ) : Request() + + data class Get( + val providers: ImmutableMap<String, ProviderData>, + val entries: ImmutableList<Entry>, + ) : Request() + + data object Create : Request() +} diff --git a/packages/CredentialManager/wear/Android.bp b/packages/CredentialManager/wear/Android.bp index 639e8d18b306c9fa95f0591e744d1db909fe23ee..c0dff168969da610696fce3b99e1301ae163882e 100644 --- a/packages/CredentialManager/wear/Android.bp +++ b/packages/CredentialManager/wear/Android.bp @@ -21,6 +21,7 @@ android_app { }, static_libs: [ + "CredentialManagerShared", "Horologist", "PlatformComposeCore", "androidx.activity_activity-compose", @@ -31,6 +32,7 @@ android_app { "androidx.compose.material_material-icons-extended", "androidx.compose.runtime_runtime", "androidx.compose.ui_ui", + "androidx.compose.ui_ui-tooling", "androidx.core_core-ktx", "androidx.lifecycle_lifecycle-extensions", "androidx.lifecycle_lifecycle-livedata", diff --git a/packages/CredentialManager/wear/res/drawable/passkey_icon.xml b/packages/CredentialManager/wear/res/drawable/passkey_icon.xml new file mode 100644 index 0000000000000000000000000000000000000000..be366bf2a255328420b0e1bca17c38bad3ba692d --- /dev/null +++ b/packages/CredentialManager/wear/res/drawable/passkey_icon.xml @@ -0,0 +1,21 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M23,10.5H17V13.5H23V10.5Z" + android:fillColor="#188038"/> + <path + android:pathData="M6.5,17.5C3.5,17.5 1,15 1,12C1,9 3.5,6.5 6.5,6.5C9.5,6.5 12,9 12,12C12,15 9.5,17.5 6.5,17.5ZM6.5,9.5C5.1,9.5 4,10.6 4,12C4,13.4 5.1,14.5 6.5,14.5C7.9,14.5 9,13.4 9,12C9,10.6 7.9,9.5 6.5,9.5Z" + android:fillColor="#4285F4"/> + <path + android:pathData="M21,13.5H19H17V16.5H19V15.5C19,14.9 19.4,14.5 20,14.5C20.6,14.5 21,14.9 21,15.5V16.5H23V13.5H21Z" + android:fillColor="#34A853"/> + <path + android:pathData="M11.8,10.5H8.5C8.8,10.9 9,11.4 9,12C9,12.6 8.8,13.1 8.5,13.5H11.8C11.9,13 12,12.5 12,12C12,11.5 11.9,11 11.8,10.5Z" + android:fillColor="#EA4335"/> + <path + android:pathData="M17,10.5H11.8C11.9,11 12,11.5 12,12C12,12.5 11.9,13 11.8,13.5H17V10.5Z" + android:fillColor="#FBBC04"/> +</vector> diff --git a/packages/CredentialManager/wear/res/values/strings.xml b/packages/CredentialManager/wear/res/values/strings.xml index 10ea9186ca85b855f04d520183b9a4b64935ae82..109644f46b10ed65bcc552efe1bc9a9e84791f96 100644 --- a/packages/CredentialManager/wear/res/values/strings.xml +++ b/packages/CredentialManager/wear/res/values/strings.xml @@ -18,4 +18,14 @@ <!-- The name of this application. Credential Manager is a service that centralizes and provides access to a user's credentials used to sign in to various apps. [CHAR LIMIT=80] --> <string name="app_name">Credential Manager</string> + <!-- Title of a screen prompting if the user would like to use their saved passkey. + [CHAR LIMIT=80] --> + <string name="use_passkey_title">Use passkey?</string> + <!-- Title of a screen prompting if the user would like to use their saved password. + [CHAR LIMIT=80] --> + <string name="use_password_title">Use password?</string> + <!-- Content description for the cancel button of a screen. [CHAR LIMIT=NONE] --> + <string name="dialog_cancel_button_cd">Cancel</string> + <!-- Content description for the OK button of a screen. [CHAR LIMIT=NONE] --> + <string name="dialog_ok_button_cd">OK</string> </resources> \ No newline at end of file diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt index 77fffaa1e04c84d68176f41d08c76a26e0c09248..53122ba7ccdcddaccd495ada4bb04a4c61360ea5 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt @@ -16,28 +16,72 @@ package com.android.credentialmanager.ui +import android.content.Intent import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.navigation.NavHostController +import androidx.activity.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.wear.compose.material.MaterialTheme -import androidx.wear.compose.navigation.rememberSwipeDismissableNavController +import kotlinx.coroutines.launch class CredentialSelectorActivity : ComponentActivity() { - lateinit var navController: NavHostController + private val viewModel: CredentialSelectorViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setTheme(android.R.style.Theme_DeviceDefault) - setContent { - navController = rememberSwipeDismissableNavController() + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.uiState.collect { uiState -> + when (uiState) { + CredentialSelectorUiState.Idle -> { + // Don't display anything, assuming that there should be minimal latency + // to parse the Credential Manager intent and define the state of the + // app. If latency is big, then a "loading" screen should be displayed + // to the user. + } - MaterialTheme { - WearApp(navController = navController) + is CredentialSelectorUiState.Get -> { + setContent { + MaterialTheme { + WearApp() + } + } + } + + CredentialSelectorUiState.Create -> { + // TODO: b/301206624 - Implement create flow + finish() + } + + is CredentialSelectorUiState.Cancel -> { + // TODO: b/300422310 - Implement cancel with message flow + finish() + } + + CredentialSelectorUiState.Finish -> { + finish() + } + } + } } } + + viewModel.onNewIntent(intent) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + + val previousIntent = getIntent() + setIntent(intent) + + viewModel.onNewIntent(intent, previousIntent) } } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorViewModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..d22d5d1a28a34de330f95be8f3f0cb51d6778ad4 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorViewModel.kt @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.ui + +import android.app.Application +import android.content.Intent +import android.util.Log +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import com.android.credentialmanager.TAG +import com.android.credentialmanager.parse +import com.android.credentialmanager.ktx.appLabel +import com.android.credentialmanager.ktx.requestInfo +import com.android.credentialmanager.mapper.toGet +import com.android.credentialmanager.ui.model.PasskeyUiModel +import com.android.credentialmanager.ui.model.PasswordUiModel +import com.android.credentialmanager.model.Request +import com.android.credentialmanager.ui.mapper.toGet +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class CredentialSelectorViewModel( + private val application: Application +) : AndroidViewModel(application = application) { + + private val _uiState = + MutableStateFlow<CredentialSelectorUiState>(CredentialSelectorUiState.Idle) + val uiState: StateFlow<CredentialSelectorUiState> = _uiState + + fun onNewIntent(intent: Intent, previousIntent: Intent? = null) { + viewModelScope.launch { + val request = intent.parse() + if (shouldFinishActivity(request = request, previousIntent = previousIntent)) { + _uiState.value = CredentialSelectorUiState.Finish + } else { + when (request) { + is Request.Cancel -> { + request.appPackageName?.let { appPackageName -> + application.packageManager.appLabel(appPackageName)?.let { appLabel -> + _uiState.value = CredentialSelectorUiState.Cancel(appLabel) + } ?: run { + Log.d(TAG, + "Received UI cancel request with an invalid package name.") + _uiState.value = CredentialSelectorUiState.Finish + } + } ?: run { + Log.d(TAG, "Received UI cancel request with an invalid package name.") + _uiState.value = CredentialSelectorUiState.Finish + } + } + + Request.Create -> { + _uiState.value = CredentialSelectorUiState.Create + } + + is Request.Get -> { + _uiState.value = request.toGet() + } + } + } + } + } + + /** + * Check if backend requested the UI activity to be cancelled. Different from the other + * finishing flows, this one does not report anything back to the Credential Manager service + * backend. + */ + private fun shouldFinishActivity(request: Request, previousIntent: Intent? = null): Boolean { + if (request !is Request.Cancel) { + return false + } else { + Log.d( + TAG, "Received UI cancellation intent. Should show cancellation" + + " ui = ${request.showCancellationUi}") + + previousIntent?.let { + val previousUiRequest = previousIntent.parse() + + if (previousUiRequest is Request.Cancel) { + val previousToken = previousIntent.requestInfo?.token + val currentToken = previousIntent.requestInfo?.token + + if (previousToken != currentToken) { + // Cancellation was for a different request, don't cancel the current UI. + return false + } + } + } + + return !request.showCancellationUi + } + } +} + +sealed class CredentialSelectorUiState { + data object Idle : CredentialSelectorUiState() + sealed class Get : CredentialSelectorUiState() { + data class SingleProviderSinglePasskey(val passkeyUiModel: PasskeyUiModel) : Get() + data class SingleProviderSinglePassword(val passwordUiModel: PasswordUiModel) : Get() + + // TODO: b/301206470 add the remaining states + } + + data object Create : CredentialSelectorUiState() + data class Cancel(val appName: String) : CredentialSelectorUiState() + data object Finish : CredentialSelectorUiState() +} diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt index ee6ea5e57c1916fe1ba8269235dbcffc4037dd9d..7d1a49b077180132ce6546675e8a2c66cb172f6f 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt @@ -19,5 +19,5 @@ package com.android.credentialmanager.ui sealed class Screen( val route: String, ) { - object Main : Screen("main") + data object Main : Screen("main") } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt index 5ec0c8cd9292e50ec423b3faad4bf1ab68907c5b..19ea9ede9d9856df7c49123327d25fc0591269ab 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt @@ -19,8 +19,8 @@ package com.android.credentialmanager.ui import androidx.compose.runtime.Composable -import androidx.navigation.NavHostController import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState +import androidx.wear.compose.navigation.rememberSwipeDismissableNavController import androidx.wear.compose.navigation.rememberSwipeDismissableNavHostState import com.android.credentialmanager.ui.screens.MainScreen import com.google.android.horologist.annotations.ExperimentalHorologistApi @@ -28,9 +28,8 @@ import com.google.android.horologist.compose.navscaffold.WearNavScaffold import com.google.android.horologist.compose.navscaffold.composable @Composable -fun WearApp( - navController: NavHostController -) { +fun WearApp() { + val navController = rememberSwipeDismissableNavController() val swipeToDismissBoxState = rememberSwipeToDismissBoxState() val navHostState = rememberSwipeDismissableNavHostState(swipeToDismissBoxState = swipeToDismissBoxState) diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/AccountRow.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/AccountRow.kt new file mode 100644 index 0000000000000000000000000000000000000000..c20ee0c22ad61f3b9ccdb83223d86bfa249f423c --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/AccountRow.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2023 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 + * + * https://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.credentialmanager.ui.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material.Text +import com.google.android.horologist.compose.tools.WearPreview + +@Composable +fun AccountRow( + name: String, + email: String, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = name, + color = Color(0xFFE6FF7B), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = MaterialTheme.typography.title2 + ) + Text( + text = email, + modifier = Modifier.padding(top = 7.dp), + color = Color(0xFFCAC5BC), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + style = MaterialTheme.typography.body1, + ) + } +} + +@WearPreview +@Composable +fun AccountRowPreview() { + AccountRow( + name = "Elisa Beckett", + email = "beckett_bakery@gmail.com", + ) +} diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/DialogButtonsRow.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/DialogButtonsRow.kt new file mode 100644 index 0000000000000000000000000000000000000000..5cb3c1590dfda4a22dc4d1c1a1be21ed4703eb6f --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/DialogButtonsRow.kt @@ -0,0 +1,71 @@ +/* + * Copyright 2023 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 + * + * https://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.credentialmanager.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check +import androidx.compose.material.icons.filled.Close +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.ButtonDefaults +import com.google.android.horologist.compose.material.Button +import com.google.android.horologist.compose.tools.WearPreview +import com.android.credentialmanager.R +import com.google.android.horologist.annotations.ExperimentalHorologistApi + +@OptIn(ExperimentalHorologistApi::class) +@Composable +fun DialogButtonsRow( + onCancelClick: () -> Unit, + onOKClick: () -> Unit, + modifier: Modifier = Modifier, + cancelButtonIcon: ImageVector = Icons.Default.Close, + okButtonIcon: ImageVector = Icons.Default.Check, + cancelButtonContentDescription: String = stringResource(R.string.dialog_cancel_button_cd), + okButtonContentDescription: String = stringResource(R.string.dialog_ok_button_cd), +) { + Row( + modifier = modifier, + horizontalArrangement = Arrangement.Center, + ) { + Button( + imageVector = cancelButtonIcon, + contentDescription = cancelButtonContentDescription, + onClick = onCancelClick, + colors = ButtonDefaults.secondaryButtonColors(), + ) + Button( + imageVector = okButtonIcon, + contentDescription = okButtonContentDescription, + onClick = onOKClick, + modifier = Modifier.padding(start = 20.dp) + ) + } +} + +@WearPreview +@Composable +fun DialogButtonsRowPreview() { + DialogButtonsRow(onCancelClick = {}, onOKClick = {}) +} + diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/PasswordRow.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/PasswordRow.kt new file mode 100644 index 0000000000000000000000000000000000000000..97900b723bc388efc8804e642fe4d00c02f2e433 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/PasswordRow.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2023 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 + * + * https://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.credentialmanager.ui.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material.Text +import com.google.android.horologist.compose.tools.WearPreview + +@Composable +fun PasswordRow( + email: String, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = email, + color = Color(0xFFE6FF7B), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + style = MaterialTheme.typography.title2 + ) + Text( + text = "••••••••••••••", + modifier = Modifier.padding(top = 7.dp), + color = Color(0xFFCAC5BC), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = MaterialTheme.typography.body1, + ) + } +} + +@WearPreview +@Composable +fun PasswordRowPreview() { + PasswordRow( + email = "beckett_bakery@gmail.com", + ) +} + diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt new file mode 100644 index 0000000000000000000000000000000000000000..956c56b2c7b115f099878e5aa84befa767a5ab13 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2023 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 + * + * https://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.credentialmanager.ui.components + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material.Text +import com.android.credentialmanager.R +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.material.Icon +import com.google.android.horologist.compose.material.util.DECORATIVE_ELEMENT_CONTENT_DESCRIPTION +import com.google.android.horologist.compose.tools.WearPreview + +@OptIn(ExperimentalHorologistApi::class) +@Composable +fun SignInHeader( + @DrawableRes icon: Int, + title: String, + modifier: Modifier = Modifier, +) { + SignInHeader( + iconContent = { + Icon( + id = icon, + contentDescription = DECORATIVE_ELEMENT_CONTENT_DESCRIPTION + ) + }, + title = title, + modifier = modifier, + ) +} + +@Composable +fun SignInHeader( + iconContent: @Composable ColumnScope.() -> Unit, + title: String, + modifier: Modifier = Modifier, +) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally + ) { + iconContent() + Text( + text = title, + modifier = Modifier + .padding(top = 6.dp) + .padding(horizontal = 10.dp), + style = MaterialTheme.typography.title3 + ) + } +} + +@WearPreview +@Composable +fun SignInHeaderPreview() { + SignInHeader( + icon = R.drawable.passkey_icon, + title = stringResource(R.string.use_passkey_title) + ) +} diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mapper/CredentialSelectorUiStateGetMapper.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mapper/CredentialSelectorUiStateGetMapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..5ceec1783c84ff42e8be1aca895a46dfb0201ab2 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mapper/CredentialSelectorUiStateGetMapper.kt @@ -0,0 +1,51 @@ +package com.android.credentialmanager.ui.mapper + +import androidx.credentials.provider.CustomCredentialEntry +import androidx.credentials.provider.PasswordCredentialEntry +import androidx.credentials.provider.PublicKeyCredentialEntry +import com.android.credentialmanager.ui.CredentialSelectorUiState +import com.android.credentialmanager.factory.fromSlice +import com.android.credentialmanager.ui.model.PasswordUiModel +import com.android.credentialmanager.model.Request + +fun Request.Get.toGet(): CredentialSelectorUiState.Get { + if (this.providers.isEmpty()) { + throw IllegalStateException("Invalid GetCredential request with empty list of providers.") + } + + if (this.entries.isEmpty()) { + throw IllegalStateException("Invalid GetCredential request with empty list of entries.") + } + + if (this.providers.size == 1) { + if (this.entries.size == 1) { + val slice = this.entries.first().slice + when (val credentialEntry = fromSlice(slice)) { + is PasswordCredentialEntry -> { + return CredentialSelectorUiState.Get.SingleProviderSinglePassword( + PasswordUiModel(credentialEntry.displayName.toString()) + ) + } + + is PublicKeyCredentialEntry -> { + TODO("b/301206470 - to be implemented") + } + + is CustomCredentialEntry -> { + TODO("b/301206470 - to be implemented") + } + + else -> { + throw IllegalStateException( + "Encountered unrecognized credential entry (${slice.spec?.type}) for " + + "GetCredential request with single account" + ) + } + } + } else { + TODO("b/301206470 - to be implemented") + } + } else { + TODO("b/301206470 - to be implemented") + } +} \ No newline at end of file diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasskeyUiModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasskeyUiModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..a368de27867af471984934b893cf295d191b005d --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasskeyUiModel.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.ui.model + +data class PasskeyUiModel( + val name: String, + val email: String, +) diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasswordUiModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasswordUiModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..52bbfaa818edfa9342a8f132abea41fd827d6c94 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/model/PasswordUiModel.kt @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 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.0N + * + * 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.credentialmanager.ui.model + +data class PasswordUiModel(val email: String) diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt index 662d7108ab90dcf702ea92fac460e830df6a25b9..94a671efc393cd45e9186596798b0247968a4f40 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt @@ -23,7 +23,9 @@ import androidx.compose.ui.Modifier import androidx.wear.compose.material.Text @Composable -fun MainScreen(modifier: Modifier = Modifier) { +fun MainScreen( + modifier: Modifier = Modifier +) { Box(modifier = modifier, contentAlignment = Alignment.Center) { Text("This is a placeholder for the main screen.") } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SingleAccountScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SingleAccountScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..f344ad0bd22df8c7f3ee5bf86e4926e39ac9c005 --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SingleAccountScreen.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2023 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:OptIn(ExperimentalHorologistApi::class) + +package com.android.credentialmanager.ui.screens + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.wear.compose.foundation.lazy.ScalingLazyListScope +import com.android.credentialmanager.R +import com.android.credentialmanager.ui.components.AccountRow +import com.android.credentialmanager.ui.components.DialogButtonsRow +import com.android.credentialmanager.ui.components.SignInHeader +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumn +import com.google.android.horologist.compose.layout.ScalingLazyColumnState +import com.google.android.horologist.compose.layout.belowTimeTextPreview +import com.google.android.horologist.compose.tools.WearPreview + +@Composable +fun SingleAccountScreen( + headerContent: @Composable () -> Unit, + accountContent: @Composable () -> Unit, + columnState: ScalingLazyColumnState, + modifier: Modifier = Modifier, + content: ScalingLazyListScope.() -> Unit, +) { + ScalingLazyColumn( + columnState = columnState, + modifier = modifier.fillMaxSize(), + ) { + item { headerContent() } + item { accountContent() } + content() + } +} + +@WearPreview +@Composable +fun SingleAccountScreenPreview() { + SingleAccountScreen( + headerContent = { + SignInHeader( + icon = R.drawable.passkey_icon, + title = stringResource(R.string.use_passkey_title), + ) + }, + accountContent = { + AccountRow( + name = "Elisa Beckett", + email = "beckett_bakery@gmail.com", + modifier = Modifier.padding(top = 10.dp) + ) + }, + columnState = belowTimeTextPreview(), + ) { + item { + DialogButtonsRow( + onCancelClick = {}, + onOKClick = {}, + modifier = Modifier.padding(top = 10.dp) + ) + } + } +} diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasskeyScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasskeyScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..c8f871e46c83c9995a1dca70a8dc453b46dfd24e --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasskeyScreen.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2023 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:OptIn(ExperimentalHorologistApi::class) + +package com.android.credentialmanager.ui.screens + +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.android.credentialmanager.R +import com.android.credentialmanager.ui.components.AccountRow +import com.android.credentialmanager.ui.components.DialogButtonsRow +import com.android.credentialmanager.ui.components.SignInHeader +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumnState +import com.google.android.horologist.compose.layout.belowTimeTextPreview +import com.google.android.horologist.compose.tools.WearPreview + +@Composable +fun SinglePasskeyScreen( + name: String, + email: String, + onCancelClick: () -> Unit, + onOKClick: () -> Unit, + columnState: ScalingLazyColumnState, + modifier: Modifier = Modifier, +) { + SingleAccountScreen( + headerContent = { + SignInHeader( + icon = R.drawable.passkey_icon, + title = stringResource(R.string.use_passkey_title), + ) + }, + accountContent = { + AccountRow( + name = name, + email = email, + modifier = Modifier.padding(top = 10.dp), + ) + }, + columnState = columnState, + modifier = modifier.padding(horizontal = 10.dp) + ) { + item { + DialogButtonsRow( + onCancelClick = onCancelClick, + onOKClick = onOKClick, + modifier = Modifier.padding(top = 10.dp) + ) + } + } +} + +@WearPreview +@Composable +fun SinglePasskeyScreenPreview() { + SinglePasskeyScreen( + name = "Elisa Beckett", + email = "beckett_bakery@gmail.com", + onCancelClick = {}, + onOKClick = {}, + columnState = belowTimeTextPreview(), + ) +} + diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasswordScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasswordScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..d863d3c68ceb6d057587c415d24a8c8c5339976e --- /dev/null +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/SinglePasswordScreen.kt @@ -0,0 +1,79 @@ +/* + * Copyright 2023 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:OptIn(ExperimentalHorologistApi::class) + +package com.android.credentialmanager.ui.screens + +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.android.credentialmanager.R +import com.android.credentialmanager.ui.components.DialogButtonsRow +import com.android.credentialmanager.ui.components.PasswordRow +import com.android.credentialmanager.ui.components.SignInHeader +import com.google.android.horologist.annotations.ExperimentalHorologistApi +import com.google.android.horologist.compose.layout.ScalingLazyColumnState +import com.google.android.horologist.compose.layout.belowTimeTextPreview +import com.google.android.horologist.compose.tools.WearPreview + +@Composable +fun SinglePasswordScreen( + email: String, + onCancelClick: () -> Unit, + onOKClick: () -> Unit, + columnState: ScalingLazyColumnState, + modifier: Modifier = Modifier, +) { + SingleAccountScreen( + headerContent = { + SignInHeader( + icon = R.drawable.passkey_icon, + title = stringResource(R.string.use_password_title), + ) + }, + accountContent = { + PasswordRow( + email = email, + modifier = Modifier.padding(top = 10.dp), + ) + }, + columnState = columnState, + modifier = modifier.padding(horizontal = 10.dp) + ) { + item { + DialogButtonsRow( + onCancelClick = onCancelClick, + onOKClick = onOKClick, + modifier = Modifier.padding(top = 10.dp) + ) + } + } +} + +@WearPreview +@Composable +fun SinglePasswordScreenPreview() { + SinglePasswordScreen( + email = "beckett_bakery@gmail.com", + onCancelClick = {}, + onOKClick = {}, + columnState = belowTimeTextPreview(), + ) +} + diff --git a/packages/SettingsLib/ActionBarShadow/Android.bp b/packages/SettingsLib/ActionBarShadow/Android.bp index bf4c8587722af7c112e8b10d34c33837c4eecbae..6f9445874fce8702e24ee6808cef255aaed9f4e1 100644 --- a/packages/SettingsLib/ActionBarShadow/Android.bp +++ b/packages/SettingsLib/ActionBarShadow/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibActionBarShadow", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/ActionBarShadow/AndroidManifest.xml b/packages/SettingsLib/ActionBarShadow/AndroidManifest.xml index 98c4cb4b276679273bc2437eec3633a68e28c8ad..4ec6870e6c87f1346a58224c4f8aff864f94f348 100644 --- a/packages/SettingsLib/ActionBarShadow/AndroidManifest.xml +++ b/packages/SettingsLib/ActionBarShadow/AndroidManifest.xml @@ -16,6 +16,6 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.actionbarshadow"> </manifest> diff --git a/packages/SettingsLib/ActionButtonsPreference/Android.bp b/packages/SettingsLib/ActionButtonsPreference/Android.bp index b6e167717023b0e3ca80e93f37c9e9bac85212a8..122855561751536ec5d07fc7f7482b3dc17ac21b 100644 --- a/packages/SettingsLib/ActionButtonsPreference/Android.bp +++ b/packages/SettingsLib/ActionButtonsPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibActionButtonsPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/ActionButtonsPreference/AndroidManifest.xml b/packages/SettingsLib/ActionButtonsPreference/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..01ad59814cc89b0b591eaca93c71100fee0a5afe 100644 --- a/packages/SettingsLib/ActionButtonsPreference/AndroidManifest.xml +++ b/packages/SettingsLib/ActionButtonsPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.actionbuttons"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/ActionButtonsPreference/src/com/android/settingslib/widget/ActionButtonsPreference.java b/packages/SettingsLib/ActionButtonsPreference/src/com/android/settingslib/widget/ActionButtonsPreference.java index 4d3ca945f7e1584f22e5815ee9a11899d1c4c7b1..3e65d94e33237335c6cff2f62838bfe8d2cae0c4 100644 --- a/packages/SettingsLib/ActionButtonsPreference/src/com/android/settingslib/widget/ActionButtonsPreference.java +++ b/packages/SettingsLib/ActionButtonsPreference/src/com/android/settingslib/widget/ActionButtonsPreference.java @@ -32,10 +32,11 @@ import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import com.android.settingslib.utils.BuildCompatUtils; - import java.util.ArrayList; import java.util.List; +import com.android.settingslib.widget.preference.actionbuttons.R; + /** * This preference provides a four buttons layout with Settings style. * It looks like below diff --git a/packages/SettingsLib/ActivityEmbedding/Android.bp b/packages/SettingsLib/ActivityEmbedding/Android.bp index 0cd9fe387a22f4f9414bf7fca68d4a7feb1f22ae..41de29a93e511ccde2453c9575d52f33e2e087be 100644 --- a/packages/SettingsLib/ActivityEmbedding/Android.bp +++ b/packages/SettingsLib/ActivityEmbedding/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibActivityEmbedding", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml b/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml index 0949e1defc2f60a96a7234b6e23406a2010e15c1..c67f51c0d7e72d0b63eb954d1c2c0ee949bb0911 100644 --- a/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml +++ b/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.activityembedding"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/AdaptiveIcon/Android.bp b/packages/SettingsLib/AdaptiveIcon/Android.bp index 934aacfddfb93ed7b6ff31c6bc60b669a46d6e32..df72a921544d06b44a9f3014ddb01a7d4b2442a1 100644 --- a/packages/SettingsLib/AdaptiveIcon/Android.bp +++ b/packages/SettingsLib/AdaptiveIcon/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibAdaptiveIcon", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/AdaptiveIcon/AndroidManifest.xml b/packages/SettingsLib/AdaptiveIcon/AndroidManifest.xml index 256b8f3ea477200e2736294d8beb2d65690f1200..7709ad3cba4d5b6f1ed2935281c49dc1f68c5a5e 100644 --- a/packages/SettingsLib/AdaptiveIcon/AndroidManifest.xml +++ b/packages/SettingsLib/AdaptiveIcon/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.adaptiveicon"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java index 723caf2ce0a1fb47d3c72258f481a078cc16f16b..fc41c93587c4a985a4bd449b38a25941e51fb522 100644 --- a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java +++ b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveIcon.java @@ -32,6 +32,7 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.widget.adaptiveicon.R; /** * Adaptive icon that can set background color diff --git a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java index e82997431290c3093c7460af7c4f09f5b68c592e..12c234ecd73953041f379dd93e59f94a6a3b059d 100644 --- a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java +++ b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java @@ -34,6 +34,8 @@ import android.view.WindowManagerGlobal; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; +import com.android.settingslib.widget.adaptiveicon.R; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SettingsLib/AppPreference/Android.bp b/packages/SettingsLib/AppPreference/Android.bp index 0ba47a8156e36797b0b4aaae49f45e61fb85906c..69b9d44fe16f53f5fc28e3586d3bb5213d46ba44 100644 --- a/packages/SettingsLib/AppPreference/Android.bp +++ b/packages/SettingsLib/AppPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibAppPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/AppPreference/AndroidManifest.xml b/packages/SettingsLib/AppPreference/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..9d014977da8f8191955893636ce7de7c3bc48172 100644 --- a/packages/SettingsLib/AppPreference/AndroidManifest.xml +++ b/packages/SettingsLib/AppPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.app"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppHeaderPreference.java b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppHeaderPreference.java index 60d00da29755d83f06d14d9426b34fedeab237a6..b1d311080b86db0641070ba1d9ebdbf493b31756 100644 --- a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppHeaderPreference.java +++ b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppHeaderPreference.java @@ -28,6 +28,8 @@ import androidx.annotation.StringRes; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.app.R; + /** * The Preference for the pages need to show big apps icon and name in the header of the page. */ diff --git a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppPreference.java b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppPreference.java index cfe7013537870a25a29bf3debb2787646ea01cf1..f1d162e116b5a98f7ccded8253c642a834aaa24f 100644 --- a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppPreference.java +++ b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppPreference.java @@ -24,6 +24,8 @@ import android.widget.ProgressBar; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.app.R; + /** * The Preference for the pages need to show apps icon. */ diff --git a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppSwitchPreference.java b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppSwitchPreference.java index 781bfcdbc75e91c95ac374162d4ee16b8c1016d4..87bfc8111a4bfc08acbc32e03e8e65121e9729aa 100644 --- a/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppSwitchPreference.java +++ b/packages/SettingsLib/AppPreference/src/com/android/settingslib/widget/AppSwitchPreference.java @@ -22,7 +22,7 @@ import android.view.View; import androidx.preference.PreferenceViewHolder; import androidx.preference.SwitchPreference; - +import com.android.settingslib.widget.preference.app.R; /** * The SwitchPreference for the pages need to show apps icon. */ diff --git a/packages/SettingsLib/BannerMessagePreference/Android.bp b/packages/SettingsLib/BannerMessagePreference/Android.bp index 0f7a451e7c8b31d3127106982dde2c44fe419fda..da91344242a1f06a978d828ab2de3727737e5e84 100644 --- a/packages/SettingsLib/BannerMessagePreference/Android.bp +++ b/packages/SettingsLib/BannerMessagePreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibBannerMessagePreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/BannerMessagePreference/AndroidManifest.xml b/packages/SettingsLib/BannerMessagePreference/AndroidManifest.xml index dd51ea38a1feff5b6f58e9ba929d54d43b28c9ab..a93a1fec8135651b0fcf14a1f68899b92763fa51 100644 --- a/packages/SettingsLib/BannerMessagePreference/AndroidManifest.xml +++ b/packages/SettingsLib/BannerMessagePreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.banner"> <uses-sdk android:minSdkVersion="28"/> diff --git a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreference.java b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreference.java index afeb24ad3b61b5972a92a32781bce2bccfdc3ac8..33775a64aa820f8074fb2892f8596539f9141789 100644 --- a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreference.java +++ b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreference.java @@ -39,7 +39,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import com.android.settingslib.utils.BuildCompatUtils; - +import com.android.settingslib.widget.preference.banner.R; /** * Banner message is a banner displaying important information (permission request, page error etc), * and provide actions for user to address. It requires a user action to be dismissed. diff --git a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessageView.java b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessageView.java index 5ca6fb64db2dd74c18dd6c2b38dd2985ef2e4101..ff4e79ddaaa1df29731c956371b8486b1d47b65d 100644 --- a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessageView.java +++ b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessageView.java @@ -25,6 +25,8 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; +import com.android.settingslib.widget.preference.banner.R; + /** * The view providing {@link BannerMessagePreference}. * @@ -75,7 +77,7 @@ public class BannerMessageView extends LinearLayout { int minimum = getResources() - .getDimensionPixelSize(R.dimen.settingslib_preferred_minimum_touch_target); + .getDimensionPixelSize(com.android.settingslib.widget.theme.R.dimen.settingslib_preferred_minimum_touch_target); int width = dismissButton.getWidth(); int height = dismissButton.getHeight(); int widthIncrease = width < minimum ? minimum - width : 0; diff --git a/packages/SettingsLib/BarChartPreference/Android.bp b/packages/SettingsLib/BarChartPreference/Android.bp index 5c5da9827e61d4972fc8853f5e0556e52b4b3e21..be1e0cf8ab4f29e029d61826a7cdc22f6d727cc8 100644 --- a/packages/SettingsLib/BarChartPreference/Android.bp +++ b/packages/SettingsLib/BarChartPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibBarChartPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/BarChartPreference/AndroidManifest.xml b/packages/SettingsLib/BarChartPreference/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..fda4e1d2e232298674e45057612304b67acf8fb4 100644 --- a/packages/SettingsLib/BarChartPreference/AndroidManifest.xml +++ b/packages/SettingsLib/BarChartPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.barchart"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartInfo.java b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartInfo.java index eeaf2737a2fd4b197a524d3082cb6cd40d7b514c..a32a24d825ba15f4bec9bcd8a12ae7b3800d4f12 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartInfo.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartInfo.java @@ -24,7 +24,7 @@ import androidx.annotation.StringRes; import java.util.ArrayList; import java.util.List; - +import com.android.settingslib.widget.preference.barchart.R; /** * BarChartInfo is responsible for storing information about {@link BarChartPreference}. */ diff --git a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java index 20e0a3b20b8cad1c8f8012247e50f90a2c36779f..d63fc3c34728608b4932739c5f74799778fb26c5 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java @@ -28,7 +28,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import java.util.Arrays; - +import com.android.settingslib.widget.preference.barchart.R; /** * This BarChartPreference shows up to four bar views in this preference at most. * diff --git a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java index 93a34c03bf92470964de2a0fbf324e5c1f645673..7c749716942d74b39116a71e5b003865656dbb32 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java @@ -29,7 +29,7 @@ import android.widget.TextView; import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; - +import com.android.settingslib.widget.preference.barchart.R; /** * {@link View} for a single vertical bar with icon and summary. */ diff --git a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java index 922337a92f1814c8af97212196434058c10dda1a..4b6ca4ad48cafa341bf22830baf57b59d4b08e33 100644 --- a/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java +++ b/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java @@ -23,7 +23,7 @@ import androidx.annotation.IntRange; import androidx.annotation.Nullable; import java.util.Comparator; - +import com.android.settingslib.widget.preference.barchart.R; /** * A class responsible for saving bar view information. */ diff --git a/packages/SettingsLib/ButtonPreference/Android.bp b/packages/SettingsLib/ButtonPreference/Android.bp index 39f804fa9ae564a43633f00fb35af5a7c6dc289c..35572fad55a282d8d1106aa802af8db046ae8f1f 100644 --- a/packages/SettingsLib/ButtonPreference/Android.bp +++ b/packages/SettingsLib/ButtonPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibButtonPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/ButtonPreference/AndroidManifest.xml b/packages/SettingsLib/ButtonPreference/AndroidManifest.xml index 2d35c331cd824253796bdc51d76fafeadd643e56..f867707e8e083c512f463bc9b4f552068c0b62b4 100644 --- a/packages/SettingsLib/ButtonPreference/AndroidManifest.xml +++ b/packages/SettingsLib/ButtonPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.button"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java b/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java index 5364783b4c68a1f9fbe26014e6a06510f700e909..16ba96265751a44f7fed98cf5746a70e41bb7ae3 100644 --- a/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java +++ b/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java @@ -30,6 +30,8 @@ import androidx.annotation.GravityInt; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.button.R; + /** * A preference handled a button */ diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp index df43863fdd84bcacf31abab41f33c00eb7afd89d..70f7554d5e5353ceb16d5707605ba0dd36177564 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibCollapsingToolbarBaseActivity", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml index 51fc7ed646602b096990387a77f267d2266eb12c..dabba68321340cd783148ee6f90cc88a4086dfa4 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.collapsingtoolbar"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java index 3582897014fff95d8e94394ac1eb6f110f4598d8..8ebbac39d1d0bb0329f1e39f9b6bc69e3f6637d9 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java @@ -20,7 +20,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.preference.PreferenceFragmentCompat; import com.android.settingslib.utils.BuildCompatUtils; -import com.android.settingslib.widget.R; import com.google.android.material.appbar.AppBarLayout; diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java index dcc6e5a3724636f9a7c4d5786797e1db178acfa0..04c44e6d11bee177055391a7c184c83268dd52a7 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java @@ -27,7 +27,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.android.settingslib.utils.BuildCompatUtils; -import com.android.settingslib.widget.R; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; @@ -70,7 +69,7 @@ public class CollapsingToolbarAppCompatActivity extends AppCompatActivity { if (BuildCompatUtils.isAtLeastS()) { DynamicColors.applyToActivityIfAvailable(this); } - setTheme(R.style.Theme_SubSettingsBase); + setTheme(com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase); if (mCustomizeLayoutResId > 0 && !BuildCompatUtils.isAtLeastS()) { super.setContentView(mCustomizeLayoutResId); diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java index 19b7e8546805d2a1b8fa134bd04feadd5e9f6774..143101f7697770bf6fad91f9874fd5122b9cfd6e 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java @@ -28,7 +28,6 @@ import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; import com.android.settingslib.utils.BuildCompatUtils; -import com.android.settingslib.widget.R; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java index 1c2288acd3585e0fb95a4c175525a2aed0e7e584..155cfbbc6677ecc9c63a45cbe036c168a5ae5f9f 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java @@ -35,8 +35,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; -import com.android.settingslib.widget.R; - import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java index e4e34f8cae1e679aed4a0f9a7e43014483e73427..f70add9cc62d8cc9ea679776dc45e9187c0da30e 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java @@ -38,7 +38,7 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; -import com.android.settingslib.widget.R; +import com.android.settingslib.collapsingtoolbar.R; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; diff --git a/packages/SettingsLib/DeviceStateRotationLock/Android.bp b/packages/SettingsLib/DeviceStateRotationLock/Android.bp index 103309a43bb868e631ed0665d058203f256931d7..72df6cd58af584cc48c25dd0165a48ff85833ca9 100644 --- a/packages/SettingsLib/DeviceStateRotationLock/Android.bp +++ b/packages/SettingsLib/DeviceStateRotationLock/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibDeviceStateRotationLock", + use_resource_processor: true, srcs: [ "src/**/*.java", diff --git a/packages/SettingsLib/DisplayUtils/Android.bp b/packages/SettingsLib/DisplayUtils/Android.bp index 136f883ca70d2cc9c1b273fa4546279c376dcf5f..eab35a11d7d6da9dca3e43c249590298b8749079 100644 --- a/packages/SettingsLib/DisplayUtils/Android.bp +++ b/packages/SettingsLib/DisplayUtils/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibDisplayUtils", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/EmergencyNumber/Android.bp b/packages/SettingsLib/EmergencyNumber/Android.bp index 25b4905c438f4549ac1d8787edc729aa65084ffd..986baf70fa445fd6d791ec0cbbe35ed75aae7ba3 100644 --- a/packages/SettingsLib/EmergencyNumber/Android.bp +++ b/packages/SettingsLib/EmergencyNumber/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibEmergencyNumber", + use_resource_processor: true, srcs: ["src/**/*.java"], static_libs: [ diff --git a/packages/SettingsLib/EntityHeaderWidgets/Android.bp b/packages/SettingsLib/EntityHeaderWidgets/Android.bp index bd83cdce0078b3f5d3e126aec6c08e99eecdfbb9..17b662c60227a588aa76d4392f7205411b8a24fa 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/Android.bp +++ b/packages/SettingsLib/EntityHeaderWidgets/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibEntityHeaderWidgets", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/EntityHeaderWidgets/AndroidManifest.xml b/packages/SettingsLib/EntityHeaderWidgets/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..ad4d22d0e27644e7552415eebb69d7c854389916 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/AndroidManifest.xml +++ b/packages/SettingsLib/EntityHeaderWidgets/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.entityheader"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java index 6e95a0ed106add879c264f28bd39f313b356e341..d802e5b7a1453c5151985f29772ea77fe53eb8fd 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java +++ b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java @@ -30,6 +30,8 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; +import com.android.settingslib.widget.entityheader.R; + /** * This class is used to initialize view which was inflated * from {@link R.xml.app_entities_header.xml}. diff --git a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntityInfo.java b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntityInfo.java index 1e55f2e99bfc8f5693851dc71602ec5b776d3687..0439ff5dab96f4133871dba43c596f670a96c114 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntityInfo.java +++ b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntityInfo.java @@ -22,6 +22,8 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.settingslib.widget.entityheader.R; + /** * AppEntityInfo is responsible for storing app information shown in {@link R.xml.app_view.xml}. */ diff --git a/packages/SettingsLib/FooterPreference/Android.bp b/packages/SettingsLib/FooterPreference/Android.bp index 8b976bbb2c56c7038145a17df16b2be598ef01da..b45cd65467d29e3c30c6c1e185bb345195807ce3 100644 --- a/packages/SettingsLib/FooterPreference/Android.bp +++ b/packages/SettingsLib/FooterPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibFooterPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/FooterPreference/AndroidManifest.xml b/packages/SettingsLib/FooterPreference/AndroidManifest.xml index 96d9e518663f908ca73fc17210c124231ddc2df3..9046b109bb752a591ad88ea8d317ee72c4346471 100644 --- a/packages/SettingsLib/FooterPreference/AndroidManifest.xml +++ b/packages/SettingsLib/FooterPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.footer"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java index bf24c86b8d8b5246546e76fceb86f811e66cfb03..5b2fa1d2a1bb2912a5519455366bb32db850b371 100644 --- a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java +++ b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java @@ -30,6 +30,8 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.footer.R; + /** * A custom preference acting as "footer" of a page. It has a field for icon and text. It is added * to screen as the last preference. @@ -47,7 +49,7 @@ public class FooterPreference extends Preference { private FooterLearnMoreSpan mLearnMoreSpan; public FooterPreference(Context context, AttributeSet attrs) { - super(context, attrs, R.attr.footerPreferenceStyle); + super(context, attrs, com.android.settingslib.widget.theme.R.attr.footerPreferenceStyle); init(); } diff --git a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/LinkTextView.java b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/LinkTextView.java index 868feadf6b35e5f124c08573288f5d57a2e3fd1a..16d4475aaa07b2a7e2f42e8f7c5558b378ab5341 100644 --- a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/LinkTextView.java +++ b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/LinkTextView.java @@ -22,6 +22,8 @@ import android.text.style.ClickableSpan; import android.util.AttributeSet; import android.widget.TextView; +import com.android.settingslib.widget.preference.footer.R; + /** * Copied from setup wizard. This TextView performed two functions. The first is to make it so the * link behaves properly and becomes clickable. The second was that it made the link visible to diff --git a/packages/SettingsLib/HelpUtils/Android.bp b/packages/SettingsLib/HelpUtils/Android.bp index 13fcf8c7cbe3661a3bbe4f95945deeceea00ca65..041fce254b7228ce044c46615985f6fdf7d959d8 100644 --- a/packages/SettingsLib/HelpUtils/Android.bp +++ b/packages/SettingsLib/HelpUtils/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibHelpUtils", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/HelpUtils/AndroidManifest.xml b/packages/SettingsLib/HelpUtils/AndroidManifest.xml index ccad6e49ff8cb86257a610c429ce97162a6d1e1b..35c7515b60a0af7e740292ea42a1f85eadb16c13 100644 --- a/packages/SettingsLib/HelpUtils/AndroidManifest.xml +++ b/packages/SettingsLib/HelpUtils/AndroidManifest.xml @@ -16,6 +16,6 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.help"> </manifest> diff --git a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java index 70c8658a7f55bcf1f9d0cbb8cb60f99b785bcc8a..2c13695eb892a48c554984178e1d3b171d728848 100644 --- a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java +++ b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java @@ -36,7 +36,7 @@ import android.view.MenuItem.OnMenuItemClickListener; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; -import com.android.settingslib.widget.R; +import com.android.settingslib.widget.help.R; import java.net.URISyntaxException; import java.util.Locale; diff --git a/packages/SettingsLib/IllustrationPreference/Android.bp b/packages/SettingsLib/IllustrationPreference/Android.bp index 24ccab235fa1826f2b90e739389f3ec95256b6c2..4d4759b99f15fc823bd8273c09405c91fe9046a6 100644 --- a/packages/SettingsLib/IllustrationPreference/Android.bp +++ b/packages/SettingsLib/IllustrationPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibIllustrationPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/IllustrationPreference/AndroidManifest.xml b/packages/SettingsLib/IllustrationPreference/AndroidManifest.xml index 73163fca536281331d3a95ae119b4b701679fbbf..a0d10c383445104b514d18b2a4a7bf9693f0a4fe 100644 --- a/packages/SettingsLib/IllustrationPreference/AndroidManifest.xml +++ b/packages/SettingsLib/IllustrationPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.illustration"> <uses-sdk android:minSdkVersion="28" /> diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java index 37ae2d45e614a03192e3530bed13663697241ac6..f4d4dbadb37f047e02d983f64e0e2d03fbb9d7be 100644 --- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java +++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java @@ -42,6 +42,7 @@ import com.airbnb.lottie.LottieDrawable; import java.io.FileNotFoundException; import java.io.InputStream; +import com.android.settingslib.widget.preference.illustration.R; /** * IllustrationPreference is a preference that can play lottie format animation @@ -427,10 +428,10 @@ public class IllustrationPreference extends Preference { mIsAutoScale = false; if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, - R.styleable.LottieAnimationView, 0 /*defStyleAttr*/, 0 /*defStyleRes*/); - mImageResId = a.getResourceId(R.styleable.LottieAnimationView_lottie_rawRes, 0); + com.airbnb.lottie.R.styleable.LottieAnimationView, 0 /*defStyleAttr*/, 0 /*defStyleRes*/); + mImageResId = a.getResourceId(com.airbnb.lottie.R.styleable.LottieAnimationView_lottie_rawRes, 0); mCacheComposition = a.getBoolean( - R.styleable.LottieAnimationView_lottie_cacheComposition, true); + com.airbnb.lottie.R.styleable.LottieAnimationView_lottie_cacheComposition, true); a = context.obtainStyledAttributes(attrs, R.styleable.IllustrationPreference, 0 /*defStyleAttr*/, 0 /*defStyleRes*/); diff --git a/packages/SettingsLib/LayoutPreference/Android.bp b/packages/SettingsLib/LayoutPreference/Android.bp index c29e1f789fd343b210ec753c4cbbbfa593220b5d..53ded2385634d2885d25989cc1e1156952e57350 100644 --- a/packages/SettingsLib/LayoutPreference/Android.bp +++ b/packages/SettingsLib/LayoutPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibLayoutPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/LayoutPreference/AndroidManifest.xml b/packages/SettingsLib/LayoutPreference/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..a8427a1cbfb1ad65f378249d2b5452ccb4679ec6 100644 --- a/packages/SettingsLib/LayoutPreference/AndroidManifest.xml +++ b/packages/SettingsLib/LayoutPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.layout"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/LayoutPreference/src/com/android/settingslib/widget/LayoutPreference.java b/packages/SettingsLib/LayoutPreference/src/com/android/settingslib/widget/LayoutPreference.java index 2a635b0996e61f89b3c944cbed7f699e6870c67c..49f045f4423c3b12694ca124d7921b254111375b 100644 --- a/packages/SettingsLib/LayoutPreference/src/com/android/settingslib/widget/LayoutPreference.java +++ b/packages/SettingsLib/LayoutPreference/src/com/android/settingslib/widget/LayoutPreference.java @@ -102,16 +102,16 @@ public class LayoutPreference extends Preference { } private void init(Context context, AttributeSet attrs, int defStyleAttr) { - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Preference); - mAllowDividerAbove = TypedArrayUtils.getBoolean(a, R.styleable.Preference_allowDividerAbove, - R.styleable.Preference_allowDividerAbove, false); - mAllowDividerBelow = TypedArrayUtils.getBoolean(a, R.styleable.Preference_allowDividerBelow, - R.styleable.Preference_allowDividerBelow, false); + TypedArray a = context.obtainStyledAttributes(attrs, androidx.preference.R.styleable.Preference); + mAllowDividerAbove = TypedArrayUtils.getBoolean(a, androidx.preference.R.styleable.Preference_allowDividerAbove, + androidx.preference.R.styleable.Preference_allowDividerAbove, false); + mAllowDividerBelow = TypedArrayUtils.getBoolean(a, androidx.preference.R.styleable.Preference_allowDividerBelow, + androidx.preference.R.styleable.Preference_allowDividerBelow, false); a.recycle(); a = context.obtainStyledAttributes( - attrs, R.styleable.Preference, defStyleAttr, 0); - int layoutResource = a.getResourceId(R.styleable.Preference_android_layout, 0); + attrs, androidx.preference.R.styleable.Preference, defStyleAttr, 0); + int layoutResource = a.getResourceId(androidx.preference.R.styleable.Preference_android_layout, 0); if (layoutResource == 0) { throw new IllegalArgumentException("LayoutPreference requires a layout to be defined"); } @@ -124,7 +124,7 @@ public class LayoutPreference extends Preference { } private void setView(View view) { - setLayoutResource(R.layout.layout_preference_frame); + setLayoutResource(com.android.settingslib.widget.preference.layout.R.layout.layout_preference_frame); mRootView = view; setShouldDisableView(false); } diff --git a/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml b/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml index 6e0d82768148de1149dfd92953be5becbf72b3c1..4b3acbf2c39402874c0d87328531b78434bc7ce5 100644 --- a/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml +++ b/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml @@ -16,6 +16,6 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.mainswitch"> </manifest> diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java index d1703c31627d487fb74ba5f12c444d01f517d013..56b3eacf6c1faf27bb0bf057a8a74979a38dae7d 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java @@ -35,6 +35,8 @@ import com.android.settingslib.utils.BuildCompatUtils; import java.util.ArrayList; import java.util.List; +import com.android.settingslib.widget.mainswitch.R; + /** * MainSwitchBar is a View with a customized Switch. * This component is used as the main switch of the page diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java index 53cc268851e78d5ea491df9318bec7c605f1c395..11a680466ecf0564bb1446a2ba71fce3ffbe49b4 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java @@ -27,6 +27,8 @@ import androidx.preference.TwoStatePreference; import java.util.ArrayList; import java.util.List; +import com.android.settingslib.widget.mainswitch.R; + /** * MainSwitchPreference is a Preference with a customized Switch. * This component is used as the main switch of the page diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/OnMainSwitchChangeListener.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/OnMainSwitchChangeListener.java index 1c610d9995f6b4b0f7bcdb45da5c2af09b2f5504..03868f99663dcb32e867cc947e6c074aa2c20547 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/OnMainSwitchChangeListener.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/OnMainSwitchChangeListener.java @@ -18,6 +18,8 @@ package com.android.settingslib.widget; import android.widget.Switch; +import com.android.settingslib.widget.mainswitch.R; + /** * Called when the checked state of the Switch has changed. */ diff --git a/packages/SettingsLib/ProfileSelector/Android.bp b/packages/SettingsLib/ProfileSelector/Android.bp index 250cd755a6a6428bb55794cc1450cb7c3b40b4a8..155ed2e091f8681f2d701edec03ccfb5a4b93051 100644 --- a/packages/SettingsLib/ProfileSelector/Android.bp +++ b/packages/SettingsLib/ProfileSelector/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibProfileSelector", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/ProfileSelector/AndroidManifest.xml b/packages/SettingsLib/ProfileSelector/AndroidManifest.xml index a57469e39eb6fabcb0c2ab04ab454d6df49bbaed..80f6b76832693a22e904e77df1fab87fce686e37 100644 --- a/packages/SettingsLib/ProfileSelector/AndroidManifest.xml +++ b/packages/SettingsLib/ProfileSelector/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.profileselector"> <uses-sdk android:minSdkVersion="23" /> </manifest> diff --git a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java index ac426ed8b5d40352d80320fdc56fc4b8522c05d4..be5753beea4e795d5831e74fecf1d53f2975226d 100644 --- a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java +++ b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java @@ -27,6 +27,7 @@ import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; +import com.android.settingslib.widget.profileselector.R; /** * Base fragment class for profile settings. diff --git a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java index daf2564a674ec9329c471c4de29397a5daddf5d2..f5ab647429921d232b55ec0853e522a5d87be332 100644 --- a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java +++ b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java @@ -18,6 +18,7 @@ package com.android.settingslib.widget; import androidx.fragment.app.Fragment; import androidx.viewpager2.adapter.FragmentStateAdapter; +import com.android.settingslib.widget.profileselector.R; /** * ViewPager Adapter to handle between TabLayout and ViewPager2 diff --git a/packages/SettingsLib/ProgressBar/Android.bp b/packages/SettingsLib/ProgressBar/Android.bp index fb3c4e6efd90558c8582eaadd160fec04b29d1fa..d876573a7728105c24a5fe2e2d90361a92926a90 100644 --- a/packages/SettingsLib/ProgressBar/Android.bp +++ b/packages/SettingsLib/ProgressBar/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibProgressBar", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/ProgressBar/AndroidManifest.xml b/packages/SettingsLib/ProgressBar/AndroidManifest.xml index 256b8f3ea477200e2736294d8beb2d65690f1200..fbd6eb00feb68ce26a10398ab866f871614de11b 100644 --- a/packages/SettingsLib/ProgressBar/AndroidManifest.xml +++ b/packages/SettingsLib/ProgressBar/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.progressbar"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/RadioButtonPreference/Android.bp b/packages/SettingsLib/RadioButtonPreference/Android.bp index 1387daa959be902eae193f1b9964618170165ea8..505ba05c5f59b91bdbad0a0630641bc6d376e9fa 100644 --- a/packages/SettingsLib/RadioButtonPreference/Android.bp +++ b/packages/SettingsLib/RadioButtonPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibRadioButtonPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/RadioButtonPreference/AndroidManifest.xml b/packages/SettingsLib/RadioButtonPreference/AndroidManifest.xml index fda7fde294047d6169c80a5108862ee8b405f5fa..8b5c3b1b5652f1f361afc85c100604845b2df47d 100644 --- a/packages/SettingsLib/RadioButtonPreference/AndroidManifest.xml +++ b/packages/SettingsLib/RadioButtonPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.radio"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/RadioButtonPreference/src/com/android/settingslib/widget/RadioButtonPreference.java b/packages/SettingsLib/RadioButtonPreference/src/com/android/settingslib/widget/RadioButtonPreference.java index 02d3c06dcea2512b9bc8a80da550be19ea02c361..fc4b71430c5f27ab6769b4820b72d791c3d385d6 100644 --- a/packages/SettingsLib/RadioButtonPreference/src/com/android/settingslib/widget/RadioButtonPreference.java +++ b/packages/SettingsLib/RadioButtonPreference/src/com/android/settingslib/widget/RadioButtonPreference.java @@ -25,6 +25,8 @@ import android.widget.ImageView; import androidx.preference.CheckBoxPreference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.radio.R; + /** * DEPRECATED. Please use SelectorWithWidgetPreference instead. * diff --git a/packages/SettingsLib/RestrictedLockUtils/Android.bp b/packages/SettingsLib/RestrictedLockUtils/Android.bp index 6a8fef36a9694a296f5dd4ae2896b69e23e0c0c7..028489d22bdbb75435c4a3963f49c0e925cb98e2 100644 --- a/packages/SettingsLib/RestrictedLockUtils/Android.bp +++ b/packages/SettingsLib/RestrictedLockUtils/Android.bp @@ -15,6 +15,7 @@ filegroup { android_library { name: "SettingsLibRestrictedLockUtils", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/RestrictedLockUtils/AndroidManifest.xml b/packages/SettingsLib/RestrictedLockUtils/AndroidManifest.xml index 09756400b736c3c390a3f01de204b097629803f4..50a55a79fb3e16ab187c35e68fdde022e1035f0a 100644 --- a/packages/SettingsLib/RestrictedLockUtils/AndroidManifest.xml +++ b/packages/SettingsLib/RestrictedLockUtils/AndroidManifest.xml @@ -16,6 +16,6 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.restricted"> </manifest> \ No newline at end of file diff --git a/packages/SettingsLib/SchedulesProvider/Android.bp b/packages/SettingsLib/SchedulesProvider/Android.bp index c4373bb2dc1f179f9be2126c4a292c703b999522..2d93e4e3a925ab0e4de433c385b2cd2e7cc5adff 100644 --- a/packages/SettingsLib/SchedulesProvider/Android.bp +++ b/packages/SettingsLib/SchedulesProvider/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSchedulesProvider", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/SearchProvider/Android.bp b/packages/SettingsLib/SearchProvider/Android.bp index f96011ad5d09571fa2fc60abc69c5eb76514f7f7..c07a802f3ed5e0a333c5693281aa90c8bdbd1bac 100644 --- a/packages/SettingsLib/SearchProvider/Android.bp +++ b/packages/SettingsLib/SearchProvider/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSearchProvider", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/SearchProvider/AndroidManifest.xml b/packages/SettingsLib/SearchProvider/AndroidManifest.xml index 2c06673a56add9d0671a84eb6422530ffad6693e..7e2c47f420bd21d7254c95cc34a763e4ba30c8bd 100644 --- a/packages/SettingsLib/SearchProvider/AndroidManifest.xml +++ b/packages/SettingsLib/SearchProvider/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.search"> + package="com.android.settingslib.search.provider"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/SearchWidget/Android.bp b/packages/SettingsLib/SearchWidget/Android.bp index 5aaee2afc06926e99146b2e5032b439b7f2a90bc..ad9e16738e18062850eccb65076e2f8a0f39c6fe 100644 --- a/packages/SettingsLib/SearchWidget/Android.bp +++ b/packages/SettingsLib/SearchWidget/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSearchWidget", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/SearchWidget/AndroidManifest.xml b/packages/SettingsLib/SearchWidget/AndroidManifest.xml index 5798801fe5fad998bc706a6cc17bc0afb213a85e..5982b02902ccee7974149b6b5649f6dd703d2ad6 100644 --- a/packages/SettingsLib/SearchWidget/AndroidManifest.xml +++ b/packages/SettingsLib/SearchWidget/AndroidManifest.xml @@ -16,6 +16,6 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.search"> + package="com.android.settingslib.search.widget"> </manifest> diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp b/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp index b5a21bdae606f5b1a151d30aedfd512160b11183..702387ecadab39e4b6783b26de0e5ed5824c8d32 100644 --- a/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp +++ b/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSelectorWithWidgetPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/AndroidManifest.xml b/packages/SettingsLib/SelectorWithWidgetPreference/AndroidManifest.xml index 51fc7ed646602b096990387a77f267d2266eb12c..919d1a934ca0e14bf992f61d05a9839882696bf0 100644 --- a/packages/SettingsLib/SelectorWithWidgetPreference/AndroidManifest.xml +++ b/packages/SettingsLib/SelectorWithWidgetPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.selector"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java b/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java index 1d1316a48fd3128393c6dcf4dd84ab7c688622bc..f2ce8a965dfadbb7701d9bdba5bfd3952b58ffa0 100644 --- a/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java +++ b/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java @@ -25,6 +25,8 @@ import android.widget.ImageView; import androidx.preference.CheckBoxPreference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.selector.R; + /** * Selector preference (checkbox or radio button) with an optional additional widget. * diff --git a/packages/SettingsLib/SettingsSpinner/Android.bp b/packages/SettingsLib/SettingsSpinner/Android.bp index cbb570ece8b07a7076839636af981785ce0b1b30..0eec50563a7580a867b5749a5f7391e6ba8af01b 100644 --- a/packages/SettingsLib/SettingsSpinner/Android.bp +++ b/packages/SettingsLib/SettingsSpinner/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSettingsSpinner", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/SettingsSpinner/AndroidManifest.xml b/packages/SettingsLib/SettingsSpinner/AndroidManifest.xml index 4b9f1ab8d6cc81723bcc63da77681f3f82ddb978..123175c91cbc22afda3a509fa34005e0d9d5e5bd 100644 --- a/packages/SettingsLib/SettingsSpinner/AndroidManifest.xml +++ b/packages/SettingsLib/SettingsSpinner/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.spinner"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerAdapter.java b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerAdapter.java index 7288494beb217bba7cc1896c3f94ecc5436d9dd0..f33cacd36c6d6d936a238b32212aa132b4f247bb 100644 --- a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerAdapter.java +++ b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerAdapter.java @@ -22,7 +22,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; - +import com.android.settingslib.widget.spinner.R; /** * An ArrayAdapter which was used by Spinner with settings style. * @param <T> the data type to be loaded. diff --git a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java index 69528757c0e3c015fffc86761412be6343a077ec..63fe1b509751d010700bc28f7ff6af990e353c75 100644 --- a/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java +++ b/packages/SettingsLib/SettingsSpinner/src/com/android/settingslib/widget/SettingsSpinnerPreference.java @@ -25,6 +25,7 @@ import android.widget.Spinner; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.spinner.R; /** * This preference uses Spinner & SettingsSpinnerAdapter which provide default layouts for diff --git a/packages/SettingsLib/SettingsTheme/Android.bp b/packages/SettingsLib/SettingsTheme/Android.bp index e6fb720ba27f62d5df0dd0020c19adbef76b2712..996477cf7960c53cc41545ec9d65c2859afa6805 100644 --- a/packages/SettingsLib/SettingsTheme/Android.bp +++ b/packages/SettingsLib/SettingsTheme/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSettingsTheme", + use_resource_processor: true, resource_dirs: ["res"], static_libs: ["androidx.preference_preference"], sdk_version: "system_current", diff --git a/packages/SettingsLib/SettingsTheme/AndroidManifest.xml b/packages/SettingsLib/SettingsTheme/AndroidManifest.xml index fda7fde294047d6169c80a5108862ee8b405f5fa..56d137a8927a9696fde0e18f2b1ffc55f61b56ca 100644 --- a/packages/SettingsLib/SettingsTheme/AndroidManifest.xml +++ b/packages/SettingsLib/SettingsTheme/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.theme"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/SettingsTransition/Android.bp b/packages/SettingsLib/SettingsTransition/Android.bp index 48cc75d41285e907089f9d8010dedf33baff9632..06493c056203ca2ab39421ca5681ebbccb9beef7 100644 --- a/packages/SettingsLib/SettingsTransition/Android.bp +++ b/packages/SettingsLib/SettingsTransition/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibSettingsTransition", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/SettingsTransition/AndroidManifest.xml b/packages/SettingsLib/SettingsTransition/AndroidManifest.xml index 244b367423a47cd0d9a41ec4f8802ad1482a75f8..3e64d560c96c4935bae24cd354db8f1036a70536 100644 --- a/packages/SettingsLib/SettingsTransition/AndroidManifest.xml +++ b/packages/SettingsLib/SettingsTransition/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.transition"> <uses-sdk android:minSdkVersion="29" /> diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/editor/SettingsExposedDropdownMenuCheckBoxProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/editor/SettingsExposedDropdownMenuCheckBoxProvider.kt index 37c8eef8a90dba6109eabad9875f3449f44d4a1d..d28964676bdd70d1baa2686a2488c8c25e607cf4 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/editor/SettingsExposedDropdownMenuCheckBoxProvider.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/editor/SettingsExposedDropdownMenuCheckBoxProvider.kt @@ -37,7 +37,7 @@ object SettingsExposedDropdownMenuCheckBoxProvider : SettingsPageProvider { override val name = "SettingsExposedDropdownMenuCheckBox" private const val exposedDropdownMenuCheckBoxLabel = "ExposedDropdownMenuCheckBoxLabel" private val options = listOf("item1", "item2", "item3") - private val selectedOptionsState1 = mutableStateListOf("item1", "item2") + private val selectedOptionsState1 = mutableStateListOf(0, 1) override fun getTitle(arguments: Bundle?): String { return TITLE diff --git a/packages/SettingsLib/Spa/screenshot/Android.bp b/packages/SettingsLib/Spa/screenshot/Android.bp index 4e6b646da819e2178d9d082b1f1b9df07388abe8..bd508cbb9e2f8bf4c7b21cc3bd81ed65f60e2452 100644 --- a/packages/SettingsLib/Spa/screenshot/Android.bp +++ b/packages/SettingsLib/Spa/screenshot/Android.bp @@ -20,6 +20,7 @@ package { android_test { name: "SpaScreenshotTests", + use_resource_processor: true, test_suites: ["device-tests"], asset_dirs: ["assets"], diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBox.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBox.kt index a25818553c0559543054858ccd8c3ffe42bd0491..5d248e192c7a6845380d92a51cf6bc74997835a5 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBox.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBox.kt @@ -51,7 +51,8 @@ import com.android.settingslib.spa.framework.theme.SettingsTheme fun SettingsExposedDropdownMenuCheckBox( label: String, options: List<String>, - selectedOptionsState: SnapshotStateList<String>, + selectedOptionsState: SnapshotStateList<Int>, + emptyVal: String = "", enabled: Boolean, onSelectedOptionStateChange: () -> Unit, ) { @@ -70,7 +71,8 @@ fun SettingsExposedDropdownMenuCheckBox( modifier = Modifier .menuAnchor() .fillMaxWidth(), - value = selectedOptionsState.joinToString(", "), + value = if (selectedOptionsState.size == 0) emptyVal + else selectedOptionsState.joinToString { options[it] }, onValueChange = {}, label = { Text(text = label) }, trailingIcon = { @@ -89,19 +91,19 @@ fun SettingsExposedDropdownMenuCheckBox( .width(with(LocalDensity.current) { dropDownWidth.toDp() }), onDismissRequest = { expanded = false }, ) { - options.forEach { option -> + options.forEachIndexed { index, option -> TextButton( modifier = Modifier .fillMaxHeight() .fillMaxWidth(), onClick = { - if (selectedOptionsState.contains(option)) { + if (selectedOptionsState.contains(index)) { selectedOptionsState.remove( - option + index ) } else { selectedOptionsState.add( - option + index ) } onSelectedOptionStateChange() @@ -114,7 +116,7 @@ fun SettingsExposedDropdownMenuCheckBox( verticalAlignment = Alignment.CenterVertically ) { Checkbox( - checked = selectedOptionsState.contains(option), + checked = selectedOptionsState.contains(index), onCheckedChange = null, ) Text(text = option) @@ -130,7 +132,7 @@ fun SettingsExposedDropdownMenuCheckBox( @Composable private fun ActionButtonsPreview() { val options = listOf("item1", "item2", "item3") - val selectedOptionsState = remember { mutableStateListOf("item1", "item2") } + val selectedOptionsState = remember { mutableStateListOf(0, 1) } SettingsTheme { SettingsExposedDropdownMenuCheckBox( label = "label", diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBoxTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBoxTest.kt index b0271ae1d98cf602ce77a33987b1501e5d6d8c4b..2b78ed7d6fa21591dcf01657384faf4810f161e8 100644 --- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBoxTest.kt +++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/editor/SettingsExposedDropdownMenuCheckBoxTest.kt @@ -39,7 +39,7 @@ class SettingsExposedDropdownMenuCheckBoxTest { private val item2 = "item2" private val item3 = "item3" private val options = listOf(item1, item2, item3) - private val selectedOptionsState1 = mutableStateListOf(item1, item2) + private val selectedOptionsState1 = mutableStateListOf(0, 1) private val exposedDropdownMenuCheckBoxLabel = "ExposedDropdownMenuCheckBoxLabel" @Test diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt index a370ebfe21d58970e0938ce387cd7ed6356de546..f54de1514fcfd2006e3bbe21354e76b601306929 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt @@ -26,10 +26,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.settingslib.RestrictedLockUtils import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin import com.android.settingslib.RestrictedLockUtilsInternal -import com.android.settingslib.widget.R import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn +import com.android.settingslib.widget.restricted.R data class Restrictions( val userId: Int, diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt index ea83e1d0d3d115298128744d4bf90d2bb9f951a4..fc10a27cfa5b160f922c7fe6b820e4f21eb62353 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt @@ -72,7 +72,7 @@ class AppInfoProvider(private val packageInfo: PackageInfo) { private fun InstallType(app: ApplicationInfo) { if (!app.isInstantApp) return Spacer(modifier = Modifier.height(4.dp)) - SettingsBody(stringResource(com.android.settingslib.widget.R.string.install_type_instant)) + SettingsBody(stringResource(com.android.settingslib.widget.preference.app.R.string.install_type_instant)) } @Composable diff --git a/packages/SettingsLib/Tile/Android.bp b/packages/SettingsLib/Tile/Android.bp index cc570ccbb50694d0e566a946bebb72cdfde8905f..eb9e329b6a5938a2f971e203a9957837a4417874 100644 --- a/packages/SettingsLib/Tile/Android.bp +++ b/packages/SettingsLib/Tile/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibTile", + use_resource_processor: true, srcs: ["src/**/*.java"], diff --git a/packages/SettingsLib/TopIntroPreference/Android.bp b/packages/SettingsLib/TopIntroPreference/Android.bp index 5d09a1a926d8ab3e24d3a8c09368e144ed51da4f..77b7ac1246bd6900dba31afbb470aaace897bd99 100644 --- a/packages/SettingsLib/TopIntroPreference/Android.bp +++ b/packages/SettingsLib/TopIntroPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibTopIntroPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/TopIntroPreference/AndroidManifest.xml b/packages/SettingsLib/TopIntroPreference/AndroidManifest.xml index 96d9e518663f908ca73fc17210c124231ddc2df3..6cf643f7c708458de0962967c2da48e0c80500a4 100644 --- a/packages/SettingsLib/TopIntroPreference/AndroidManifest.xml +++ b/packages/SettingsLib/TopIntroPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.topintro"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.java b/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.java index 5a5a9b8ffadad9cbf58a8ab7668e4d85e247d713..1bbd76d86b7feb8b222f5101707c8e82bda996ca 100644 --- a/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.java +++ b/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.java @@ -22,6 +22,8 @@ import android.util.AttributeSet; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.topintro.R; + /** * The TopIntroPreference shows a text which describe a feature. Gernerally, we expect this * preference always shows on the top of screen. diff --git a/packages/SettingsLib/TwoTargetPreference/Android.bp b/packages/SettingsLib/TwoTargetPreference/Android.bp index a3e50a92c0af3744dd8b8e0050f8530575b2e7f3..5aa906ec0ab3ccf3b1a991f89b1703d4efd627f6 100644 --- a/packages/SettingsLib/TwoTargetPreference/Android.bp +++ b/packages/SettingsLib/TwoTargetPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibTwoTargetPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml b/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml index 120b0859a70aafd3d7845cff0e638c2f09b0c654..15e9368b52cdf8404fbeb418e9462482146c585b 100644 --- a/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml +++ b/packages/SettingsLib/TwoTargetPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.twotarget"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java b/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java index 9130662021d543dd36a8cbf240e048032a4fb9b9..b125f716fe52d91629339cf2d6475dd4c7233821 100644 --- a/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java +++ b/packages/SettingsLib/TwoTargetPreference/src/com/android/settingslib/widget/TwoTargetPreference.java @@ -26,6 +26,8 @@ import androidx.annotation.IntDef; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.twotarget.R; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SettingsLib/UsageProgressBarPreference/Android.bp b/packages/SettingsLib/UsageProgressBarPreference/Android.bp index ad6e7ab9f56454d7f4c0eafaae0f6388e92a7f44..4cc90ccbfe802fa4d246ba8119bbd107217a6693 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/Android.bp +++ b/packages/SettingsLib/UsageProgressBarPreference/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibUsageProgressBarPreference", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/UsageProgressBarPreference/AndroidManifest.xml b/packages/SettingsLib/UsageProgressBarPreference/AndroidManifest.xml index 51fc7ed646602b096990387a77f267d2266eb12c..1e9df9c3e3035ef382e7e722621da65d7504c28a 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/AndroidManifest.xml +++ b/packages/SettingsLib/UsageProgressBarPreference/AndroidManifest.xml @@ -16,7 +16,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib.widget"> + package="com.android.settingslib.widget.preference.usage"> <uses-sdk android:minSdkVersion="21" /> diff --git a/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java b/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java index 4eedab2f417c1a1a27a091a55164023c533d76fd..712f6f03a441d05d98926c5bfe52582bd5a5398b 100644 --- a/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java +++ b/packages/SettingsLib/UsageProgressBarPreference/src/com/android/settingslib/widget/UsageProgressBarPreference.java @@ -31,6 +31,8 @@ import android.widget.TextView; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.usage.R; + import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/packages/SettingsLib/Utils/Android.bp b/packages/SettingsLib/Utils/Android.bp index dc2b52d24462d495c4114d5a3f1b515ab4bafc78..c7ad24c6148c0b14bce2349ff268871504e816d8 100644 --- a/packages/SettingsLib/Utils/Android.bp +++ b/packages/SettingsLib/Utils/Android.bp @@ -9,6 +9,7 @@ package { android_library { name: "SettingsLibUtils", + use_resource_processor: true, srcs: ["src/**/*.java"], resource_dirs: ["res"], diff --git a/packages/SettingsLib/search/Android.bp b/packages/SettingsLib/search/Android.bp index 918d696fa4817146740a3956848babf79ace5eeb..202e7fe219de57ebf59f47441b6e84bcdcc732f9 100644 --- a/packages/SettingsLib/search/Android.bp +++ b/packages/SettingsLib/search/Android.bp @@ -16,6 +16,7 @@ java_library { android_library { name: "SettingsLib-search", + use_resource_processor: true, static_libs: [ "SettingsLib-search-interface", ], diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java index b1d1ea5eda42bfddfc4f0cf4130292ded7c5beec..758f090118ad12b9819aa70b5fca22854da9d048 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java @@ -126,10 +126,10 @@ public class RestrictedSwitchPreference extends SwitchPreference { switchSummary = isChecked() ? getUpdatableEnterpriseString( getContext(), ENABLED_BY_ADMIN_SWITCH_SUMMARY, - com.android.settingslib.widget.R.string.enabled_by_admin) + com.android.settingslib.widget.restricted.R.string.enabled_by_admin) : getUpdatableEnterpriseString( getContext(), DISABLED_BY_ADMIN_SWITCH_SUMMARY, - com.android.settingslib.widget.R.string.disabled_by_admin); + com.android.settingslib.widget.restricted.R.string.disabled_by_admin); } else { switchSummary = mRestrictedSwitchSummary; } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BroadcastDialog.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BroadcastDialog.java index f5257b0703921713567b527560441cc31930248b..8c0dc41f18afca75d585b49d51aec0f7dc4eca47 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BroadcastDialog.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BroadcastDialog.java @@ -47,7 +47,7 @@ public class BroadcastDialog extends AlertDialog { final Window window = getWindow(); window.setContentView(layout); window.setWindowAnimations( - com.android.settingslib.widget.R.style.Theme_AlertDialog_SettingsLib); + com.android.settingslib.widget.theme.R.style.Theme_AlertDialog_SettingsLib); TextView title = layout.findViewById(R.id.dialog_title); TextView subTitle = layout.findViewById(R.id.dialog_subtitle); diff --git a/packages/SettingsLib/src/com/android/settingslib/inputmethod/InputMethodPreference.java b/packages/SettingsLib/src/com/android/settingslib/inputmethod/InputMethodPreference.java index d53c3a7aafa6d6c7451cb7c7b14d10d4956f63b5..2999c838a866a3e3fbc1385af29ebfe2a06b48c6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/inputmethod/InputMethodPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/inputmethod/InputMethodPreference.java @@ -153,7 +153,7 @@ public class InputMethodPreference extends PrimarySwitchPreference } final ImageView icon = holder.itemView.findViewById(android.R.id.icon); final int iconSize = getContext().getResources().getDimensionPixelSize( - com.android.settingslib.widget.R.dimen.secondary_app_icon_size); + com.android.settingslib.widget.theme.R.dimen.secondary_app_icon_size); if (icon != null && iconSize > 0) { ViewGroup.LayoutParams params = icon.getLayoutParams(); params.height = iconSize; diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java index 2d6f0587fbf750d848c4bfd26c963d14dc8c4717..98272cc1dabd1f8dcac7feb02d5066551203e2e1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java @@ -167,8 +167,8 @@ public class AccessPointPreference extends Preference { ImageView frictionImageView = (ImageView) view.findViewById(R.id.friction_icon); bindFrictionImage(frictionImageView); - final View divider = - view.findViewById(com.android.settingslib.widget.R.id.two_target_divider); + final View divider = view.findViewById( + com.android.settingslib.widget.preference.twotarget.R.id.two_target_divider); divider.setVisibility(shouldShowDivider() ? View.VISIBLE : View.INVISIBLE); } diff --git a/packages/SettingsLib/tests/integ/Android.bp b/packages/SettingsLib/tests/integ/Android.bp index 8970debb3e2f603483c9bbdeb07016fa89c03f76..b03c43cbdee5ebaed620520ce64152c32431c587 100644 --- a/packages/SettingsLib/tests/integ/Android.bp +++ b/packages/SettingsLib/tests/integ/Android.bp @@ -23,6 +23,7 @@ package { android_test { name: "SettingsLibTests", + use_resource_processor: true, defaults: [ "SettingsLibDefaults", "framework-wifi-test-defaults", diff --git a/packages/SettingsLib/tests/integ/AndroidManifest.xml b/packages/SettingsLib/tests/integ/AndroidManifest.xml index 2a4dfdd84c63bbbde6c28093eb6d2615b307bfc0..a95da3033eae107ca1f5fb2e9920d7f9d6748eb9 100644 --- a/packages/SettingsLib/tests/integ/AndroidManifest.xml +++ b/packages/SettingsLib/tests/integ/AndroidManifest.xml @@ -15,7 +15,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.settingslib"> + package="com.android.settingslib.tests.integ"> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> <uses-permission android:name="android.permission.MANAGE_USERS" /> diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java index b81d13d985e465822ac46bc2668c375270c557f8..c8b20c1753b9cc44d9019f1322075d9bde124a02 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/SettingsSpinnerPreferenceTest.java @@ -28,6 +28,8 @@ import androidx.preference.PreferenceViewHolder; import androidx.test.core.app.ApplicationProvider; import androidx.test.runner.AndroidJUnit4; +import com.android.settingslib.widget.spinner.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java index a9ad00d90ab8857ce501c44df114486006219841..a66d3fbee77c245f16a2096d82030726d52f00fc 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/widget/UsageProgressBarPreferenceTest.java @@ -35,6 +35,8 @@ import androidx.preference.PreferenceViewHolder; import androidx.test.core.app.ApplicationProvider; import androidx.test.runner.AndroidJUnit4; +import com.android.settingslib.widget.preference.usage.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/Android.bp b/packages/SettingsLib/tests/robotests/Android.bp index c037c400948f75c68b195553b1b4f951cff1f351..dd9cb9cf7abe45300d1c07147fd8cb142f60e26c 100644 --- a/packages/SettingsLib/tests/robotests/Android.bp +++ b/packages/SettingsLib/tests/robotests/Android.bp @@ -27,6 +27,7 @@ package { android_app { name: "SettingsLibShell", + use_resource_processor: true, defaults: ["SettingsLibDefaults"], platform_apis: true, diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java index 4811d9507c8d3ec52673e8ff970bd9a6b9405a66..e1577e03ab5f81dbd3fab91615f1d4f7f1aa36fe 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java @@ -182,14 +182,14 @@ public class HelpUtilsTest { final Menu item = mock(Menu.class); when(item.findItem(MENU_HELP)).thenReturn(null); when(item.add(0, MENU_HELP, 0, - com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn( + com.android.settingslib.widget.help.R.string.help_feedback_label)).thenReturn( mock(MenuItem.class)); HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url"); HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url"); verify(item, times(2)).add(0, MENU_HELP, 0, - com.android.settingslib.widget.R.string.help_feedback_label); + com.android.settingslib.widget.help.R.string.help_feedback_label); } @Test @@ -197,13 +197,13 @@ public class HelpUtilsTest { final Menu item = mock(Menu.class); when(item.findItem(MENU_HELP)).thenReturn(mock(MenuItem.class)); when(item.add(0, MENU_HELP, 0, - com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn( + com.android.settingslib.widget.help.R.string.help_feedback_label)).thenReturn( mock(MenuItem.class)); HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url"); HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url"); verify(item, never()).add(0, MENU_HELP, 0, - com.android.settingslib.widget.R.string.help_feedback_label); + com.android.settingslib.widget.help.R.string.help_feedback_label); } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/PrimarySwitchPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/PrimarySwitchPreferenceTest.java index 32a16716d9f9bf02e902e3f5cc912d9e4abcf0a2..d9cf9f2851640f4e82551b475fff0ae5858527d3 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/PrimarySwitchPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/PrimarySwitchPreferenceTest.java @@ -54,7 +54,8 @@ public class PrimarySwitchPreferenceTest { mPreference = new PrimarySwitchPreference(mContext); LayoutInflater inflater = LayoutInflater.from(mContext); mHolder = PreferenceViewHolder.createInstanceForTests(inflater.inflate( - com.android.settingslib.widget.R.layout.preference_two_target, null)); + com.android.settingslib.widget.preference.twotarget.R.layout.preference_two_target, + null)); mWidgetView = mHolder.itemView.findViewById(android.R.id.widget_frame); inflater.inflate(R.layout.preference_widget_primary_switch, mWidgetView, true); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayoutTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayoutTest.java index ff84dc92037fdfa76a94daf1ea8eea0a395bc711..2b1e8080d389b569cf04b00ac2347bff320bb6c2 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayoutTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayoutTest.java @@ -24,7 +24,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.android.settingslib.R; +import com.android.settingslib.collapsingtoolbar.R; import org.junit.Before; import org.junit.Test; @@ -58,7 +58,7 @@ public class CollapsingCoordinatorLayoutTest { View contentFrameView = layout.findViewById(com.android.settingslib.widget.R.id.content_frame); - TextView textView = contentFrameView.findViewById(R.id.text_hello_world); + TextView textView = contentFrameView.findViewById(com.android.settingslib.robotests.R.id.text_hello_world); assertThat(textView).isNotNull(); assertThat(textView.getText().toString()).isEqualTo(TEXT_HELLO_WORLD); @@ -80,8 +80,8 @@ public class CollapsingCoordinatorLayoutTest { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_Light_NoTitleBar); - setContentView(R.layout.collapsing_test_layout); - mCollapsingCoordinatorLayout = findViewById(R.id.id_collapsing_test); + setContentView(com.android.settingslib.robotests.R.layout.collapsing_test_layout); + mCollapsingCoordinatorLayout = findViewById(com.android.settingslib.robotests.R.id.id_collapsing_test); } public CollapsingCoordinatorLayout getCollapsingCoordinatorLayout() { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ActionButtonsPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ActionButtonsPreferenceTest.java index 9f31ceff72302415554aa9449dad0fda339d5013..6d9261d81cd6ae62b0483325ceac3a1d63599753 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ActionButtonsPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ActionButtonsPreferenceTest.java @@ -31,6 +31,8 @@ import android.widget.Button; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.actionbuttons.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,10 +57,10 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setTitle_shouldShowButtonByDefault() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton2Text(R.string.install_other_apps); - mPref.setButton3Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -107,10 +109,10 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setVisibleIsGoneAndSetTitle_shouldNotShowButton() { - mPref.setButton1Text(R.string.install_other_apps).setButton1Visible(false); - mPref.setButton2Text(R.string.install_other_apps).setButton2Visible(false); - mPref.setButton3Text(R.string.install_other_apps).setButton3Visible(false); - mPref.setButton4Text(R.string.install_other_apps).setButton4Visible(false); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps).setButton1Visible(false); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps).setButton2Visible(false); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps).setButton3Visible(false); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps).setButton4Visible(false); mPref.onBindViewHolder(mHolder); @@ -145,10 +147,10 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setVisibility_shouldUpdateButtonVisibility() { - mPref.setButton1Text(R.string.install_other_apps).setButton1Visible(false); - mPref.setButton2Text(R.string.install_other_apps).setButton2Visible(false); - mPref.setButton3Text(R.string.install_other_apps).setButton3Visible(false); - mPref.setButton4Text(R.string.install_other_apps).setButton4Visible(false); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps).setButton1Visible(false); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps).setButton2Visible(false); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps).setButton3Visible(false); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps).setButton4Visible(false); mPref.onBindViewHolder(mHolder); @@ -195,26 +197,26 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setText_shouldShowSameText() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton2Text(R.string.install_other_apps); - mPref.setButton3Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); assertThat(((Button) mRootView.findViewById(R.id.button1)).getText()) - .isEqualTo(mContext.getText(R.string.install_other_apps)); + .isEqualTo(mContext.getText(com.android.settingslib.R.string.install_other_apps)); assertThat(((Button) mRootView.findViewById(R.id.button2)).getText()) - .isEqualTo(mContext.getText(R.string.install_other_apps)); + .isEqualTo(mContext.getText(com.android.settingslib.R.string.install_other_apps)); assertThat(((Button) mRootView.findViewById(R.id.button3)).getText()) - .isEqualTo(mContext.getText(R.string.install_other_apps)); + .isEqualTo(mContext.getText(com.android.settingslib.R.string.install_other_apps)); assertThat(((Button) mRootView.findViewById(R.id.button4)).getText()) - .isEqualTo(mContext.getText(R.string.install_other_apps)); + .isEqualTo(mContext.getText(com.android.settingslib.R.string.install_other_apps)); } @Test public void onBindViewHolder_setButtonIcon_iconMustDisplayAboveText() { - mPref.setButton1Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); mPref.setButton1Icon(com.android.internal.R.drawable.ic_plus); mPref.onBindViewHolder(mHolder); @@ -227,7 +229,7 @@ public class ActionButtonsPreferenceTest { @Test public void setButtonIcon_iconResourceIdIsZero_shouldNotDisplayIcon() { - mPref.setButton1Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); mPref.setButton1Icon(0); mPref.onBindViewHolder(mHolder); @@ -240,7 +242,7 @@ public class ActionButtonsPreferenceTest { @Test public void setButtonIcon_iconResourceIdNotExisting_shouldNotDisplayIconAndCrash() { - mPref.setButton1Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); mPref.setButton1Icon(999999999 /* not existing id */); // Should not crash here mPref.onBindViewHolder(mHolder); @@ -253,10 +255,10 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setAllButton_shouldShowAllDivider() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton2Text(R.string.install_other_apps); - mPref.setButton3Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -270,9 +272,9 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setAllButtonWithoutButton2_shouldHideDivider1() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton3Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -286,9 +288,9 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setAllButtonWithoutButton3_shouldHideDivider2() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton2Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -302,8 +304,8 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setButton1And4_shouldShowDivider3Only() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -317,7 +319,7 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setOneButtonOnly_noDivider() { - mPref.setButton4Text(R.string.install_other_apps); + mPref.setButton4Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -331,8 +333,8 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setButton1And2_shouldShowDivider1Only() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton2Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton2Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); @@ -346,8 +348,8 @@ public class ActionButtonsPreferenceTest { @Test public void onBindViewHolder_setButton1And3_shouldShowDivider2Only() { - mPref.setButton1Text(R.string.install_other_apps); - mPref.setButton3Text(R.string.install_other_apps); + mPref.setButton1Text(com.android.settingslib.R.string.install_other_apps); + mPref.setButton3Text(com.android.settingslib.R.string.install_other_apps); mPref.onBindViewHolder(mHolder); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java index 10862403ae706077b7a357f1b554a46ca3b58067..6195d754f8f07b1ab57aef5f4f3360724e42ecf9 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java @@ -36,7 +36,7 @@ import android.graphics.drawable.Icon; import android.graphics.drawable.ShapeDrawable; import android.os.Bundle; -import com.android.settingslib.R; +import com.android.settingslib.widget.adaptiveicon.R; import com.android.settingslib.drawer.ActivityTile; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.Tile; @@ -87,7 +87,7 @@ public class AdaptiveIconTest { public void setBackgroundColor_externalTileWithBackgroundColorRawValue_shouldUpdateIcon() { final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB, 0xff0000); - doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) + doReturn(Icon.createWithResource(mContext, com.android.settingslib.R.drawable.ic_system_update)) .when(tile).getIcon(mContext); final AdaptiveIcon icon = new AdaptiveIcon(mContext, new ColorDrawable(Color.BLACK)); @@ -99,7 +99,7 @@ public class AdaptiveIconTest { @Test public void setBackgroundColor_tileWithoutBackgroundColor_shouldSetDefaultBackgroundColor() { final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); - doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) + doReturn(Icon.createWithResource(mContext, com.android.settingslib.R.drawable.ic_system_update)) .when(tile).getIcon(mContext); final AdaptiveIcon icon = new AdaptiveIcon(mContext, new ColorDrawable(Color.BLACK)); @@ -114,7 +114,7 @@ public class AdaptiveIconTest { final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, com.android.settingslib.widget.R.color.bt_outline_color); - doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) + doReturn(Icon.createWithResource(mContext, com.android.settingslib.R.drawable.ic_system_update)) .when(tile).getIcon(mContext); final AdaptiveIcon icon = diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveOutlineDrawableTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveOutlineDrawableTest.java index b2bc53dda1fa8691c5885e35bb2588c0e4867f16..943b9944af40a818710aafc81007db21025deb05 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveOutlineDrawableTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveOutlineDrawableTest.java @@ -21,6 +21,8 @@ import static com.google.common.truth.Truth.assertThat; import android.content.res.Resources; import android.graphics.Paint; +import com.android.settingslib.widget.adaptiveicon.R; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java index c9b066a5768e70afa1a62d6fc210c2b389516292..172c1785c01b13b7b78e9cc57d6bb966a4b83a2d 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java @@ -24,6 +24,8 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import com.android.settingslib.widget.entityheader.R; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -69,18 +71,18 @@ public class AppEntitiesHeaderControllerTest { @Test public void setHeaderTitleRes_setTextRes_shouldSetToTitleView() { - mController.setHeaderTitleRes(R.string.expand_button_title).apply(); + mController.setHeaderTitleRes(androidx.preference.R.string.expand_button_title).apply(); final TextView view = mAppEntitiesHeaderView.findViewById(R.id.header_title); - assertThat(view.getText()).isEqualTo(mContext.getText(R.string.expand_button_title)); + assertThat(view.getText()).isEqualTo(mContext.getText(androidx.preference.R.string.expand_button_title)); } @Test public void setHeaderDetailsRes_setTextRes_shouldSetToDetailsView() { - mController.setHeaderDetailsRes(R.string.expand_button_title).apply(); + mController.setHeaderDetailsRes(androidx.preference.R.string.expand_button_title).apply(); final TextView view = mAppEntitiesHeaderView.findViewById(R.id.header_details); - assertThat(view.getText()).isEqualTo(mContext.getText(R.string.expand_button_title)); + assertThat(view.getText()).isEqualTo(mContext.getText(androidx.preference.R.string.expand_button_title)); } @Test @@ -93,7 +95,7 @@ public class AppEntitiesHeaderControllerTest { @Test public void setHeaderDetails_detailsTextAndResBothSet_shouldSetTextToDetailsView() { - mController.setHeaderDetailsRes(R.string.expand_button_title); + mController.setHeaderDetailsRes(androidx.preference.R.string.expand_button_title); mController.setHeaderDetails(TITLE).apply(); final TextView view = mAppEntitiesHeaderView.findViewById(R.id.header_details); @@ -206,7 +208,7 @@ public class AppEntitiesHeaderControllerTest { @Test public void apply_noAppEntitySet_shouldOnlyShowTitleAndEmptyView() { - mController.setHeaderTitleRes(R.string.expand_button_title) + mController.setHeaderTitleRes(androidx.preference.R.string.expand_button_title) .setAppEntity(0, mAppEntityInfo) .setAppEntity(1, mAppEntityInfo) .setAppEntity(2, mAppEntityInfo).apply(); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppHeaderPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppHeaderPreferenceTest.java index e2b242c97e0edc61f5936af3112a148bffc35636..9112f6bc69a5a8ee1b58bdab63df924200a41e3f 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppHeaderPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppHeaderPreferenceTest.java @@ -24,7 +24,7 @@ import android.widget.TextView; import androidx.preference.PreferenceViewHolder; - +import com.android.settingslib.widget.preference.app.R; import org.junit.Before; import org.junit.Test; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppPreferenceTest.java index 9e265a45a8f256e5bcea02a31b529d860da3c9e5..6c8fd50d18968e3ee7281a1d83d18afea194d586 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppPreferenceTest.java @@ -23,6 +23,8 @@ import android.view.View; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.app.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -56,7 +58,7 @@ public class AppPreferenceTest { @Test public void foobar_testName() { - float iconSize = mContext.getResources().getDimension(R.dimen.secondary_app_icon_size); + float iconSize = mContext.getResources().getDimension(com.android.settingslib.widget.theme.R.dimen.secondary_app_icon_size); assertThat(Float.floatToIntBits(iconSize)).isEqualTo(Float.floatToIntBits(32)); } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BannerMessagePreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BannerMessagePreferenceTest.java index 0d889139e8b4ad7b14b39979f2df237804250f96..721e69d2eb8dc24886b72676fe1ade093e2a6e03 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BannerMessagePreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BannerMessagePreferenceTest.java @@ -39,7 +39,7 @@ import android.widget.TextView; import androidx.annotation.ColorRes; import androidx.preference.PreferenceViewHolder; -import androidx.preference.R; +import com.android.settingslib.widget.preference.banner.R; import com.android.settingslib.testutils.OverpoweredReflectionHelper; @@ -65,7 +65,7 @@ public class BannerMessagePreferenceTest { private final View.OnClickListener mClickListener = v -> mClickListenerCalled = true; private final int mMinimumTargetSize = RuntimeEnvironment.application.getResources() - .getDimensionPixelSize(R.dimen.settingslib_preferred_minimum_touch_target); + .getDimensionPixelSize(com.android.settingslib.widget.theme.R.dimen.settingslib_preferred_minimum_touch_target); private static final int TEST_STRING_RES_ID = R.string.accessibility_banner_message_dismiss; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java index 567d90fa89164251ba7e599bcc8f235efa076689..ae6573e599cec28091aa6c42f355a169a92a2080 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java @@ -26,6 +26,8 @@ import android.widget.TextView; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.barchart.R; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -71,9 +73,9 @@ public class BarChartPreferenceTest { mDetailsView = mBarChartView.findViewById(R.id.bar_chart_details); mBarChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) - .setDetails(R.string.debug_app) - .setEmptyText(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) + .setDetails(com.android.settingslib.R.string.debug_app) + .setEmptyText(com.android.settingslib.R.string.debug_app) .setDetailsOnClickListener(v -> { }) .build(); @@ -82,21 +84,21 @@ public class BarChartPreferenceTest { @Test public void initializeBarChart_titleSet_shouldSetTitleInChartView() { final BarChartInfo barChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) .build(); mPreference.initializeBarChart(barChartInfo); mPreference.onBindViewHolder(mHolder); assertThat(mTitleView.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mTitleView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); + assertThat(mTitleView.getText()).isEqualTo(mContext.getText(com.android.settingslib.R.string.debug_app)); } @Test public void initializeBarChart_noBarViewSet_shouldShowTitleAndEmptyView() { final BarChartInfo barChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) - .setEmptyText(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) + .setEmptyText(com.android.settingslib.R.string.debug_app) .build(); mPreference.initializeBarChart(barChartInfo); @@ -113,11 +115,11 @@ public class BarChartPreferenceTest { @Test public void initializeBarChart_detailsSet_shouldShowBarChartDetailsView() { final BarChartInfo barChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) - .setDetails(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) + .setDetails(com.android.settingslib.R.string.debug_app) .addBarViewInfo( new BarViewInfo(mIcon, 10, null /* title */, - mContext.getText(R.string.debug_app) /* summary */, + mContext.getText(com.android.settingslib.R.string.debug_app) /* summary */, null /* contentDescription */)) .build(); @@ -125,17 +127,17 @@ public class BarChartPreferenceTest { mPreference.onBindViewHolder(mHolder); assertThat(mDetailsView.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mDetailsView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); + assertThat(mDetailsView.getText()).isEqualTo(mContext.getText(com.android.settingslib.R.string.debug_app)); } @Test public void initializeBarChart_detailsNotSet_shouldHideBarChartDetailsView() { // We don't call BarChartInfo.Builder#setDetails yet. final BarChartInfo barChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) .addBarViewInfo( new BarViewInfo(mIcon, 10, null /* title */, - mContext.getText(R.string.debug_app) /* summary */, + mContext.getText(com.android.settingslib.R.string.debug_app) /* summary */, null /* contentDescription */)) .build(); @@ -148,13 +150,13 @@ public class BarChartPreferenceTest { @Test public void initializeBarChart_clickListenerSet_shouldSetClickListenerOnDetailsView() { final BarChartInfo barChartInfo = new BarChartInfo.Builder() - .setTitle(R.string.debug_app) - .setDetails(R.string.debug_app) + .setTitle(com.android.settingslib.R.string.debug_app) + .setDetails(com.android.settingslib.R.string.debug_app) .setDetailsOnClickListener(v -> { }) .addBarViewInfo( new BarViewInfo(mIcon, 10, null /* title */, - mContext.getText(R.string.debug_app) /* summary */, + mContext.getText(com.android.settingslib.R.string.debug_app) /* summary */, null /* contentDescription */)) .build(); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ButtonPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ButtonPreferenceTest.java index d78f8e7e4e9b94f30b99e0b9eb697009b5666b37..f3fe5172b46ad75dc9d41768aeb6422ae0904757 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ButtonPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/ButtonPreferenceTest.java @@ -68,14 +68,14 @@ public class ButtonPreferenceTest { @Test public void onBindViewHolder_whenIconSet_shouldSetIcon() { - mPreference.setIcon(R.drawable.settingslib_ic_cross); + mPreference.setIcon(com.android.settingslib.widget.preference.banner.R.drawable.settingslib_ic_cross); mPreference.onBindViewHolder(mHolder); final Button button = mPreference.getButton(); final Drawable icon = button.getCompoundDrawablesRelative()[0]; final ShadowDrawable shadowDrawable = shadowOf(icon); - assertThat(shadowDrawable.getCreatedFromResId()).isEqualTo(R.drawable.settingslib_ic_cross); + assertThat(shadowDrawable.getCreatedFromResId()).isEqualTo(com.android.settingslib.widget.preference.banner.R.drawable.settingslib_ic_cross); } @Test diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java index a26f200ec603e14e36ab8cfc561003b918d056fe..ccbe4f03e80c41ba97ee6d263a064f91c588a4b9 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java @@ -28,7 +28,7 @@ import android.widget.TextView; import androidx.preference.PreferenceViewHolder; -import com.android.settingslib.R; +import com.android.settingslib.widget.preference.footer.R; import org.junit.Before; import org.junit.Test; @@ -96,7 +96,7 @@ public class FooterPreferenceTest { public void onBindViewHolder_whenTitleIsNull_shouldNotRaiseNpe() { PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests( LayoutInflater.from(mContext) - .inflate(com.android.settingslib.widget.R.layout.preference_footer, null))); + .inflate(R.layout.preference_footer, null))); when(viewHolder.findViewById(androidx.core.R.id.title)).thenReturn(null); Throwable actualThrowable = null; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java index 21e119a48f7bc6025f3ee759f44f7c4ca42ab2b8..6590bbdcdae6ce707e5972cc8989821c04046c6b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/IllustrationPreferenceTest.java @@ -39,6 +39,8 @@ import android.widget.ImageView; import androidx.preference.PreferenceViewHolder; import androidx.test.core.app.ApplicationProvider; +import com.android.settingslib.widget.preference.illustration.R; + import com.airbnb.lottie.LottieAnimationView; import org.junit.Before; @@ -49,6 +51,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; + @RunWith(RobolectricTestRunner.class) public class IllustrationPreferenceTest { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/LayoutPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/LayoutPreferenceTest.java index 99261a38f73be2bbbe7583203e504e733e81fd6b..58817fbd272a7c57dba48b4997dfeb57c3c53257 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/LayoutPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/LayoutPreferenceTest.java @@ -27,6 +27,8 @@ import android.view.LayoutInflater; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.layout.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchBarTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchBarTest.java index 24037caf4e6c51028d9d0cd24cabf8bf590034ed..942e91525f02c5d38524b4d99dbf54949a8a03a1 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchBarTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchBarTest.java @@ -26,6 +26,8 @@ import android.view.View; import android.widget.Switch; import android.widget.TextView; +import com.android.settingslib.widget.mainswitch.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchPreferenceTest.java index e58c04a3b435f2fc3770d84355f7a575d1423414..c2e81bd7d54cb5668652182ffe9b45d691648fca 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/MainSwitchPreferenceTest.java @@ -24,6 +24,8 @@ import android.widget.TextView; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.mainswitch.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/RadioButtonPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/RadioButtonPreferenceTest.java index a5028ff30d730458883c16fb52dc33e000e1f18f..0f708cdb9992386fd74dd75e42512981ac07e58b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/RadioButtonPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/RadioButtonPreferenceTest.java @@ -28,6 +28,8 @@ import android.view.View; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.radio.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/SelectorWithWidgetPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/SelectorWithWidgetPreferenceTest.java index 34efe82f2527111e255f261a12b9388a29698d90..60885f1079d3fe1e30f8dff5c5bad9a7a4a18982 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/SelectorWithWidgetPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/SelectorWithWidgetPreferenceTest.java @@ -28,6 +28,8 @@ import android.view.View; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.selector.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java index 23b4c2aec80f10f0457714ad2851a3d06da056d1..3befddab2db5da388bbdc1995e2a37a3a3c985e1 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/TwoTargetPreferenceTest.java @@ -32,6 +32,8 @@ import android.widget.LinearLayout; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.preference.twotarget.R; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SettingsLib/tests/unit/Android.bp b/packages/SettingsLib/tests/unit/Android.bp index a4558f1bd40bf41c93f65cb35e85b41097b33a3e..19ab1c69e98c60fa3fcd37cbae21ab4bd93f20ac 100644 --- a/packages/SettingsLib/tests/unit/Android.bp +++ b/packages/SettingsLib/tests/unit/Android.bp @@ -20,6 +20,7 @@ package { android_test { name: "SettingsLibUnitTests", + use_resource_processor: true, test_suites: ["device-tests"], srcs: [ diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 15620b7023e2984a7a9caca63440dfccfd24a786..11ae9c35898b13bd9d464960c1f1fbfc4d2723d3 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -206,6 +206,7 @@ <uses-permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY" /> <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" /> <uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" /> + <uses-permission android:name="android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS" /> <uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" /> <uses-permission android:name="android.permission.WHITELIST_RESTRICTED_PERMISSIONS" /> <!-- Permission required for processes that don't own the focused window to switch diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 608010156fcf0b9fff47ffd9b5964bc0000ec61f..5e7e044947fd48567f53a5816547f9b4cdf501d5 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -116,6 +116,7 @@ filegroup { //Create a library to expose SystemUI's resources to other modules. android_library { name: "SystemUI-res", + use_resource_processor: true, resource_dirs: [ "res-product", "res-keyguard", @@ -149,13 +150,9 @@ android_library { exclude_srcs: [":ReleaseJavaFiles"], }, }, - resource_dirs: [ - "res-product", - "res-keyguard", - "res", - ], use_resource_processor: true, static_libs: [ + "SystemUI-res", "WifiTrackerLib", "WindowManager-Shell", "SystemUIAnimationLib", @@ -380,14 +377,13 @@ java_library { android_library { name: "SystemUI-tests-base", + use_resource_processor: true, manifest: "tests/AndroidManifest-base.xml", resource_dirs: [ "tests/res", - "res-product", - "res-keyguard", - "res", ], static_libs: [ + "SystemUI-res", "WifiTrackerLib", "SystemUIAnimationLib", "SystemUIPluginLib", @@ -442,6 +438,7 @@ android_library { android_library { name: "SystemUI-tests", + use_resource_processor: true, defaults: [ "SystemUI_compose_defaults", ], @@ -485,6 +482,7 @@ android_library { android_app { name: "SystemUIRobo-stub", + use_resource_processor: true, defaults: [ "platform_app_defaults", "SystemUI_optimized_defaults", diff --git a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp index ff723e34d6bcfb7200348557a2e6769c49120815..8b12f3c738cc379c0e7ee9eb107311ec3ba3d5a8 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp +++ b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp @@ -29,6 +29,7 @@ filegroup { android_app { name: "AccessibilityMenu", + use_resource_processor: true, static_libs: [ "androidx.coordinatorlayout_coordinatorlayout", diff --git a/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp index 1757dda84eef41d8c56a8ab6feb56e3c57d2493b..538ecb3d438d512c3cf167b31a3efee9e75fa9b0 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp +++ b/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp @@ -20,6 +20,7 @@ package { android_test { name: "AccessibilityMenuServiceTests", + use_resource_processor: true, certificate: "platform", libs: [ "android.test.runner", diff --git a/packages/SystemUI/animation/Android.bp b/packages/SystemUI/animation/Android.bp index 6f53b42371c65d298c3579e21958e3cc74bf9bab..8438051e3430aa44d5b9c63e4358b30e25fb86ec 100644 --- a/packages/SystemUI/animation/Android.bp +++ b/packages/SystemUI/animation/Android.bp @@ -24,6 +24,7 @@ package { android_library { name: "SystemUIAnimationLib", + use_resource_processor: true, srcs: [ "src/**/*.java", @@ -52,6 +53,7 @@ android_library { android_library { name: "SystemUIShaderLib", + use_resource_processor: true, srcs: [ "src/com/android/systemui/surfaceeffects/**/*.java", diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt index 1b56d4a201d981d93b732a2fa1980becb21f5415..0f2e4bace46d552f48ba417f19ed1741d45ade22 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt @@ -25,6 +25,7 @@ import android.graphics.Path import android.graphics.Rect import android.graphics.RectF import android.os.Build +import android.os.Handler import android.os.Looper import android.os.RemoteException import android.util.Log @@ -58,7 +59,14 @@ class ActivityLaunchAnimator( /** The animator used when animating a Dialog into an app. */ // TODO(b/218989950): Remove this animator and instead set the duration of the dim fade out to // TIMINGS.contentBeforeFadeOutDuration. - private val dialogToAppAnimator: LaunchAnimator = DEFAULT_DIALOG_TO_APP_ANIMATOR + private val dialogToAppAnimator: LaunchAnimator = DEFAULT_DIALOG_TO_APP_ANIMATOR, + + /** + * Whether we should disable the WindowManager timeout. This should be set to true in tests + * only. + */ + // TODO(b/301385865): Remove this flag. + private val disableWmTimeout: Boolean = false, ) { companion object { /** The timings when animating a View into an app. */ @@ -252,7 +260,7 @@ class ActivityLaunchAnimator( Log.d( TAG, "Calling controller.onIntentStarted(willAnimate=$willAnimate) " + - "[controller=$this]" + "[controller=$this]" ) } this.onIntentStarted(willAnimate) @@ -431,7 +439,8 @@ class ActivityLaunchAnimator( internal val delegate: AnimationDelegate init { - delegate = AnimationDelegate(controller, callback, listener, launchAnimator) + delegate = + AnimationDelegate(controller, callback, listener, launchAnimator, disableWmTimeout) } @BinderThread @@ -461,13 +470,26 @@ class ActivityLaunchAnimator( /** Listener for animation lifecycle events. */ private val listener: Listener? = null, /** The animator to use to animate the window launch. */ - private val launchAnimator: LaunchAnimator = DEFAULT_LAUNCH_ANIMATOR + private val launchAnimator: LaunchAnimator = DEFAULT_LAUNCH_ANIMATOR, + + /** + * Whether we should disable the WindowManager timeout. This should be set to true in tests + * only. + */ + // TODO(b/301385865): Remove this flag. + disableWmTimeout: Boolean = false, ) : RemoteAnimationDelegate<IRemoteAnimationFinishedCallback> { private val launchContainer = controller.launchContainer private val context = launchContainer.context private val transactionApplierView = controller.openingWindowSyncView ?: controller.launchContainer private val transactionApplier = SyncRtSurfaceTransactionApplier(transactionApplierView) + private val timeoutHandler = + if (!disableWmTimeout) { + Handler(Looper.getMainLooper()) + } else { + null + } private val matrix = Matrix() private val invertMatrix = Matrix() @@ -487,11 +509,11 @@ class ActivityLaunchAnimator( @UiThread internal fun postTimeout() { - launchContainer.postDelayed(onTimeout, LAUNCH_TIMEOUT) + timeoutHandler?.postDelayed(onTimeout, LAUNCH_TIMEOUT) } private fun removeTimeout() { - launchContainer.removeCallbacks(onTimeout) + timeoutHandler?.removeCallbacks(onTimeout) } @UiThread diff --git a/packages/SystemUI/common/Android.bp b/packages/SystemUI/common/Android.bp index e36ada89b207e04ab3aa05ca28712214571b18a3..482776a37327fdf807f551eb6bc2a5dee0a0a76e 100644 --- a/packages/SystemUI/common/Android.bp +++ b/packages/SystemUI/common/Android.bp @@ -24,6 +24,7 @@ package { android_library { name: "SystemUICommon", + use_resource_processor: true, srcs: [ "src/**/*.java", diff --git a/packages/SystemUI/compose/core/Android.bp b/packages/SystemUI/compose/core/Android.bp index ab3efb8861820626206addfed53f0d6cbb61c311..510fa1e1fa803020cb2688aba50bde3ab1999096 100644 --- a/packages/SystemUI/compose/core/Android.bp +++ b/packages/SystemUI/compose/core/Android.bp @@ -38,4 +38,5 @@ android_library { ], kotlincflags: ["-Xjvm-default=all"], + use_resource_processor: true, } diff --git a/packages/SystemUI/compose/core/tests/Android.bp b/packages/SystemUI/compose/core/tests/Android.bp index 5a8a374b4b7f596426033b63a516c31ac265c233..52c63854f62f77051568cb129a0055d66eac983e 100644 --- a/packages/SystemUI/compose/core/tests/Android.bp +++ b/packages/SystemUI/compose/core/tests/Android.bp @@ -47,4 +47,5 @@ android_test { ], kotlincflags: ["-Xjvm-default=all"], + use_resource_processor: true, } diff --git a/packages/SystemUI/compose/features/Android.bp b/packages/SystemUI/compose/features/Android.bp index c6438c9ef955ff16a9cd90ea94bedefd6f38ecd1..e4426fe9785903edbc75713cbb408f14835403e1 100644 --- a/packages/SystemUI/compose/features/Android.bp +++ b/packages/SystemUI/compose/features/Android.bp @@ -23,6 +23,7 @@ package { android_library { name: "SystemUIComposeFeatures", + use_resource_processor: true, manifest: "AndroidManifest.xml", srcs: [ diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt index 5505eaf8fd7e0644b58d1decb88f21175208f8ed..46a9d42d0606d9b361e51b8e09bef4de40af6367 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt @@ -48,7 +48,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.SceneScope -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.ui.viewmodel.AuthMethodBouncerViewModel import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinBouncer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinBouncer.kt index e5c69777503c7f024fd661784b57e89304594a61..6491b70db99bcd882b7ec98af873bae877792a01 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinBouncer.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinBouncer.kt @@ -55,7 +55,7 @@ import androidx.compose.ui.unit.dp import com.android.compose.animation.Easings import com.android.compose.grid.VerticalGrid import com.android.compose.modifiers.thenIf -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.ui.viewmodel.ActionButtonAppearance import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinInputDisplay.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinInputDisplay.kt index 77065cfdeb769335cae91e1ab489645267ddef4b..055ece328fc3f284dea8fa6bd8dd3a7add3bab41 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinInputDisplay.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/PinInputDisplay.kt @@ -51,7 +51,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.android.compose.animation.Easings import com.android.keyguard.PinShapeAdapter -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.ui.viewmodel.EntryToken.Digit import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel import com.android.systemui.bouncer.ui.viewmodel.PinInputViewModel diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt index 77daebb9b8a00fb3e615c1da183a2063d2a2a432..c3a3752db3741c75b23a6e85b7475a9a1a1d3aab 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt @@ -36,7 +36,7 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isVisible import com.android.compose.animation.scene.SceneScope -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.qualifiers.KeyguardRootView diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt index 68f010e1c50d83c659a57a9145761288b5c46287..e12b7eae96e7718db602705e091e41574b1ff816 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt @@ -47,7 +47,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.android.compose.theme.LocalAndroidColorScheme -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.people.ui.viewmodel.PeopleTileViewModel import com.android.systemui.people.ui.viewmodel.PeopleViewModel diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreenEmpty.kt b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreenEmpty.kt index 1e6f4a2f5b23605e134b0f3a31535b66057328a3..26cc9b952e27f2d879bdc37828a6adbbf10f1caf 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreenEmpty.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreenEmpty.kt @@ -42,7 +42,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.android.compose.theme.LocalAndroidColorScheme -import com.android.systemui.R +import com.android.systemui.res.R @Composable internal fun PeopleScreenEmpty( diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt index 482220013e32a3f06eec1bacf9e16f5c350d0174..689a0a2815c5837c658a029b18e123b81385932f 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt @@ -69,7 +69,7 @@ import com.android.compose.animation.Expandable import com.android.compose.modifiers.background import com.android.compose.theme.LocalAndroidColorScheme import com.android.compose.theme.colorAttr -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.ui.compose.Icon diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt index 272e507d5d4a2a9ab7bc72e3d635cf77eb9ccd52..8e3400872a9a6021741f5c639ba31d4363c47b6c 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt @@ -47,7 +47,7 @@ import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.ValueKey import com.android.compose.animation.scene.animateSharedFloatAsState import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel diff --git a/packages/SystemUI/compose/features/tests/Android.bp b/packages/SystemUI/compose/features/tests/Android.bp index c7c9140b53eda17a84a4997a756836c5f3a453e5..c85cd7bae41b4ed2ec6a43d7ba4ba0a9888f0e8c 100644 --- a/packages/SystemUI/compose/features/tests/Android.bp +++ b/packages/SystemUI/compose/features/tests/Android.bp @@ -24,6 +24,7 @@ package { // TODO(b/230606318): Make those host tests instead of device tests. android_test { name: "SystemUIComposeFeaturesTests", + use_resource_processor: true, manifest: "AndroidManifest.xml", test_suites: ["device-tests"], sdk_version: "current", diff --git a/packages/SystemUI/customization/Android.bp b/packages/SystemUI/customization/Android.bp index fc37b355494fd0f98ad8082cdec08702168a5da9..927fd8ea6279e969453cf59d1bca46efb1d04303 100644 --- a/packages/SystemUI/customization/Android.bp +++ b/packages/SystemUI/customization/Android.bp @@ -23,6 +23,7 @@ package { android_library { name: "SystemUICustomizationLib", + use_resource_processor: true, srcs: [ "src/**/*.java", "src/**/*.kt", diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt index 054f9ec1dbbc8fd960fbbebe2d7f91e09508cc9a..c41dc53fdc6be5829d9833c493a0134486f969a2 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt @@ -148,7 +148,7 @@ open class ClockRegistry( override fun onPluginAttached( manager: PluginLifecycleManager<ClockProviderPlugin> ): Boolean { - manager.isDebug = true + manager.isDebug = !keepAllLoaded if (keepAllLoaded) { // Always load new plugins if requested @@ -511,6 +511,12 @@ open class ClockRegistry( fun verifyLoadedProviders() { val shouldSchedule = isVerifying.compareAndSet(false, true) if (!shouldSchedule) { + logger.tryLog( + TAG, + LogLevel.VERBOSE, + {}, + { "verifyLoadedProviders: shouldSchedule=false" } + ) return } @@ -670,6 +676,7 @@ open class ClockRegistry( { str1 = clockId }, { "Clock $str1 not loaded; using default" } ) + verifyLoadedProviders() } else { logger.tryLog( TAG, diff --git a/packages/SystemUI/log/Android.bp b/packages/SystemUI/log/Android.bp index 627ac4b7c3810a2f3e342d68a3440e3abadda54a..2be22a65676b71bfbaddc5c0f44bfbb2ff89011a 100644 --- a/packages/SystemUI/log/Android.bp +++ b/packages/SystemUI/log/Android.bp @@ -23,6 +23,7 @@ package { android_library { name: "SystemUILogLib", + use_resource_processor: true, srcs: [ "src/**/*.java", "src/**/*.kt", diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp index bb47a2f4726eda248a23eca9992c22d8a3341dfd..c42895282440acce055f5ce066db0484e9c27263 100644 --- a/packages/SystemUI/plugin/Android.bp +++ b/packages/SystemUI/plugin/Android.bp @@ -50,6 +50,7 @@ android_app { // Dummy to generate .toc files. name: "PluginDummyLib", + use_resource_processor: true, platform_apis: true, srcs: ["src/**/*.java"], diff --git a/packages/SystemUI/plugin/ExamplePlugin/Android.bp b/packages/SystemUI/plugin/ExamplePlugin/Android.bp index 3f0fdedb57daaca99ddf0fa4c98afc5b0a009f04..66951b5d96406ec3d0362425bc7053351175ddd2 100644 --- a/packages/SystemUI/plugin/ExamplePlugin/Android.bp +++ b/packages/SystemUI/plugin/ExamplePlugin/Android.bp @@ -10,6 +10,7 @@ package { android_app { name: "ExamplePlugin", + use_resource_processor: true, libs: ["SystemUIPluginLib"], diff --git a/packages/SystemUI/res/values-land/bools.xml b/packages/SystemUI/res/values-land/bools.xml index e24792dc7dd7431410fa348532be98a601bc051c..c112edcf22bf8394eab7494ee3484df6408110d9 100644 --- a/packages/SystemUI/res/values-land/bools.xml +++ b/packages/SystemUI/res/values-land/bools.xml @@ -19,4 +19,7 @@ <!-- Only use small clock on lockscreen. True here because only small clock used on small devices in landscape --> <bool name="force_small_clock_on_lockscreen">true</bool> + + <!-- True when small screen (<sw600dp) is landscape. --> + <bool name="is_small_screen_landscape">true</bool> </resources> diff --git a/packages/SystemUI/res/values-sw600dp-land/bools.xml b/packages/SystemUI/res/values-sw600dp-land/bools.xml index c4d77e894141031423bbe00ae33522b11cf73daa..36926a2b4813236bd692f7a50e0fd535ceed5555 100644 --- a/packages/SystemUI/res/values-sw600dp-land/bools.xml +++ b/packages/SystemUI/res/values-sw600dp-land/bools.xml @@ -19,4 +19,7 @@ <!-- Only use small clock on lockscreen. False here because large clock is allowed on large devices in landscape --> <bool name="force_small_clock_on_lockscreen">false</bool> + + <!-- True when small screen (<sw600dp) is landscape. --> + <bool name="is_small_screen_landscape">false</bool> </resources> diff --git a/packages/SystemUI/res/values/bools.xml b/packages/SystemUI/res/values/bools.xml index 39566622a5f4faa792b66f5e2969b0b31dc88aaf..234c6df69d0bb15b9c14d6ed139b5324981ef894 100644 --- a/packages/SystemUI/res/values/bools.xml +++ b/packages/SystemUI/res/values/bools.xml @@ -63,4 +63,7 @@ <!-- Only use small clock on lockscreen. False here because large clock used by default, unless otherwise specified --> <bool name="force_small_clock_on_lockscreen">false</bool> + + <!-- True when small screen (<sw600dp) is landscape. --> + <bool name="is_small_screen_landscape">false</bool> </resources> diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp index 0415341c16b63ff9ce4b785000ddc41b201bfe5e..9c368eb0a97829872aac5509452a330398a632a2 100644 --- a/packages/SystemUI/shared/Android.bp +++ b/packages/SystemUI/shared/Android.bp @@ -38,6 +38,7 @@ java_library { android_library { name: "SystemUISharedLib", + use_resource_processor: true, srcs: [ "src/**/*.java", "src/**/*.kt", diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java index 7719e95b9416c22a6f1edaf9bfafc2f5857c5b2a..f9f2c63c0469e18e7f229d5f520e2a08ad5fa9de 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java @@ -73,7 +73,7 @@ public class PluginInstance<T extends Plugin> implements PluginLifecycleManager mComponentName = componentName; mPluginFactory = pluginFactory; mPlugin = plugin; - mTag = TAG + mComponentName.toShortString() + mTag = TAG + "[" + mComponentName.getShortClassName() + "]" + '@' + Integer.toHexString(hashCode()); if (mPlugin != null) { diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierText.java b/packages/SystemUI/src/com/android/keyguard/CarrierText.java index 87a9b0f17a1ccbe30ead5eba451639943840f784..ae282c7e14bd85a631b57aad5fdd15c4d93ff60c 100644 --- a/packages/SystemUI/src/com/android/keyguard/CarrierText.java +++ b/packages/SystemUI/src/com/android/keyguard/CarrierText.java @@ -24,7 +24,7 @@ import android.util.AttributeSet; import android.view.View; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.Locale; diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java index b52ee01bfa61254985d036d92cb2ebe2df10ab25..873c3d9105db853feebef046110fe72c5fd060c0 100644 --- a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java +++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java @@ -39,7 +39,7 @@ import androidx.annotation.VisibleForTesting; import com.android.keyguard.logging.CarrierTextManagerLogger; import com.android.settingslib.WirelessUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.WakefulnessLifecycle; diff --git a/packages/SystemUI/src/com/android/keyguard/ConnectedDisplayKeyguardPresentation.kt b/packages/SystemUI/src/com/android/keyguard/ConnectedDisplayKeyguardPresentation.kt index 006974c9fa92fbe4957bdd8aa224f1e31c2340ac..d677a15862deba707f30b3e27c207ebac6080479 100644 --- a/packages/SystemUI/src/com/android/keyguard/ConnectedDisplayKeyguardPresentation.kt +++ b/packages/SystemUI/src/com/android/keyguard/ConnectedDisplayKeyguardPresentation.kt @@ -25,7 +25,7 @@ import android.view.LayoutInflater import android.view.View import android.view.WindowManager import com.android.keyguard.dagger.KeyguardStatusViewComponent -import com.android.systemui.R +import com.android.systemui.res.R import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyCarrierArea.java b/packages/SystemUI/src/com/android/keyguard/EmergencyCarrierArea.java index 225bebe57128a425975428424e6e76faedfa92ab..b2ffccc5616d958b691b0fd3d46ca05e31723472 100644 --- a/packages/SystemUI/src/com/android/keyguard/EmergencyCarrierArea.java +++ b/packages/SystemUI/src/com/android/keyguard/EmergencyCarrierArea.java @@ -21,7 +21,7 @@ import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; public class EmergencyCarrierArea extends AlphaOptimizedLinearLayout { diff --git a/packages/SystemUI/src/com/android/keyguard/FaceWakeUpTriggersConfig.kt b/packages/SystemUI/src/com/android/keyguard/FaceWakeUpTriggersConfig.kt index 788a66dcf2817f5d6d1bc3a2f39699f782e680d9..6a170a506fc458014609d56897cbcffe6e6b73b7 100644 --- a/packages/SystemUI/src/com/android/keyguard/FaceWakeUpTriggersConfig.kt +++ b/packages/SystemUI/src/com/android/keyguard/FaceWakeUpTriggersConfig.kt @@ -20,10 +20,11 @@ import android.content.res.Resources import android.os.Build import android.os.PowerManager import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager +import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.util.settings.GlobalSettings import java.io.PrintWriter import java.util.stream.Collectors @@ -38,6 +39,7 @@ constructor(@Main resources: Resources, globalSettings: GlobalSettings, dumpMana private val defaultTriggerFaceAuthOnWakeUpFrom: Set<Int> = resources.getIntArray(R.array.config_face_auth_wake_up_triggers).toSet() private val triggerFaceAuthOnWakeUpFrom: Set<Int> + private val wakeSleepReasonsToTriggerFaceAuth: Set<WakeSleepReason> init { triggerFaceAuthOnWakeUpFrom = @@ -52,6 +54,14 @@ constructor(@Main resources: Resources, globalSettings: GlobalSettings, dumpMana } else { defaultTriggerFaceAuthOnWakeUpFrom } + wakeSleepReasonsToTriggerFaceAuth = + triggerFaceAuthOnWakeUpFrom + .map { + val enumVal = WakeSleepReason.fromPowerManagerWakeReason(it) + assert(enumVal != WakeSleepReason.OTHER) + enumVal + } + .toSet() dumpManager.registerDumpable(this) } @@ -59,6 +69,9 @@ constructor(@Main resources: Resources, globalSettings: GlobalSettings, dumpMana return triggerFaceAuthOnWakeUpFrom.contains(pmWakeReason) } + fun shouldTriggerFaceAuthOnWakeUpFrom(wakeReason: WakeSleepReason): Boolean = + wakeSleepReasonsToTriggerFaceAuth.contains(wakeReason) + override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("FaceWakeUpTriggers:") for (pmWakeReason in triggerFaceAuthOnWakeUpFrom) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java index c6d147108611c92733b0203926217f994cf039e6..dfeb1f31808174714b1b2243830c9e6740eea70c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -25,7 +25,7 @@ import android.view.View; import androidx.annotation.CallSuper; import com.android.internal.widget.LockscreenCredential; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Base class for PIN and password unlock screens. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java index e3f9de11bf98853baa8f4b4d24c77c5dfc5c3cc2..167bd59d4e8d1a19f5f0284453c13995dc6da0ac 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -34,7 +34,7 @@ import com.android.internal.widget.LockscreenCredential; import com.android.keyguard.EmergencyButtonController.EmergencyButtonCallback; import com.android.keyguard.KeyguardAbsKeyInputView.KeyDownListener; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingClassifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockAccessibilityDelegate.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockAccessibilityDelegate.java index a78c293a65ac0b0b61c63872cc2286562b15498e..f7db48aefdaf742a1733f1eb45bfaf6c0abe58fd 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockAccessibilityDelegate.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockAccessibilityDelegate.java @@ -23,7 +23,7 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Replaces fancy colons with regular colons. Only works on TextViews. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 610df11ce12a8b17d3f66c9a752b630c025fd219..ba8e427525869618b2a49961f968658212fba589 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -22,7 +22,7 @@ import androidx.core.content.res.ResourcesCompat; import com.android.app.animation.Interpolators; import com.android.keyguard.dagger.KeyguardStatusViewScope; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.LogLevel; import com.android.systemui.plugins.ClockController; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 11f95895338a6aa62d40153b8962ac6445e660cd..29414ea7f4c0ae519788964b283d51fb2946ac5a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -37,7 +37,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; @@ -527,7 +527,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { NotificationIconContainer nic = (NotificationIconContainer) mView.findViewById( - com.android.systemui.R.id.left_aligned_notification_icon_container); + com.android.systemui.res.R.id.left_aligned_notification_icon_container); mNotificationIconAreaController.setupAodIcons(nic); } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java index 1c5a5758c2a423ae4615b5d3739fda8a1de4ec03..9c015fea5cf7f1d2b2ff6abf8a5d75f6c03c2715 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java @@ -39,7 +39,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.dagger.KeyguardStatusViewComponent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java b/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java index ccbb0c5057cc898aa70a007ae3bc14d40848acc8..fc4e122d235b78485da39206ce89066b6762283f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java @@ -32,7 +32,7 @@ import android.view.View; import android.view.WindowManager; import android.widget.Button; -import com.android.systemui.R; +import com.android.systemui.res.R; /*** * This button is used by the device with embedded SIM card to disable current carrier to unlock diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java index 98f082f78a38bcc484b48c455d339ebbe82caf20..38c84954a76dc3882dd3a0ef5785209e5e3c7865 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java @@ -28,7 +28,7 @@ import androidx.annotation.CallSuper; import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * A Base class for all Keyguard password/pattern/pin related inputs. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java index abd1563ecc43785dd2c3af67c3e2d3ce747002bc..29ce18c60833ad44a47cb8438c5537c53f51d36e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java @@ -29,7 +29,7 @@ import android.view.inputmethod.InputMethodManager; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.ui.BouncerMessageView; import com.android.systemui.bouncer.ui.binder.BouncerMessageViewBinder; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java index fc66527998b97b3e9610a02129d7a77d2f9cc5fd..7e44866f9473870309337ea439d107d7a9d687d0 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java @@ -27,7 +27,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import com.android.internal.policy.SystemBarUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; /*** * Manages a number of views inside of the given layout. See below for a list of widgets. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java index 72b4ae568397e84a6c42f7d10cea04741da8ae15..1741e306c29f25fe8efeb9b15363d6b644690abe 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java @@ -40,7 +40,7 @@ import androidx.constraintlayout.widget.ConstraintSet; import com.android.app.animation.Interpolators; import com.android.settingslib.animation.DisappearAnimationUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController.DevicePostureInt; /** diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java index 8d5fc0467e3bbfd135b5b1c861fb61c6858db70b..51c0676876b9df2ae6a98c99655462fabc7aa640 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java @@ -56,7 +56,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.widget.LockscreenCredential; import com.android.internal.widget.TextViewInputDisabler; import com.android.systemui.DejankUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java index ab8cd531c307f547146894453bd3a16ff9c3946d..959cf6fb8565c43bce70c93d3bbe4dc464276b9a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java @@ -39,7 +39,7 @@ import android.widget.TextView.OnEditorActionListener; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java index 56706b5a713548704e78bae75b4a64a667e85b06..802e222b38970fada93a0387054d33d911b40fc3 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java @@ -42,7 +42,7 @@ import com.android.internal.widget.LockPatternView; import com.android.settingslib.animation.AppearAnimationCreator; import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController.DevicePostureInt; public class KeyguardPatternView extends KeyguardInputView diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java index 98312b11e9d67f747ea18b40ec3f6e250d606e90..714ba81fc664828ba85bff9a229d1d7eb0ea4529 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java @@ -36,7 +36,7 @@ import com.android.internal.widget.LockPatternView.Cell; import com.android.internal.widget.LockscreenCredential; import com.android.keyguard.EmergencyButtonController.EmergencyButtonCallback; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingClassifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java index 38e5dc57d3163b6ce62ac12c481c2c65bba55781..9d6d0332b96b3732a0845c758fe5f1c022bf9ac6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -39,7 +39,7 @@ import androidx.annotation.CallSuper; import com.android.app.animation.Interpolators; import com.android.internal.widget.LockscreenCredential; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.List; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java index 31cbdde3452d842bc1ae932143ddb99b42f15a13..aacf8662b2b87a4c170395f0fec57597aadb3c6a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java @@ -25,7 +25,7 @@ import android.view.View.OnTouchListener; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java index 0af803fc84fe4872902c5403397f56dd61eca79e..9a788688c9d1afeb0cfc14e38d3e4e9a9e68014e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java @@ -23,7 +23,7 @@ import android.view.View; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 3f3efe9c5ab15094d5cdbfce47e7f640b2954f68..f7a4d47be8008c2ce28f631ce58275e99cf0d9f6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -97,7 +97,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.settingslib.Utils; import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.shade.TouchLogger; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index e9dd08c67b994fcf66d7f278f04ee016fe7322cf..625c1de0134d579e5d2b7fb44e3e4b0fcdaf3170 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -68,7 +68,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.keyguard.dagger.KeyguardBouncerScope; import com.android.settingslib.utils.ThreadUtils; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor; import com.android.systemui.biometrics.FaceAuthAccessibilityDelegate; import com.android.systemui.biometrics.SideFpsController; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index 74f90063096ea82a3614047317716fe7e098f415..44db01e3c99e5f480c68c613167d3e8077adbe24 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -30,7 +30,7 @@ import android.view.ViewHierarchyEncoder; import android.widget.FrameLayout; import android.widget.ViewFlipper; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Subclass of the current view flipper that allows us to overload dispatchTouchEvent() so diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java index f18504c2860980fc06e46ac1a6609602cdc2b195..9c4d224115b2cf78ea65996e5abdb7f0b2e59030 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java @@ -30,7 +30,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.KeyguardInputViewController.Factory; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.keyguard.dagger.KeyguardBouncerScope; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.util.ViewController; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewTransition.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewTransition.kt index e1c060f0e8cb4d9b45c7742c6a53274663a671af..db191c6cb8f31b2c92abf85523af98ae5caeaa93 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewTransition.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewTransition.kt @@ -28,7 +28,7 @@ import android.view.ViewGroup import android.view.animation.AnimationUtils import com.android.app.animation.Interpolators import com.android.internal.R.interpolator.fast_out_extra_slow_in -import com.android.systemui.R +import com.android.systemui.res.R /** Animates constraint layout changes for the security view. */ class KeyguardSecurityViewTransition : Transition() { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimInputView.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardSimInputView.kt index 7c8d91fdaba82cbc7e5a5d25c527d1aaaa688c27..392abf2aa82c6d724d80a77c9359a7bdc46ebc4c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimInputView.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimInputView.kt @@ -21,7 +21,7 @@ import android.util.AttributeSet import android.widget.ImageView import androidx.core.graphics.drawable.DrawableCompat import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.ColorId.EMERGENCY_BUTTON abstract class KeyguardSimInputView(context: Context, attrs: AttributeSet) : diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java index 9d170150a7093052ffc39982e98c924ce55cea37..bacd0c2d1e349ea29daf6e05831210f15605cc8e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java @@ -20,7 +20,7 @@ import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Displays a PIN pad for unlocking. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java index 1fc88ab16e83f3af99312f7978f069d2297c6584..8717a532b43dd42f2d34790d3caf12d6e35b5381 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java @@ -39,7 +39,7 @@ import android.widget.ImageView; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; @@ -144,7 +144,7 @@ public class KeyguardSimPinViewController mView.resetPasswordText(true /* animate */, true /* announce */); getKeyguardSecurityCallback().userActivity(); mMessageAreaController.setMessage( - com.android.systemui.R.string.kg_invalid_sim_pin_hint); + com.android.systemui.res.R.string.kg_invalid_sim_pin_hint); return; } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java index 5f45fe31a779bbcc3b94741ba3b79ec3ca3e6c90..151ca8ade506018c146ae9b3d893a257ca813d0f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java @@ -22,7 +22,7 @@ import android.content.Context; import android.util.AttributeSet; import android.util.Log; -import com.android.systemui.R; +import com.android.systemui.res.R; /** diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java index 49d786fdddd88c946f5b33b92485d7068b07baaf..248b7afd753558c5c2c8a952c1c7efdf2e132241 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java @@ -36,7 +36,7 @@ import android.widget.ImageView; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; @@ -139,25 +139,25 @@ public class KeyguardSimPukViewController if (mState == ENTER_PUK) { if (checkPuk()) { mState = ENTER_PIN; - msg = com.android.systemui.R.string.kg_puk_enter_pin_hint; + msg = com.android.systemui.res.R.string.kg_puk_enter_pin_hint; } else { - msg = com.android.systemui.R.string.kg_invalid_sim_puk_hint; + msg = com.android.systemui.res.R.string.kg_invalid_sim_puk_hint; } } else if (mState == ENTER_PIN) { if (checkPin()) { mState = CONFIRM_PIN; - msg = com.android.systemui.R.string.kg_enter_confirm_pin_hint; + msg = com.android.systemui.res.R.string.kg_enter_confirm_pin_hint; } else { - msg = com.android.systemui.R.string.kg_invalid_sim_pin_hint; + msg = com.android.systemui.res.R.string.kg_invalid_sim_pin_hint; } } else if (mState == CONFIRM_PIN) { if (confirmPin()) { mState = DONE; - msg = com.android.systemui.R.string.keyguard_sim_unlock_progress_dialog_message; + msg = com.android.systemui.res.R.string.keyguard_sim_unlock_progress_dialog_message; updateSim(); } else { mState = ENTER_PIN; // try again? - msg = com.android.systemui.R.string.kg_invalid_confirm_pin_hint; + msg = com.android.systemui.res.R.string.kg_invalid_confirm_pin_hint; } } mView.resetPasswordText(true /* animate */, true /* announce */); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java index b4f124aa598ad0bcfbdc379797577ed0b3297150..7b5325d4eaa6819fedb24dd22b733105434d3d94 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java @@ -48,7 +48,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.ColorUtils; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.util.wakelock.KeepAwakeAnimationListener; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusAreaView.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusAreaView.kt index e7da2b977379a8106d76f62045f9a76c0077618d..11b1a7d00056de915f4fee5e180defcdcbaf3041 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusAreaView.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusAreaView.kt @@ -4,7 +4,7 @@ import android.content.Context import android.util.AttributeSet import android.util.FloatProperty import android.widget.LinearLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.notification.AnimatableProperty class KeyguardStatusAreaView( diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java index 5774e42d24257c0a4189bba51d2911196df4b7a4..d8486029a9030dfe3a1eb5c5532d9717a46f3a13 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java @@ -29,7 +29,7 @@ import android.view.ViewGroup; import android.view.ViewPropertyAnimator; import android.widget.GridLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shade.TouchLogger; import com.android.systemui.statusbar.CrossFadeHelper; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java index c314586e4a21971042e97cc0616df00665491dcf..8d0d299e56c2ab7bb8e0312c561cb6cf2a77b3c9 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java @@ -49,7 +49,7 @@ import com.android.internal.jank.InteractionJankMonitor; import com.android.keyguard.KeyguardClockSwitch.ClockSize; import com.android.keyguard.logging.KeyguardLogger; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt index ca64ae05909353acc796f6e53e1052843f0d89fd..7170be6124d2617a7b0e9b26606a14791a693f3e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt @@ -18,7 +18,7 @@ package com.android.keyguard import android.content.Context import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState.KEYGUARD import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index abab5e682478d042942996d3c9ccf356b40c72e8..51308b86a5325d035a2c8142f215470f0ce033bc 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -153,7 +153,7 @@ import com.android.settingslib.Utils; import com.android.settingslib.WirelessUtils; import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; import com.android.systemui.broadcast.BroadcastDispatcher; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherAnchor.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherAnchor.kt index 5f3ba72d445b895deaa468b51a629a5c6b66faa6..04e8a970c50b44d5c7384f08b29325fd31c3e945 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherAnchor.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherAnchor.kt @@ -20,7 +20,7 @@ import android.util.AttributeSet import android.view.accessibility.AccessibilityNodeInfo import android.widget.LinearLayout import androidx.core.view.accessibility.AccessibilityNodeInfoCompat -import com.android.systemui.R +import com.android.systemui.res.R /** * Custom View for the multi-user switcher pull-down menu anchor diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherPopupMenu.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherPopupMenu.java index b793fd22aed1c5307d2691f9dfda8eb64e871ef6..f746459bf8dd9c945ec857ad5f940436907fd9c4 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherPopupMenu.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUserSwitcherPopupMenu.java @@ -25,7 +25,7 @@ import android.view.View; import android.widget.ListPopupWindow; import android.widget.ListView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.FalsingManager; /** diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconView.java b/packages/SystemUI/src/com/android/keyguard/LockIconView.java index c52288190a7c789475991e1f9818743c2c760c37..1d2d77f16b75cb8b467895945ba4ffd2ba04e3be 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconView.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconView.java @@ -37,7 +37,7 @@ import androidx.annotation.NonNull; import com.android.internal.graphics.ColorUtils; import com.android.settingslib.Utils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 214b1228b87a790d2fbe013a434a342ed1da2f20..165c4bb018d373a7ea0d6939844f7d09994e8361 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -56,7 +56,7 @@ import androidx.annotation.VisibleForTesting; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.AuthRippleController; import com.android.systemui.biometrics.UdfpsController; diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadButton.java b/packages/SystemUI/src/com/android/keyguard/NumPadButton.java index 5c2f3b368f96ef223f461cfe6f099da218a6eea2..76f93e18dda43e27d01594000892a5bafac7af71 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadButton.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadButton.java @@ -30,7 +30,7 @@ import android.view.MotionEvent; import androidx.annotation.Nullable; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Similar to the {@link NumPadKey}, but displays an image. diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadKey.java b/packages/SystemUI/src/com/android/keyguard/NumPadKey.java index 466d154746794f5a09de32cc73a91bee8d53cf19..871d57da9b0d68cee51bfa213327599cdb96fef4 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadKey.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadKey.java @@ -36,7 +36,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Viewgroup for the bouncer numpad button, specifically for digits. diff --git a/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java b/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java index 9a2ffe0ec68cd72c0d1f69ab4f3bfd52fa82218c..85f8b4824c99ac28278cfe90e5f9193afd24f918 100644 --- a/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java +++ b/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java @@ -37,7 +37,7 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/keyguard/PinShapeAdapter.kt b/packages/SystemUI/src/com/android/keyguard/PinShapeAdapter.kt index 4496dc311e92bde8da68dec086791033ac0bb9f5..8d1bbb29267b2ab1cc2bc4159bb5e35a61dedf2d 100644 --- a/packages/SystemUI/src/com/android/keyguard/PinShapeAdapter.kt +++ b/packages/SystemUI/src/com/android/keyguard/PinShapeAdapter.kt @@ -17,7 +17,7 @@ package com.android.keyguard import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import kotlin.random.Random class PinShapeAdapter { diff --git a/packages/SystemUI/src/com/android/keyguard/PinShapeHintingView.java b/packages/SystemUI/src/com/android/keyguard/PinShapeHintingView.java index 7c129b4c890569cde7511ad1207ab8901091cbeb..5e9eed98f97b1129fd16b17534a7d3b09bb3d032 100644 --- a/packages/SystemUI/src/com/android/keyguard/PinShapeHintingView.java +++ b/packages/SystemUI/src/com/android/keyguard/PinShapeHintingView.java @@ -29,7 +29,7 @@ import android.widget.LinearLayout; import androidx.core.graphics.drawable.DrawableCompat; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * This class contains implementation for methods that will be used when user has set a diff --git a/packages/SystemUI/src/com/android/keyguard/PinShapeNonHintingView.java b/packages/SystemUI/src/com/android/keyguard/PinShapeNonHintingView.java index 5f33ef91ed9cbc15a575504d85a6c9ab7a2d9d94..8c987e3c3143a9d77896e6ee3d11b3d30e549ba6 100644 --- a/packages/SystemUI/src/com/android/keyguard/PinShapeNonHintingView.java +++ b/packages/SystemUI/src/com/android/keyguard/PinShapeNonHintingView.java @@ -40,7 +40,7 @@ import androidx.core.graphics.drawable.DrawableCompat; import com.android.app.animation.Interpolators; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * This class contains implementation for methods that will be used when user has set a diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java index 83fc2789dc9199912eb02bb95a6a0aa1cf52617c..9716d98cf5e04bdd6c4dce2df9354396c9dd1a8e 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java @@ -20,7 +20,7 @@ import android.content.Context; import android.content.res.Resources; import android.view.LayoutInflater; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Application; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java index 893239ba7ecb5330c75ffc63a4d26b8332218d9f..afea224f31ebdbdf312fcbe3fbb694bd0a68edc2 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import com.android.keyguard.KeyguardSecurityContainer; import com.android.keyguard.KeyguardSecurityViewFlipper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.SideFpsController; import com.android.systemui.dagger.qualifiers.RootView; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewModule.java index 87627698597f2012791679c3de393e5f87dce006..37600da3a4de2d0a10083ef2129299a7b51a36cb 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewModule.java @@ -17,7 +17,7 @@ package com.android.keyguard.dagger; import com.android.keyguard.CarrierText; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.statusbar.phone.KeyguardStatusBarView; import com.android.systemui.statusbar.phone.StatusBarLocation; diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusViewModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusViewModule.java index b8841eda1de43cd6a346fcf20f3832494e2c8b0d..7575f0e80d1cd0b184696a93bd6beccfe36264b5 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusViewModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusViewModule.java @@ -19,7 +19,7 @@ package com.android.keyguard.dagger; import com.android.keyguard.KeyguardClockSwitch; import com.android.keyguard.KeyguardSliceView; import com.android.keyguard.KeyguardStatusView; -import com.android.systemui.R; +import com.android.systemui.res.R; import dagger.Module; import dagger.Provides; diff --git a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java index 4c16d41c8672a54a2276782d89b5a0445a3afa98..72fa2b0bcacbbbb21773eae7ea179df5e0a7195f 100644 --- a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java +++ b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java @@ -24,6 +24,8 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; +import com.android.systemui.res.R; + import java.util.ArrayList; import java.util.List; import java.util.Set; diff --git a/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt b/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt index eee705dea277bcbdabf39be2ffd457c25d5efc84..2d2ebe99d651100b9865165d029bad2338385652 100644 --- a/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt +++ b/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt @@ -22,8 +22,8 @@ import android.graphics.Rect import android.graphics.RectF import android.hardware.camera2.CameraManager import android.util.PathParser +import com.android.systemui.res.R import java.util.concurrent.Executor - import kotlin.math.roundToInt /** diff --git a/packages/SystemUI/src/com/android/systemui/DessertCaseView.java b/packages/SystemUI/src/com/android/systemui/DessertCaseView.java index 5e963798b9a2e54769e0accd58cc776772f50bfe..2010a706fad2ae8b175c164b31d835c06a53ade9 100644 --- a/packages/SystemUI/src/com/android/systemui/DessertCaseView.java +++ b/packages/SystemUI/src/com/android/systemui/DessertCaseView.java @@ -43,6 +43,8 @@ import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; +import com.android.systemui.res.R; + import java.util.HashSet; import java.util.Set; diff --git a/packages/SystemUI/src/com/android/systemui/DualToneHandler.kt b/packages/SystemUI/src/com/android/systemui/DualToneHandler.kt index 2b8d3e046ffafb48b0f0483bd4d916a65944edd7..22d0bc9e4b5c312fc09eae9be3d0c99c82f0bd8e 100644 --- a/packages/SystemUI/src/com/android/systemui/DualToneHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/DualToneHandler.kt @@ -20,6 +20,7 @@ import android.animation.ArgbEvaluator import android.content.Context import android.view.ContextThemeWrapper import com.android.settingslib.Utils +import com.android.systemui.res.R /** * A color blender for `Theme.SystemUI` and other themes. diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java index 7c377d2841e38758ff6c6383c0c175256daac6e9..086713f4950874d2451e6e18aeffce7d19364e8b 100644 --- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java @@ -36,6 +36,8 @@ import androidx.core.animation.Animator; import androidx.core.animation.AnimatorListenerAdapter; import androidx.core.animation.ObjectAnimator; +import com.android.systemui.res.R; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; diff --git a/packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java b/packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java index e6d5719e6fbd273bfeee7888d4e52ba7bd596ce6..ab431d03760ee0ed499666eb6e4fa51b472cb3f0 100644 --- a/packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java +++ b/packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java @@ -37,6 +37,7 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import com.android.systemui.res.R; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.internal.logging.MetricsLogger; diff --git a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java index 104b71f29219d97b16c00705165e1d7ff64fdba8..4541384aaa3715764779059cd8e87dde7d45d043 100644 --- a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java +++ b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java @@ -24,6 +24,7 @@ import android.os.UserHandle; import androidx.annotation.NonNull; +import com.android.systemui.res.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.systemui.broadcast.BroadcastDispatcher; diff --git a/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java b/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java index 7a6b1c372a248463479cbbaca73628f5c7edf851..161cb43e95ba6230d1f960a7a199c33ee5544cbb 100644 --- a/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java +++ b/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java @@ -26,6 +26,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; +import com.android.systemui.res.R; import com.android.internal.messages.nano.SystemMessageProto; import com.android.systemui.util.NotificationChannels; diff --git a/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java b/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java index d631cf3551d9835908ec51e65a319dabd38e412d..0643d0243517d90bcbbc3ae339e8130e58b5d10a 100644 --- a/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java @@ -23,6 +23,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; +import com.android.systemui.res.R; import com.android.settingslib.Utils; public class HardwareBgDrawable extends LayerDrawable { diff --git a/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java b/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java index 1bb03291996dbdaa2bfa1fe30b75868090f7c48c..b9e412c5d00e241ffee59db0e1bb466706f6c609 100644 --- a/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java +++ b/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java @@ -20,6 +20,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.View; +import com.android.systemui.res.R; import com.android.systemui.plugins.PluginListener; import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.ViewProvider; diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java index ff395da54d18e3c5a263478a35d28d47e516a034..4af2c740ddc92645d835b4cf6b902263e4f16573 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java @@ -84,6 +84,7 @@ import com.android.systemui.decor.RoundedCornerResDelegateImpl; import com.android.systemui.decor.ScreenDecorCommand; import com.android.systemui.log.ScreenDecorationsLogger; import com.android.systemui.qs.SettingObserver; +import com.android.systemui.res.R; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.commandline.CommandRegistry; @@ -334,7 +335,7 @@ public class ScreenDecorations implements CoreStartable, Dumpable { mThreadFactory = threadFactory; mDotFactory = dotFactory; mFaceScanningFactory = faceScanningFactory; - mFaceScanningViewId = com.android.systemui.R.id.face_scanning_anim; + mFaceScanningViewId = com.android.systemui.res.R.id.face_scanning_anim; mLogger = logger; mAuthController = authController; } @@ -1195,7 +1196,7 @@ public class ScreenDecorations implements CoreStartable, Dumpable { if (faceScanningOverlay != null) { faceScanningOverlay.setFaceScanningAnimColor( Utils.getColorAttrDefaultColor(faceScanningOverlay.getContext(), - com.android.systemui.R.attr.wallpaperTextColorAccent)); + com.android.systemui.res.R.attr.wallpaperTextColorAccent)); } } diff --git a/packages/SystemUI/src/com/android/systemui/SlicePermissionActivity.java b/packages/SystemUI/src/com/android/systemui/SlicePermissionActivity.java index 6f99a24b731295a538c964ebed1860a7af2572e1..67012cb0584fffdc202cfbc29ae0d8cc83e75827 100644 --- a/packages/SystemUI/src/com/android/systemui/SlicePermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/SlicePermissionActivity.java @@ -35,6 +35,8 @@ import android.util.Log; import android.widget.CheckBox; import android.widget.TextView; +import com.android.systemui.res.R; + public class SlicePermissionActivity extends Activity implements OnClickListener, OnDismissListener { diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index 3ca74acf2d6694ac49fcabefec6a26d36ed939d6..954129ef78c876e916e550b9bcf1a8bf7b0bc4bc 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -51,6 +51,7 @@ import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.wm.shell.animation.FlingAnimationUtils; import com.android.wm.shell.animation.PhysicsAnimator; diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index 38298cfac49ad2aeecd902ce44df9527d4fa2d06..bf445177f3f85db82122a15b04e280d73111cb8e 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -37,6 +37,7 @@ import android.view.SurfaceControl; import android.view.ThreadedRenderer; import android.view.View; +import com.android.systemui.res.R; import com.android.internal.protolog.common.ProtoLog; import com.android.systemui.dagger.GlobalRootComponent; import com.android.systemui.dagger.SysUIComponent; diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java index 2b468cf7c16b06e6b245a9fd252283400c19714b..872b00518d62611a5b44008a6b7add5ec282d577 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java @@ -22,6 +22,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.util.Log; +import com.android.systemui.res.R; import com.android.systemui.dagger.GlobalRootComponent; import com.android.systemui.dagger.SysUIComponent; import com.android.systemui.dagger.WMComponent; diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java index 6cf9eff1da2f49c81b64a89ada712db4b549c2d3..76c228252484a034845175a498ea6c18c7c852ce 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java @@ -33,6 +33,7 @@ import com.android.systemui.dump.DumpHandler; import com.android.systemui.dump.LogBufferEulogizer; import com.android.systemui.dump.LogBufferFreezer; import com.android.systemui.dump.SystemUIAuxiliaryDumpService; +import com.android.systemui.res.R; import com.android.systemui.shared.system.UncaughtExceptionPreHandlerManager; import com.android.systemui.statusbar.policy.BatteryStateNotifier; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java index f817c3cb90a7a8deb8834f8347fc7e352cdda033..84f1395051ebe34d351b527401cfe05c56059e64 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java @@ -46,7 +46,7 @@ import android.widget.ImageView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.Collections; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java index 859e183d39fe7d67f51a5fe287fd3faa64a9906b..ee7781d8af20c43f4d9a412e10c4c0e1950aea41 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java @@ -73,7 +73,7 @@ public class MagnificationSettingsController implements ComponentCallbacks { context.getDisplay(), WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, null); - mContext.setTheme(com.android.systemui.R.style.Theme_SystemUI); + mContext.setTheme(com.android.systemui.res.R.style.Theme_SystemUI); mDisplayId = mContext.getDisplayId(); mConfiguration = new Configuration(mContext.getResources().getConfiguration()); mSettingsControllerCallback = settingsControllerCallback; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java b/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java index 6de3e930cfa3e178aa4a60ea79ce41e0265a2dbd..443441f1ef48b34f5378051033a46708e099043a 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java @@ -31,7 +31,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Contains a movable control UI to manipulate mirrored window's position, size and scale. The diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java b/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java index ed6fbecd19fe20581082acb8617a2f3020832001..bc469eed73598d83bdf5710bcc50d484f6c1384a 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java @@ -28,7 +28,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * A basic control to move the mirror window. diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index 69041d32f04a6511410ac305525852fa0267105f..59b85d1127533238702dbfcae1aa30b6920d63cf 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -102,7 +102,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback protected WindowMagnificationController createInstance(Display display) { final Context windowContext = mContext.createWindowContext(display, TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, /* options */ null); - windowContext.setTheme(com.android.systemui.R.style.Theme_SystemUI); + windowContext.setTheme(com.android.systemui.res.R.style.Theme_SystemUI); return new WindowMagnificationController( windowContext, mHandler, @@ -141,7 +141,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback protected MagnificationSettingsController createInstance(Display display) { final Context windowContext = mContext.createWindowContext(display, TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, /* options */ null); - windowContext.setTheme(com.android.systemui.R.style.Theme_SystemUI); + windowContext.setTheme(com.android.systemui.res.R.style.Theme_SystemUI); return new MagnificationSettingsController( windowContext, new SfVsyncFrameCallbackProvider(), diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java index d061c8ef6e120375663413b9f022dee108bf1748..9dd1454d2528d3b39ea855973347f3e8369c2ea0 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java @@ -30,7 +30,7 @@ import android.view.accessibility.IRemoteMagnificationAnimationCallback; import android.view.animation.AccelerateInterpolator; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index 773241ec57e396728e15eeeb669c558bcc0ae476..c095aa8349b39e1898704e1c57e8a3cfb851cb51 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -80,7 +80,7 @@ import androidx.core.math.MathUtils; import com.android.internal.accessibility.common.MagnificationConstants; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.model.SysUiState; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 7c11311373abdec9bb52268f09d995d9f86df0eb..c03e403b754b319baf95c29946b258cf01e789cb 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -59,7 +59,7 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java index ecfe4caa5984ad888363c89129aed85bec2e629e..83ad3c23fda357e0c8275dbb478edaeb1602fb47 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java @@ -29,7 +29,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.dialog.AccessibilityTarget; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.accessibility.floatingmenu.AccessibilityTargetAdapter.ViewHolder; import java.lang.annotation.Retention; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipView.java index 5ec024ebc917d30acdcabf2cf8aa425bcffbfb85..1ff9eb4ef503cd2df417c82ad17369c0119f20c9 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipView.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipView.java @@ -41,7 +41,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.recents.TriangleShape; /** diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegate.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegate.java index 14517ba5bdb44cd2bcc2d176c9a46119e04aba83..9c22a7738ad665d3574212a638dfa1e8e86fe407 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegate.java @@ -27,7 +27,7 @@ import androidx.annotation.NonNull; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * An accessibility item delegate for the individual items of the list view in the diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuMessageView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuMessageView.java index 3e2b06b39bad180d99ee8737625cfbd080ca0ee7..bf121fb8c752d01c0f83800626fe4da653c4f1fa 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuMessageView.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuMessageView.java @@ -37,7 +37,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java index df2c05d9f53cddf0d8e28c583e37e6f958aeff94..89ce06514e1c4faab49a19670fbb5a69d3fdf92d 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java @@ -35,7 +35,7 @@ import android.view.WindowMetrics; import androidx.annotation.DimenRes; import com.android.systemui.Flags; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java index 6ba40d6944e3919ee437b15b37f398561face7fc..b6e8997c31e726db4d722488d33fbe9f032f7768 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java @@ -59,7 +59,7 @@ import androidx.lifecycle.Observer; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.Preconditions; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.util.settings.SecureSettings; import com.android.wm.shell.bubbles.DismissViewUtils; import com.android.wm.shell.common.bubbles.DismissView; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt b/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt index 0ef256d411578bf2674ee68fe0407cdc50a85379..2d2f295642632b193ca789f507c36320d78c62b3 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt @@ -29,7 +29,7 @@ import android.widget.SeekBar import android.widget.TextView import androidx.annotation.MainThread import androidx.annotation.WorkerThread -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener.ControlUnitType diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java index d49197557dc4214872e7f136bbe6250dd4b2d2a7..a5c5beccefd9d7b8529ca7cde196d481e93fd8f5 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java @@ -33,7 +33,7 @@ import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Visually discloses that contextual data was provided to an assistant. diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 4416b19795246e01b46e842f3f82d753a28f6131..0e339dd68b4f2a3cf15821a85752b59402fd31cc 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -29,7 +29,7 @@ import com.android.internal.app.IVoiceInteractionSessionListener; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.assist.ui.DefaultUiController; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java b/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java index 1c980993f32a0cab3ca56ed9e9b446a204ae181e..1ee06cc8d757dd969911af1fe1a89638f0b0a005 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java +++ b/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java @@ -35,7 +35,7 @@ import android.widget.FrameLayout; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.assist.AssistLogger; import com.android.systemui.assist.AssistManager; import com.android.systemui.assist.AssistantSessionEvent; diff --git a/packages/SystemUI/src/com/android/systemui/assist/ui/DisplayUtils.java b/packages/SystemUI/src/com/android/systemui/assist/ui/DisplayUtils.java index 9b441ad1d75cd9dae3a9b85aa46735aae8e6ee63..5765f3a57c1406fbc2ccd448b03cae834a48af12 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/ui/DisplayUtils.java +++ b/packages/SystemUI/src/com/android/systemui/assist/ui/DisplayUtils.java @@ -21,7 +21,7 @@ import android.util.DisplayMetrics; import android.view.Display; import android.view.Surface; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Utility class for determining screen and corner dimensions. diff --git a/packages/SystemUI/src/com/android/systemui/assist/ui/InvocationLightsView.java b/packages/SystemUI/src/com/android/systemui/assist/ui/InvocationLightsView.java index ac39ed5018113b6294c37443830253e45b3cb112..4d89231f0b155c7d75cbfc15c2cfe58d3e84e588 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/ui/InvocationLightsView.java +++ b/packages/SystemUI/src/com/android/systemui/assist/ui/InvocationLightsView.java @@ -32,7 +32,7 @@ import android.view.View; import com.android.settingslib.Utils; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.navigationbar.NavigationBar; import com.android.systemui.navigationbar.NavigationBarTransitions; diff --git a/packages/SystemUI/src/com/android/systemui/assist/ui/PathSpecCornerPathRenderer.java b/packages/SystemUI/src/com/android/systemui/assist/ui/PathSpecCornerPathRenderer.java index 523378e97c94e6c71edd32c23b07e8a0d2204333..fa9676b04f8421c3ce5d0f757383110ad34fd363 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/ui/PathSpecCornerPathRenderer.java +++ b/packages/SystemUI/src/com/android/systemui/assist/ui/PathSpecCornerPathRenderer.java @@ -23,7 +23,7 @@ import android.graphics.RectF; import android.util.Log; import android.util.PathParser; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Parses a path describing rounded corners from a string. diff --git a/packages/SystemUI/src/com/android/systemui/battery/AccessorizedBatteryDrawable.kt b/packages/SystemUI/src/com/android/systemui/battery/AccessorizedBatteryDrawable.kt index b81d7fced5e4be636dcfd89bc2a29e24d70194d1..b8de117fcbe9b4cd0a4f148291b4723863ea2ba6 100644 --- a/packages/SystemUI/src/com/android/systemui/battery/AccessorizedBatteryDrawable.kt +++ b/packages/SystemUI/src/com/android/systemui/battery/AccessorizedBatteryDrawable.kt @@ -28,7 +28,7 @@ import android.graphics.Rect import android.graphics.drawable.DrawableWrapper import android.util.PathParser import com.android.settingslib.graph.ThemedBatteryDrawable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.battery.BatterySpecs.BATTERY_HEIGHT import com.android.systemui.battery.BatterySpecs.BATTERY_HEIGHT_WITH_SHIELD import com.android.systemui.battery.BatterySpecs.BATTERY_WIDTH diff --git a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterView.java index 6ca1c3de0b63ef10ab37489212e127130f52d5d3..f25f994bf8f309da5ed90907eebc9fd4fa98ae9a 100644 --- a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterView.java @@ -47,7 +47,7 @@ import androidx.annotation.VisibleForTesting; import com.android.app.animation.Interpolators; import com.android.systemui.DualToneHandler; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.policy.BatteryController; diff --git a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java index b6f47e9c907e91f6186b80d823eeef4d9fdd3eb9..5b840b52bde66be01111d45793a7248b6b1506df 100644 --- a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java @@ -30,7 +30,7 @@ import android.view.View; import androidx.annotation.NonNull; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceIconController.kt index ea8f5d376ba7b451120fb7f302d2ef58a496d47b..3f2da5e144c57cdab04daf2086cc621534789aa1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceIconController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceIconController.kt @@ -19,7 +19,7 @@ import android.content.Context import android.graphics.drawable.Drawable import android.util.Log import com.airbnb.lottie.LottieAnimationView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState private const val TAG = "AuthBiometricFaceIconController" diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceIconController.kt index fb22c6b07db4988c90a9d869278f0d87beb15942..09eabf2aa430e0fcc61ef3f86191646a3e535480 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceIconController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceIconController.kt @@ -19,7 +19,7 @@ package com.android.systemui.biometrics import android.annotation.RawRes import android.content.Context import com.airbnb.lottie.LottieAnimationView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState.STATE_AUTHENTICATED import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState.STATE_ERROR diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt index 683541bd1b5b575c4b2be1007d8e4a940c536a0f..0ad3848299f939ac4b031c00001958d3a4dd23a3 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt @@ -26,7 +26,7 @@ import android.view.View import androidx.annotation.VisibleForTesting import com.airbnb.lottie.LottieAnimationView import com.android.settingslib.widget.LottieColorUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState.STATE_AUTHENTICATED import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState.STATE_AUTHENTICATING diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index c7d7fe32be318bb81263c3c9ad3a65fc998ced5f..85122baa3fecf5b0001c955ad16fe321453a3fae 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -63,7 +63,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.widget.LockPatternUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController.ScaleFactorProvider; import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor; import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index b752c3b80cae1be9e920ab308e10d157fc416bb6..a64e862000fc82e61ca2e1ce46e372a207b6b476 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -627,7 +627,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, int xFpLocation = mCachedDisplayInfo.getNaturalWidth() / 2; try { xFpLocation = mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen + com.android.systemui.res.R.dimen .physical_fingerprint_sensor_center_screen_location_x); } catch (Resources.NotFoundException e) { } @@ -635,7 +635,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, return new Point( (int) (xFpLocation * mScaleFactor), (int) (mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen + com.android.systemui.res.R.dimen .physical_fingerprint_sensor_center_screen_location_y) * mScaleFactor) ); @@ -815,7 +815,7 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks, mFaceProps = mFaceManager != null ? mFaceManager.getSensorPropertiesInternal() : null; int[] faceAuthLocation = context.getResources().getIntArray( - com.android.systemui.R.array.config_face_auth_props); + com.android.systemui.res.R.array.config_face_auth_props); if (faceAuthLocation == null || faceAuthLocation.length < 2) { mFaceSensorLocationDefault = null; } else { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthPanelController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthPanelController.java index 167067e7d7e92caf6c4c7181ceff05b0fbbfbb05..bc0c8c892be8698be589b4d3d82420b2e4cb4e3d 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthPanelController.java @@ -27,7 +27,7 @@ import android.view.View; import android.view.ViewOutlineProvider; import android.view.animation.AccelerateDecelerateInterpolator; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt index 141983ba548dd96f910f61d220355d54669632d3..c09e68d4ace6b162189aa86c20892e6cc84f0f53 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt @@ -31,7 +31,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.keyguard.logging.KeyguardLogger import com.android.settingslib.Utils import com.android.systemui.CoreStartable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlags diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java index 3e6508c6da706b0b50b743f740ef8e575aa38da9..2962be8e55a21ad0d44a2da609d9603be2edb857 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java @@ -27,7 +27,7 @@ import android.hardware.fingerprint.FingerprintManager; import android.provider.Settings; import android.util.Log; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.phone.SystemUIDialog; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java index dc874d83b75b71f83fc1c4ca6a175d7658d5f82a..d6a4cbb674876047dc989157b3af451b4cc274e3 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java @@ -21,6 +21,8 @@ import static android.app.PendingIntent.FLAG_IMMUTABLE; import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FACE_REENROLL_DIALOG; import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -29,8 +31,10 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.biometrics.BiometricFaceConstants; -import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricSourceType; +import android.hardware.biometrics.BiometricStateListener; +import android.hardware.face.FaceManager; +import android.hardware.fingerprint.FingerprintManager; import android.os.Handler; import android.os.UserHandle; import android.provider.Settings; @@ -39,10 +43,12 @@ import android.util.Log; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.policy.KeyguardStateController; +import java.util.Optional; + import javax.inject.Inject; /** @@ -66,6 +72,9 @@ public class BiometricNotificationService implements CoreStartable { private final Handler mHandler; private final NotificationManager mNotificationManager; private final BiometricNotificationBroadcastReceiver mBroadcastReceiver; + private final FingerprintReEnrollNotification mFingerprintReEnrollNotification; + private final FingerprintManager mFingerprintManager; + private final FaceManager mFaceManager; private NotificationChannel mNotificationChannel; private boolean mFaceNotificationQueued; private boolean mFingerprintNotificationQueued; @@ -102,26 +111,53 @@ public class BiometricNotificationService implements CoreStartable { Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_REQUIRED, UserHandle.USER_CURRENT); - } else if (msgId == BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL - && biometricSourceType == BiometricSourceType.FINGERPRINT) { + } + } + + @Override + public void onBiometricHelp(int msgId, String helpString, + BiometricSourceType biometricSourceType) { + if (biometricSourceType == BiometricSourceType.FINGERPRINT + && mFingerprintReEnrollNotification.isFingerprintReEnrollRequired( + msgId)) { mFingerprintReenrollRequired = true; } } }; + private final BiometricStateListener mFaceStateListener = new BiometricStateListener() { + @Override + public void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments) { + mNotificationManager.cancelAsUser(TAG, FACE_NOTIFICATION_ID, UserHandle.CURRENT); + } + }; + + private final BiometricStateListener mFingerprintStateListener = new BiometricStateListener() { + @Override + public void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments) { + mNotificationManager.cancelAsUser(TAG, FINGERPRINT_NOTIFICATION_ID, UserHandle.CURRENT); + } + }; @Inject - public BiometricNotificationService(Context context, - KeyguardUpdateMonitor keyguardUpdateMonitor, - KeyguardStateController keyguardStateController, - Handler handler, NotificationManager notificationManager, - BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver) { + public BiometricNotificationService(@NonNull Context context, + @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, + @NonNull KeyguardStateController keyguardStateController, + @NonNull Handler handler, @NonNull NotificationManager notificationManager, + @NonNull BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver, + @NonNull Optional<FingerprintReEnrollNotification> fingerprintReEnrollNotification, + @Nullable FingerprintManager fingerprintManager, + @Nullable FaceManager faceManager) { mContext = context; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardStateController = keyguardStateController; mHandler = handler; mNotificationManager = notificationManager; mBroadcastReceiver = biometricNotificationBroadcastReceiver; + mFingerprintReEnrollNotification = fingerprintReEnrollNotification.orElse( + new FingerprintReEnrollNotificationImpl()); + mFingerprintManager = fingerprintManager; + mFaceManager = faceManager; } @Override @@ -135,12 +171,19 @@ public class BiometricNotificationService implements CoreStartable { intentFilter.addAction(ACTION_SHOW_FACE_REENROLL_DIALOG); mContext.registerReceiver(mBroadcastReceiver, intentFilter, Context.RECEIVER_EXPORTED_UNAUDITED); + if (mFingerprintManager != null) { + mFingerprintManager.registerBiometricStateListener(mFingerprintStateListener); + } + if (mFaceManager != null) { + mFaceManager.registerBiometricStateListener(mFaceStateListener); + } Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_NOT_REQUIRED, UserHandle.USER_CURRENT); } private void queueFaceReenrollNotification() { + Log.d(TAG, "Face re-enroll notification queued."); mFaceNotificationQueued = true; final String title = mContext.getString(R.string.face_re_enroll_notification_title); final String content = mContext.getString( @@ -153,6 +196,7 @@ public class BiometricNotificationService implements CoreStartable { } private void queueFingerprintReenrollNotification() { + Log.d(TAG, "Fingerprint re-enroll notification queued."); mFingerprintNotificationQueued = true; final String title = mContext.getString(R.string.fingerprint_re_enroll_notification_title); final String content = mContext.getString( diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FaceAuthAccessibilityDelegate.kt b/packages/SystemUI/src/com/android/systemui/biometrics/FaceAuthAccessibilityDelegate.kt index a24a47bb44df32ac3d18260a7a785f4899060a77..bbdcadbb19c62fb9462106f935b1f4e385ed6c36 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FaceAuthAccessibilityDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FaceAuthAccessibilityDelegate.kt @@ -22,7 +22,7 @@ import android.view.View import android.view.accessibility.AccessibilityNodeInfo import com.android.keyguard.FaceAuthApiRequestReason import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FaceHelpMessageDeferral.kt b/packages/SystemUI/src/com/android/systemui/biometrics/FaceHelpMessageDeferral.kt index 320e362dd9c7ee2a05ad6b717898f6028263b348..b015f7078a832d4afc84924cb862d3305b245c74 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FaceHelpMessageDeferral.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FaceHelpMessageDeferral.kt @@ -20,7 +20,7 @@ import android.content.res.Resources import com.android.keyguard.logging.BiometricMessageDeferralLogger import com.android.keyguard.logging.FaceMessageDeferralLogger import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java new file mode 100644 index 0000000000000000000000000000000000000000..9050f26d39e40a469a2023085168c1c3cdd9684e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.biometrics; + +import android.hardware.biometrics.BiometricFingerprintConstants; + +/** + * Checks if the fingerprint HAL has sent a re-enrollment request. + */ +public interface FingerprintReEnrollNotification { + //TODO: Remove this class and add a constant in the HAL API instead (b/281841852) + /** Returns true if msgId corresponds to FINGERPRINT_ACQUIRED_RE_ENROLL. */ + boolean isFingerprintReEnrollRequired( + @BiometricFingerprintConstants.FingerprintAcquired int msgId); +} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..1f86bc6ae298c4e28cfdd19174f43fe709f40e90 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.biometrics; + +import android.hardware.biometrics.BiometricFingerprintConstants; + +/** + * Checks if the fingerprint HAL has sent a re-enrollment request. + */ +public class FingerprintReEnrollNotificationImpl implements FingerprintReEnrollNotification{ + @Override + public boolean isFingerprintReEnrollRequired(int msgId) { + return msgId == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_RE_ENROLL; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt index 017ac6019b65ff6fc6c2d443e828d5c8cd6db732..c1f6259d94f73cf6ea9c60dd2a60cf2296d44437 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt @@ -54,7 +54,7 @@ import com.android.app.animation.Interpolators import com.android.internal.annotations.VisibleForTesting import com.android.keyguard.KeyguardPINView import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index 0264356230429493abd2c328520b2c493cf06420..46d3c8a0c3e344049a6ef848e82713335f5f9112 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -580,7 +580,9 @@ public class UdfpsController implements DozeReceiver, Dumpable { + mOverlay.getRequestId()); return false; } - if (mLockscreenShadeTransitionController.getQSDragProgress() != 0f + + if ((mLockscreenShadeTransitionController.getQSDragProgress() != 0f + && !mAlternateBouncerInteractor.isVisibleState()) || mPrimaryBouncerInteractor.isInTransit()) { return false; } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt index 941df687ead99f2db8c8f7f469e0037309e1e969..34a0d8a46e5265e2d4f140159db50482a53dacd7 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt @@ -46,7 +46,7 @@ import android.view.accessibility.AccessibilityManager.TouchExplorationStateChan import androidx.annotation.LayoutRes import androidx.annotation.VisibleForTesting import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.biometrics.ui.controller.UdfpsKeyguardViewController diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java index 16dc42acde46138ac526599c60f8c6a15c57bf59..abbfa017c13e4d68a0a92cc5e561170dde5c41f1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java @@ -35,7 +35,7 @@ import android.view.WindowMetrics; import android.widget.FrameLayout; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Adapter that remeasures an auth dialog view to ensure that it matches the location of a physical diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.kt index 511b4e34fa0ee25db5ba9041d97577d087d0bfdc..c16dfb1ea1a83bc26f530a8bfae1024459ce77aa 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.kt @@ -24,7 +24,7 @@ import android.graphics.drawable.Drawable import android.graphics.drawable.ShapeDrawable import android.graphics.drawable.shapes.PathShape import android.util.PathParser -import com.android.systemui.R +import com.android.systemui.res.R private const val DEFAULT_STROKE_WIDTH = 3f diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsFpmEmptyView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsFpmEmptyView.kt index 5dafa61f9a27faddeefcc5864b188da713054f8a..0838855f475646c1221d60276392e586aac036b4 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsFpmEmptyView.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsFpmEmptyView.kt @@ -20,7 +20,7 @@ import android.graphics.Rect import android.util.AttributeSet import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R /** * View corresponding with udfps_fpm_empty_view.xml diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardAccessibilityDelegate.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardAccessibilityDelegate.kt index 84978790f49cdc28c1b471c7f69f51d019cf0ffa..99da660d1fda5d0c5f942b94832c815a3f7babfb 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardAccessibilityDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardAccessibilityDelegate.kt @@ -20,7 +20,7 @@ import android.content.res.Resources import android.os.Bundle import android.view.View import android.view.accessibility.AccessibilityNodeInfo -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt index 84a746ca2b8fa4192588c8c12e6a8ca4d28c4f01..8ce98a92adbdd32eede61661de3504b9b961569e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt @@ -27,7 +27,7 @@ import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators import com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacy.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacy.java index b916810c57d0842d29d2e728e50e751095203501..36a42f94523546481d9c4c3bcd45cc6f1f1c9d48 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacy.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacy.java @@ -42,7 +42,7 @@ import androidx.asynclayoutinflater.view.AsyncLayoutInflater; import com.android.app.animation.Interpolators; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieProperty; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt index 54e62154bca36fe4104b24ea2a742cae38de9f5b..6ce6172c9faac1b8ea99b70219f13b5c23b19ba3 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt @@ -26,7 +26,7 @@ import android.util.AttributeSet import android.util.Log import android.view.MotionEvent import android.widget.FrameLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.doze.DozeReceiver diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/CredentialInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/CredentialInteractor.kt index 2a026675adcb3c82ae57c14895dc39b185c6823f..191533c8f37777f648ff33fc7967536fa3d9d1ed 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/CredentialInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/CredentialInteractor.kt @@ -7,7 +7,7 @@ import android.os.UserManager import com.android.internal.widget.LockPatternUtils import com.android.internal.widget.LockscreenCredential import com.android.internal.widget.VerifyCredentialResponse -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.domain.model.BiometricPromptRequest import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.util.time.SystemClock diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/BiometricPromptLayout.java b/packages/SystemUI/src/com/android/systemui/biometrics/ui/BiometricPromptLayout.java index fb246cd51d8aab3a1d33aa2d96063622031c53a8..cef0be09d3ce1e377273fbdef23c1d21ce2c88b5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/BiometricPromptLayout.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/BiometricPromptLayout.java @@ -29,7 +29,7 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthBiometricFingerprintIconController; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.AuthDialog; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt index a7ecf38ef598b69c6f014aad39afd19c2678ffe4..56e3f3995d1c18836ffaf386f7afe16f543eb075 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt @@ -10,7 +10,7 @@ import android.view.WindowInsets.Type.ime import android.view.accessibility.AccessibilityManager import android.widget.LinearLayout import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthPanelController import com.android.systemui.biometrics.ui.binder.CredentialViewBinder import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt index 02847c28373802275f3d085bc7e5f40a5a49d185..c29efc0fcab96efc82b95bb3f596985afff0e510 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt @@ -38,7 +38,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.airbnb.lottie.LottieAnimationView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthBiometricFaceIconController import com.android.systemui.biometrics.AuthBiometricFingerprintAndFaceIconController import com.android.systemui.biometrics.AuthBiometricFingerprintIconController diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewSizeBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewSizeBinder.kt index b9af03166fedde7efff2a2dfeff89dca9da50915..7e16d1e1d6689d46feaf9eaac36635c1813c74b5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewSizeBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewSizeBinder.kt @@ -30,7 +30,7 @@ import androidx.core.animation.addListener import androidx.core.view.doOnLayout import androidx.core.view.isGone import androidx.lifecycle.lifecycleScope -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthPanelController import com.android.systemui.biometrics.Utils import com.android.systemui.biometrics.ui.BiometricPromptLayout diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPasswordViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPasswordViewBinder.kt index 996b62e084cbce30b82fcf2bfd0d80a100d29ec5..0ad07ba924a08dbbcf57b8106eada324d28fbf50 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPasswordViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPasswordViewBinder.kt @@ -12,7 +12,7 @@ import android.window.OnBackInvokedDispatcher import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.CredentialPasswordView import com.android.systemui.biometrics.ui.CredentialView import com.android.systemui.biometrics.ui.IPinPad diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPatternViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPatternViewBinder.kt index b692ad35caeecabc75994d3df443427a3717b644..eff6987050420112b186046cbaad939413780720 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPatternViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialPatternViewBinder.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.internal.widget.LockPatternUtils import com.android.internal.widget.LockPatternView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.CredentialPatternView import com.android.systemui.biometrics.ui.CredentialView import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt index 931946aaa3824f32b94c25697730c07f07323002..ce52e1d78fda11734ebbcdbb8450502bd6c50043 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/CredentialViewBinder.kt @@ -8,7 +8,7 @@ import android.widget.TextView import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthPanelController import com.android.systemui.biometrics.ui.CredentialPasswordView import com.android.systemui.biometrics.ui.CredentialPatternView diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PinPadViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PinPadViewBinder.kt index 906206c274559ad18a8ff5e57ce8a0eb6e618d71..05fdb2f22a9fc20e5d10ba2ab8d69755de1db7ab 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PinPadViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PinPadViewBinder.kt @@ -20,7 +20,7 @@ package com.android.systemui.biometrics.ui.binder import android.view.KeyEvent import android.widget.ImeAwareEditText import com.android.internal.widget.LockscreenCredential -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.ui.CredentialPasswordView import com.android.systemui.biometrics.ui.IPinPad import com.android.systemui.biometrics.ui.PinPadClickListener diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt index 6212ef000ff140675673a8b43c7405f64d82e714..03c5c5354ad7e0f785d1913b20a93a30434403d5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModel.kt @@ -4,7 +4,7 @@ import android.content.Context import android.graphics.drawable.Drawable import android.text.InputType import com.android.internal.widget.LockPatternView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.Utils import com.android.systemui.biometrics.domain.interactor.CredentialStatus import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt index b406ea41eff0ff11ec2400febefc1454981f2b27..a95e257188dc6c3032e3f989969b521ddc866f82 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt @@ -20,7 +20,7 @@ package com.android.systemui.biometrics.ui.viewmodel import android.annotation.RawRes import android.content.res.Configuration import android.view.Surface -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor import com.android.systemui.biometrics.shared.model.FingerprintSensorType diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java index 83e61d69e4f3c8eaf4ff341e7d2de1cc40293924..00e9527184367b0fd6146222c5a4d7dc359bb4b8 100644 --- a/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java +++ b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java @@ -38,7 +38,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.MediaOutputConstants; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.media.controls.util.MediaDataUtils; import com.android.systemui.media.dialog.MediaOutputDialogFactory; diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt b/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt index 64bf688b3c5de34f487f6c4c33b9277fba1f268a..f93337c993c89e28b2f9741457542607319b304d 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt @@ -36,46 +36,46 @@ import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FOR_MAINL import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST -import com.android.systemui.R.string.bouncer_face_not_recognized -import com.android.systemui.R.string.keyguard_enter_password -import com.android.systemui.R.string.keyguard_enter_pattern -import com.android.systemui.R.string.keyguard_enter_pin -import com.android.systemui.R.string.kg_bio_too_many_attempts_password -import com.android.systemui.R.string.kg_bio_too_many_attempts_pattern -import com.android.systemui.R.string.kg_bio_too_many_attempts_pin -import com.android.systemui.R.string.kg_bio_try_again_or_password -import com.android.systemui.R.string.kg_bio_try_again_or_pattern -import com.android.systemui.R.string.kg_bio_try_again_or_pin -import com.android.systemui.R.string.kg_face_locked_out -import com.android.systemui.R.string.kg_fp_locked_out -import com.android.systemui.R.string.kg_fp_not_recognized -import com.android.systemui.R.string.kg_primary_auth_locked_out_password -import com.android.systemui.R.string.kg_primary_auth_locked_out_pattern -import com.android.systemui.R.string.kg_primary_auth_locked_out_pin -import com.android.systemui.R.string.kg_prompt_after_dpm_lock -import com.android.systemui.R.string.kg_prompt_after_update_password -import com.android.systemui.R.string.kg_prompt_after_update_pattern -import com.android.systemui.R.string.kg_prompt_after_update_pin -import com.android.systemui.R.string.kg_prompt_after_user_lockdown_password -import com.android.systemui.R.string.kg_prompt_after_user_lockdown_pattern -import com.android.systemui.R.string.kg_prompt_after_user_lockdown_pin -import com.android.systemui.R.string.kg_prompt_auth_timeout -import com.android.systemui.R.string.kg_prompt_password_auth_timeout -import com.android.systemui.R.string.kg_prompt_pattern_auth_timeout -import com.android.systemui.R.string.kg_prompt_pin_auth_timeout -import com.android.systemui.R.string.kg_prompt_reason_restart_password -import com.android.systemui.R.string.kg_prompt_reason_restart_pattern -import com.android.systemui.R.string.kg_prompt_reason_restart_pin -import com.android.systemui.R.string.kg_prompt_unattended_update -import com.android.systemui.R.string.kg_too_many_failed_attempts_countdown -import com.android.systemui.R.string.kg_trust_agent_disabled -import com.android.systemui.R.string.kg_unlock_with_password_or_fp -import com.android.systemui.R.string.kg_unlock_with_pattern_or_fp -import com.android.systemui.R.string.kg_unlock_with_pin_or_fp -import com.android.systemui.R.string.kg_wrong_input_try_fp_suggestion -import com.android.systemui.R.string.kg_wrong_password_try_again -import com.android.systemui.R.string.kg_wrong_pattern_try_again -import com.android.systemui.R.string.kg_wrong_pin_try_again +import com.android.systemui.res.R.string.bouncer_face_not_recognized +import com.android.systemui.res.R.string.keyguard_enter_password +import com.android.systemui.res.R.string.keyguard_enter_pattern +import com.android.systemui.res.R.string.keyguard_enter_pin +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_password +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pattern +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pin +import com.android.systemui.res.R.string.kg_bio_try_again_or_password +import com.android.systemui.res.R.string.kg_bio_try_again_or_pattern +import com.android.systemui.res.R.string.kg_bio_try_again_or_pin +import com.android.systemui.res.R.string.kg_face_locked_out +import com.android.systemui.res.R.string.kg_fp_locked_out +import com.android.systemui.res.R.string.kg_fp_not_recognized +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_password +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pattern +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pin +import com.android.systemui.res.R.string.kg_prompt_after_dpm_lock +import com.android.systemui.res.R.string.kg_prompt_after_update_password +import com.android.systemui.res.R.string.kg_prompt_after_update_pattern +import com.android.systemui.res.R.string.kg_prompt_after_update_pin +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_password +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pattern +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pin +import com.android.systemui.res.R.string.kg_prompt_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_password_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_pattern_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_pin_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_reason_restart_password +import com.android.systemui.res.R.string.kg_prompt_reason_restart_pattern +import com.android.systemui.res.R.string.kg_prompt_reason_restart_pin +import com.android.systemui.res.R.string.kg_prompt_unattended_update +import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown +import com.android.systemui.res.R.string.kg_trust_agent_disabled +import com.android.systemui.res.R.string.kg_unlock_with_password_or_fp +import com.android.systemui.res.R.string.kg_unlock_with_pattern_or_fp +import com.android.systemui.res.R.string.kg_unlock_with_pin_or_fp +import com.android.systemui.res.R.string.kg_wrong_input_try_fp_suggestion +import com.android.systemui.res.R.string.kg_wrong_password_try_again +import com.android.systemui.res.R.string.kg_wrong_pattern_try_again +import com.android.systemui.res.R.string.kg_wrong_pin_try_again import com.android.systemui.bouncer.shared.model.BouncerMessageModel import com.android.systemui.bouncer.shared.model.Message import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt index abddb0a322ea70c70b3ceff5e2aa8346dd8a94f7..199036f09e9a10170599e50a748d758db3923d45 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.domain.interactor import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor import com.android.systemui.authentication.domain.model.AuthenticationMethodModel import com.android.systemui.authentication.shared.model.AuthenticationThrottlingModel diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt index 579f0b7b31853f797998dcc14583fd2cb57f2ec3..6e26fe9527498ea61e8b0d5e951eed935c84e122 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt @@ -28,7 +28,7 @@ import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.DejankUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN @@ -38,8 +38,6 @@ import com.android.systemui.classifier.FalsingCollector import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.flags.FeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository import com.android.systemui.plugins.ActivityStarter @@ -74,7 +72,6 @@ constructor( private val context: Context, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val trustRepository: TrustRepository, - private val featureFlags: FeatureFlags, @Application private val applicationScope: CoroutineScope, ) { private val passiveAuthBouncerDelay = @@ -135,11 +132,9 @@ constructor( init { keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback) - if (featureFlags.isEnabled(Flags.DELAY_BOUNCER)) { - applicationScope.launch { - trustRepository.isCurrentUserActiveUnlockRunning.collect { - currentUserActiveUnlockRunning = it - } + applicationScope.launch { + trustRepository.isCurrentUserActiveUnlockRunning.collect { + currentUserActiveUnlockRunning = it } } } @@ -415,9 +410,7 @@ constructor( currentUserActiveUnlockRunning && keyguardUpdateMonitor.canTriggerActiveUnlockBasedOnDeviceState() - return featureFlags.isEnabled(Flags.DELAY_BOUNCER) && - !needsFullscreenBouncer() && - (canRunFaceAuth || canRunActiveUnlock) + return !needsFullscreenBouncer() && (canRunFaceAuth || canRunActiveUnlock) } companion object { diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/BouncerMessageView.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/BouncerMessageView.kt index 648680293e3d818a46d05196df791358c5bd0b08..79a11ee888263d13d60621ba0038085f9baa4de3 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/BouncerMessageView.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/BouncerMessageView.kt @@ -22,7 +22,7 @@ import android.widget.LinearLayout import com.android.keyguard.BouncerKeyguardMessageArea import com.android.keyguard.KeyguardMessageArea import com.android.keyguard.KeyguardMessageAreaController -import com.android.systemui.R +import com.android.systemui.res.R class BouncerMessageView : LinearLayout { constructor(context: Context?) : super(context) diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModel.kt index f6794d4f40b3836bdb5df796871b354fc6e03463..15d1dae239a06788d38c028b140c6f817593f648 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModel.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.ui.viewmodel import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor import com.android.systemui.authentication.domain.model.AuthenticationMethodModel import com.android.systemui.bouncer.domain.interactor.BouncerInteractor diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt index cc43e7ed25a5744aa23c2f3eec0ed235a7441fca..1e17059d20e448150705d7455fb14981dfcf2e92 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt @@ -20,7 +20,7 @@ import android.content.Context import android.content.Intent import android.provider.MediaStore import android.text.TextUtils -import com.android.systemui.R +import com.android.systemui.res.R class CameraIntents { companion object { diff --git a/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt index ddb09749198816f50b314a51e2bbe2b4b7f4013b..718ef51aa1613fe29c605765ebb0cc4f01960b35 100644 --- a/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt @@ -27,7 +27,7 @@ import com.android.internal.annotations.VisibleForTesting import com.android.internal.logging.UiEvent import com.android.internal.logging.UiEventLogger import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java index 7bf8f4dac1fb13c3475c5fbeb71d28ec11449240..047d15daf6f80ea543e9695325f873639e980a0d 100644 --- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java +++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java @@ -32,7 +32,7 @@ import android.widget.TextView; import com.android.app.animation.Interpolators; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.surfaceeffects.ripple.RippleShader; import com.android.systemui.surfaceeffects.ripple.RippleShader.RippleShape; diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java index 0a1aed65c20565a149c3c772f740b0c7672b9543..2729b7b0a4fd458435354d8522f1a954c75901d0 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java @@ -19,7 +19,7 @@ package com.android.systemui.classifier; import android.content.res.Resources; import android.view.ViewConfiguration; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.scene.shared.flag.SceneContainerFlags; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardImageLoader.kt b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardImageLoader.kt index 0542e13ba6da4f37fde8036365ca8fe5a7587695..e83a825a007224b11b783d19ce9ac13211666574 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardImageLoader.kt +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardImageLoader.kt @@ -20,7 +20,7 @@ import android.graphics.Bitmap import android.net.Uri import android.util.Log import android.util.Size -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import java.io.IOException diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardModel.kt b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardModel.kt index 789833c6d8499a1ad13b4bf290b28abfad54842c..12597a7679fa1f870a6ce6b9dc32eeee1fb94e19 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardModel.kt +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardModel.kt @@ -24,7 +24,7 @@ import android.text.TextUtils import android.util.Log import android.util.Size import android.view.textclassifier.TextLinks -import com.android.systemui.R +import com.android.systemui.res.R import java.io.IOException data class ClipboardModel( diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index ffd836b3230f24dde241af2c3f554c504bc1c816..70736ae3fcc185b9e75817daac9ab631caa21f33 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -61,7 +61,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule.OverlayWindowContext; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java index 758a6563323e72339cf56c70219ea241d327bfcb..2406d6104c1a76e2b8d62691146645428799b564 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java @@ -30,7 +30,7 @@ import android.view.textclassifier.TextClassifier; import android.view.textclassifier.TextLinks; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.Optional; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayView.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayView.java index a76d2ea816a717f3bfb4f47a8cec6a0644caff96..2af49cfbf1b143d9e7d99a1d5aeab6b66591b34c 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayView.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayView.java @@ -54,7 +54,7 @@ import android.widget.TextView; import androidx.core.view.ViewCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.screenshot.DraggableConstraintLayout; import com.android.systemui.screenshot.FloatingWindowUtil; import com.android.systemui.screenshot.OverlayActionChip; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardToast.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardToast.java index e9daa462c02292b24df2b91dadfb4e2ce6c9bfd7..0a4d76ef1a92d8d2bd23d36f7e267a1c4bd8b4de 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardToast.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardToast.java @@ -19,7 +19,7 @@ package com.android.systemui.clipboardoverlay; import android.content.Context; import android.widget.Toast; -import com.android.systemui.R; +import com.android.systemui.res.R; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java index 1ffbe3230bdaa8cba36684a8ad4c1884829567ab..bb201b624a71d886bb934cec779afc2992e82843 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java @@ -31,7 +31,7 @@ import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Lightweight activity for editing text clipboard contents diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/IntentCreator.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/IntentCreator.java index d58fab45093d447ccf8f4e723381fcd618c6376d..a18b4c84b08151083b37bb4e16aab089e16e4bf8 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/IntentCreator.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/IntentCreator.java @@ -24,7 +24,7 @@ import android.content.Intent; import android.net.Uri; import android.text.TextUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; class IntentCreator { private static final String EXTRA_EDIT_SOURCE = "edit_source"; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/dagger/ClipboardOverlayModule.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/dagger/ClipboardOverlayModule.java index 09b2e44c1be1bf8ed966d028719c4760ae20582c..0fd34bd757b0fde392b4ce1b0027b5fbbe2ade66 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/dagger/ClipboardOverlayModule.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/dagger/ClipboardOverlayModule.java @@ -25,7 +25,7 @@ import android.hardware.display.DisplayManager; import android.view.Display; import android.view.LayoutInflater; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.clipboardoverlay.ClipboardOverlayView; import com.android.systemui.settings.DisplayTracker; diff --git a/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java b/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java index f362831e8c883ba3c02103f87bcd9e2ff1dc40ed..7fe00322ef27ee372e84ef42e04ab68d0ec91fa2 100644 --- a/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java +++ b/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java @@ -29,7 +29,7 @@ import android.widget.LinearLayout; import android.widget.SeekBar; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/binder/CommunalWidgetViewBinder.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/binder/CommunalWidgetViewBinder.kt index 1b6d3a8095f037703e7567cf587ba9c880053080..65bf4b3e69cd9f64d63ccc8c9b9556e4f0ffd573 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/ui/binder/CommunalWidgetViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/ui/binder/CommunalWidgetViewBinder.kt @@ -18,7 +18,7 @@ package com.android.systemui.communal.ui.binder import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.communal.ui.adapter.CommunalWidgetViewAdapter import com.android.systemui.communal.ui.view.CommunalWidgetWrapper import com.android.systemui.communal.ui.viewmodel.CommunalWidgetViewModel diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/view/CommunalWidgetWrapper.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/view/CommunalWidgetWrapper.kt index 560f4fac048f57b951e1a56684be3cbf940881eb..039078eb1f21749a8ba826c7e57679b67f1d24a8 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/ui/view/CommunalWidgetWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/ui/view/CommunalWidgetWrapper.kt @@ -20,7 +20,7 @@ package com.android.systemui.communal.ui.view import android.content.Context import android.util.AttributeSet import android.widget.LinearLayout -import com.android.systemui.R +import com.android.systemui.res.R /** Wraps around a widget rendered in communal mode. */ class CommunalWidgetWrapper(context: Context, attrs: AttributeSet? = null) : diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/view/layout/sections/DefaultCommunalWidgetSection.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/view/layout/sections/DefaultCommunalWidgetSection.kt index 8640c97bb1e159e3cf85ffa8ac083b941f62b8fa..c3e8a96701ead940e461e52bc8f7d724238a3d84 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/ui/view/layout/sections/DefaultCommunalWidgetSection.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/ui/view/layout/sections/DefaultCommunalWidgetSection.kt @@ -22,7 +22,7 @@ import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet.BOTTOM import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.communal.ui.adapter.CommunalWidgetViewAdapter import com.android.systemui.communal.ui.binder.CommunalWidgetViewBinder import com.android.systemui.communal.ui.viewmodel.CommunalWidgetViewModel diff --git a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java index e1dd1a69158bd55bb069e1fdbfd656df9dfe3a70..20b2494a6c295fbfee0cafad04519a06663eb9f4 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java +++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java @@ -40,7 +40,7 @@ import android.view.ViewGroup; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Constraints; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.ComplicationLayoutParams.Direction; import com.android.systemui.complication.ComplicationLayoutParams.Position; import com.android.systemui.complication.dagger.ComplicationModule; diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java index a7d017dda21e3e6e560ebd7d4510837fec36846d..712213ab0b124b4c65d569353519d94554243c43 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java +++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java @@ -22,7 +22,7 @@ import android.view.LayoutInflater; import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.util.Preconditions; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import dagger.Module; diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationComponent.kt b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationComponent.kt index 87c3b2f4117b4f6dad9f943ce3078fda9fdcb7e1..099e3fcf227dc598ca7d83418e7fd3735efec9f6 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationComponent.kt @@ -21,7 +21,7 @@ import android.view.LayoutInflater import android.view.View import android.widget.TextClock import com.android.internal.util.Preconditions -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.complication.DreamClockTimeComplication import com.android.systemui.complication.DreamClockTimeComplication.DreamClockTimeViewHolder import dagger.Module diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java index 2b5aa7cd9c51c8a830ece7a935d2f25a7392811a..08d0595eba23ff12263773de0f7b744df597886e 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java +++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java @@ -25,7 +25,7 @@ import android.view.LayoutInflater; import android.widget.ImageView; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.DreamHomeControlsComplication; import com.android.systemui.shared.shadow.DoubleShadowIconDrawable; import com.android.systemui.shared.shadow.DoubleShadowTextHelper; diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java index f15a5862104f43b8087feffe0b0fcf362670dacc..c0a292cd0d33fdd9cc599a57d6814870f8544bef 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java +++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java @@ -21,7 +21,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import android.view.LayoutInflater; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.DreamMediaEntryComplication; import dagger.Module; diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java index 776c9721aea567baceafe2ec6640d590ffeefc40..92fdb1e69c8309b7d1cedc8c2ea02ae1930bdc8a 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java @@ -19,7 +19,7 @@ package com.android.systemui.complication.dagger; import android.content.res.Resources; import android.view.ViewGroup; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.ComplicationLayoutParams; import com.android.systemui.dagger.SystemUIBinder; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt b/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt index e627b68dc171f460ea7ff87276fafd6393817f37..e9b59306c552a0172ca4a053b8eb83d2f83aba41 100644 --- a/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt @@ -28,7 +28,7 @@ import android.view.LayoutInflater import android.view.View import android.widget.FrameLayout import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.SystemUIDialog diff --git a/packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt b/packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt index adb0bf38b51fc761ff921785a5159f7aa79ca5b2..97b4c94cb9a98655915541b2626c665ffe074c92 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt @@ -32,7 +32,7 @@ import android.service.controls.ControlsProviderService import android.util.IconDrawableFactory import androidx.annotation.WorkerThread import com.android.settingslib.applications.DefaultAppInfo -import com.android.systemui.R +import com.android.systemui.res.R import java.util.Objects open class ControlsServiceInfo( diff --git a/packages/SystemUI/src/com/android/systemui/controls/TooltipManager.kt b/packages/SystemUI/src/com/android/systemui/controls/TooltipManager.kt index 6e17bc94b16bf8112a58404fcabc0721e8d96f0f..21458e89583ee51d61cfda3a084456b1b4297748 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/TooltipManager.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/TooltipManager.kt @@ -28,7 +28,7 @@ import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator import android.widget.TextView import com.android.systemui.Prefs -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.recents.TriangleShape /** diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImpl.kt index 02490605fbb81f204af3a9191f098c35f91d5db7..05ff7b71684c60b5187bc701bae7709177004fe2 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImpl.kt @@ -16,7 +16,7 @@ package com.android.systemui.controls.controller -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt index 3fe0f03488d1aa1266d9d5249400cd9a1ede1558..72483bbe135dac063cd211f442f7b11646ad638e 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt @@ -26,7 +26,7 @@ import android.widget.TextView import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.util.icuMessageFormat import java.text.Collator diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt index ec76f433b23b1fcb45fd128f771156fd8ad35aaf..f034851e5d8072feb8437bb2d69d3ab17771758d 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt @@ -36,7 +36,7 @@ import androidx.core.view.AccessibilityDelegateCompat import androidx.core.view.ViewCompat import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlInterface import com.android.systemui.controls.ui.CanUseIconPredicate import com.android.systemui.controls.ui.RenderInfo diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsAnimations.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsAnimations.kt index b447d66c08dd4ef24ee341f40ddd799f746aea6f..a534097458f7337c3d355a571c1d21efa8cd8988 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsAnimations.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsAnimations.kt @@ -31,7 +31,7 @@ import android.view.Window import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.controls.ui.ControlsUiController diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt index 4c9dbe02fad8f090cc505e40e7c05b34721fcd83..41edb4a1ffaf5a7ea9787f3d872b821a345aaa62 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt @@ -34,7 +34,7 @@ import androidx.activity.ComponentActivity import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.CustomIconCache import com.android.systemui.controls.controller.ControlsControllerImpl import com.android.systemui.controls.controller.StructureInfo diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt index 8bae6674aa11f020a290b97033be8c048fa8402a..2ea4303e2290d33d223f083ef1feb9476f735f76 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt @@ -39,7 +39,7 @@ import androidx.activity.ComponentActivity import androidx.annotation.VisibleForTesting import androidx.viewpager2.widget.ViewPager2 import com.android.systemui.Prefs -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.TooltipManager import com.android.systemui.controls.controller.ControlsControllerImpl import com.android.systemui.controls.controller.StructureInfo diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt index d5b8693af42de0a3c3e6a82b40d825a74172a272..10a0117f87572197f87b503485326fab211068e6 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt @@ -35,7 +35,7 @@ import androidx.activity.ComponentActivity import androidx.annotation.VisibleForTesting import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.controller.ControlsController import com.android.systemui.controls.panels.AuthorizedPanelsRepository diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt index 86bde5c3cf4d87e8649818118fd26256a3217e09..d7a68b317a616e6159a54b30971451719b80edf8 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt @@ -32,7 +32,7 @@ import android.view.View import android.widget.ImageView import android.widget.TextView import androidx.activity.ComponentActivity -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.controller.ControlInfo import com.android.systemui.controls.controller.ControlsController diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt index 6f87aa996f94dd7458d8c6b210a761d00c1ef333..5df26b3176ff9c0b272334da3205ff1be427d783 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt @@ -20,7 +20,7 @@ package com.android.systemui.controls.management import android.app.Dialog import android.content.Context import android.content.DialogInterface -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog import java.util.function.Consumer import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/StructureAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/StructureAdapter.kt index 5977d379acde26b66fbb2976e59887fbaba563df..7e56077dec29be8ca50211ee9db1eb8117045473 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/StructureAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/StructureAdapter.kt @@ -21,7 +21,7 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R class StructureAdapter( private val models: List<StructureContainer>, diff --git a/packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt index 4aef20928bb8fa55edf823a270cb3b2730355503..4e935df12ac14d34ff785bb6c20ab60374b856a4 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt @@ -19,7 +19,7 @@ package com.android.systemui.controls.panels import android.content.Context import android.content.SharedPreferences -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl diff --git a/packages/SystemUI/src/com/android/systemui/controls/settings/ControlsSettingsDialogManager.kt b/packages/SystemUI/src/com/android/systemui/controls/settings/ControlsSettingsDialogManager.kt index 501bcf054d20262f9b6d7e65c7ea3c2fd0cfb537..4e391b7662e3171cef1b9dd7f2ea960e2c3e4311 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/settings/ControlsSettingsDialogManager.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/settings/ControlsSettingsDialogManager.kt @@ -24,7 +24,7 @@ import android.content.DialogInterface import android.content.SharedPreferences import android.provider.Settings import androidx.annotation.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.settings.ControlsSettingsDialogManager.Companion.MAX_NUMBER_ATTEMPTS_CONTROLS_DIALOG import com.android.systemui.controls.settings.ControlsSettingsDialogManager.Companion.PREFS_SETTINGS_DIALOG_ATTEMPTS import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt index a13f717bc77d762b47d31963d4ffb3d95db56b15..7e039cdcf2049d6a89b69cbbf28cfae94cf7b9c4 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt @@ -32,7 +32,7 @@ import android.view.inputmethod.InputMethodManager import android.widget.CheckBox import android.widget.EditText -import com.android.systemui.R +import com.android.systemui.res.R /** * Creates all dialogs for challengeValues that can occur from a call to diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt index abe342320858251d257ab11107d9d46622caf55f..fdb9971a7d63c9c16926a7f43bdb1d8303f8aa8b 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt @@ -49,7 +49,7 @@ import android.widget.TextView import androidx.annotation.ColorInt import androidx.annotation.VisibleForTesting import com.android.internal.graphics.ColorUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.controls.ControlsMetricsLogger import com.android.systemui.controls.controller.ControlsController diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsActivity.kt index 8341964e15339ac5344c8ba172dcc0fdb6dd5e9c..955a5a35d82fe92d12c06bb1ac6fb3493c4ecd3b 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsActivity.kt @@ -31,7 +31,7 @@ import android.view.WindowInsets import android.view.WindowInsets.Type import android.view.WindowManager import androidx.activity.ComponentActivity -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.controls.management.ControlsAnimations import com.android.systemui.controls.settings.ControlsSettingsDialogManager diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt index d6cfb79101d7a40c6195694f0e63c5926737edb6..2ad6014fd7cd4303d992b3202509147746630d9b 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt @@ -20,7 +20,7 @@ package com.android.systemui.controls.ui import android.app.Dialog import android.content.Context import android.content.DialogInterface -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog import java.util.function.Consumer import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt index f7c8e9652e4efe223b86bd463daec603d47d3a1b..252f02ec2466bc0e4329f7f0cf2c02620fe20c22 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt @@ -30,7 +30,7 @@ import android.view.ViewGroup import android.widget.ListPopupWindow import android.widget.ListView import android.widget.PopupWindow -import com.android.systemui.R +import com.android.systemui.res.R import kotlin.math.max class ControlsPopupMenu(context: Context) : ListPopupWindow(context) { diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index 3cdf9ab69942201b398b2b9ba8527194f568881a..be9a2993dab1e5bf9503df423445a0ba1f15178c 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -51,7 +51,7 @@ import android.widget.Space import android.widget.TextView import androidx.annotation.VisibleForTesting import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlsMetricsLogger import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.CustomIconCache diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt index 98f17f409184fbdfca9685a0f1e3619909f2dc08..9b93522b2d5fc1cd369ca6fca8e6b4f8f7b3c06e 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt @@ -34,7 +34,7 @@ import android.view.WindowInsets.Type import android.view.WindowManager import android.widget.ImageView import com.android.internal.policy.ScreenDecorationsUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastSender import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.policy.KeyguardStateController diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/PanelTaskViewController.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/PanelTaskViewController.kt index db009dc46d8922ed1f88805cba5f07daee3a8d3d..1b0d03276415976f039550f604bdd7e3788d52af 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/PanelTaskViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/PanelTaskViewController.kt @@ -28,7 +28,7 @@ import android.graphics.drawable.ShapeDrawable import android.graphics.drawable.shapes.RoundRectShape import android.os.Trace import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.util.boundsOnScreen import com.android.wm.shell.taskview.TaskView import java.util.concurrent.Executor diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/RenderInfo.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/RenderInfo.kt index dbbda9aad51879c8954230b6cf6f0a204a6fafa2..ac589eb900a3f6a11fb7fa9d91a937bad92a206f 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/RenderInfo.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/RenderInfo.kt @@ -26,7 +26,7 @@ import android.service.controls.templates.TemperatureControlTemplate import android.util.ArrayMap import android.util.SparseArray -import com.android.systemui.R +import com.android.systemui.res.R data class RenderInfo( val icon: Drawable, diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/StatusBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/StatusBehavior.kt index 3c2bfa0efc396949de6e7b4d0545f7a92a8850f1..0706a967056152f850099cfd8fa1798bcad310e0 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/StatusBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/StatusBehavior.kt @@ -26,7 +26,7 @@ import android.service.controls.Control import android.view.View import android.view.WindowManager -import com.android.systemui.R +import com.android.systemui.res.R class StatusBehavior : Behavior { lateinit var cvh: ControlViewHolder diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt index 39d69704d8171e03869f52c342dc730bac0204f1..2c9eb3e058bdcb969ac8406ecec054b9eb4d8a82 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt @@ -22,7 +22,7 @@ import android.service.controls.Control import android.service.controls.templates.ControlTemplate import android.service.controls.templates.TemperatureControlTemplate -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ThumbnailBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ThumbnailBehavior.kt index d011dd421f7ff553a2f1c2679e94f074b389bf45..41907882a443e5282cd77b6bbcb5774a043f93c9 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ThumbnailBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ThumbnailBehavior.kt @@ -26,7 +26,7 @@ import android.service.controls.templates.TemperatureControlTemplate import android.service.controls.templates.ThumbnailTemplate import android.util.TypedValue -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt index dc7247cd70963de018ee377f7cd9983a25a355ba..4f47012b3e9363e283d25d53b5899bf49d4348f5 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt @@ -23,7 +23,7 @@ import android.service.controls.templates.TemperatureControlTemplate import android.service.controls.templates.ToggleTemplate import android.util.Log import android.view.View -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL class ToggleBehavior : Behavior { diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt index 0d570d2dcc73579920b87cc986b82f55bc118194..e34a94b6ccf715fc3019ee3d5a1594363d87c144 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt @@ -37,7 +37,7 @@ import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityNodeInfo -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt index 9dd0f534e3a840f07e0c2dd509374f2c78bcf019..580a615567406a7ea8db5d8839beda63873d75b6 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt @@ -23,7 +23,7 @@ import android.service.controls.Control import android.service.controls.templates.ControlTemplate import android.service.controls.templates.StatelessTemplate -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 58ba3c9c99159c95e60fc02bc03da3aafb722067..a325ee2038380f2d48e9fdcb28969b9a960126cf 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -35,6 +35,7 @@ import com.android.systemui.assist.AssistModule; import com.android.systemui.authentication.AuthenticationModule; import com.android.systemui.biometrics.AlternateUdfpsTouchProvider; import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; +import com.android.systemui.biometrics.FingerprintReEnrollNotification; import com.android.systemui.biometrics.UdfpsDisplayModeProvider; import com.android.systemui.biometrics.dagger.BiometricsModule; import com.android.systemui.bouncer.ui.BouncerViewModule; @@ -299,6 +300,9 @@ public abstract class SystemUIModule { @BindsOptionalOf abstract SystemStatusAnimationScheduler optionalSystemStatusAnimationScheduler(); + @BindsOptionalOf + abstract FingerprintReEnrollNotification optionalFingerprintReEnrollNotification(); + @SysUISingleton @Binds abstract SystemClock bindSystemClock(SystemClockImpl systemClock); diff --git a/packages/SystemUI/src/com/android/systemui/decor/CutoutDecorProviderImpl.kt b/packages/SystemUI/src/com/android/systemui/decor/CutoutDecorProviderImpl.kt index ded0fb79cd6feac79676fa9ae077084d5e4355a1..dbe6b0ba3719f4287b0882faf433f5aada783271 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/CutoutDecorProviderImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/CutoutDecorProviderImpl.kt @@ -21,7 +21,7 @@ import android.view.DisplayCutout import android.view.Surface import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.ScreenDecorations.DisplayCutoutView class CutoutDecorProviderImpl( diff --git a/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt index ac0d3c8f3d36e7f8b04b63b43301effa13eeb943..31a5d37a445029060bd52dc16a2bcdd1fb6ddf03 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt @@ -115,7 +115,7 @@ class FaceScanningOverlayProviderImpl( private val logger: ScreenDecorationsLogger, private val featureFlags: FeatureFlags, ) : BoundDecorProvider() { - override val viewId: Int = com.android.systemui.R.id.face_scanning_anim + override val viewId: Int = com.android.systemui.res.R.id.face_scanning_anim override fun onReloadResAndMeasure( view: View, diff --git a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt index 8cfd39148f1ccf57b4f7f33b723c00bb96b8e956..14ecc66f555e41fe2d2eb67bbd1a6bc74729219a 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt @@ -23,7 +23,7 @@ import android.view.LayoutInflater import android.view.Surface import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt index 0ffb4fb5b45636eb2024f81a522d3655ec643713..2f2c952fb77811ef8bdfcb587c576cb4b2b4ddf9 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt @@ -17,7 +17,7 @@ package com.android.systemui.decor import android.view.DisplayCutout -import com.android.systemui.R +import com.android.systemui.res.R class RoundedCornerDecorProviderFactory( private val roundedCornerResDelegate: RoundedCornerResDelegate diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt index 8156797c5a677786d8cfabf9f1a1e28e921bf13a..0ee11ae84e4876aa5586c2470fda2d007941a382 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt @@ -25,7 +25,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.ImageView -import com.android.systemui.R +import com.android.systemui.res.R class RoundedCornerDecorProviderImpl( override val viewId: Int, diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt index c64766a3eb3ce4bdfb9b9f2c0ca1c4bf60450f2a..0314b0fe2ca3a744fa7dddd22ce985d86015c7bb 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt @@ -24,7 +24,7 @@ import android.util.DisplayUtils import android.util.Size import android.view.RoundedCorners import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import java.io.PrintWriter interface RoundedCornerResDelegate { diff --git a/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt b/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt index f730935e1b73e5f38f337f926fb115c2f26d75b4..7510cf6ce04c964e238ffbaf2089642add6322ef 100644 --- a/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt @@ -22,7 +22,7 @@ import android.view.Gravity import android.view.View import android.view.WindowManager import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R /** * Dialog used to decide what to do with a connected display. diff --git a/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java index 55df7792e2e66941cbb344d208dcf651ce491a7a..8e542b59a7ccb1b937fd1ec041c314acdb2eff29 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java @@ -28,7 +28,7 @@ import android.text.format.DateUtils; import android.util.KeyValueListParser; import android.util.Log; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java b/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java index d408472efca54cca1e7df02fae014fc47d2860e7..db0c3c68107aa12dc888fce86763b313265b38af 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java +++ b/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java @@ -20,7 +20,7 @@ import android.content.Context; import android.hardware.Sensor; import android.os.Handler; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.doze.DozeAuthRemover; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt index 01fb5227749fabdd70e6851c8de12b915d436208..4cfed33af95bbf74c087f453e684bd1cb68e048b 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt @@ -27,7 +27,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators import com.android.dream.lowlight.util.TruncatedInterpolator -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.complication.ComplicationHostViewController import com.android.systemui.complication.ComplicationLayoutParams import com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java index 78ac453250721b75ad1c0e517deb2e12b91da223..d0f255943a84d609a126f663ccb16ed20909e2dd 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java @@ -33,7 +33,7 @@ import android.view.ViewGroup; import com.android.app.animation.Interpolators; import com.android.dream.lowlight.LowLightTransitionCoordinator; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.ComplicationHostViewController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.dagger.DreamOverlayComponent; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java index 02a8b39a106a3acd8c327727dfe7c6f5f8cc27ff..409b196fe525b0bebc43deb983e7f9c5b6645205 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java @@ -31,7 +31,7 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.AlphaOptimizedImageView; /** diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java index 1865c38632e514e8f9ee03f63cd8977a713118a6..8e77079e0b5d2d743702d714bb9661a828cb7ddb 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java @@ -26,7 +26,7 @@ import android.view.ViewGroup; import androidx.constraintlayout.widget.ConstraintLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shared.shadow.DoubleShadowIconDrawable; import com.android.systemui.shared.shadow.DoubleShadowTextHelper.ShadowInfo; import com.android.systemui.statusbar.AlphaOptimizedImageView; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java index a6401b6594bab6c85b8ff6a85c3ea3f1d6659cf2..8d8702ebc6c7356e7a1e8b01815402eb66fcd1ea 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java @@ -32,7 +32,7 @@ import android.view.View; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; import com.android.systemui.dreams.dagger.DreamOverlayComponent; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt index 95c225de9598fc4af98aa5cc976d4d8def465abb..6fd6f4e3d4eb17a25dd1ddb75e5c5404aa440afb 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt @@ -1,7 +1,7 @@ package com.android.systemui.dreams.complication.dagger import android.content.res.Resources -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main import dagger.Module import dagger.Provides diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java index 4bafe325cda029c95674a214554b690972247f28..5ebb2ddcff368369993fd9c4336594b45044fa52 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java @@ -23,7 +23,7 @@ import android.content.res.Resources; import com.android.dream.lowlight.dagger.LowLightDreamModule; import com.android.settingslib.dream.DreamBackend; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.complication.dagger.RegisteredComplicationsModule; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java index 51eefd6bed370249a20a4f0e0cd6295f58d54a3c..34dd10084116e2513aa2529b129660172ad0ab3e 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java @@ -25,7 +25,7 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import com.android.internal.util.Preconditions; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayContainerView; import com.android.systemui.dreams.DreamOverlayStatusBarView; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java index 5f03743f48b850b7f72c44bd88b54713435299a9..8cf11a9817b794d276b19af4958f49b7541625f7 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java @@ -21,7 +21,7 @@ import android.content.res.Resources; import android.util.TypedValue; import android.view.VelocityTracker; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.touch.BouncerSwipeTouchHandler; import com.android.systemui.dreams.touch.DreamTouchHandler; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/ShadeModule.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/ShadeModule.java index 9e0ae4119f24e2512b08798dc36f7a3d6e86f91b..94fe4bd04dab3f69f1b409fabc0948c0ce36a5ee 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/ShadeModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/ShadeModule.java @@ -18,7 +18,7 @@ package com.android.systemui.dreams.touch.dagger; import android.content.res.Resources; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.touch.DreamTouchHandler; import com.android.systemui.dreams.touch.ShadeTouchHandler; diff --git a/packages/SystemUI/src/com/android/systemui/dump/SystemUIConfigDumpable.kt b/packages/SystemUI/src/com/android/systemui/dump/SystemUIConfigDumpable.kt index b70edcc2725414b8a4fd5988cb1f722a7625089b..7a441d6b4a6b2c9339404fdfa882ae3291643562 100644 --- a/packages/SystemUI/src/com/android/systemui/dump/SystemUIConfigDumpable.kt +++ b/packages/SystemUI/src/com/android/systemui/dump/SystemUIConfigDumpable.kt @@ -19,7 +19,7 @@ package com.android.systemui.dump import android.content.Context import com.android.systemui.CoreStartable import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import java.io.PrintWriter import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index 02575eb8adf42bf19db3ed196dee7f6ed4add46b..f97f6bd7613b35966f6bdfd52b26e9aede294460 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -17,7 +17,7 @@ package com.android.systemui.flags import android.provider.DeviceConfig import com.android.internal.annotations.Keep -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FlagsFactory.releasedFlag import com.android.systemui.flags.FlagsFactory.resourceBooleanFlag import com.android.systemui.flags.FlagsFactory.sysPropBooleanFlag @@ -250,10 +250,6 @@ object Flags { // TODO(b/277961132): Tracking bug. @JvmField val REVAMPED_BOUNCER_MESSAGES = unreleasedFlag("revamped_bouncer_messages") - /** Whether to delay showing bouncer UI when face auth or active unlock are enrolled. */ - // TODO(b/279794160): Tracking bug. - @JvmField val DELAY_BOUNCER = releasedFlag("delay_bouncer") - /** Keyguard Migration */ /** @@ -396,7 +392,8 @@ object Flags { val PLUG_IN_STATUS_BAR_CHIP = releasedFlag("plug_in_status_bar_chip") // TODO(b/292533677): Tracking Bug - val WIFI_TRACKER_LIB_FOR_WIFI_ICON = releasedFlag("wifi_tracker_lib_for_wifi_icon") + val WIFI_TRACKER_LIB_FOR_WIFI_ICON = + unreleasedFlag("wifi_tracker_lib_for_wifi_icon", teamfood = true) // TODO(b/293863612): Tracking Bug @JvmField val INCOMPATIBLE_CHARGING_BATTERY_ICON = @@ -757,7 +754,7 @@ object Flags { unreleasedFlag("enable_new_privacy_dialog", teamfood = true) // TODO(b/289573946): Tracking Bug - @JvmField val PRECOMPUTED_TEXT = unreleasedFlag("precomputed_text") + @JvmField val PRECOMPUTED_TEXT = unreleasedFlag("precomputed_text", teamfood = true) // 2900 - CentralSurfaces-related flags @@ -795,7 +792,8 @@ object Flags { // TODO(b/287205379): Tracking bug @JvmField - val QS_CONTAINER_GRAPH_OPTIMIZER = unreleasedFlag( "qs_container_graph_optimizer") + val QS_CONTAINER_GRAPH_OPTIMIZER = unreleasedFlag( "qs_container_graph_optimizer", + teamfood = true) /** Enable showing a dialog when clicking on Quick Settings bluetooth tile. */ @JvmField diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsColumnLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsColumnLayout.java index 59070287cc5cb322f391a8048065f7ff7414eed2..a3065d3cca599707605072f7ddba9d27c5c79047 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsColumnLayout.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsColumnLayout.java @@ -26,7 +26,7 @@ import android.view.Gravity; import android.view.View; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Grid-based implementation of the button layout created by the global actions dialog. diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java index 3eb17400446c0bb1f96fb64779320e28c95b3b7d..ac402303bf69a1f9a89568b647b24d2589a7380f 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java @@ -546,8 +546,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene */ @VisibleForTesting protected int getMaxShownPowerItems() { - return mResources.getInteger(com.android.systemui.R.integer.power_menu_lite_max_columns) - * mResources.getInteger(com.android.systemui.R.integer.power_menu_lite_max_rows); + return mResources.getInteger(com.android.systemui.res.R.integer.power_menu_lite_max_columns) + * mResources.getInteger(com.android.systemui.res.R.integer.power_menu_lite_max_rows); } /** @@ -698,7 +698,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene ActionsDialogLite dialog = new ActionsDialogLite( mContext, - com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActionsLite, + com.android.systemui.res.R.style.Theme_SystemUI_Dialog_GlobalActionsLite, mAdapter, mOverflowAdapter, mSysuiColorExtractor, @@ -776,7 +776,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting protected final class PowerOptionsAction extends SinglePressAction { private PowerOptionsAction() { - super(com.android.systemui.R.drawable.ic_settings_power, + super(com.android.systemui.res.R.drawable.ic_settings_power, R.string.global_action_power_options); } @@ -884,17 +884,17 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene protected int getEmergencyTextColor(Context context) { return context.getResources().getColor( - com.android.systemui.R.color.global_actions_lite_text); + com.android.systemui.res.R.color.global_actions_lite_text); } protected int getEmergencyIconColor(Context context) { return context.getResources().getColor( - com.android.systemui.R.color.global_actions_lite_emergency_icon); + com.android.systemui.res.R.color.global_actions_lite_emergency_icon); } protected int getEmergencyBackgroundColor(Context context) { return context.getResources().getColor( - com.android.systemui.R.color.global_actions_lite_emergency_background); + com.android.systemui.res.R.color.global_actions_lite_emergency_background); } private class EmergencyAffordanceAction extends EmergencyAction { @@ -912,7 +912,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting class EmergencyDialerAction extends EmergencyAction { private EmergencyDialerAction() { - super(com.android.systemui.R.drawable.ic_emergency_star, + super(com.android.systemui.res.R.drawable.ic_emergency_star, R.string.global_action_emergency); } @@ -1482,7 +1482,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene Log.w(TAG, "No power options action found at position: " + position); return null; } - int viewLayoutResource = com.android.systemui.R.layout.global_actions_power_item; + int viewLayoutResource = com.android.systemui.res.R.layout.global_actions_power_item; View view = convertView != null ? convertView : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false); view.setOnClickListener(v -> onClickItem(position)); @@ -1564,7 +1564,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene Log.w(TAG, "No overflow action found at position: " + position); return null; } - int viewLayoutResource = com.android.systemui.R.layout.controls_more_item; + int viewLayoutResource = com.android.systemui.res.R.layout.controls_more_item; View view = convertView != null ? convertView : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false); TextView textView = (TextView) view; @@ -1778,7 +1778,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene } protected int getGridItemLayoutResource() { - return com.android.systemui.R.layout.global_actions_grid_item_lite; + return com.android.systemui.res.R.layout.global_actions_grid_item_lite; } private enum ToggleState { @@ -1870,7 +1870,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene LayoutInflater inflater) { willCreate(); - View v = inflater.inflate(com.android.systemui.R.layout.global_actions_grid_item_v2, + View v = inflater.inflate(com.android.systemui.res.R.layout.global_actions_grid_item_v2, parent, false /* attach */); ViewGroup.LayoutParams p = v.getLayoutParams(); p.width = WRAP_CONTENT; @@ -2327,7 +2327,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setTitle(getContext().getString( - com.android.systemui.R.string.accessibility_quick_settings_power_menu)); + com.android.systemui.res.R.string.accessibility_quick_settings_power_menu)); initializeLayout(); mWindowDimAmount = getWindow().getAttributes().dimAmount; getOnBackInvokedDispatcher().registerOnBackInvokedCallback( @@ -2379,14 +2379,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu( new ContextThemeWrapper( mContext, - com.android.systemui.R.style.Control_ListPopupWindow + com.android.systemui.res.R.style.Control_ListPopupWindow ), false /* isDropDownMode */); popup.setOnItemClickListener( (parent, view, position, id) -> mOverflowAdapter.onClickItem(position)); popup.setOnItemLongClickListener( (parent, view, position, id) -> mOverflowAdapter.onLongClickItem(position)); View overflowButton = - findViewById(com.android.systemui.R.id.global_actions_overflow_button); + findViewById(com.android.systemui.res.R.id.global_actions_overflow_button); popup.setAnchorView(overflowButton); popup.setAdapter(mOverflowAdapter); return popup; @@ -2403,14 +2403,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene } protected int getLayoutResource() { - return com.android.systemui.R.layout.global_actions_grid_lite; + return com.android.systemui.res.R.layout.global_actions_grid_lite; } protected void initializeLayout() { setContentView(getLayoutResource()); fixNavBarClipping(); - mGlobalActionsLayout = findViewById(com.android.systemui.R.id.global_actions_view); + mGlobalActionsLayout = findViewById(com.android.systemui.res.R.id.global_actions_view); mGlobalActionsLayout.setListViewAccessibilityDelegate(new View.AccessibilityDelegate() { @Override public boolean dispatchPopulateAccessibilityEvent( @@ -2422,14 +2422,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene }); mGlobalActionsLayout.setRotationListener(this::onRotate); mGlobalActionsLayout.setAdapter(mAdapter); - mContainer = findViewById(com.android.systemui.R.id.global_actions_container); + mContainer = findViewById(com.android.systemui.res.R.id.global_actions_container); mContainer.setOnTouchListener((v, event) -> { mGestureDetector.onTouchEvent(event); return v.onTouchEvent(event); }); View overflowButton = findViewById( - com.android.systemui.R.id.global_actions_overflow_button); + com.android.systemui.res.R.id.global_actions_overflow_button); if (overflowButton != null) { if (mOverflowAdapter.getCount() > 0) { overflowButton.setOnClickListener((view) -> showPowerOverflowMenu()); @@ -2442,7 +2442,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams(); params.setMarginEnd(mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen.global_actions_side_margin)); + com.android.systemui.res.R.dimen.global_actions_side_margin)); mGlobalActionsLayout.setLayoutParams(params); } } @@ -2473,7 +2473,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene private void showSmartLockDisabledMessage() { // Since power menu is the top window, make a Toast-like view that will show up View message = LayoutInflater.from(mContext) - .inflate(com.android.systemui.R.layout.global_actions_toast, mContainer, false); + .inflate(com.android.systemui.res.R.layout.global_actions_toast, mContainer, false); // Set up animation AccessibilityManager mAccessibilityManager = diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java index 83046ef450c3aff7ec6950b4c92b9ea099d99aa3..bc1e13f772fa375f02646b627ed58dd0403d98c8 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java @@ -27,7 +27,7 @@ import android.view.ViewGroup; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.HardwareBgDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Flat, single-row implementation of the button layout created by the global actions dialog. @@ -55,7 +55,7 @@ public class GlobalActionsFlatLayout extends GlobalActionsLayout { } private View getOverflowButton() { - return findViewById(com.android.systemui.R.id.global_actions_overflow_button); + return findViewById(com.android.systemui.res.R.id.global_actions_overflow_button); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java index e1462d15c8871fbb1e5128634cfcef499bbad15f..2272b8a888cdf6538e9348a8a855fdfb1dc799e3 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java @@ -148,7 +148,7 @@ public class GlobalActionsGridLayout extends GlobalActionsLayout { protected float getAnimationDistance() { int rows = getListView().getRowCount(); float gridItemSize = getContext().getResources().getDimension( - com.android.systemui.R.dimen.global_actions_grid_item_height); + com.android.systemui.res.R.dimen.global_actions_grid_item_height); return rows * gridItemSize / 2; } diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java index 183ee458acb4dd8b839f668ebae089e688e6533d..6afefb040626cbab128207239487e2f374a6790e 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.HardwareBgDrawable; import com.android.systemui.MultiListLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.util.leak.RotationUtils; import java.util.Locale; diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java index 42230aed15d5afeee72d8075f4594d304e67d5e7..9b318a288caf60e0dcde1608801ea0645f469880 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java @@ -25,7 +25,7 @@ import androidx.constraintlayout.helper.widget.Flow; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.HardwareBgDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * ConstraintLayout implementation of the button layout created by the global actions dialog. @@ -53,7 +53,7 @@ public class GlobalActionsLayoutLite extends GlobalActionsLayout { public void onUpdateList() { super.onUpdateList(); int nElementsWrap = getResources().getInteger( - com.android.systemui.R.integer.power_menu_lite_max_columns); + com.android.systemui.res.R.integer.power_menu_lite_max_columns); int nChildren = getListView().getChildCount() - 1; // don't count flow element // Avoid having just one action on the last row if there are more than 2 columns because diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java index 6d083f6c8bfd70f3824a7ff89fb87a41fc4374af..b9a6a5515729210ca5cb6823b472134b26a1ace9 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java @@ -27,7 +27,7 @@ import android.widget.ListAdapter; import android.widget.ListPopupWindow; import android.widget.ListView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Customized widget for use in the GlobalActionsDialog. Ensures common positioning and user diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPowerDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPowerDialog.java index caa88a3720363010a26e287b69e3db87b7cc72cc..b8bf1428bb2853705aa29449e207496e2e01c3e3 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPowerDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPowerDialog.java @@ -36,7 +36,7 @@ public class GlobalActionsPowerDialog { */ public static Dialog create(@NonNull Context context, ListAdapter adapter) { ViewGroup listView = (ViewGroup) LayoutInflater.from(context).inflate( - com.android.systemui.R.layout.global_actions_power_dialog, null); + com.android.systemui.res.R.layout.global_actions_power_dialog, null); for (int i = 0; i < adapter.getCount(); i++) { View action = adapter.getView(i, null, listView); @@ -53,7 +53,7 @@ public class GlobalActionsPowerDialog { window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); window.setTitle(""); // prevent Talkback from speaking first item name twice window.setBackgroundDrawable(res.getDrawable( - com.android.systemui.R.drawable.control_background, context.getTheme())); + com.android.systemui.res.R.drawable.control_background, context.getTheme())); window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); return dialog; diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java index 68dc1b3dc7d74b9221077ce1b6a98c9c3566d73a..51978ece14dbdddcf275eaeae0000527fe0170cc 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java @@ -59,7 +59,7 @@ public class ShutdownUi { ScrimDrawable background = new ScrimDrawable(); final Dialog d = new Dialog(mContext, - com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions); + com.android.systemui.res.R.style.Theme_SystemUI_Dialog_GlobalActions); d.setOnShowListener(dialog -> { if (mBlurUtils.supportsBlursOnWindows()) { @@ -69,7 +69,7 @@ public class ShutdownUi { (int) mBlurUtils.blurRadiusOfRatio(1), backgroundAlpha == 255); } else { float backgroundAlpha = mContext.getResources().getFloat( - com.android.systemui.R.dimen.shutdown_scrim_behind_alpha); + com.android.systemui.res.R.dimen.shutdown_scrim_behind_alpha); background.setAlpha((int) (backgroundAlpha * 255)); } }); @@ -96,7 +96,7 @@ public class ShutdownUi { | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); window.setBackgroundDrawable(background); - window.setWindowAnimations(com.android.systemui.R.style.Animation_ShutdownUi); + window.setWindowAnimations(com.android.systemui.res.R.style.Animation_ShutdownUi); d.setContentView(getShutdownDialogContent(isReboot)); d.setCancelable(false); @@ -104,10 +104,10 @@ public class ShutdownUi { int color; if (mBlurUtils.supportsBlursOnWindows()) { color = Utils.getColorAttrDefaultColor(mContext, - com.android.systemui.R.attr.wallpaperTextColor); + com.android.systemui.res.R.attr.wallpaperTextColor); } else { color = mContext.getResources().getColor( - com.android.systemui.R.color.global_actions_shutdown_ui_text); + com.android.systemui.res.R.color.global_actions_shutdown_ui_text); } ProgressBar bar = d.findViewById(R.id.progress); diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt new file mode 100644 index 0000000000000000000000000000000000000000..cc51d21744e86394b8e9fd9111e8d19dd2db4380 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import androidx.annotation.VisibleForTesting +import com.android.systemui.dagger.qualifiers.Main +import kotlin.math.abs +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch + +/** + * Slider tracker attached to a seekable slider. + * + * The tracker runs a state machine to execute actions on touch-based events typical of a seekable + * slider such as [android.widget.SeekBar]. Coroutines responsible for running the state machine, + * collecting slider events and maintaining waiting states are run on the main thread via the + * [com.android.systemui.dagger.qualifiers.Main] coroutine dispatcher. + * + * @param[sliderStateListener] Listener of the slider state. + * @param[sliderEventProducer] Producer of slider events arising from the slider. + * @property[scope] [CoroutineScope] where the collection of slider events and the launch of timer + * jobs occur. + * @property[config] Configuration parameters of the slider tracker. + */ +class SeekableSliderTracker( + sliderStateListener: SliderStateListener, + sliderEventProducer: SliderEventProducer, + @Main mainDispatcher: CoroutineDispatcher, + private val config: SeekableSliderTrackerConfig = SeekableSliderTrackerConfig(), +) : SliderTracker(CoroutineScope(mainDispatcher), sliderStateListener, sliderEventProducer) { + + // History of the latest progress collected from slider events + private var latestProgress = 0f + // Timer job for the wait state + private var timerJob: Job? = null + // Indicator that there is waiting job active + var isWaiting = false + private set + get() = timerJob != null && timerJob?.isActive == true + + override suspend fun iterateState(event: SliderEvent) { + when (currentState) { + SliderState.IDLE -> handleIdle(event.type) + SliderState.WAIT -> handleWait(event.type, event.currentProgress) + SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH -> handleAcquired(event.type) + SliderState.DRAG_HANDLE_DRAGGING -> handleDragging(event.type, event.currentProgress) + SliderState.DRAG_HANDLE_REACHED_BOOKEND -> + handleReachedBookend(event.type, event.currentProgress) + SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH -> setState(SliderState.IDLE) + SliderState.JUMP_TRACK_LOCATION_SELECTED -> handleJumpToTrack(event.type) + SliderState.JUMP_BOOKEND_SELECTED -> handleJumpToBookend(event.type) + } + latestProgress = event.currentProgress + } + + private fun handleIdle(newEventType: SliderEventType) { + if (newEventType == SliderEventType.STARTED_TRACKING_TOUCH) { + timerJob = launchTimer() + // The WAIT state will wait for the timer to complete or a slider progress to occur. + // This will disambiguate between an imprecise touch that acquires the slider handle, + // and a select and jump operation in the slider track. + setState(SliderState.WAIT) + } + } + + private fun launchTimer() = + scope.launch { + delay(config.waitTimeMillis) + if (isActive && currentState == SliderState.WAIT) { + setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + // This transitory state must also trigger the corresponding action + executeOnState(currentState) + } + } + + private fun handleWait(newEventType: SliderEventType, currentProgress: Float) { + // The timer may have completed and may have already modified the state + if (currentState != SliderState.WAIT) return + + // The timer is still running but the state may be modified by the progress change + val deltaProgressIsJump = deltaProgressIsAboveThreshold(currentProgress) + if (newEventType == SliderEventType.PROGRESS_CHANGE_BY_USER) { + if (bookendReached(currentProgress)) { + setState(SliderState.JUMP_BOOKEND_SELECTED) + } else if (deltaProgressIsJump) { + setState(SliderState.JUMP_TRACK_LOCATION_SELECTED) + } else { + setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + } + } else if (newEventType == SliderEventType.STOPPED_TRACKING_TOUCH) { + setState(SliderState.IDLE) + } + + // If the state changed, the timer does not need to complete. No further synchronization + // will be required onwards until WAIT is reached again. + if (currentState != SliderState.WAIT) { + timerJob?.cancel() + timerJob = null + } + } + + private fun handleAcquired(newEventType: SliderEventType) { + if (newEventType == SliderEventType.STOPPED_TRACKING_TOUCH) { + setState(SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH) + } else if (newEventType == SliderEventType.PROGRESS_CHANGE_BY_USER) { + setState(SliderState.DRAG_HANDLE_DRAGGING) + } + } + + private fun handleDragging(newEventType: SliderEventType, currentProgress: Float) { + if (newEventType == SliderEventType.STOPPED_TRACKING_TOUCH) { + setState(SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH) + } else if ( + newEventType == SliderEventType.PROGRESS_CHANGE_BY_USER && + bookendReached(currentProgress) + ) { + setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + } + } + + private fun handleReachedBookend(newEventType: SliderEventType, currentProgress: Float) { + if (newEventType == SliderEventType.PROGRESS_CHANGE_BY_USER) { + if (!bookendReached(currentProgress)) { + setState(SliderState.DRAG_HANDLE_DRAGGING) + } + } else if (newEventType == SliderEventType.STOPPED_TRACKING_TOUCH) { + setState(SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH) + } + } + + private fun handleJumpToTrack(newEventType: SliderEventType) { + when (newEventType) { + SliderEventType.PROGRESS_CHANGE_BY_USER -> setState(SliderState.DRAG_HANDLE_DRAGGING) + SliderEventType.STOPPED_TRACKING_TOUCH -> + setState(SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH) + else -> {} + } + } + + private fun handleJumpToBookend(newEventType: SliderEventType) { + when (newEventType) { + SliderEventType.PROGRESS_CHANGE_BY_USER -> setState(SliderState.DRAG_HANDLE_DRAGGING) + SliderEventType.STOPPED_TRACKING_TOUCH -> + setState(SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH) + else -> {} + } + } + + override fun executeOnState(currentState: SliderState) { + when (currentState) { + SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH -> sliderListener.onHandleAcquiredByTouch() + SliderState.DRAG_HANDLE_RELEASED_FROM_TOUCH -> { + sliderListener.onHandleReleasedFromTouch() + // This transitory state must also reset the state machine + resetState() + } + SliderState.DRAG_HANDLE_DRAGGING -> sliderListener.onProgress(latestProgress) + SliderState.DRAG_HANDLE_REACHED_BOOKEND -> executeOnBookend() + SliderState.JUMP_TRACK_LOCATION_SELECTED -> + sliderListener.onProgressJump(latestProgress) + SliderState.JUMP_BOOKEND_SELECTED -> executeOnBookend() + else -> {} + } + } + + private fun executeOnBookend() { + if (latestProgress >= config.upperBookendThreshold) sliderListener.onUpperBookend() + else sliderListener.onLowerBookend() + } + + override fun resetState() { + timerJob?.cancel() + timerJob = null + super.resetState() + } + + private fun deltaProgressIsAboveThreshold( + currentProgress: Float, + epsilon: Float = 0.00001f, + ): Boolean { + val delta = abs(currentProgress - latestProgress) + return abs(delta - config.jumpThreshold) < epsilon + } + + private fun bookendReached(currentProgress: Float): Boolean { + return currentProgress >= config.upperBookendThreshold || + currentProgress <= config.lowerBookendThreshold + } + + @VisibleForTesting + fun setState(state: SliderState) { + currentState = state + } +} diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTrackerConfig.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTrackerConfig.kt new file mode 100644 index 0000000000000000000000000000000000000000..cb0f43b8235a007a125c6991a9705a5c1cfc41f3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTrackerConfig.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import androidx.annotation.FloatRange + +/** + * Configuration parameters of a seekable slider tracker. + * + * @property[waitTimeMillis] Wait period to determine if a touch event acquires the slider handle. + * @property[jumpThreshold] Threshold on the slider progress to detect if a touch event is qualified + * as an imprecise acquisition of the slider handle. + * @property[lowerBookendThreshold] Threshold to determine the progress on the slider that qualifies + * as reaching the lower bookend. + * @property[upperBookendThreshold] Threshold to determine the progress on the slider that qualifies + * as reaching the upper bookend. + */ +data class SeekableSliderTrackerConfig( + val waitTimeMillis: Long = 100, + @FloatRange(from = 0.0, to = 1.0) val jumpThreshold: Float = 0.02f, + @FloatRange(from = 0.0, to = 1.0) val lowerBookendThreshold: Float = 0.05f, + @FloatRange(from = 0.0, to = 1.0) val upperBookendThreshold: Float = 0.95f, +) diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackConfig.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackConfig.kt new file mode 100644 index 0000000000000000000000000000000000000000..20d99d1e75fbf9c4a724ff579bc6a727fadfa7d8 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackConfig.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import androidx.annotation.FloatRange + +/** Configuration parameters of a [SliderHapticFeedbackProvider] */ +data class SliderHapticFeedbackConfig( + /** Interpolator factor for velocity-based vibration scale interpolations. Must be positive */ + val velocityInterpolatorFactor: Float = 1f, + /** Interpolator factor for progress-based vibration scale interpolations. Must be positive */ + val progressInterpolatorFactor: Float = 1f, + /** Minimum vibration scale for vibrations based on slider progress */ + @FloatRange(from = 0.0, to = 1.0) val progressBasedDragMinScale: Float = 0f, + /** Maximum vibration scale for vibrations based on slider progress */ + @FloatRange(from = 0.0, to = 1.0) val progressBasedDragMaxScale: Float = 0.2f, + /** Additional vibration scaling due to velocity */ + @FloatRange(from = 0.0, to = 1.0) val additionalVelocityMaxBump: Float = 0.15f, + /** Additional time delta to wait between drag texture vibrations */ + @FloatRange(from = 0.0) val deltaMillisForDragInterval: Float = 0f, + /** Number of low ticks in a drag texture composition. This is not expected to change */ + val numberOfLowTicks: Int = 5, + /** Maximum velocity allowed for vibration scaling. This is not expected to change. */ + val maxVelocityToScale: Float = 2000f, /* In pixels/sec */ + /** Vibration scale at the upper bookend of the slider */ + @FloatRange(from = 0.0, to = 1.0) val upperBookendScale: Float = 1f, + /** Vibration scale at the lower bookend of the slider */ + @FloatRange(from = 0.0, to = 1.0) val lowerBookendScale: Float = 0.05f, +) diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProvider.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProvider.kt new file mode 100644 index 0000000000000000000000000000000000000000..e6de156de0c4c1b873c64e741c330a947addf811 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProvider.kt @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import android.os.VibrationAttributes +import android.os.VibrationEffect +import android.view.VelocityTracker +import android.view.animation.AccelerateInterpolator +import androidx.annotation.FloatRange +import com.android.systemui.statusbar.VibratorHelper +import kotlin.math.abs +import kotlin.math.min + +/** + * Listener of slider events that triggers haptic feedback. + * + * @property[vibratorHelper] Singleton instance of the [VibratorHelper] to deliver haptics. + * @property[velocityTracker] Instance of a [VelocityTracker] that tracks slider dragging velocity. + * @property[config] Configuration parameters for vibration encapsulated as a + * [SliderHapticFeedbackConfig]. + * @property[clock] Clock to obtain elapsed real time values. + */ +class SliderHapticFeedbackProvider( + private val vibratorHelper: VibratorHelper, + private val velocityTracker: VelocityTracker, + private val config: SliderHapticFeedbackConfig = SliderHapticFeedbackConfig(), + private val clock: com.android.systemui.util.time.SystemClock, +) : SliderStateListener { + + private val velocityAccelerateInterpolator = + AccelerateInterpolator(config.velocityInterpolatorFactor) + private val positionAccelerateInterpolator = + AccelerateInterpolator(config.progressInterpolatorFactor) + private var dragTextureLastTime = clock.elapsedRealtime() + private val lowTickDurationMs = + vibratorHelper.getPrimitiveDurations(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)[0] + private var hasVibratedAtLowerBookend = false + private var hasVibratedAtUpperBookend = false + + /** Time threshold to wait before making new API call. */ + private val thresholdUntilNextDragCallMillis = + lowTickDurationMs * config.numberOfLowTicks + config.deltaMillisForDragInterval + + /** + * Vibrate when the handle reaches either bookend with a certain velocity. + * + * @param[absoluteVelocity] Velocity of the handle when it reached the bookend. + */ + private fun vibrateOnEdgeCollision(absoluteVelocity: Float) { + val velocityInterpolated = + velocityAccelerateInterpolator.getInterpolation( + min(absoluteVelocity / config.maxVelocityToScale, 1f) + ) + val bookendScaleRange = config.upperBookendScale - config.lowerBookendScale + val bookendsHitScale = bookendScaleRange * velocityInterpolated + config.lowerBookendScale + + val vibration = + VibrationEffect.startComposition() + .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, bookendsHitScale) + .compose() + vibratorHelper.vibrate(vibration, VIBRATION_ATTRIBUTES_PIPELINING) + } + + /** + * Create a drag texture vibration based on velocity and slider progress. + * + * @param[absoluteVelocity] Absolute velocity of the handle. + * @param[normalizedSliderProgress] Progress of the slider handled normalized to the range from + * 0F to 1F (inclusive). + */ + private fun vibrateDragTexture( + absoluteVelocity: Float, + @FloatRange(from = 0.0, to = 1.0) normalizedSliderProgress: Float + ) { + // Check if its time to vibrate + val currentTime = clock.elapsedRealtime() + val elapsedSinceLastDrag = currentTime - dragTextureLastTime + if (elapsedSinceLastDrag < thresholdUntilNextDragCallMillis) return + + val velocityInterpolated = + velocityAccelerateInterpolator.getInterpolation( + min(absoluteVelocity / config.maxVelocityToScale, 1f) + ) + + // Scaling of vibration due to the position of the slider + val positionScaleRange = config.progressBasedDragMaxScale - config.progressBasedDragMinScale + val sliderProgressInterpolated = + positionAccelerateInterpolator.getInterpolation(normalizedSliderProgress) + val positionBasedScale = + positionScaleRange * sliderProgressInterpolated + config.progressBasedDragMinScale + + // Scaling bump due to velocity + val velocityBasedScale = velocityInterpolated * config.additionalVelocityMaxBump + + // Total scale + val scale = positionBasedScale + velocityBasedScale + + // Trigger the vibration composition + val composition = VibrationEffect.startComposition() + repeat(config.numberOfLowTicks) { + composition.addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK, scale) + } + vibratorHelper.vibrate(composition.compose(), VIBRATION_ATTRIBUTES_PIPELINING) + dragTextureLastTime = currentTime + } + + override fun onHandleAcquiredByTouch() {} + + override fun onHandleReleasedFromTouch() {} + + override fun onLowerBookend() { + if (!hasVibratedAtLowerBookend) { + velocityTracker.computeCurrentVelocity(UNITS_SECOND, config.maxVelocityToScale) + vibrateOnEdgeCollision(abs(velocityTracker.xVelocity)) + hasVibratedAtLowerBookend = true + } + } + + override fun onUpperBookend() { + if (!hasVibratedAtUpperBookend) { + velocityTracker.computeCurrentVelocity(UNITS_SECOND, config.maxVelocityToScale) + vibrateOnEdgeCollision(abs(velocityTracker.xVelocity)) + hasVibratedAtUpperBookend = true + } + } + + override fun onProgress(@FloatRange(from = 0.0, to = 1.0) progress: Float) { + velocityTracker.computeCurrentVelocity(UNITS_SECOND, config.maxVelocityToScale) + vibrateDragTexture(abs(velocityTracker.xVelocity), progress) + hasVibratedAtUpperBookend = false + hasVibratedAtLowerBookend = false + } + + override fun onProgressJump(@FloatRange(from = 0.0, to = 1.0) progress: Float) {} + + override fun onSelectAndArrow(@FloatRange(from = 0.0, to = 1.0) progress: Float) {} + + private companion object { + private val VIBRATION_ATTRIBUTES_PIPELINING = + VibrationAttributes.Builder() + .setUsage(VibrationAttributes.USAGE_TOUCH) + .setFlags(VibrationAttributes.FLAG_PIPELINED_EFFECT) + .build() + private const val UNITS_SECOND = 1000 + } +} diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderState.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderState.kt new file mode 100644 index 0000000000000000000000000000000000000000..fe092e67036bff069c89b1fa9ee181b4959bde2b --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderState.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +/** State of a slider */ +enum class SliderState { + /* The slider is idle */ + IDLE, + /* Waiting state to disambiguate between handle acquisition and select and jump operations */ + WAIT, + /* The slider handle was acquired by touch. */ + DRAG_HANDLE_ACQUIRED_BY_TOUCH, + /* The slider handle was released. */ + DRAG_HANDLE_RELEASED_FROM_TOUCH, + /* The slider handle is being dragged by touch. */ + DRAG_HANDLE_DRAGGING, + /* The slider handle reached a bookend. */ + DRAG_HANDLE_REACHED_BOOKEND, + /* A location in the slider track has been selected. */ + JUMP_TRACK_LOCATION_SELECTED, + /* The slider handled moved to a bookend after it was selected. */ + JUMP_BOOKEND_SELECTED, +} diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateListener.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateListener.kt new file mode 100644 index 0000000000000000000000000000000000000000..9c99c90bb9103f78b35b12364064d337029e57fb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateListener.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import androidx.annotation.FloatRange + +/** Listener of events from a slider (such as [android.widget.SeekBar]) */ +interface SliderStateListener { + + /** Notification that the handle is acquired by touch */ + fun onHandleAcquiredByTouch() + + /** Notification that the handle was released from touch */ + fun onHandleReleasedFromTouch() + + /** Notification that the handle reached the lower bookend */ + fun onLowerBookend() + + /** Notification that the handle reached the upper bookend */ + fun onUpperBookend() + + /** + * Notification that the slider reached a certain progress on the slider track. + * + * This method is called in all intermediate steps of a continuous progress change as the slider + * moves through the slider track. + * + * @param[progress] The progress of the slider in the range from 0F to 1F (inclusive). + */ + fun onProgress(@FloatRange(from = 0.0, to = 1.0) progress: Float) + + /** + * Notification that the slider handle jumped to a selected progress on the slider track. + * + * This method is specific to the case when the handle performed a single jump to a position on + * the slider track and reached the corresponding progress. In this case, [onProgress] is not + * called and the new progress reached is represented by the [progress] parameter. + * + * @param[progress] The selected progress on the slider track that the handle jumps to. The + * progress is in the range from 0F to 1F (inclusive). + */ + fun onProgressJump(@FloatRange(from = 0.0, to = 1.0) progress: Float) + + /** + * Notification that the slider handle was moved by a button press. + * + * @param[progress] The progress of the slider in the range from 0F to 1F (inclusive). + */ + fun onSelectAndArrow(@FloatRange(from = 0.0, to = 1.0) progress: Float) +} diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt new file mode 100644 index 0000000000000000000000000000000000000000..e1f57089d7925bb71eed0abb815264ac9b427d6c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch + +/** + * Tracker component for a slider. + * + * The tracker maintains a state machine operated by slider events coming from a + * [SliderEventProducer]. An action is executed in each state via a [SliderListener]. + * + * @param[scope] [CoroutineScope] to launch the collection of [SliderEvent]. + * @property[sliderListener] [SliderListener] to execute actions on a given [SliderState]. + * @property[eventProducer] Producer of [SliderEvent] to iterate over a state machine. + */ +sealed class SliderTracker( + protected val scope: CoroutineScope, + protected val sliderListener: SliderStateListener, + protected val eventProducer: SliderEventProducer, +) { + + /* Reference to the current state of the internal state machine */ + var currentState: SliderState = SliderState.IDLE + protected set + + /** + * Job that launches and maintains the coroutine that collects events and operates the state + * machine. + */ + protected var job: Job? = null + + /** Indicator that the tracker is active and tracking */ + var isTracking = false + get() = job != null && job?.isActive == true + private set + + /** Starts the [Job] that collects slider events and runs the state machine */ + fun startTracking() { + job = + scope.launch { + eventProducer.produceEvents().collect { event -> + iterateState(event) + executeOnState(currentState) + } + } + } + + /** Stops the collection of slider events and the state machine */ + fun stopTracking() { + job?.cancel("Stopped tracking slider state") + job = null + resetState() + } + + /** + * Iterate through the state machine due to a new slider event. As a result, the current state + * is modified. + * + * @param[event] The slider event that is received. + */ + protected abstract suspend fun iterateState(event: SliderEvent) + + /** + * Execute an action based on the state of the state machine. This method should use the + * [SliderListener] to act on the current state. + * + * @param[currentState] A [SliderState] in the state machine + */ + protected abstract fun executeOnState(currentState: SliderState) + + /** Reset the state machine by setting the current state to [SliderState.IDLE] */ + protected open fun resetState() { + currentState = SliderState.IDLE + } +} diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java index ad7973ed0b7aea5099ce8a78ac7ddc22e850d854..1cdbe6fed58ae2fbc0eefa3789586dc0bff75ae8 100644 --- a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java +++ b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java @@ -50,7 +50,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothAdapter; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt b/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt index 6f25f7c1921a963804f2eb34e1377ce18dc3fe8d..e16bb0bb848214c0f4e4c4c60d2621232f07b30e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt @@ -38,7 +38,7 @@ import android.widget.LinearLayout.LayoutParams.WRAP_CONTENT import androidx.annotation.IdRes import androidx.core.view.setPadding import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R class KeyboardBacklightDialog( context: Context, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java index 732102e0cf9e52f88cab7e55a7784c50a96794e1..1f69cc0a8ec31083cad5814f2a4a52799cb093e4 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java @@ -48,7 +48,7 @@ import androidx.slice.builders.SliceAction; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SystemUIAppComponentFactoryBase; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.plugins.statusbar.StatusBarStateController; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt index 22bcf0aa279903499548beeebed1e72cc2b92879..fb02c7d68a9f7d880dcb34a2422880c3c51ab511 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt @@ -26,7 +26,7 @@ import com.android.keyguard.LockIconView import com.android.keyguard.LockIconViewController import com.android.keyguard.dagger.KeyguardStatusViewComponent import com.android.systemui.CoreStartable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 394bed466bd51eb38d1c37069e4b56a9dda2fcfb..efd25d5d69e698cb1698cd87534f30efdcb16294 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -128,7 +128,7 @@ import com.android.systemui.CoreStartable; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; import com.android.systemui.EventLogTags; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.LaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -3243,7 +3243,11 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, + "mPendingLock=" + mPendingLock + "." + "One of these being false means we re-locked the device during unlock. " + "Do not proceed to finish keyguard exit and unlock."); + doKeyguardLocked(null); finishSurfaceBehindRemoteAnimation(true /* showKeyguard */); + // Ensure WM is notified that we made a decision to show + setShowingLocked(true /* showing */, true /* force */); + return; } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java index ffd8a0244a86b40ce3d682b172d846081600f5fb..d5316cd4080141a84b16966e606a495183a38817 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java @@ -30,7 +30,7 @@ import android.util.DisplayMetrics; import androidx.annotation.Nullable; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.util.time.SystemClock; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt b/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt index 75677f2d9e9a80956ef1458d70fae79eaf62b9c3..8ebcece940c216d9d9ad1eb84367b502ffc0ca45 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt @@ -45,8 +45,13 @@ constructor( /** * Whether the lockscreen is showing, which we pass to [IActivityTaskManager.setLockScreenShown] * in order to show the lockscreen and hide the surface behind the keyguard (or the inverse). + * + * This value is null if we have not yet called setLockScreenShown with any value. This will + * happen during the boot sequence, but we can't default to true here since otherwise we'll + * short-circuit on the first call to setLockScreenShown since we'll think we're already + * showing. */ - private var isLockscreenShowing = true + private var isLockscreenShowing: Boolean? = null /** * Whether AOD is showing, which we pass to [IActivityTaskManager.setLockScreenShown] in order @@ -102,7 +107,7 @@ constructor( // The surface behind is always visible if the lockscreen is not showing, so we're already // visible. - if (visible && !isLockscreenShowing) { + if (visible && isLockscreenShowing != true) { Log.d(TAG, "#setVisibility -> already visible since the lockscreen isn't showing") return } @@ -159,9 +164,23 @@ constructor( } } + /** + * Sets the lockscreen state WM-side by calling ATMS#setLockScreenShown. + * + * [lockscreenShowing] defaults to true, since it's only ever null during the boot sequence, + * when we haven't yet called ATMS#setLockScreenShown. Typically, + * setWmLockscreenState(lockscreenShowing = true) is called early in the boot sequence, before + * setWmLockscreenState(aodVisible = true), so we don't expect to need to use this default, but + * if so, true should be the right choice. + */ private fun setWmLockscreenState( - lockscreenShowing: Boolean = this.isLockscreenShowing, - aodVisible: Boolean = this.isAodVisible + lockscreenShowing: Boolean = this.isLockscreenShowing ?: true.also { + Log.d(TAG, "Using isLockscreenShowing=true default in setWmLockscreenState, " + + "because setAodVisible was called before the first setLockscreenShown " + + "call during boot. This is not typical, but is theoretically possible. " + + "If you're investigating the lockscreen showing unexpectedly, start here.") + }, + aodVisible: Boolean = this.isAodVisible ) { Log.d( TAG, @@ -201,6 +220,6 @@ constructor( } companion object { - private val TAG = this::class.java.simpleName + private val TAG = WindowManagerLockscreenVisibilityManager::class.java.simpleName } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java index 82be009a75609c8089315c47c024b1b41be83411..09875a52e07d36e53ff2a7a4ba30e1e4b64fcd9d 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java @@ -37,7 +37,7 @@ import android.window.OnBackInvokedCallback; import android.window.OnBackInvokedDispatcher; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt index 5e5caba060ae422eb12da71ce93da9206d33fb64..77e8179195a19129532efeaf0cbd49acc50e4ea7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt @@ -21,7 +21,7 @@ import android.app.StatusBarManager import android.app.admin.DevicePolicyManager import android.content.Context import android.content.pm.PackageManager -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.camera.CameraGestureHelper import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt index 16385ec59aa70e83da34e04f5d50e8bbf7196e10..9b5f4615a6d57fb6b3f2222c1b3205d02777157b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt @@ -27,7 +27,7 @@ import android.provider.Settings.Secure.ZEN_DURATION_PROMPT import android.service.notification.ZenModeConfig import com.android.settingslib.notification.EnableZenModeDialog import com.android.settingslib.notification.ZenModeDialogMetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfig.kt index ed8823a53fe2d378b6b191cf18fb7737d89197c3..a7999c192643e9522412b1cbc195fdfdf88bd077 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfig.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt index f3fc8096f5d7596ef545b1256463bf53267b083f..4e71ef4e34f2586cd2e454db43931ae5498d587e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt @@ -21,7 +21,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import androidx.annotation.DrawableRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt index 320d158fb13eeac94cd5d2810d6b74cc8ce950f2..1cf6183fec6c7019d228053493d0e1299f9641a7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt @@ -21,7 +21,7 @@ import android.app.AlertDialog import android.content.Context import android.content.Intent import android.net.Uri -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Icon import com.android.systemui.keyguard.shared.quickaffordance.ActivationState diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManager.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManager.kt index 4dad17907aca2e0b5895bdbf5752e6ec9bf20898..deedbdb9e72b76579a3a685885d31f7eeddb9164 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManager.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManager.kt @@ -20,7 +20,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.content.Context import android.content.IntentFilter import android.content.SharedPreferences -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.backup.BackupHelper import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfig.kt index 250356819baf0544c8afed8aea5d8e9c6155a856..1fe94d5fa43b72acb1fe0c5e2c60951fca6b1529 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfig.kt @@ -21,7 +21,7 @@ import android.content.Context import android.media.AudioManager import androidx.lifecycle.LiveData import androidx.lifecycle.Observer -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt index 45277b833ea39057b470913027fe67a32f4e32ac..a503541dcf591dff91a27cd4f6d5159c9e75b90c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt index 23f50eaba7e733cae5b735d208c7c3e7ccebf551..7337292a9ac5e6d4c1dddcbb8f42a6161785f522 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt @@ -24,7 +24,7 @@ import android.service.quickaccesswallet.GetWalletCardsResponse import android.service.quickaccesswallet.QuickAccessWalletClient import android.service.quickaccesswallet.WalletCard import android.util.Log -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt index 1ccc689da368ae4381ff3190676b68594c49b3a9..bbdd90375ecec7541f5e4804a4973aa72777a8a7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt @@ -22,7 +22,7 @@ import android.app.admin.DevicePolicyManager import android.content.Context import android.content.Intent import com.android.systemui.ActivityIntentHelper -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.camera.CameraIntents import com.android.systemui.camera.CameraIntentsWrapper diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt index 682e841c35212b278cbf475544cda0decc541372..06cf7235ad2cb431f9897a612e73eab7f7475ecc 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt @@ -26,7 +26,7 @@ import android.os.UserHandle import android.util.Log import com.android.internal.widget.LockPatternUtils import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.data.repository.FacePropertyRepository import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt index 233acd90aee34c02b3686ef148ccb4a9dbb020ee..fd048ff11f1430e104ede4a80fa9b34f56b258d3 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt @@ -18,14 +18,13 @@ package com.android.systemui.keyguard.data.repository import android.app.StatusBarManager import android.content.Context -import android.hardware.face.FaceAuthenticateOptions import android.hardware.face.FaceManager import android.os.CancellationSignal import com.android.internal.logging.InstanceId import com.android.internal.logging.UiEventLogger import com.android.keyguard.FaceAuthUiEvent import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging @@ -47,6 +46,7 @@ import com.android.systemui.keyguard.shared.model.FailedFaceAuthenticationStatus import com.android.systemui.keyguard.shared.model.HelpFaceAuthenticationStatus import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.SuccessFaceAuthenticationStatus +import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.log.FaceAuthenticationLogger import com.android.systemui.log.SessionTracker @@ -578,7 +578,12 @@ constructor( authCancellationSignal, faceAuthCallback, null, - FaceAuthenticateOptions.Builder().setUserId(currentUserId).build() + SysUiFaceAuthenticateOptions( + currentUserId, + uiEvent, + wakeReason = uiEvent.extraInfo + ) + .toFaceAuthenticateOptions() ) } } else if (canRunDetection.value) { @@ -587,7 +592,7 @@ constructor( uiEvent, "face auth gating check is false, falling back to detection." ) - detect() + detect(uiEvent) } else { faceAuthLogger.ignoredFaceAuthTrigger( uiEvent = uiEvent, @@ -602,7 +607,7 @@ constructor( } } - suspend fun detect() { + suspend fun detect(uiEvent: FaceAuthUiEvent) { if (!isDetectionSupported) { faceAuthLogger.detectionNotSupported(faceManager, faceManager?.sensorPropertiesInternal) return @@ -619,7 +624,8 @@ constructor( faceManager?.detectFace( checkNotNull(detectCancellationSignal), detectionCallback, - FaceAuthenticateOptions.Builder().setUserId(currentUserId).build() + SysUiFaceAuthenticateOptions(currentUserId, uiEvent, uiEvent.extraInfo) + .toFaceAuthenticateOptions() ) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt index 34f6b4d74f2bb429e65b8538adb4da5e06f8e7bd..698328ecd7fb598cecf3929d6a404f8305d2e7fd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt @@ -22,7 +22,7 @@ import android.content.Intent import android.os.UserHandle import android.util.LayoutDirection import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt index 1c0b73fcfa2d69c8a0e826144c81342c8a6e4f72..af01626c5c1dc0d1f2d692f63025d4c5556fd596 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt @@ -22,7 +22,7 @@ import android.content.Context import android.graphics.Point import androidx.core.animation.Animator import androidx.core.animation.ValueAnimator -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.BiometricUnlockSource diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt index ac936b10fe43f82aff813257e4ffbeae1b1c36cb..b2e436cd2af60f87966f388033184a8d32547844 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BurnInInteractor.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.domain.interactor import android.content.Context import androidx.annotation.DimenRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.data.repository.ConfigurationRepository import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt index 9c6a1b1b6cc0b1b89136a25590dc6346eb7c02d2..8f3943133eb10a9ab18b7c51cfcbb37b8c71a76c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt @@ -265,7 +265,11 @@ constructor( !isKeyguardUnlocked && statusBarState == KEYGUARD ) { - transitionId = startTransitionTo(KeyguardState.PRIMARY_BOUNCER) + transitionId = + startTransitionTo( + toState = KeyguardState.PRIMARY_BOUNCER, + animator = null, // transition will be manually controlled + ) } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt index 572785721b4f1c51bb47a2ef5c09e0cce3c48e22..338f9945f5db77025ca0a86d7abfd594de95e28b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt @@ -23,7 +23,7 @@ import android.app.StatusBarManager import android.graphics.Point import android.util.MathUtils import com.android.app.animation.Interpolators -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractor.kt index a257f529357fdcd4679c2e0db1bcaffe1b1bdd12..299c8cf410cc52b3785152f382bd7d420dc7deab 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractor.kt @@ -24,7 +24,7 @@ import android.view.accessibility.AccessibilityManager import androidx.annotation.VisibleForTesting import com.android.internal.logging.UiEvent import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt index 7f43cbc69fa2fbb3d7ab3cb1b030b30a4da5be81..de791aa23e226083f815fe443d517f6facda99e3 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt @@ -23,7 +23,7 @@ import android.content.Context import android.content.Intent import android.util.Log import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.animation.Expandable import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt index f0df3a2e6a6f5ca52e0ded69f9b30774fcb0de21..20e55e527fc2972aecaa65aa8c967484589da82c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt @@ -19,9 +19,10 @@ package com.android.systemui.keyguard.domain.interactor import android.content.Context import android.hardware.biometrics.BiometricFaceConstants import com.android.keyguard.FaceAuthUiEvent +import com.android.keyguard.FaceWakeUpTriggersConfig import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.CoreStartable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.data.repository.FacePropertyRepository import com.android.systemui.biometrics.shared.model.LockoutMode import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor @@ -31,8 +32,10 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.keyguard.shared.model.ErrorFaceAuthenticationStatus import com.android.systemui.keyguard.shared.model.FaceAuthenticationStatus import com.android.systemui.keyguard.shared.model.TransitionState @@ -40,6 +43,7 @@ import com.android.systemui.log.FaceAuthenticationLogger import com.android.systemui.user.data.model.SelectionStatus import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.kotlin.pairwise +import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -75,6 +79,8 @@ constructor( private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository, private val userRepository: UserRepository, private val facePropertyRepository: FacePropertyRepository, + private val keyguardRepository: KeyguardRepository, + private val faceWakeUpTriggersConfig: FaceWakeUpTriggersConfig, ) : CoreStartable, KeyguardFaceAuthInteractor { private val listeners: MutableList<FaceAuthenticationListener> = mutableListOf() @@ -117,8 +123,21 @@ constructor( keyguardTransitionInteractor.dozingToLockscreenTransition ) .filter { it.transitionState == TransitionState.STARTED } + .sample(keyguardRepository.wakefulness) + .filter { wakefulnessModel -> + val validWakeupReason = + faceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom( + wakefulnessModel.lastWakeReason + ) + if (!validWakeupReason) { + faceAuthenticationLogger.ignoredWakeupReason(wakefulnessModel.lastWakeReason) + } + validWakeupReason + } .onEach { faceAuthenticationLogger.lockscreenBecameVisible(it) + FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED.extraInfo = + it.lastWakeReason.powerManagerWakeReason runFaceAuth( FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED, fallbackToDetect = true diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt index c8a04fdbca525c681023f5f081d99576850010f7..3602be8e62a49f97df02ae32226241aa598594da 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt @@ -21,18 +21,37 @@ import android.os.PowerManager /** The reason we're waking up or going to sleep, such as pressing the power button. */ enum class WakeSleepReason( val isTouch: Boolean, + @PowerManager.WakeReason val powerManagerWakeReason: Int, ) { /** The physical power button was pressed to wake up or sleep the device. */ - POWER_BUTTON(isTouch = false), + POWER_BUTTON(isTouch = false, PowerManager.WAKE_REASON_POWER_BUTTON), /** The user has tapped or double tapped to wake the screen. */ - TAP(isTouch = true), + TAP(isTouch = true, PowerManager.WAKE_REASON_TAP), /** The user performed some sort of gesture to wake the screen. */ - GESTURE(isTouch = true), + GESTURE(isTouch = true, PowerManager.WAKE_REASON_GESTURE), + + /** Waking up because a wake key other than power was pressed. */ + KEY(isTouch = false, PowerManager.WAKE_REASON_WAKE_KEY), + + /** Waking up because a wake motion was performed */ + MOTION(isTouch = false, PowerManager.WAKE_REASON_WAKE_MOTION), + + /** Waking due to the lid being opened. */ + LID(isTouch = false, PowerManager.WAKE_REASON_LID), + + /** Waking the device due to unfolding of a foldable device. */ + UNFOLD(isTouch = false, PowerManager.WAKE_REASON_UNFOLD_DEVICE), + + /** Waking up due to a user performed lift gesture. */ + LIFT(isTouch = false, PowerManager.WAKE_REASON_LIFT), + + /** Waking up due to a user interacting with a biometric. */ + BIOMETRIC(isTouch = false, PowerManager.WAKE_REASON_BIOMETRIC), /** Something else happened to wake up or sleep the device. */ - OTHER(isTouch = false); + OTHER(isTouch = false, PowerManager.WAKE_REASON_UNKNOWN); companion object { fun fromPowerManagerWakeReason(reason: Int): WakeSleepReason { @@ -40,6 +59,12 @@ enum class WakeSleepReason( PowerManager.WAKE_REASON_POWER_BUTTON -> POWER_BUTTON PowerManager.WAKE_REASON_TAP -> TAP PowerManager.WAKE_REASON_GESTURE -> GESTURE + PowerManager.WAKE_REASON_WAKE_KEY -> KEY + PowerManager.WAKE_REASON_WAKE_MOTION -> MOTION + PowerManager.WAKE_REASON_LID -> LID + PowerManager.WAKE_REASON_UNFOLD_DEVICE -> UNFOLD + PowerManager.WAKE_REASON_LIFT -> LIFT + PowerManager.WAKE_REASON_BIOMETRIC -> BIOMETRIC else -> OTHER } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt index 5c072fbfdb01eefa5fcbf1e93e103227cb0cb240..5900a24679942fb8e6d381e96aa25484985b1419 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt @@ -22,7 +22,7 @@ import android.view.ViewGroup import android.view.ViewPropertyAnimator import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.ui.viewmodel.KeyguardAmbientIndicationViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel import com.android.systemui.lifecycle.repeatWhenAttached diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt index a9c71adc095dbfee204af8207b2efc5a3c5664f1..dd7eee9240077a29f6fc06f77fb1652ddbef8e45 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt @@ -32,7 +32,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.animation.Expandable import com.android.systemui.animation.view.LaunchableLinearLayout diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt index dc51944ddc083ab323517751c5c76ba28719302a..f20a66604ebf470bb94c1acd9dd908370313037f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardIndicationAreaBinder.kt @@ -22,7 +22,7 @@ import android.view.ViewGroup import android.widget.TextView import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewModel diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceOnTouchListener.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceOnTouchListener.kt index 7685345805f4442619afbe34a90c0f75f04a5d06..125e2dac7bb7d6396e6476f9b4960cbdee1bfe2b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceOnTouchListener.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceOnTouchListener.kt @@ -24,7 +24,7 @@ import android.view.ViewConfiguration import android.view.ViewPropertyAnimator import androidx.core.animation.CycleInterpolator import androidx.core.animation.ObjectAnimator -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.ui.view.rawDistanceFrom import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordanceViewModel diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt index 83b5463ea19c91cf3ed012643e10ef845ffacc79..eeb4ac34bf37b32690fa621406a700b7d66a802f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt @@ -30,7 +30,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.animation.view.LaunchableImageView import com.android.systemui.common.shared.model.Icon diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt index 4b768211dc61a80781297eda3e1c9626e5075302..f564d0073e4290a3769d17baf4771caaa9ee9c45 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt @@ -23,7 +23,7 @@ import android.view.ViewGroup import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.TintedIcon diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSettingsViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSettingsViewBinder.kt index 82610e6ea59ddc83e3c0dd0b5a45ac9b195eb2bf..6beef8ec1ff3b3f32072b033a302beeb26997a14 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSettingsViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSettingsViewBinder.kt @@ -22,7 +22,7 @@ import android.view.View import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.animation.view.LaunchableLinearLayout import com.android.systemui.common.ui.binder.IconViewBinder diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardInternalViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardInternalViewBinder.kt index 3bb01f29aadf4c991bbadb4a21303dbae2a7d103..aabb3f41e881193f34b4dad5f8d81dfab2ccc844 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardInternalViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardInternalViewBinder.kt @@ -18,7 +18,7 @@ package com.android.systemui.biometrics.ui.binder import android.view.View -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.ui.binder.UdfpsAodFingerprintViewBinder import com.android.systemui.keyguard.ui.binder.UdfpsBackgroundViewBinder import com.android.systemui.keyguard.ui.binder.UdfpsFingerprintViewBinder diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardViewBinder.kt index 667abaea0b249d5de3d7901c8ecd85ab77a6c4af..a0e0da452036e9112ce7845178c02810076919bd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/UdfpsKeyguardViewBinder.kt @@ -23,7 +23,7 @@ import android.widget.FrameLayout import androidx.asynclayoutinflater.view.AsyncLayoutInflater import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.UdfpsKeyguardView import com.android.systemui.biometrics.ui.binder.UdfpsKeyguardInternalViewBinder import com.android.systemui.keyguard.ui.viewmodel.BackgroundViewModel diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt index 85a2fd5a6d01ec6a64ea4ef616fb7a2bbd3ad86b..2ad74fbc6674d5e83fc96fecd7aee579e0447b76 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt @@ -38,7 +38,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isInvisible import com.android.keyguard.ClockEventController import com.android.keyguard.KeyguardClockSwitch -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.view.LaunchableImageView import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor import com.android.systemui.broadcast.BroadcastDispatcher diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardIndicationArea.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardIndicationArea.kt index 890d565b03a5f3185cfb44a78ea7413cb3054b8b..78099d9f5d909f548c3cddfa9c246fa007a85586 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardIndicationArea.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardIndicationArea.kt @@ -25,7 +25,7 @@ import android.view.View import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.LinearLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.KeyguardIndicationTextView class KeyguardIndicationArea( diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt index 5aba229434d7222c7d3278ce93e79a0bfb0e64ff..28e6a954a3d1f38d5234785a8d72943e8ef3cd66 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt @@ -25,7 +25,7 @@ import androidx.constraintlayout.widget.ConstraintSet.LEFT import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.RIGHT import androidx.constraintlayout.widget.ConstraintSet.TOP -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt index ac11ba5b5ec684158cf99a87c213b0598418c679..669db34b97aaface844e4ba4bcd54dedc81a2de3 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt @@ -26,7 +26,7 @@ import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/BaseShortcutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/BaseShortcutSection.kt index d046a196e94ef27aecdcc5e61b7425f988b78cf1..a4137ac934a188abbfd05a90dca5935c8d007a39 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/BaseShortcutSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/BaseShortcutSection.kt @@ -4,7 +4,7 @@ import android.view.View import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.res.ResourcesCompat -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.view.LaunchableImageView import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt index ce86e97841802041e16649bddfbf59a3965538c9..9371d4e2d465dba22c1c25ac25c3c3d6809e2f50 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt @@ -29,7 +29,7 @@ import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSection.kt index a45223cbd449ba30e8f8e8fbcc611ec07e886b9d..623eac013a3537f1a7c58a11f70c073c4b326b75 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSection.kt @@ -21,7 +21,7 @@ import android.content.Context import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt index 100099d3988ea86f83d6b3a82ad093e604363be9..9409036586e808f50a9fd1fe05ff609df3e9e22f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt @@ -29,7 +29,7 @@ import androidx.constraintlayout.widget.ConstraintSet import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.LockIconView import com.android.keyguard.LockIconViewController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.AuthController import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt index 7fff43b82e93545fac9d811528ce32aa36f6c0a9..afa49bdd69d88ea8e0b0a435656bf3cb54bb25d6 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt @@ -27,7 +27,7 @@ import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultSettingsPopupMenuSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultSettingsPopupMenuSection.kt index b25f9afc0d1ec4891f240b88aac7ef9899d40fd2..6fd13e0931aaab137b847f3f16234f44eba6fcd9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultSettingsPopupMenuSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultSettingsPopupMenuSection.kt @@ -28,7 +28,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT import androidx.core.view.isVisible -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.view.LaunchableLinearLayout import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt index 13ef985287f612d29f0c799367d1d8d803e4ba54..a67912017e547b280737b943cb4a24bbaa41ffe3 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt @@ -24,7 +24,7 @@ import androidx.constraintlayout.widget.ConstraintSet.BOTTOM import androidx.constraintlayout.widget.ConstraintSet.LEFT import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.RIGHT -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusBarSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusBarSection.kt index d6c69b3c442fb21aa6ebd92fe43e9dc384dc034f..f713d5e312f11b0e25614de0ae6d4ce8742ec060 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusBarSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusBarSection.kt @@ -27,7 +27,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.keyguard.dagger.KeyguardStatusBarViewComponent -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt index 1cb10bd762a5e6add383b3245cba5b18e7c45dfb..1a9f021a7622995a520918e78ca304d850a903c7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt @@ -31,7 +31,7 @@ import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.keyguard.KeyguardStatusView import com.android.keyguard.dagger.KeyguardStatusViewComponent -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.KeyguardViewConfigurator diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeGuidelines.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeGuidelines.kt index 5e3ea059ddd5861dd31a178c036a55d23cc60b81..c8697717f1fdf68091e36b3979c22e2b7c0e469b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeGuidelines.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeGuidelines.kt @@ -20,7 +20,7 @@ package com.android.systemui.keyguard.ui.view.layout.sections import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet.VERTICAL -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.shared.model.KeyguardSection import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt index 63d165daa30391aa4a7bfb8b7e44d9c49987281e..33718c41090579d24d3643f066a1b18ef0e6d22e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.Context import android.content.res.Resources -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.shared.model.SettingsClockSize diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSettingsMenuViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSettingsMenuViewModel.kt index c36da9da58a5fbfb6c5385a9da850eb3760fa85a..66ceded2040da20a9151e0a2317e6489ea73e699 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSettingsMenuViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSettingsMenuViewModel.kt @@ -17,7 +17,7 @@ package com.android.systemui.keyguard.ui.viewmodel -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.shared.model.Text import com.android.systemui.keyguard.domain.interactor.KeyguardLongPressInteractor diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModel.kt index 667c2f1bd998cb3793ad59e2c943dfb239cfbade..c10a4635644fb7658b842b46d9ee39cfb33f3fec 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModel.kt @@ -17,7 +17,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.domain.interactor.BurnInOffsets import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModel.kt index dd586076be8383a97ba376d65ae746a76a537751..54abc5bc695f32f8f693e6dd745d246b6b199730 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModel.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.Context import androidx.annotation.ColorInt import com.android.settingslib.Utils.getColorAttrDefaultColor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.domain.interactor.BurnInOffsets import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor diff --git a/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt b/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt index 8143f99c4d0a5b556c4b1cc20866931d279e0934..66af36a71d3836f547d2325ff8553a9e37e73ea5 100644 --- a/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt @@ -5,7 +5,8 @@ import android.hardware.face.FaceSensorPropertiesInternal import com.android.keyguard.FaceAuthUiEvent import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.ErrorFaceAuthenticationStatus -import com.android.systemui.keyguard.shared.model.TransitionStep +import com.android.systemui.keyguard.shared.model.WakeSleepReason +import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.log.core.LogLevel.DEBUG import com.android.systemui.log.dagger.FaceAuthLog import com.google.errorprone.annotations.CompileTimeConstant @@ -29,6 +30,18 @@ class FaceAuthenticationLogger constructor( @FaceAuthLog private val logBuffer: LogBuffer, ) { + + fun ignoredWakeupReason(lastWakeReason: WakeSleepReason) { + logBuffer.log( + TAG, + DEBUG, + { str1 = "$lastWakeReason" }, + { + "Ignoring off/aod/dozing -> Lockscreen transition " + + "because the last wake up reason is not allow-listed: $str1" + } + ) + } fun ignoredFaceAuthTrigger(uiEvent: FaceAuthUiEvent?, ignoredReason: String) { logBuffer.log( TAG, @@ -175,12 +188,12 @@ constructor( logBuffer.log(TAG, DEBUG, "Triggering face auth because alternate bouncer is visible") } - fun lockscreenBecameVisible(transitionStep: TransitionStep?) { + fun lockscreenBecameVisible(wake: WakefulnessModel?) { logBuffer.log( TAG, DEBUG, - { str1 = "$transitionStep" }, - { "Triggering face auth because lockscreen became visible due to transition: $str1" } + { str1 = "${wake?.lastWakeReason}" }, + { "Triggering face auth because lockscreen became visible due to wake reason: $str1" } ) } diff --git a/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java b/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java index 2cfe5a719f09c074acdc5128e2a4afcc0109514d..d01917a5d0fcacedc276597caf9429d62a7f06c4 100644 --- a/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java +++ b/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java @@ -43,7 +43,7 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.ILogAccessDialogCallback; -import com.android.systemui.R; +import com.android.systemui.res.R; /** diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt index be487561961c8b14634ea6122ac145efd8eedd5d..88bc064c60f729f36783d189806316267f2a8900 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt @@ -46,7 +46,7 @@ import com.android.internal.app.chooser.TargetInfo import com.android.internal.widget.RecyclerView import com.android.internal.widget.RecyclerViewAccessibilityDelegate import com.android.internal.widget.ResolverDrawerLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorComponent import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorController import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorResultHandler diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java index d403788f2c66edcea2cdac8a14cadd1329603711..4de6278400b32d2149b63fa1fcf0d3654921e20c 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java @@ -51,7 +51,7 @@ import android.text.style.StyleSpan; import android.util.Log; import android.view.Window; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.mediaprojection.devicepolicy.ScreenCaptureDevicePolicyResolver; diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/GutsViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/GutsViewHolder.kt index 53150677145983819199011a44274e7ba80fed10..f5f5d388a27836a887bc765f9a0e382c8a380dc1 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/GutsViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/GutsViewHolder.kt @@ -22,7 +22,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageButton import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.controls.ui.accentPrimaryFromScheme import com.android.systemui.media.controls.ui.surfaceFromScheme import com.android.systemui.media.controls.ui.textPrimaryFromScheme diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaData.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaData.kt index b7a2522037afd3bc0ad0772d8c58e44cc26804bb..b98e9c232d587af47c948f34d15dcf999dc57a97 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaData.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaData.kt @@ -21,7 +21,7 @@ import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.media.session.MediaSession import com.android.internal.logging.InstanceId -import com.android.systemui.R +import com.android.systemui.res.R /** State of a media view. */ data class MediaData( diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt index 8b7426336b803c084f3cfd4dbbb9c04c29aa8d4b..1b14f75d54ef6e0dcdc5b992b775aadc45ea0341 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt @@ -25,7 +25,7 @@ import android.widget.SeekBar import android.widget.TextView import androidx.constraintlayout.widget.Barrier import com.android.internal.widget.CachingIconView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.controls.models.GutsViewHolder import com.android.systemui.surfaceeffects.ripple.MultiRippleView import com.android.systemui.surfaceeffects.turbulencenoise.TurbulenceNoiseView diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarObserver.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarObserver.kt index 6eaff3fcb9291073003617593c9d759f0cc9c890..3f4f34745c4bbd9dec83cfab213a181beed74b03 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarObserver.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarObserver.kt @@ -23,7 +23,7 @@ import androidx.annotation.UiThread import androidx.lifecycle.Observer import com.android.app.animation.Interpolators import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.controls.ui.SquigglyProgress /** diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt index 258284e8af5186c3f8ab1851a7e315570e676694..8ac8a2da44789f8a21b8b9ef0824459948794b44 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt @@ -23,7 +23,7 @@ import android.widget.ImageView import android.widget.SeekBar import android.widget.TextView import com.android.internal.widget.CachingIconView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.controls.models.GutsViewHolder import com.android.systemui.media.controls.ui.IlluminationDrawable import com.android.systemui.util.animation.TransitionLayout diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt index e79fc74ffc8683afc96513490d2cb5b7cd0b5dc7..0f3e0acd007d534c7b1f2d697aa81f8184669e32 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt @@ -60,7 +60,7 @@ import com.android.internal.annotations.Keep import com.android.internal.logging.InstanceId import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt index c90a3c10c6bdc690914a7c2bc43e39e43c7ab833..1fe93ed5503d9b9928dc6c1ee445835339b7ca6d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt @@ -32,7 +32,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager import com.android.settingslib.media.LocalMediaManager import com.android.settingslib.media.MediaDevice import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/IlluminationDrawable.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/IlluminationDrawable.kt index b9cc772e7136fe5375b50fc6f4ba084ba459ee1b..5aa6824a98b1d3d0211e8c84025658506f2b3bf5 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/IlluminationDrawable.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/IlluminationDrawable.kt @@ -37,7 +37,7 @@ import androidx.annotation.Keep import com.android.app.animation.Interpolators import com.android.internal.graphics.ColorUtils import com.android.internal.graphics.ColorUtils.blendARGB -import com.android.systemui.R +import com.android.systemui.res.R import org.xmlpull.v1.XmlPullParser private const val BACKGROUND_ANIM_DURATION = 370L diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/LightSourceDrawable.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/LightSourceDrawable.kt index 646d1d0ff0fcab2c4f589131941b2206a4c3c874..6ee072d41ecc3f9e04cd27116c52e62671aaaea4 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/LightSourceDrawable.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/LightSourceDrawable.kt @@ -37,7 +37,7 @@ import android.util.MathUtils.lerp import androidx.annotation.Keep import com.android.app.animation.Interpolators import com.android.internal.graphics.ColorUtils -import com.android.systemui.R +import com.android.systemui.res.R import org.xmlpull.v1.XmlPullParser private const val RIPPLE_ANIM_DURATION = 800L diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselController.kt index 38a6a8f3470b0ed657ee906c17920e708312c7d3..e59fc15c3876866b42daf9759cf44183fa5504d6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselController.kt @@ -38,7 +38,7 @@ import com.android.internal.logging.InstanceId import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselScrollHandler.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselScrollHandler.kt index ec0c40ec69a390fb0d1a6f17389a983f95a90556..126115294e75ab8ebc6b2324a63681cbab994dec 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselScrollHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaCarouselScrollHandler.kt @@ -29,7 +29,7 @@ import androidx.dynamicanimation.animation.SpringForce import com.android.internal.annotations.VisibleForTesting import com.android.settingslib.Utils import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.classifier.Classifier.NOTIFICATION_DISMISS import com.android.systemui.media.controls.util.MediaUiEventLogger import com.android.systemui.plugins.FalsingManager diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java index a12bc2c99d639812dfa64ceeb3b032388bee04c6..cce4cda8af8a3d6b0a2c1bf8fa4576f5b104db4f 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java @@ -81,7 +81,7 @@ import com.android.internal.logging.InstanceId; import com.android.internal.widget.CachingIconView; import com.android.settingslib.widget.AdaptiveIcon; import com.android.systemui.ActivityIntentHelper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.GhostedViewLaunchAnimatorController; import com.android.systemui.bluetooth.BroadcastDialogController; diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt index 0b30e597ab1c2097ae4e3f87cc75688d17c79493..ae3c912d6d1bc21388ce315a45384acee29e7223 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt @@ -35,7 +35,7 @@ import android.view.ViewGroupOverlay import androidx.annotation.VisibleForTesting import com.android.app.animation.Interpolators import com.android.keyguard.KeyguardViewController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dreams.DreamOverlayStateController diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt index 1dd969f9bea57e7f0a1150c85f2a6ec24dc05ac5..b436f5d5a1ef2888a0978ec6eafcb7e3ca48bc06 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt @@ -20,7 +20,7 @@ import android.content.Context import android.content.res.Configuration import androidx.annotation.VisibleForTesting import androidx.constraintlayout.widget.ConstraintSet -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.controls.models.GutsViewHolder import com.android.systemui.media.controls.models.player.MediaViewHolder import com.android.systemui.media.controls.models.recommendation.RecommendationViewHolder diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt index ea943be85f21d385d10734a9ae4559a289a846e5..20ea60fa3a5feafefdce438631551b86d4db6664 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt @@ -20,7 +20,7 @@ import com.android.internal.logging.InstanceId import com.android.internal.logging.InstanceIdSequence import com.android.internal.logging.UiEvent import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.controls.models.player.MediaData import com.android.systemui.media.controls.ui.MediaHierarchyManager diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaItem.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaItem.java index 875a01087908380efa5d38e0ba17777b9389b3a2..fbb84defc372e858b77d8259c9cf70eb288591bb 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaItem.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaItem.java @@ -19,7 +19,7 @@ package com.android.systemui.media.dialog; import androidx.annotation.IntDef; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java index 26a7d048cf27e661ecd605edce3b90659338ead7..ff9495daaa22d1e88abe8536f99cc0f3098350a3 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java @@ -41,7 +41,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.media.LocalMediaManager.MediaDeviceState; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java index d882498307391f6e6c5d4358d5325cc302333966..5958b0a24a5e869c9421906133a2bbe0e3d243c8 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java @@ -49,7 +49,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.utils.ThreadUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java index 3a1d8b0e238ee30e77dc6833520ab3e1a55c6688..0c5a14f5720ab9bff0b4da8a00b5fffd4c6a412f 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java @@ -58,7 +58,7 @@ import androidx.core.graphics.drawable.IconCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.statusbar.phone.SystemUIDialog; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java index 11a16a427c6be0e4a74eab95246dc7e74845bcb9..ac64300a657084f056ed254586a15b22cca7d7a2 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java @@ -45,7 +45,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.qrcode.QrCodeGenerator; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.phone.SystemUIDialog; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 7011ad992a91de58d6267aeadb8267328efdc2e5..426a497fa329d567993534cb3d18b39292332759 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -78,7 +78,7 @@ import com.android.settingslib.media.InfoMediaManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.utils.ThreadUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java index e5a6bb5239165c6ad3ace15d0212b1aaba003dd2..4640a5d4d8011adc9e83fa706c82aeee0c9ac2cb 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java @@ -27,7 +27,7 @@ import androidx.core.graphics.drawable.IconCompat; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java index 2680a2ff4567dee8904115ef05261ad7e78251c6..87c9cd08abc39383d622a7bc180fd55b768c2925 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java @@ -30,7 +30,7 @@ import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SystemUIDialog; /** diff --git a/packages/SystemUI/src/com/android/systemui/media/systemsounds/HomeSoundEffectController.java b/packages/SystemUI/src/com/android/systemui/media/systemsounds/HomeSoundEffectController.java index 0ba5f28c351f2679feb451c8a98fa9db58ef7766..9de2b4f4a97a473658ed5b37b6956525dad6a4c6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/systemsounds/HomeSoundEffectController.java +++ b/packages/SystemUI/src/com/android/systemui/media/systemsounds/HomeSoundEffectController.java @@ -26,7 +26,7 @@ import android.media.AudioManager; import android.util.Slog; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.TaskStackChangeListener; diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt index b29b5887545ab6d7a39f5f110ab05713c30012b1..2f0e1298499c634088b5954536ba3f0737a30cd9 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt @@ -21,7 +21,7 @@ import android.content.pm.PackageManager import android.graphics.drawable.Drawable import androidx.annotation.AttrRes import androidx.annotation.DrawableRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.shared.model.TintedIcon diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt index da8e106d3019daf648aa5789637612d20922ab1d..6e9485e5947c48fb1f0c52ef223a1c2cee0f2144 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt @@ -35,7 +35,7 @@ import android.view.accessibility.AccessibilityManager import android.view.View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE import android.view.View.ACCESSIBILITY_LIVE_REGION_NONE import com.android.internal.widget.CachingIconView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.internal.logging.InstanceId import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttReceiverRippleController.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttReceiverRippleController.kt index fbf7e25981dad498f8b573f8b2cb8bb708e83f2c..fbd7fd3fe8213326a70e09a587bae981fe113f54 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttReceiverRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttReceiverRippleController.kt @@ -20,7 +20,7 @@ import android.content.res.ColorStateList import android.view.View import android.view.WindowManager import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import javax.inject.Inject /** diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt index d3efae427cb02278cb8d841c8e5be3956f42ddda..339145c71215463074a27c5eff268cf587d7b9a8 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt @@ -21,7 +21,7 @@ import android.content.Context import android.util.Log import androidx.annotation.StringRes import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text /** diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt index 87d0098805b36c5e2154c819f120d31cc9cd87b7..e827a1ec099d7bb9335802aac66eace940a7ad24 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt @@ -25,7 +25,7 @@ import com.android.internal.logging.UiEventLogger import com.android.internal.statusbar.IUndoMediaTransferCallback import com.android.systemui.CoreStartable import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt index 829b0ddbe3a8249954fda36151bec1644a34f5a7..950b695953ab1f8d590e02e30608bcffd29eda55 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt @@ -21,7 +21,7 @@ import com.android.internal.R as AndroidR import com.android.internal.app.AbstractMultiProfilePagerAdapter.EmptyState import com.android.internal.app.AbstractMultiProfilePagerAdapter.EmptyStateProvider import com.android.internal.app.ResolverListAdapter -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.devicepolicy.PersonalProfile import com.android.systemui.mediaprojection.devicepolicy.ScreenCaptureDevicePolicyResolver import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionRecentsViewController.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionRecentsViewController.kt index cbb7e1d0ef836d5a7f034dd3ef34d180af62c573..fd1a683dc78f2cb6747998c0d80496a51a5dc48b 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionRecentsViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionRecentsViewController.kt @@ -26,7 +26,7 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorResultHandler import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorScope import com.android.systemui.mediaprojection.appselector.data.RecentTask diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionTaskView.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionTaskView.kt index 0c7705467e10566ddf606204c596a107c4266997..412c006806bf85d58fc2778a77c81ae8f35447f2 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionTaskView.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/MediaProjectionTaskView.kt @@ -28,7 +28,7 @@ import android.view.View import android.view.WindowManager import androidx.core.content.getSystemService import androidx.core.content.res.use -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.appselector.data.RecentTask import com.android.systemui.shared.recents.model.ThumbnailData import com.android.systemui.shared.recents.utilities.PreviewPositionHelper diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTaskViewHolder.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTaskViewHolder.kt index a09935b9fb6ac3cde2188a33c2fcd6d3ae5a074e..3fe040a0d715ad6e487346582ea3d62bb9efb7e6 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTaskViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTaskViewHolder.kt @@ -21,7 +21,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.recyclerview.widget.RecyclerView.ViewHolder -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelector import com.android.systemui.mediaprojection.appselector.data.AppIconLoader import com.android.systemui.mediaprojection.appselector.data.RecentTask diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTasksAdapter.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTasksAdapter.kt index 6af50a0eb699478eeffda7d80f3bf08dfe506a8e..78dbd9245d8a0f4df021c3a3d0f062fe6cde36f2 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTasksAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/view/RecentTasksAdapter.kt @@ -20,7 +20,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.mediaprojection.appselector.data.RecentTask import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/devicepolicy/ScreenCaptureDisabledDialog.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/devicepolicy/ScreenCaptureDisabledDialog.kt index a6b3da04ad8061497458261952f5dfaa5a33605f..fc452288f86d4cfd20196a13e0950136f65b652e 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/devicepolicy/ScreenCaptureDisabledDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/devicepolicy/ScreenCaptureDisabledDialog.kt @@ -16,7 +16,7 @@ package com.android.systemui.mediaprojection.devicepolicy import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog /** Dialog that shows that screen capture is disabled on this device. */ diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinator.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinator.kt index a437139226de47c7aa98dbf2ba2c7d411a7e0b16..7840da960a832bded4dd52634e5376d95e7d7309 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinator.kt @@ -21,7 +21,7 @@ import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.util.Log -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 62b22c50c1dc7810592adcc038ed97de3c274b32..cb52a5fb53fa759740f27d583477f64123494b2a 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -112,7 +112,7 @@ import com.android.internal.statusbar.LetterboxDetails; import com.android.internal.util.LatencyTracker; import com.android.internal.view.AppearanceRegion; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.assist.AssistManager; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.DisplayId; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java index 2a7704f13c3b272af09847bda15d31b88b561aad..c1d98c9daf1deb632eded706b8dcd4060cbf3e2c 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java @@ -36,7 +36,7 @@ import android.widget.Space; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.navigationbar.buttons.ButtonDispatcher; import com.android.systemui.navigationbar.buttons.KeyButtonView; import com.android.systemui.navigationbar.buttons.ReverseLinearLayout; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java index f6bfd6c8f9c51aa3c43e3b4855663f4ffe15680b..3ef5094e55ed7b5ba3d202cc820fc1b8d242cb95 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarModule.java @@ -21,7 +21,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.navigationbar.NavigationBarComponent.NavigationBarScope; import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java index 1d73bc205dc4f76bd4b18ee3f3e40c87e0bd7310..3e34318a5fb53307c4e15f4ffc082e1eac81f5b2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java @@ -24,7 +24,7 @@ import android.graphics.Rect; import android.util.SparseArray; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.navigationbar.NavigationBarComponent.NavigationBarScope; import com.android.systemui.navigationbar.buttons.ButtonDispatcher; import com.android.systemui.settings.DisplayTracker; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 79e7b710c56e3fa8c744c54a5384144cbb42f623..4d6d95a05b1b73732fc67cee6ace3085946ac762 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -62,7 +62,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.Utils; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.buttons.ButtonDispatcher; import com.android.systemui.navigationbar.buttons.ContextualButton; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/ScreenPinningNotify.java b/packages/SystemUI/src/com/android/systemui/navigationbar/ScreenPinningNotify.java index ac7baf592599bbdb0077efc2d1f042bf673e89f9..939c09603c22faf8744bd34bd8eeda20eb0b340e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/ScreenPinningNotify.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/ScreenPinningNotify.java @@ -21,7 +21,7 @@ import android.os.SystemClock; import android.util.Slog; import android.widget.Toast; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysUIToast; /** diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/DeadZone.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/DeadZone.java index 9305d05187323f5058bfba0d23c0bc41b3b8c7e5..bd3a0c1b0efafa48fd342902c7591c87fb8da3bb 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/DeadZone.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/DeadZone.java @@ -26,7 +26,7 @@ import android.view.MotionEvent; import android.view.Surface; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.navigationbar.NavigationBarView; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonDrawable.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonDrawable.java index 702be72ff4ed3d6373d982eb87c3f1c8db878a3d..686faccc639a3400a8acd623c77d1f443942cf9a 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonDrawable.java @@ -40,7 +40,7 @@ import android.util.FloatProperty; import android.view.View; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Drawable for {@link KeyButtonView}s that supports tinting between two colors, rotation and shows diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java index 3529142467d5b306aad532e45a74fc801de3c5ac..dcf1a8e98f1c31c8dd771740c7baae4a8409919e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java @@ -58,7 +58,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/NearestTouchFrame.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/NearestTouchFrame.java index 8ff7b7ae8e593052a01ae7065cc407a78f3eaed5..d780f7c11608fe6c4a307842d07fa859fd010831 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/NearestTouchFrame.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/NearestTouchFrame.java @@ -28,7 +28,7 @@ import android.widget.FrameLayout; import androidx.annotation.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.Comparator; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index b21b0017208c40aa1866c70abf896c67ba6a3baa..3dfd2925a1b2b15ee3b95acc351fc8f27199a335 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -69,7 +69,7 @@ import androidx.annotation.DimenRes; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.policy.GestureNavigationSettingsObserver; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt index 9ddb78ae19ee429177b9766ff098a21ce2e16217..439b7e18e0dfde7e59ff17a16618d53e19e7934a 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt @@ -5,7 +5,7 @@ import android.util.TypedValue import androidx.core.animation.Interpolator import androidx.core.animation.PathInterpolator import androidx.dynamicanimation.animation.SpringForce -import com.android.systemui.R +import com.android.systemui.res.R data class EdgePanelParams(private var resources: Resources) { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java index ff22398cc3be5e196afe89395f499ead03a046bb..380846e17a13b4567e11a5d0190eda2c6670b270 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java @@ -51,7 +51,7 @@ import androidx.dynamicanimation.animation.SpringForce; import com.android.app.animation.Interpolators; import com.android.internal.util.LatencyTracker; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.plugins.NavigationEdgeBackPlugin; import com.android.systemui.settings.DisplayTracker; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java index 913b65289e12e85509a889380f6180139fd6ed03..5a22c385cb5192eb5a50001c596e57397f5e508f 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationHandle.java @@ -28,7 +28,7 @@ import android.view.ContextThemeWrapper; import android.view.View; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.navigationbar.buttons.ButtonInterface; public class NavigationHandle extends View implements ButtonInterface { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/QuickswitchOrientedNavHandle.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/QuickswitchOrientedNavHandle.java index 88622aadd5431194a5f3b76feda1349d6f2eb516..b55de279dc281b84ffc06e092f435814320d8cc6 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/QuickswitchOrientedNavHandle.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/QuickswitchOrientedNavHandle.java @@ -21,7 +21,7 @@ import android.graphics.Canvas; import android.graphics.RectF; import android.view.Surface; -import com.android.systemui.R; +import com.android.systemui.res.R; /** Temporarily shown view when using QuickSwitch to switch between apps of different rotations */ public class QuickswitchOrientedNavHandle extends NavigationHandle { diff --git a/packages/SystemUI/src/com/android/systemui/net/NetworkOverLimitActivity.java b/packages/SystemUI/src/com/android/systemui/net/NetworkOverLimitActivity.java index be3168c3b208b9a1fe1d2be4524e4b10eabf7f54..c2163370b4a1fe2dd29187fee9c54e88091b9786 100644 --- a/packages/SystemUI/src/com/android/systemui/net/NetworkOverLimitActivity.java +++ b/packages/SystemUI/src/com/android/systemui/net/NetworkOverLimitActivity.java @@ -33,7 +33,7 @@ import android.os.ServiceManager; import android.util.Log; import android.view.WindowManager; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Notify user that a {@link NetworkTemplate} is over its diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt index ea8eb363cc477ec76f967b125499b97fe2a48de6..093d098de3e38cf2e51109a2476956138fdeb027 100644 --- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt +++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt @@ -37,7 +37,7 @@ import android.os.UserManager import android.provider.Settings import android.widget.Toast import androidx.annotation.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.devicepolicy.areKeyguardShortcutsDisabled diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskRoleManagerExt.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskRoleManagerExt.kt index 63d463402655684509dc129316205eca313c079a..9785446d7a439c0700bdaa98fe31a3648dde0b31 100644 --- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskRoleManagerExt.kt +++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskRoleManagerExt.kt @@ -24,7 +24,7 @@ import android.content.pm.ShortcutInfo import android.graphics.drawable.Icon import android.os.PersistableBundle import android.os.UserHandle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.notetask.shortcut.LaunchNoteTaskActivity /** Extension functions for [RoleManager] used **internally** by note task. */ diff --git a/packages/SystemUI/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfig.kt index f02d362501d5cce47be16833964fcaaad86f3606..6d55d0549d2eb4ed75dbc5cf42254e7b0c723503 100644 --- a/packages/SystemUI/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfig.kt @@ -27,7 +27,7 @@ import android.os.UserManager import android.util.Log import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java index 36b435b04fd694234add04ac3105f0ddcb078a37..59c76adb721b5f75c68569b6db8994192a84d814 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java @@ -27,7 +27,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * PeopleSpaceTileView renders an individual person's tile with associated status. diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java index c6c9aca0b1614a502523adb8479a9e06124cd730..188e8677e4ba462bfd23451bc36c608206ba2633 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java @@ -55,7 +55,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.util.ArrayUtils; import com.android.internal.widget.MessagingMessage; import com.android.settingslib.utils.ThreadUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.people.widget.PeopleSpaceWidgetManager; import com.android.systemui.people.widget.PeopleTileKey; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java index 67e96645f9c533f80a9fc568d7086f87c5327dce..733383e344b85655ae5af5806d06a29b951df96c 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java @@ -74,7 +74,7 @@ import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; import androidx.core.math.MathUtils; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.people.data.model.PeopleTileModel; import com.android.systemui.people.widget.LaunchConversationActivity; import com.android.systemui.people.widget.PeopleSpaceWidgetProvider; diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt index 46c8d358aaac8e17f83b3761aa1d204027831ba4..c567d56fd42409aaf5fb8f06f28335cf5a8c58cc 100644 --- a/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt @@ -31,7 +31,7 @@ import androidx.lifecycle.Lifecycle.State.CREATED import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.people.PeopleSpaceTileView import com.android.systemui.people.ui.viewmodel.PeopleTileViewModel import com.android.systemui.people.ui.viewmodel.PeopleViewModel diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt index e27bfb34ee3e818751c07a55c52182ede9240f33..ed7c21b787ca18756ba2240e748beb951bf828a1 100644 --- a/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt @@ -23,7 +23,7 @@ import android.content.Intent import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.people.PeopleSpaceUtils import com.android.systemui.people.PeopleTileViewHelper diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java index fbf1a0e46ce3cd3a785c593480de3762960380fa..1f66b8407f9e62e9dc8c82736eee5a08ceacfda4 100644 --- a/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java +++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java @@ -21,7 +21,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.PluginModule; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.shared.plugins.PluginActionManager; diff --git a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java index 03d1f15bf379b9d47452db5f2e9ba2a7970d0ab7..1cd5d91ef69e74ddffe496afd8c6f4d9b353a4e1 100644 --- a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java +++ b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java @@ -29,7 +29,7 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.widget.FrameLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * View that shows a warning shortly before the device goes into sleep diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index a765702a95b22d38f7ad43119167b78635a0deea..38204ab1b6d91f8136a539b24101929b220d8a83 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -65,7 +65,7 @@ import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatterySaverUtils; import com.android.settingslib.utils.PowerUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java index e1e1aaef6f2f4701a86962070e7a6101640b1b8b..1534653bc1ddfafc82df2f882038953c643e7b4e 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java @@ -48,7 +48,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.fuelgauge.Estimate; import com.android.settingslib.utils.ThreadUtils; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.keyguard.WakefulnessLifecycle; diff --git a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt index 310d23407d5da7fd948c6ede8876b39ca24a567b..8e1b00d825aa5c2954dafe2cb8d11442591216c3 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt @@ -26,7 +26,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.ImageView import android.widget.LinearLayout import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.view.LaunchableFrameLayout import com.android.systemui.statusbar.events.BackgroundAnimatableView diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyChipBuilder.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyChipBuilder.kt index eec69f98b9be7ea2cbdad704974a2329265e6f99..4952d8dd8ad803f17ddcf9f7ce9b7a951ab68f18 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyChipBuilder.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyChipBuilder.kt @@ -15,7 +15,7 @@ package com.android.systemui.privacy import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R class PrivacyChipBuilder(private val context: Context, itemsList: List<PrivacyItem>) { diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt index 35a7cf1bf4028a0c3a89821119229bfd866e9c78..ac9a5905782b796f83ce00af2c8d67778295f80f 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt @@ -29,7 +29,7 @@ import android.view.WindowInsets import android.widget.ImageView import android.widget.TextView import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog import java.lang.ref.WeakReference import java.util.concurrent.atomic.AtomicBoolean diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt index c202f14edc4d2e074dab967b131581de3db71c92..b26ae6cdf0bda6a477149aec56ee982c7360751a 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt @@ -40,7 +40,7 @@ import androidx.annotation.WorkerThread import androidx.core.view.ViewCompat import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ViewHierarchyAnimator import com.android.systemui.statusbar.phone.SystemUIDialog import com.android.systemui.util.maybeForceFullscreen diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt index 8b41000d25438d1c57373dc0676038ef1823b55c..d09fbb379190ecefd431e4e8ea2e8826ce93cf81 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItem.kt @@ -15,7 +15,7 @@ package com.android.systemui.privacy import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R typealias Privacy = PrivacyType diff --git a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java index afce69e7f2d02a00a1fc91a7d93333320e4ec43a..1b22f9889949c60330772e21a41362db936f58dd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java +++ b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java @@ -25,7 +25,7 @@ import android.util.AttributeSet; import android.view.View; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; public class DataUsageGraph extends View { diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt index a3b901b675ed7d9334886558993531c67643b55d..6f35cfbfb4a5720e749b5a1392afcdbd35a2ab29 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt @@ -54,7 +54,7 @@ import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_ import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_SHOW_USER_VISIBLE_JOBS import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java index e822dd58fb9887c1c0dc2a6edc3873188da83b4f..4770d52725083720ab765e68389f8ce440fd312e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java @@ -16,7 +16,7 @@ import android.widget.ImageView; import androidx.annotation.NonNull; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index ddd9463affd94c5b10337cd41b4110be3115b53b..826f75f2f63b6b26247e2f20c0371f8135e2f9f1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -27,7 +27,7 @@ import androidx.viewpager.widget.ViewPager; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSPanelControllerBase.TileRecord; diff --git a/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java b/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java index 768598af688545fadb6d2d34dbd54308c4ae676f..f0404357fab7dc1ecae5e68060de9ad12cf0681d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java @@ -24,7 +24,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.ref.WeakReference; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 37e750b86c2130b13eebff90aef08602c6fc1997..b0f54ee78482df6e7fe660774cbf3556e932e1b3 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -28,7 +28,7 @@ import android.view.View; import android.widget.FrameLayout; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.shade.TouchLogger; import com.android.systemui.util.LargeScreenUtils; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDualTileLabel.java b/packages/SystemUI/src/com/android/systemui/qs/QSDualTileLabel.java index 26399d8789aad2d4d5be28cc4b0665ee7950b8f4..235fc0d1f657a3983ecadd343571f8f249f3a35c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDualTileLabel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDualTileLabel.java @@ -29,7 +29,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.Objects; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java index 61905ae00be8134006902a93d7a18b89b957ad18..c908e6e2afbe1848ef59d3096cf7190897fe152b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java @@ -35,7 +35,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.settingslib.development.DevelopmentSettingsEnabler; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Footer of expanded Quick Settings, tiles page indicator, (optionally) build number and diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java index 85f557b107623898a12fb672c5e03cc3c6cbe5fd..ffbd06f649086f9f52f8e887770f8ffbb1f1ad56 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java @@ -23,7 +23,7 @@ import android.view.View; import android.widget.TextView; import android.widget.Toast; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.qs.dagger.QSScope; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 596d024958b0c4a100c61d87a3534dd2a5e0cc2e..fd81e9a5cd0a19e8a9a6ae069ae626fd1b7b9251 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -47,7 +47,7 @@ import androidx.lifecycle.LifecycleRegistry; import com.android.app.animation.Interpolators; import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.compose.ComposeFacade; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index 4e914a5923047d4e13ebf662cd79a5bad3612849..1ab64b76b0dce215ce210812233c07817ee36085 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -20,7 +20,7 @@ import android.content.res.Resources; import android.os.Build; import android.provider.Settings; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.util.leak.GarbageMonitor; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index b936c41d9295aed827df6dccdd08b62c9bcdc7ba..3227f75ed067df75a88675bab7a06d55845e3415 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -39,7 +39,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.internal.widget.RemeasuringLinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.brightness.BrightnessSliderController; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSScrollLayout.java b/packages/SystemUI/src/com/android/systemui/qs/QSScrollLayout.java index 001cbbac560661357cdb3d71c93a9bafbf568891..77a5ce34d3ea6eb44ed6443c1801e2b2faaa5a6c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSScrollLayout.java @@ -26,7 +26,7 @@ import android.widget.LinearLayout; import androidx.core.widget.NestedScrollView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.touch.OverScroll; import com.android.systemui.qs.touch.SwipeDetector; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooterUtils.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooterUtils.java index b70b94b009239f0f101e37ba71578b8785694b2e..5c96e98a40472f16222b470423f38005b190927b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooterUtils.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooterUtils.java @@ -73,7 +73,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.animation.Expandable; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index 4c292e70c1111b7a543b06047aa3409f0b22300a..9a9626d7c7a02d5aba2cac4dc6161e2733475470 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -31,7 +31,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Dumpable; import com.android.systemui.ProtoDumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.nano.SystemUIProtoDump; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 150137910f913f52001d0e1d236e20b70042d21e..6c32ed3844198f798d5af21cf02ac00cf257cef2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -25,7 +25,7 @@ import android.widget.LinearLayout; import com.android.internal.logging.UiEventLogger; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QSTile; /** diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java index 585136ad0789ea52bbba6e40111db71470d7c586..099d19d8619fbbd9d62d0565f32be0337b7ec038 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java @@ -24,7 +24,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.media.controls.ui.MediaHierarchyManager; import com.android.systemui.media.controls.ui.MediaHost; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java index 691a1a14444a3c5a921b792099effadaac5d60fa..67c42086364c93014d507df6ce88bbf22b63f958 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java @@ -26,7 +26,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.util.LargeScreenUtils; /** diff --git a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt index 1ba11efc49a288c6baf944087c8a960d0e7bb770..b52554d4e99745c6f0c2af338e8b2ea6a2eafd50 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt @@ -18,7 +18,7 @@ package com.android.systemui.qs import android.content.Context import android.util.AttributeSet -import com.android.systemui.R +import com.android.systemui.res.R open class SideLabelTileLayout( context: Context, diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 19bf0188c9d24fe2d6ed88c7513ae12d22a56624..9dc6aeebc41c8a0ff668122ddcae72a283dc349c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -15,7 +15,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSPanelControllerBase.TileRecord; import com.android.systemui.qs.tileimpl.HeightOverrideable; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index d511d8aea019c7247c57c722b9c1ca0bd2d4fc95..7888f4c7388d9aa73b4657494b7dcf3d19bbef28 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -33,7 +33,7 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QSContainerController; import com.android.systemui.qs.QSDetailClipper; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java index 4002ac3aa12025c291d79cb5d16b21c22473a709..ce504b2c10a61726aa7e6727bd8504f407781944 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java @@ -34,7 +34,7 @@ import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.qs.QSContainerController; import com.android.systemui.plugins.qs.QSTile; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index e8901701c3accde00221d93c3938ee175ab90ee0..c9a24d6a4608b160ccc75058715a0c5f4c9c5bf9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -44,7 +44,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.android.internal.logging.UiEventLogger; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.QSEditEvent; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.TileLayout; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapterDelegate.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapterDelegate.java index 1e426adac0b8f5ded791828ed7ed117be423ffad..92f17f9db0f41f3e3bdb19bc1d55b9c91b6f903a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapterDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapterDelegate.java @@ -23,7 +23,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import androidx.core.view.AccessibilityDelegateCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java index d9f4484935914fbde0bd8a59bd0cde0a4bd8b862..a6226b36b0fd43d049dd2ecb6878243048c6210e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java @@ -33,7 +33,7 @@ import android.widget.Button; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.qs.QSTile; diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java index ce6b8d499ee0232ac7f80075692df916b8a25c9d..bcd98035a8b9aa349b72691779c545a04cda3cf4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java @@ -23,7 +23,7 @@ import android.content.Context; import android.view.LayoutInflater; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.RootView; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.QSContainerImpl; diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileColorPicker.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileColorPicker.java index 1caab5aa77ef88126bf7f1f245558b3e7065e6f7..8b6d914d2ad873b8a3b040a7392d2d77a71b28be 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileColorPicker.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileColorPicker.java @@ -21,7 +21,7 @@ import android.service.quicksettings.Tile; import androidx.annotation.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; public class TileColorPicker { @VisibleForTesting static final int[] DISABLE_STATE_SET = {-android.R.attr.state_enabled}; diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt b/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt index d2c51e50c60d8da34d4215d304cd8f8dc9b6c7a3..1659c3e673ef36d10cc8f53fa7ab479f86b7017b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt @@ -22,7 +22,7 @@ import android.view.ContextThemeWrapper import android.view.LayoutInflater import android.view.ViewGroup import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTileView import com.android.systemui.qs.tileimpl.QSTileImpl diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceRequestController.kt b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceRequestController.kt index d9e5580fc14ce22202a89fa5284e2c6293e3e226..899d0e2a4e353beea6ab9096edbd8210aa15fc0e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceRequestController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceRequestController.kt @@ -25,7 +25,7 @@ import android.os.RemoteException import android.util.Log import androidx.annotation.VisibleForTesting import com.android.internal.statusbar.IAddTileResultCallback -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.QSHost import com.android.systemui.statusbar.CommandQueue diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/data/repository/UserSwitcherRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/data/repository/UserSwitcherRepository.kt index e969d4c6e08a7f4602c21e317fb6f751a13dd8fb..5fa75ad68165227b2fde8281e4a4627ab87b89bf 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/data/repository/UserSwitcherRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/data/repository/UserSwitcherRepository.kt @@ -22,7 +22,7 @@ import android.os.Handler import android.os.UserManager import android.provider.Settings.Global.USER_SWITCHER_ENABLED import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt index 3c53d77c6beb2ae553a2634b6884eba3814f3d2b..d09b21035cae03b63a0c5fb9fa6299e390096fb0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/binder/FooterActionsViewBinder.kt @@ -30,7 +30,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.ui.binder.IconViewBinder import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt index 32146b5b00e4a48ee6f6dfca85cef6fa42f81c00..769cb1fe1370f1337c1ae80db4874c3b8029e81a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt @@ -23,7 +23,7 @@ import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/TileSpecRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/TileSpecRepository.kt index 18f59b1f2b28dde2974b2c0ad08e831f7d71ca47..47c99f25730b7b4dc7d4e36b7a15983506015dc4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/TileSpecRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/TileSpecRepository.kt @@ -21,7 +21,7 @@ import android.content.res.Resources import android.database.ContentObserver import android.provider.Settings import android.util.SparseArray -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingList.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingList.kt index b1c7433770de28e55b6b0c4161391e7bc8d21716..83c8bc3b11fbddd7f22eecb9b0e3c8362a9f00af 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingList.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingList.kt @@ -18,7 +18,7 @@ package com.android.systemui.qs.pipeline.domain.autoaddable import android.content.res.Resources import android.util.Log -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.qs.pipeline.domain.model.AutoAddable import com.android.systemui.qs.pipeline.shared.TileSpec diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddable.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddable.kt index 58a31bc22a57c67808f35682384efe64ebe61276..88d7f06dfada9b8a3490ca393c9b41f903163ea0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddable.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddable.kt @@ -20,7 +20,7 @@ import android.content.ComponentName import android.content.pm.PackageManager import android.content.res.Resources import android.text.TextUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java index 88c8e81bf1b5af3d12e7ff6cdfa4bb4ba35d157f..d04e4f52ac4d17f9c88e7d59e87897e8ac69d884 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java @@ -34,7 +34,7 @@ import android.widget.ImageView; import android.widget.ImageView.ScaleType; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile.State; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt index 966d94161f91dd006dd2032140b3cef20cc0d8b2..5a9c0a1893f8479f325d4560a994372f8deb84a7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt @@ -44,7 +44,7 @@ import android.widget.TextView import androidx.annotation.VisibleForTesting import com.android.settingslib.Utils import com.android.systemui.FontSizeUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.LaunchableView import com.android.systemui.animation.LaunchableViewDelegate import com.android.systemui.plugins.qs.QSIconView diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt index f672e518f0b36ef21bdc64326c8730e924fad528..168fa088cff29330b57a390f40ac332020104df3 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt @@ -15,7 +15,7 @@ */ package com.android.systemui.qs.tileimpl -import com.android.systemui.R +import com.android.systemui.res.R /** Return the subtitle resource Id of the given tile. */ object SubtitleArrayMapping { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java index 30765f7f974d9eac9b50d010364e09a3873818d4..fb71cefe8e0ab1cac8c18103f268f494c0ab8cca 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java @@ -36,7 +36,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt index c709969ec6e2e4f39caab6927b9275d727a35ccf..d98141fcd6b9cc368b50c63507f2036b88791df7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt @@ -13,7 +13,7 @@ import android.view.View import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java index 9f10e6f1f2c6b351b67abccf1136cbc87328b494..18d472b9c755b2e20a2fe0a6d42b858965141f77 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -29,7 +29,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 83b09bebee6952c332a60403d7cbd438ce198f50..1be514db44c46f8ac810559150a65eb64f525b9b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -39,7 +39,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.Utils; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java index 65ef6b9c31a5f2cbab1ff824f9cc124fd6067b32..b393f39719e7c9cb70710b68997a3c77e1c19ea2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java @@ -30,7 +30,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index e9a242847362e5590f783be51522f30c137cd989..5c6e9028545a786c5ae446e283fc0de9c0070be9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -38,7 +38,7 @@ import com.android.internal.app.MediaRouteDialogPresenter; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java index cf9e3468c8f539386ea691e5dc06b244230b199c..ee57b2b62d49294cb8a40d98699181964a6bf501 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java @@ -28,8 +28,8 @@ import android.widget.Switch; import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; -import com.android.systemui.R.drawable; +import com.android.systemui.res.R; +import com.android.systemui.res.R.drawable; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java index 4ecde6123dd5c8b3a08c1e7e8b78c6c84dd6ef01..993ada6b86aab1ce603553804e5e3900d02ad806 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java @@ -29,8 +29,8 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; -import com.android.systemui.R.drawable; +import com.android.systemui.res.R; +import com.android.systemui.res.R.drawable; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java index e769b5ef9989475b2d1e71bbe3b5ffbdabcd0ce1..ccf7afbe7016d9ccd060c2641ec8369bcd3e24f7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java @@ -28,7 +28,7 @@ import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java index 55785586464fb4c8e5fde8762ec857cd07a165dd..c15289fddb20b027cb69ece3cc76decb3f341777 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java @@ -28,7 +28,7 @@ import android.widget.TextView; import com.android.settingslib.Utils; import com.android.settingslib.net.DataUsageController; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.DataUsageGraph; import java.text.DecimalFormat; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt index ddaff3bb9a64be69da4a833fa679aa9f57a1b638..91b2d971c004266a70d0ab20a010415e829dcad2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt @@ -25,7 +25,7 @@ import android.view.View import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.dagger.ControlsComponent diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 9bb192b4c271cb6013195c481e127a849763ee22..0617b30eb8fab31090878567d9eb87c9c431cd03 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -45,7 +45,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.notification.EnableZenModeDialog; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java index b5e6a0f5c60b71aa7359501a71def7393bce30bf..a08b3fca15aae165dbb8f5b5f70c40c80a0e853f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java @@ -38,7 +38,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java index 2c986da8370a3c3df37b57f5498b8e7243498d85..9fab51fd931eaf8ca7731f2204667d821af05a54 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java @@ -29,7 +29,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt index 1f9979a8b37c20584468f10c786af1bd3881454e..64e3f16abec358ff16713b282647c730ef534e0b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt @@ -22,7 +22,7 @@ import android.provider.Settings import android.view.View import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.accessibility.fontscaling.FontScalingDialog import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java index 7c76c1ae1bf573589d7d381fa4d854bebb7c25fb..9ee417e98d2d8e42afdc1c668a98809bc272f96d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java @@ -33,7 +33,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index fb2f2ced1d3aa5832cc0fca30e647697c93acdd3..1b504a81a651999fe9af617e866993f0006fb552 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -41,7 +41,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt index 956e7ab6d7ab903a8703d9906f0119ccb87eff2c..8103152dda370c995d1d8d3fde0a8e55242d6e99 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt @@ -22,7 +22,7 @@ import android.os.Looper import android.provider.Settings import android.view.View import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java index 8b69f614dedd78d6e1751b514ec4942ff5178189..9ddcf29534913f49f9471ebc0881b7f2cb735a45 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java @@ -29,7 +29,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java index 86a6a8c6a2b6052b4c8c78af2c6bc6752819206e..7a7dbbc79558a01bdf8ff8155ef1dc6d9e2e4159 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java @@ -30,7 +30,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java index 29ccb76de820aa9aac2b3e3d8dae7055895894de..a239c28f43427625d7508fcf1ce9e394bae605ac 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java @@ -34,7 +34,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java index 405e1394871c46fbe652e5ae8e0c2be79153c81e..7e0fa07d951f71ac328d9f9f2cc56699c8929108 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java @@ -36,7 +36,7 @@ import androidx.annotation.StringRes; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.NightDisplayListenerModule; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java index 5b0237f871537ab6cb01cd5e0a12089c7d6cdf77..78af97668fc07922827074afea4fcdde88e15369 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java @@ -28,7 +28,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java index 1ba377bc970256aab6ec87306502dd0354974def..f70e27d72d69c70919eb6f0887ab93101bc675fa 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java @@ -27,7 +27,7 @@ import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java index e382eca1736995d0cd9f072a9537b92fd0f4b5ff..3a247c5843d407af8fde6472c09748df6e1ecbcf 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java @@ -42,7 +42,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java index 2e04afb0048a659ac8461ebe8a7dfcf4559fb23e..b9d902afb891be18018c393ab83d733a297f645b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java @@ -30,7 +30,7 @@ import androidx.annotation.Nullable; import com.android.internal.R; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R.drawable; +import com.android.systemui.res.R.drawable; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java index 2d9f7dd038bce0a6947bb2e67f1495f571f733be..ea162fa2921fb2ae44674ee0ffbebb5b51ee3167 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java @@ -36,7 +36,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java index 2d4652db6b800688925b097399151615aadb874b..959afd86ee8d9966bf4fd65f40c7aff1695b6ec2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java @@ -30,7 +30,7 @@ import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java index 7c4f097a1724d018bd56abf16557c5f7c1094d03..5832217f3e851b1f1228d6ec0b08088221e2a83b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java @@ -31,7 +31,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java index 9ffcba62ad09a02c3e31cfa4acb417ad80304335..300cc564939dc95cc1e60ea407ee502691bfcf20 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java @@ -31,7 +31,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java index 5840a3ddf44d9573a2a80988269d59da532d29d1..7426615a7f1a0c22fb45fd69b69f42aa4048401f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java @@ -32,7 +32,7 @@ import androidx.annotation.Nullable; import com.android.internal.util.ArrayUtils; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.UserAvatarView; /** diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index b6b657ec82f69cbd2645da502a252afc94531417..32deb30d926bab83416ee9f2a3d1bdf966421f99 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -34,7 +34,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.drawable.CircleFramedDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.qs.PseudoGridView; import com.android.systemui.qs.QSUserSwitcherEvent; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java index c8c3c30a730259f0661bea1331521f514d4c49f7..7a9384a4bba4f0d473f22dc849dc57fc70c135c9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java @@ -32,7 +32,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java index 176983e4b444b69e3aace3feed637658bcdda310..b866dda8013401cadfa6e34474f4d4fcbafba1ad 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java @@ -36,7 +36,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.Utils; import com.android.settingslib.wifi.WifiUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.wifitrackerlib.WifiEntry; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index c67078ff9093a56f2bf05fb0d4cf26db6800cbce..2350b5dce8b88806159c0aaa43374fe1dca0f20b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -59,7 +59,7 @@ import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index f026d20b23b1fab19856ff8eaf2eee376a11c632..f516f5521d25df4f5511897957d243f6d930a949 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -75,7 +75,7 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; import com.android.settingslib.wifi.WifiUtils; import com.android.settingslib.wifi.dpp.WifiDppIntentHelper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; diff --git a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt index 4c9c99cc16f02096861101d1be30646204dd28b1..acd7510a6c2a5b8af53b8699ef12ebe733ac5957 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt @@ -26,7 +26,7 @@ import android.view.LayoutInflater import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java index 6912114140b07e42be13ac47e12645683a646f4b..4b21e447ebf5f9a25a04f66a9a430d1f1d91e1ea 100644 --- a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java @@ -29,7 +29,7 @@ import android.widget.LinearLayout; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.CommandQueue; diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsModule.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsModule.java index f57bfad890ffc22e9d965d8af24a4f538f35b71a..77a4b9f72cd8b8e4dda42d026e10a621314bc9a3 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsModule.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsModule.java @@ -18,7 +18,7 @@ package com.android.systemui.recents; import android.content.Context; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.ContextComponentHelper; import dagger.Binds; diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java index 3577c00a7d0ac6e02569eb9dd9affff585548788..3e574e78849459b5f8418afa15c0a51b26aa72b6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java @@ -54,7 +54,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.navigationbar.NavigationBarController; diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/flag/SceneContainerFlags.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/flag/SceneContainerFlags.kt index 291d273d611fc40ade78a0e8da003487bda9bf6e..f0650d34fc9db06bd19f49ee6e1b5052700626d4 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/shared/flag/SceneContainerFlags.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/shared/flag/SceneContainerFlags.kt @@ -60,6 +60,8 @@ constructor( Flags.MIGRATE_LOCK_ICON, Flags.MIGRATE_NSSL, Flags.MIGRATE_KEYGUARD_STATUS_VIEW, + Flags.NOTIFICATION_SHELF_REFACTOR, + Flags.MIGRATE_KEYGUARD_STATUS_BAR_VIEW, ) } diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt index 3e766073f7202806827c0a5d5513ce89832cfe69..3fb886d46890ee242f7ed9766eb1b79ee73b0bc6 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt @@ -27,7 +27,7 @@ import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.compose.ComposeFacade import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.scene.shared.model.Scene diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt index ef688a8e4337fddd0ae58ea09d1331ebbf362bce..7cff7ff1fd71ff86c7393d937d28dd1b5d716800 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt @@ -25,7 +25,7 @@ import android.view.View import android.view.WindowInsets import android.widget.FrameLayout import androidx.core.view.updateMargins -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.compose.ComposeFacade /** A view that can serve as the root of the main SysUI window. */ diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/BaseScreenSharePermissionDialog.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/BaseScreenSharePermissionDialog.kt index 8dd25bc787462e4695fb3fd265f8acd23799e4f4..64006fe4c265ff0fafc320ec795f346c79d1b4d6 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/BaseScreenSharePermissionDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/BaseScreenSharePermissionDialog.kt @@ -32,7 +32,7 @@ import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.LayoutRes import androidx.annotation.StringRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog /** Base permission dialog for screen share and recording */ diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/MediaProjectionPermissionDialog.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/MediaProjectionPermissionDialog.kt index 8cbc4aab3bd37086da61a355c70b444dec9dfd7b..47e28d86e01d7dec6c0cdde6aedb4ca067e463f1 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/MediaProjectionPermissionDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/MediaProjectionPermissionDialog.kt @@ -18,7 +18,7 @@ package com.android.systemui.screenrecord import android.content.Context import android.media.projection.MediaProjectionConfig import android.os.Bundle -import com.android.systemui.R +import com.android.systemui.res.R /** Dialog to select screen recording options */ class MediaProjectionPermissionDialog( diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java index 2c4555a2378a44f46d08d1e1018dff0fcbecb87d..7cdb6553c47ebf5725484ba4ec9c480f613610e6 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java @@ -41,7 +41,7 @@ import android.widget.Toast; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.LongRunning; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.media.MediaProjectionCaptureTarget; diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java index 91e3b60a2cf56a2ecd984b50044df6a95813ce45..f0ce8a465d0d872aff76d9d444bc6008f30cb743 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java @@ -41,7 +41,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.media.MediaProjectionCaptureTarget; import com.android.systemui.settings.UserContextProvider; import com.android.systemui.statusbar.phone.SystemUIDialog; diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialog.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialog.kt index 56d732eb230b390f7cae5bc42853942538ac5d2d..b5b7043e37a08415a1b501660fafe4e8371abd11 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialog.kt @@ -32,7 +32,7 @@ import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.Switch import androidx.annotation.LayoutRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.media.MediaProjectionAppSelectorActivity import com.android.systemui.media.MediaProjectionCaptureTarget import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingAdapter.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingAdapter.java index 9962c914b47617e9c766323e1c7c61777785fb8b..eb58b2f1a1121f3e074cbbc455d7cb8aa14a0766 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingAdapter.java @@ -25,7 +25,7 @@ import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ActionIntentCreator.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ActionIntentCreator.kt index ab2a8d9c6e95b41b546854bba59bf6808b9195ba..8e9769ab7d0ebc2143ce15dd0e69d0dd639bf291 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ActionIntentCreator.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ActionIntentCreator.kt @@ -23,7 +23,7 @@ import android.content.ContentProvider import android.content.Context import android.content.Intent import android.net.Uri -import com.android.systemui.R +import com.android.systemui.res.R object ActionIntentCreator { /** @return a chooser intent to share the given URI. */ diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java b/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java index 6f2256eb6b315971e2efc93bce7c84d2821af3a6..2f411ea3cb33b44b800ed22c819e176542313e7a 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java @@ -45,7 +45,7 @@ import androidx.customview.widget.ExploreByTouchHelper; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import com.android.internal.graphics.ColorUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java b/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java index bdbc470a61f12031d1fd7df948dbd7478e73bb93..b55bba9f227948d9356b6bb1553f148aa9a2bca0 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java @@ -36,7 +36,7 @@ import android.view.ViewTreeObserver; import androidx.constraintlayout.widget.ConstraintLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * ConstraintLayout that is draggable when touched in a specific region diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index bf536a475fd47784691af2777583ab93fbaf19fa..9325e18abce7e3968b6992188fa1b3165b78c65f 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -44,7 +44,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.app.ChooserActivity; import com.android.internal.logging.UiEventLogger; import com.android.internal.view.OneShotPreDrawListener; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java b/packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java index 78737329750a8c4e07e39558053b9f078acf0db4..0c543cd8909cc38c31f6f8de2d966446edf04840 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java @@ -34,7 +34,7 @@ import android.view.ViewPropertyAnimator; import androidx.annotation.Nullable; import com.android.internal.graphics.ColorUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * MagnifierView shows a full-res cropped circular display of a given ImageTileSet, contents and diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/MessageContainerController.kt b/packages/SystemUI/src/com/android/systemui/screenshot/MessageContainerController.kt index b4ffabd78b8a80492da5c80efab55e9738f97edc..5cbea90580a171cfe4e6d275305076575272b136 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/MessageContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/MessageContainerController.kt @@ -10,7 +10,7 @@ import android.view.ViewGroup.MarginLayoutParams import android.view.ViewTreeObserver import android.view.animation.AccelerateDecelerateInterpolator import androidx.constraintlayout.widget.Guideline -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java b/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java index 9e8ea3aaec56a0941b2b6b766eb3bc7f4f6c2795..0588fe2bba82128cd0cd134db0c0b956617f02b7 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java @@ -29,7 +29,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java index cfd9a49303049533c752013feebd4c866b32311e..31086d85f747f486aa6d32ab9ff512ab7e3ee960 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java @@ -47,7 +47,7 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.screenshot.ScreenshotController.SavedImageData.ActionTransition; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 87f6e4472d48ddf30c0f4832efa6b36e3d81a72c..f08eb143efb4876656374f67b4ca9cd5140889a3 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -92,7 +92,7 @@ import com.android.internal.app.ChooserActivity; import com.android.internal.logging.UiEventLogger; import com.android.internal.policy.PhoneWindow; import com.android.settingslib.applications.InterestingConfigChanges; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.clipboardoverlay.ClipboardOverlayController; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotDetectionController.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotDetectionController.kt index 253f07de7b3c1fc576db1abc7a4c6e751bd74dab..be39d2edf1ea4db4baee0d44f3a8193a4cb83449 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotDetectionController.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotDetectionController.kt @@ -24,7 +24,7 @@ import android.view.IWindowManager import android.view.ViewGroup import android.view.WindowManager import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import javax.inject.Inject class ScreenshotDetectionController diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java index 35f2a39e02ae1c68df2d9172d974aa71b4c97e24..4344fd1a7567609e8f9581eced5972f4220e355a 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java @@ -30,7 +30,7 @@ import android.util.DisplayMetrics; import android.view.WindowManager; import com.android.internal.messages.nano.SystemMessageProto; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.util.NotificationChannels; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotServiceErrorReceiver.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotServiceErrorReceiver.java index 522f729a25d698e28c5d815d62aaa750cdd2ba16..070fb1eef99af00e2f4e0a04fef799a40c6f3457 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotServiceErrorReceiver.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotServiceErrorReceiver.java @@ -21,7 +21,7 @@ import android.content.Context; import android.content.Intent; import android.view.WindowManager; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Performs a number of miscellaneous, non-system-critical actions diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index 03e1e15c5210f19a9a9258569bdf29c339b681bf..31c928406aacde2658078c4d92ece0a3f783d82c 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -86,7 +86,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.shared.system.InputChannelCompat; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java index 32df5121b0b87a66262b72a210133545829cd8f6..0be2265bf8fa1047bb551fa26c3fac853a607497 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java @@ -53,7 +53,7 @@ import android.widget.Toast; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.internal.util.ScreenshotRequest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/WorkProfileMessageController.kt b/packages/SystemUI/src/com/android/systemui/screenshot/WorkProfileMessageController.kt index 798c4908e467de45148280e4c7a71f8b58196628..c801ca5aa8a1202331220248cdba4a14de7996b7 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/WorkProfileMessageController.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/WorkProfileMessageController.kt @@ -28,7 +28,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import javax.inject.Inject /** diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java index 2f96f6c656c4a03381cf90f82361c3ac66e29344..aa23d6bed5e105f689484c6722fc36fb1fe2fbb2 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java @@ -51,7 +51,7 @@ import androidx.lifecycle.ViewModelProvider; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger.UiEventEnum; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.screenshot.CropView; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsService.java b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsService.java index dce8c81c34626a80feeeae44278299dce0404f12..06c0b8b6e76939471deb387eae21ea12e62f2209 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsService.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsService.java @@ -37,7 +37,7 @@ import android.os.IBinder; import androidx.annotation.Nullable; import com.android.internal.statusbar.IAppClipsService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Application; import com.android.systemui.flags.FeatureFlags; import com.android.wm.shell.bubbles.Bubbles; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivity.java index 6e5cef47400fec22d6b09e3e3405635eec852c2a..a31b30195fe99c497d180f20f1675347e23d5c76 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivity.java @@ -48,7 +48,7 @@ import com.android.internal.infra.AndroidFuture; import com.android.internal.infra.ServiceConnector; import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IAppClipsService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.qualifiers.Application; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseDialog.kt b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseDialog.kt index 71c5fad5322eba47ff10340c449254cb44adc732..9d1278fd58e6d462e59c95eb74f1115b21cc8563 100644 --- a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseDialog.kt @@ -9,7 +9,7 @@ import android.view.View import android.view.WindowManager import android.widget.ImageView import com.android.internal.widget.DialogTitle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.phone.SystemUIDialog class SensorUseDialog( diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessDialog.java index 38b1f14e45de8ead03d65a6e438511bb58720f21..6783afa3eb9d9f3a9daea02711423657cc953347 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessDialog.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessDialog.java @@ -35,7 +35,7 @@ import android.widget.FrameLayout; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.util.concurrency.DelayableExecutor; diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java index d0d37c4e685fe06706e0a5ca7f59328e609f7a16..b7152370624eab790537415472dedd0237725ddb 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java @@ -16,6 +16,8 @@ package com.android.systemui.settings.brightness; +import static com.android.systemui.flags.Flags.HAPTIC_BRIGHTNESS_SLIDER; + import android.content.Context; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -28,14 +30,21 @@ import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; import com.android.settingslib.RestrictedLockUtils; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.Classifier; +import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.flags.FeatureFlagsClassic; +import com.android.systemui.haptics.slider.SeekableSliderEventProducer; import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.util.ViewController; +import com.android.systemui.util.time.SystemClock; import javax.inject.Inject; +import kotlinx.coroutines.CoroutineDispatcher; + /** * {@code ViewController} for a {@code BrightnessSliderView} * @@ -55,12 +64,21 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV private final FalsingManager mFalsingManager; private final UiEventLogger mUiEventLogger; + private final BrightnessSliderHapticPlugin mBrightnessSliderHapticPlugin; + private final Gefingerpoken mOnInterceptListener = new Gefingerpoken() { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getActionMasked(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { mFalsingManager.isFalseTouch(Classifier.BRIGHTNESS_SLIDER); + if (mBrightnessSliderHapticPlugin.getVelocityTracker() != null) { + mBrightnessSliderHapticPlugin.getVelocityTracker().clear(); + } + } else if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) { + if (mBrightnessSliderHapticPlugin.getVelocityTracker() != null) { + mBrightnessSliderHapticPlugin.getVelocityTracker().addMovement(ev); + } } return false; @@ -75,10 +93,12 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV BrightnessSliderController( BrightnessSliderView brightnessSliderView, FalsingManager falsingManager, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, + BrightnessSliderHapticPlugin brightnessSliderHapticPlugin) { super(brightnessSliderView); mFalsingManager = falsingManager; mUiEventLogger = uiEventLogger; + mBrightnessSliderHapticPlugin = brightnessSliderHapticPlugin; } /** @@ -93,6 +113,7 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV protected void onViewAttached() { mView.setOnSeekBarChangeListener(mSeekListener); mView.setOnInterceptListener(mOnInterceptListener); + mBrightnessSliderHapticPlugin.start(); } @Override @@ -100,6 +121,7 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV mView.setOnSeekBarChangeListener(null); mView.setOnDispatchTouchEventListener(null); mView.setOnInterceptListener(null); + mBrightnessSliderHapticPlugin.stop(); } @Override @@ -204,6 +226,11 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (mListener != null) { mListener.onChanged(mTracking, progress, false); + SeekableSliderEventProducer eventProducer = + mBrightnessSliderHapticPlugin.getSeekableSliderEventProducer(); + if (eventProducer != null) { + eventProducer.onProgressChanged(seekBar, progress, fromUser); + } } } @@ -213,6 +240,11 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV mUiEventLogger.log(BrightnessSliderEvent.SLIDER_STARTED_TRACKING_TOUCH); if (mListener != null) { mListener.onChanged(mTracking, getValue(), false); + SeekableSliderEventProducer eventProducer = + mBrightnessSliderHapticPlugin.getSeekableSliderEventProducer(); + if (eventProducer != null) { + eventProducer.onStartTrackingTouch(seekBar); + } } if (mMirrorController != null) { @@ -227,6 +259,11 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV mUiEventLogger.log(BrightnessSliderEvent.SLIDER_STOPPED_TRACKING_TOUCH); if (mListener != null) { mListener.onChanged(mTracking, getValue(), true); + SeekableSliderEventProducer eventProducer = + mBrightnessSliderHapticPlugin.getSeekableSliderEventProducer(); + if (eventProducer != null) { + eventProducer.onStopTrackingTouch(seekBar); + } } if (mMirrorController != null) { @@ -242,11 +279,26 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV private final FalsingManager mFalsingManager; private final UiEventLogger mUiEventLogger; + private final FeatureFlagsClassic mFeatureFlags; + private final VibratorHelper mVibratorHelper; + private final SystemClock mSystemClock; + private final CoroutineDispatcher mMainDispatcher; @Inject - public Factory(FalsingManager falsingManager, UiEventLogger uiEventLogger) { + public Factory( + FalsingManager falsingManager, + UiEventLogger uiEventLogger, + VibratorHelper vibratorHelper, + SystemClock clock, + FeatureFlagsClassic featureFlags, + @Main CoroutineDispatcher mainDispatcher + ) { mFalsingManager = falsingManager; mUiEventLogger = uiEventLogger; + mFeatureFlags = featureFlags; + mVibratorHelper = vibratorHelper; + mSystemClock = clock; + mMainDispatcher = mainDispatcher; } /** @@ -262,7 +314,17 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV int layout = getLayout(); BrightnessSliderView root = (BrightnessSliderView) LayoutInflater.from(context) .inflate(layout, viewRoot, false); - return new BrightnessSliderController(root, mFalsingManager, mUiEventLogger); + BrightnessSliderHapticPlugin plugin; + if (mFeatureFlags.isEnabled(HAPTIC_BRIGHTNESS_SLIDER)) { + plugin = new BrightnessSliderHapticPluginImpl( + mVibratorHelper, + mSystemClock, + mMainDispatcher + ); + } else { + plugin = new BrightnessSliderHapticPlugin() {}; + } + return new BrightnessSliderController(root, mFalsingManager, mUiEventLogger, plugin); } /** Get the layout to inflate based on what slider to use */ diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPlugin.kt b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPlugin.kt new file mode 100644 index 0000000000000000000000000000000000000000..f775114204919e4801cc15a596f4d0684a26594c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPlugin.kt @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings.brightness + +import android.view.VelocityTracker +import com.android.systemui.haptics.slider.SeekableSliderEventProducer + +/** Plugin component for the System UI brightness slider to incorporate dynamic haptics */ +interface BrightnessSliderHapticPlugin { + + /** Finger velocity tracker */ + val velocityTracker: VelocityTracker? + get() = null + + /** Producer of slider events from the underlying [android.widget.SeekBar] */ + val seekableSliderEventProducer: SeekableSliderEventProducer? + get() = null + + /** + * Start the plugin. + * + * This starts the tracking of slider states, events and triggering of haptic feedback. + */ + fun start() {} + + /** + * Stop the plugin + * + * This stops the tracking of slider states, events and triggers of haptic feedback. + */ + fun stop() {} +} diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImpl.kt b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..32561f0b4c4fe6db09ec6a007f21bec43226be00 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImpl.kt @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings.brightness + +import android.view.VelocityTracker +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.haptics.slider.SeekableSliderEventProducer +import com.android.systemui.haptics.slider.SeekableSliderTracker +import com.android.systemui.haptics.slider.SliderHapticFeedbackProvider +import com.android.systemui.haptics.slider.SliderTracker +import com.android.systemui.statusbar.VibratorHelper +import com.android.systemui.util.time.SystemClock +import kotlinx.coroutines.CoroutineDispatcher + +/** + * Implementation of the [BrightnessSliderHapticPlugin]. + * + * For the specifics of the brightness slider in System UI, a [SeekableSliderEventProducer] is used + * as the producer of slider events, a [SliderHapticFeedbackProvider] is used as the listener of + * slider states to play haptic feedback depending on the state, and a [SeekableSliderTracker] is + * used as the state machine handler that tracks and manipulates the slider state. + */ +class BrightnessSliderHapticPluginImpl +@JvmOverloads +constructor( + vibratorHelper: VibratorHelper, + systemClock: SystemClock, + @Main mainDispatcher: CoroutineDispatcher, + override val velocityTracker: VelocityTracker = VelocityTracker.obtain(), + override val seekableSliderEventProducer: SeekableSliderEventProducer = + SeekableSliderEventProducer(), +) : BrightnessSliderHapticPlugin { + + private val sliderHapticFeedbackProvider: SliderHapticFeedbackProvider = + SliderHapticFeedbackProvider(vibratorHelper, velocityTracker, clock = systemClock) + private val sliderTracker: SliderTracker = + SeekableSliderTracker( + sliderHapticFeedbackProvider, + seekableSliderEventProducer, + mainDispatcher, + ) + + val isTracking: Boolean + get() = sliderTracker.isTracking + + override fun start() { + if (!sliderTracker.isTracking) { + sliderTracker.startTracking() + } + } + + override fun stop() { + sliderTracker.stopTracking() + } +} diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java index 38cb441a4f8c23d9096ec891f726739b816cc153..c8854922418393a1f4fd0ee208e8e41600b7bbf6 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java @@ -33,7 +33,7 @@ import androidx.annotation.Nullable; import com.android.settingslib.RestrictedLockUtils; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * {@code FrameLayout} used to show and manipulate a {@link ToggleSeekBar}. diff --git a/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt index a9b3d0a1f3aa12c60e7913e0c315432354dd0495..b2e473685daa4a09da5ad1e9493950c05d987bec 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt @@ -18,7 +18,7 @@ package com.android.systemui.shade import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintSet -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton /** diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt index 5850a846eed6a2c03a9901c2cb7bbd6862db223b..14659e7909ab9baba03ec3df090af080d3068bdd 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt @@ -18,7 +18,7 @@ package com.android.systemui.shade import android.content.Context import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState.SHADE import com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 92ccdb5abf84e7c6a7ec99a91b61189b0ac56e61..d5934e614d4ebe1d24b1125dd1cbb257398c9955 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -114,7 +114,7 @@ import com.android.keyguard.dagger.KeyguardUserSwitcherComponent; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.LaunchAnimator; import com.android.systemui.biometrics.AuthController; diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java index 2dbcbc9e0f22132361aa28e877e5fab29233f91b..c803e6f0c9f322fd9cdc912994635cb877027779 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java @@ -48,7 +48,7 @@ import android.view.WindowManagerGlobal; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java index 96fae14cec6079a0a674da61597ca3c62253b01d..6cf4ff569662c662cbf16cbfe5321523583171e3 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java @@ -36,7 +36,7 @@ import com.android.keyguard.KeyguardMessageAreaController; import com.android.keyguard.LockIconViewController; import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.back.domain.interactor.BackActionInteractor; import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt index 3873ac47040d85d493729bae1c1a2815634b290c..cc46b23ec75f7b0b2c35337f5a8b1f4959f46a3d 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt @@ -26,7 +26,7 @@ import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java index 292cf8ec1d98978c3057d6098aeea752d700555a..af44c4e363153a6919fb155b1cde57b7172638b5 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java @@ -32,7 +32,7 @@ import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.fragments.FragmentHostManager.FragmentListener; import com.android.systemui.plugins.qs.QS; import com.android.systemui.statusbar.notification.AboveShelfObserver; diff --git a/packages/SystemUI/src/com/android/systemui/shade/QsBatteryModeController.kt b/packages/SystemUI/src/com/android/systemui/shade/QsBatteryModeController.kt index 3eec7fa0e84a6999a63e8608c4d93e1ec8dbe2d9..1fcb70c6bc95388c4712c2b8ff0c2c3376ede71e 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QsBatteryModeController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/QsBatteryModeController.kt @@ -2,7 +2,7 @@ package com.android.systemui.shade import android.content.Context import android.view.DisplayCutout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.battery.BatteryMeterView import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java index d653cb4fa9d79bf71e40d7af29b47d15c3903a0b..e8be40eaf3fe57cc52ef85d9f055423ee33d7e31 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java @@ -65,7 +65,7 @@ import com.android.keyguard.FaceAuthApiRequestReason; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt index 19a4ee8ef6a0565b361bb29750ee75e6b4e17e9e..25bd8e7446bce7f3dac0699c2527c0f88bc7183a 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt @@ -38,7 +38,7 @@ import androidx.core.view.doOnLayout import com.android.app.animation.Interpolators import com.android.settingslib.Utils import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt index 3f7512a257326554a31aba4e14c88866a9ca3ef8..38b358ff927ec1c6a3810f32f5a6f0797168c67d 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt @@ -22,7 +22,7 @@ import android.os.Handler import android.view.LayoutInflater import android.view.ViewStub import androidx.constraintlayout.motion.widget.MotionLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController import com.android.systemui.biometrics.AuthRippleView diff --git a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrier.java b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrier.java index 8612cdf12c6e48f540f3a273539553600978139d..6ca0ad47a0a7710548be8e5f331df007690e2823 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrier.java +++ b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrier.java @@ -33,7 +33,7 @@ import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; import com.android.settingslib.graph.SignalDrawable; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernShadeCarrierGroupMobileView; import com.android.systemui.util.LargeScreenUtils; diff --git a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroup.java b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroup.java index 68561d1cfd0f43ea10937bee82ac0458f92235f0..e84fb485829c9a53787cee05b285f58016df7fd4 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroup.java +++ b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroup.java @@ -24,7 +24,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Displays Carrier name and network status in the shade header diff --git a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroupController.java index 98d8a53b83c8a069b5ebd2f633498ebc1d13144f..3349345b1391c5e18435eb5e4975acd3c9fd892a 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroupController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/carrier/ShadeCarrierGroupController.java @@ -39,7 +39,7 @@ import androidx.annotation.VisibleForTesting; import com.android.keyguard.CarrierTextManager; import com.android.settingslib.AccessibilityContentDescriptions; import com.android.settingslib.mobile.TelephonyIcons; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt index c6c664dbdcf0090022f5473ed08c923cb63c6e7a..51276c6560a499475b91d874eb93fca8224386b1 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt @@ -22,7 +22,7 @@ import android.content.IntentFilter import android.icu.text.DateFormat import android.icu.text.DisplayContext import android.os.UserHandle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java index ba92c451f764f1ded94ef415ca4733b3867d9205..f54d0e70e3c7d94f63cefab0a064903dd87bb125 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java @@ -25,7 +25,7 @@ import android.view.View; import android.widget.ImageView; import android.widget.RemoteViews.RemoteView; -import com.android.systemui.R; +import com.android.systemui.res.R; @RemoteView public class AnimatedImageView extends ImageView { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt index 520976746785ee6e6b73865e736f0368f4531579..2281ea02aaf8ba41e5c09b1b9498b200dccb41b6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt @@ -23,7 +23,7 @@ import android.view.View import android.widget.FrameLayout import android.widget.LinearLayout import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.battery.BatteryMeterView import com.android.systemui.statusbar.events.BackgroundAnimatableView diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index a0cbdf3e3e0122550211ac2d38b04094f49e6f21..6bbd4a504471a115b764eb69b76a2ad7229645c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -29,7 +29,7 @@ import android.view.SurfaceControl import android.view.ViewRootImpl import androidx.annotation.VisibleForTesting import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CastDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/CastDrawable.java index 2f385d04c7938fe30b30767fbf809384be73f57e..b1acc64d7fa8b7ee249d3fcb9132ebd6563c829a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CastDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CastDrawable.java @@ -24,7 +24,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.DrawableWrapper; import android.util.AttributeSet; -import com.android.systemui.R; +import com.android.systemui.res.R; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ConnectedDisplayChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ConnectedDisplayChip.kt index 76636ab8e5f35744f70df8488c3da16a69c4bd68..4c0f6f0cc6728ece9cd665ed564f6341a9f8d8ee 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ConnectedDisplayChip.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ConnectedDisplayChip.kt @@ -19,7 +19,7 @@ import android.content.Context import android.content.res.Configuration import android.util.AttributeSet import android.widget.FrameLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.events.BackgroundAnimatableView /** Chip that appears in the status bar when an external display is connected. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java index c1ebf1236defd5d2963f5f47a5ca043381f453b9..d24f9d8f476c7b606c5440689aed3cffc3685832 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java @@ -19,7 +19,7 @@ package com.android.systemui.statusbar; import android.view.View; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java index 24c66eb5d442cc031b2690dbe52a5a7d4291e4c4..33c42e04390115e4d3cb3c269de7a7cace442f60 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java @@ -29,7 +29,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.row.StackScrollerDecorView; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java index 4d933d9ad21ee1c3f161f11704838716d5aef610..0715dfca85078a2156b8d85dbc50437dc99d4ff6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java @@ -26,7 +26,7 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.AlphaOptimizedLinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry.OnSensitivityChangedListener; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java index a7ec02ff43c382b182254c5a17aaa24c241acdd6..95768e55de3405edcfedfa6148f261fc81f73f4d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java @@ -74,7 +74,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutAppItemLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutAppItemLayout.java index 5377deef337ec6fc376351a87f746d339e7facd1..3e854a40251b3d6a4b5ce6e9615b6c2c7c1a53a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutAppItemLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutAppItemLayout.java @@ -23,7 +23,7 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Layout used for displaying keyboard shortcut items inside an alert dialog. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutListSearch.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutListSearch.java index ec66e994b58a7960c7c4130d2c427e874bf0c382..68c48b9a261f2620e17403dab716d7fac37be5ff 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutListSearch.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcutListSearch.java @@ -70,7 +70,7 @@ import com.android.internal.app.AssistUtils; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialog; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java index ae3d41e19b5ffd18df812408e731958553b028b5..61eaff9c2f8e444cd507abc04a5c3008c7092ac8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java @@ -67,7 +67,7 @@ import com.android.internal.app.AssistUtils; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.Collections; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java index 1a32d70a97451308d3d0be58a04dbf8c1a98e796..1198d1baeaee8c727b495fefe62dd4c623bf34cd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java @@ -39,7 +39,7 @@ import android.view.animation.Interpolator; import android.widget.ImageView; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.wm.shell.animation.FlingAnimationUtils; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index feb02586a8206a9baa6d344b46b2799f109e15a9..98e5124f77362f3de75e2930437265238f6c2d7d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -84,7 +84,7 @@ import com.android.keyguard.TrustGrantFlags; import com.android.keyguard.logging.KeyguardLogger; import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FaceHelpMessageDeferral; import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor; @@ -309,7 +309,7 @@ public class KeyguardIndicationController { mFaceAcquiredMessageDeferral = faceHelpMessageDeferral; mCoExFaceAcquisitionMsgIdsToShow = new HashSet<>(); int[] msgIds = context.getResources().getIntArray( - com.android.systemui.R.array.config_face_help_msgs_when_fingerprint_enrolled); + com.android.systemui.res.R.array.config_face_help_msgs_when_fingerprint_enrolled); for (int msgId : msgIds) { mCoExFaceAcquisitionMsgIdsToShow.add(msgId); } @@ -704,7 +704,7 @@ public class KeyguardIndicationController { .setTextColor(Utils.getColorAttr( mContext, com.android.internal.R.attr.textColorOnAccent)) .setBackground(mContext.getDrawable( - com.android.systemui.R.drawable.logout_button_background)) + com.android.systemui.res.R.drawable.logout_button_background)) .setClickListener((view) -> { if (mFalsingManager.isFalseTap(LOW_PENALTY)) { return; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt index 238317cfc99e50e83cfe4a6cc1d7d41eedf495b5..62c9980c336cee73eab2ca6675a1816cdf618805 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt @@ -3,7 +3,7 @@ package com.android.systemui.statusbar import android.content.Context import android.util.IndentingPrintWriter import android.util.MathUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dump.DumpManager import com.android.systemui.media.controls.ui.MediaHierarchyManager import com.android.systemui.shade.ShadeViewController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionController.kt index 5f3d757869732d59aa1c795c43aca494cf675f75..4d0552e7cb316e112ae45f4778822575dbccd9bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionController.kt @@ -21,7 +21,7 @@ import android.util.IndentingPrintWriter import android.util.MathUtils import androidx.annotation.FloatRange import androidx.annotation.Px -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.qs.QS import com.android.systemui.statusbar.policy.ConfigurationController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionController.kt index af4a1aa98d9ebedc02b4d9507b85f060bff0c2fc..77a09608dbd37c75e1a7ac2af3d46360d1d4daf8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeScrimTransitionController.kt @@ -3,7 +3,7 @@ package com.android.systemui.statusbar import android.content.Context import android.util.IndentingPrintWriter import android.util.MathUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.policy.ConfigurationController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt index 29ca0f438aac0d362ccbf35ea9b3167d89a2af83..143e620abfa1a1fbdb17ada88f2272b4f2ea045c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt @@ -16,7 +16,7 @@ import androidx.annotation.VisibleForTesting import com.android.systemui.Dumpable import com.android.systemui.ExpandHelper import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.biometrics.UdfpsKeyguardViewControllerLegacy import com.android.systemui.classifier.Classifier import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java index 8089fd94f7db1f19140adbda6abaace3a9d6a4ad..befc64d07426ee592b396e7e457647784b7f45e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java @@ -48,7 +48,7 @@ import androidx.annotation.Nullable; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.domain.interactor.PowerInteractor; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index c760227aa1249e848dd163e84d1cad861904506c..09ad55e005d45bda32509cd709b788e6047678f0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -37,7 +37,7 @@ import androidx.annotation.NonNull; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.SystemBarUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.flags.Flags; import com.android.systemui.flags.ViewRefactorFlag; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt index 2c0741ecf986943cc17d2608ac006069821dd10c..3640ae06753738ff6255a99bafad2c3db6ac1183 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt @@ -31,7 +31,7 @@ import androidx.annotation.VisibleForTesting import com.android.app.animation.Interpolators import com.android.systemui.Dumpable import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.classifier.Classifier.NOTIFICATION_DRAG_DOWN import com.android.systemui.classifier.FalsingCollector import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java index 006b219d8e61c55f33dc2cdbd46f42d6b0416bc2..2b7e9c55ee4e6bdb4d9237ffdddf2e09fb01f00e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java @@ -26,7 +26,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.DrawableWrapper; import android.util.AttributeSet; -import com.android.systemui.R; +import com.android.systemui.res.R; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SingleShadeLockScreenOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/SingleShadeLockScreenOverScroller.kt index f1e51e21a9e500b86224d13d89522a7904e816c8..603e863f9a10daa9c37c38dadec9820ff7ad17a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SingleShadeLockScreenOverScroller.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SingleShadeLockScreenOverScroller.kt @@ -3,7 +3,7 @@ package com.android.systemui.statusbar import android.content.Context import android.content.res.Configuration import android.util.MathUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController import com.android.systemui.statusbar.policy.ConfigurationController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt index 3d574caf31924d92d22e8c2689e7103d0fd7efb9..e47c914341a65556ade032a613de419e6890d1df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt @@ -7,7 +7,7 @@ import android.content.res.Configuration import android.util.MathUtils import android.view.animation.PathInterpolator import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.qs.QS diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index fbbee53468c515322b165dc65abc8495ad6cadaf..8baab25e5c590ec152045af72eac21d6a9ee010b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -57,7 +57,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.util.ContrastColorUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.NotificationIconDozeHelper; import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.util.drawable.DrawableSize; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index 99297b21c9a067a5581f9366c629ef755bc220cb..e632214bcb2b0474194ed3939e52e86473bc8b15 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -43,7 +43,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardClockSwitch; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java index 645595c1f7bf76ac7623bcf5178f3677fe58e789..d089252759c70c508e304934e2a4f14dd3c2ef4e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java @@ -117,6 +117,16 @@ public class VibratorHelper { mExecutor.execute(() -> mVibrator.vibrate(effect)); } + /** + * @see Vibrator#vibrate(VibrationEffect, VibrationAttributes) + */ + public void vibrate(@NonNull VibrationEffect effect, @NonNull VibrationAttributes attributes) { + if (!hasVibrator()) { + return; + } + mExecutor.execute(() -> mVibrator.vibrate(effect, attributes)); + } + /** * @see Vibrator#hasVibrator() */ @@ -153,6 +163,17 @@ public class VibratorHelper { HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES); } + /** + * @see Vibrator#getPrimitiveDurations(int...) + */ + public int[] getPrimitiveDurations(int... primitiveIds) { + if (!hasVibrator()) { + return new int[]{0}; + } else { + return mVibrator.getPrimitiveDurations(primitiveIds); + } + } + /** * Perform a vibration using a view and the one-way API with flags * @see View#performHapticFeedback(int feedbackConstant, int flags) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java index 67ab0601cbf8ee627088b5a0fc0cc0d09d1892c2..092e5b4c0e2caeb9cfe543548d7fd637c21704cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java @@ -26,7 +26,7 @@ import android.view.ViewGroup; import android.view.animation.Interpolator; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.TransformState; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetIcons.java index 196aad99dcb51a8023f01abf5a5f4a357c15f548..9734e262369d1b108160697118ad58bbac2576c5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetIcons.java @@ -16,7 +16,7 @@ package com.android.systemui.statusbar.connectivity; -import com.android.systemui.R; +import com.android.systemui.res.R; class EthernetIcons { static final int[][] ETHERNET_ICONS = { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java index c523d22456f6ac470f2fe7e590d9d4c1198ff461..d6df987ba5a1c4a843fef467d0bf2badb6fd4f3f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java @@ -43,7 +43,7 @@ import com.android.settingslib.mobile.MobileStatusTracker.MobileStatus; import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy; import com.android.systemui.util.CarrierConfigTracker; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java index f381b3792f68325cd78e6e2e0e6222ceeada48e9..9db61c6b3ba266adb4c1924752d5fd238d176f06 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java @@ -61,7 +61,7 @@ import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java index f84b96c94a91b93ae2ad2b2ce05773ea2e222969..08defcce4b7cf73b82a0a164229e1408da79d6e6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java @@ -34,7 +34,7 @@ import com.android.settingslib.SignalIcon.MobileIconGroup; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.wifi.WifiStatusTracker; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt index 80274bde6ce291788e5b450349cf90a2ecf89dd6..4056e7b89c2c4004a5dfdf298b8e5dc65786d477 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar.core import android.app.Fragment -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.fragments.FragmentHostManager import com.android.systemui.statusbar.phone.PhoneStatusBarTransitions diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt index d1e0a7193948f729c7e3958c5d3c7e327135116d..5af7cfc212d58dc6b610ad672bd32432289ec95d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt @@ -25,7 +25,7 @@ import android.view.Gravity import android.view.View import android.widget.FrameLayout import com.android.internal.annotations.GuardedBy -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt index 1ad4620f9dfae21d495c42677db30e086ab75206..dccc23f61092cdbab47cf67bb312b6b849712b34 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt @@ -31,7 +31,7 @@ import androidx.core.animation.AnimatorListenerAdapter import androidx.core.animation.AnimatorSet import androidx.core.animation.ValueAnimator import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.statusbar.phone.StatusBarContentInsetsChangedListener diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt index 2403920e69f97e1adc858af2e12c8d9ba248be91..7d866df73da97842580a9ba9acc7e21d720d1833 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt @@ -20,7 +20,7 @@ import android.annotation.IntRange import android.content.Context import android.provider.DeviceConfig import android.provider.DeviceConfig.NAMESPACE_PRIVACY -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt index d667b91ea5ab75e1bdd012eca5be3ff92ecec86e..0190d5c9759b4a94f09d45c6556107a29cdb813b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt @@ -39,7 +39,7 @@ import android.view.ViewGroup import com.android.keyguard.KeyguardUpdateMonitor import com.android.settingslib.Utils import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java index fcff4376811eb9c71f1c0fe91a12b6a15d061cb7..8cefc56d135a51270fd8c43f9980d2a0760fd91b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java @@ -20,7 +20,7 @@ import android.util.FloatProperty; import android.util.Property; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.function.BiConsumer; import java.util.function.Function; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/AssistantFeedbackController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AssistantFeedbackController.java index 420dd3f0e464a87d2549e3aaedd047da7570b56a..24088d2dabfa9771c43e51f2abfc8414efff6e69 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/AssistantFeedbackController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AssistantFeedbackController.java @@ -155,17 +155,17 @@ public class AssistantFeedbackController { int feedbackStatus = getFeedbackStatus(entry); switch (feedbackStatus) { case STATUS_ALERTED: - return com.android.systemui.R.string.notification_channel_summary_automatic_alerted; + return com.android.systemui.res.R.string.notification_channel_summary_automatic_alerted; case STATUS_SILENCED: - return com.android.systemui.R.string + return com.android.systemui.res.R.string .notification_channel_summary_automatic_silenced; case STATUS_PROMOTED: - return com.android.systemui.R.string + return com.android.systemui.res.R.string .notification_channel_summary_automatic_promoted; case STATUS_DEMOTED: - return com.android.systemui.R.string.notification_channel_summary_automatic_demoted; + return com.android.systemui.res.R.string.notification_channel_summary_automatic_demoted; default: - return com.android.systemui.R.string.notification_channel_summary_automatic; + return com.android.systemui.res.R.string.notification_channel_summary_automatic; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java index 0c1891e1fde9ac3aab29fecd39756e653829588c..f3067c1042e072ff55f15fed7eee48908d8b81ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import android.view.ViewOutlineProvider; import android.widget.LinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.AlphaOptimizedFrameLayout; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ImageTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ImageTransformState.java index b09b9f42e6aff607792732d9a687c90049bd15d2..2ffbe4bd4521393eaa5eaad812bc14dca4b44ef3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ImageTransformState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ImageTransformState.java @@ -22,7 +22,7 @@ import android.view.View; import android.widget.ImageView; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.TransformableView; import com.android.systemui.statusbar.notification.row.HybridNotificationView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java index 11582d7e3cc825f47e56f3d44a934d83f59e38d2..ad9e312e3c39226ee95fac20bb1cb56b21f0bac7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java @@ -49,7 +49,7 @@ import android.util.Pair; import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingImageTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingImageTransformState.java index 2ee21539ca1d8cae708f75deb4a5570bb9a589ea..1f4f04cf85e303ad8c08bf725fa0298bc03c4ac2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingImageTransformState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingImageTransformState.java @@ -20,7 +20,7 @@ import android.util.Pools; import android.view.View; import com.android.internal.widget.MessagingImageMessage; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.ViewTransformationHelper; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java index a0456985e8d9a99676939e4c1ff9563946ccdf1c..167efc784ff5accb4c84c22394b9768092cd7b98 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java @@ -25,7 +25,7 @@ import android.view.View; import android.widget.ImageView; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import java.util.function.Consumer; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java index 43e45b14cfbe531308c493c2a4fa8d07197bfbe5..552bfb288d7a9d0e17633bbb238fe8d2971761b1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java @@ -24,7 +24,7 @@ import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.widget.ImageView; -import com.android.systemui.R; +import com.android.systemui.res.R; public class NotificationIconDozeHelper extends NotificationDozeHelper { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java index fb712108a7871def9f4c98f63017bb0af23726cd..eb1be6772b9987be93032bd07eeca26af8177182 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java @@ -23,7 +23,7 @@ import android.view.View; import android.widget.ImageView; import com.android.internal.util.ContrastColorUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.collection.ListEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.util.Compile; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt index 8029f48152f47696884c1f60bfa940ed5e3a8391..328a74100e48c7edf8025a850bfc65f604b66156 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt @@ -3,7 +3,7 @@ package com.android.systemui.statusbar.notification import android.util.FloatProperty import android.view.View import androidx.annotation.FloatRange -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.flags.ViewRefactorFlag diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java index 90eb630949fa9dc3bde185e40c7a1bd608e12be0..aa7a63e908544e8a822d7a47b45ae3a500d062b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/TransformState.java @@ -27,7 +27,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.widget.MessagingImageMessage; import com.android.internal.widget.MessagingPropertyAnimator; import com.android.internal.widget.ViewClippingUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.TransformableView; import com.android.systemui.statusbar.ViewTransformationHelper; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ViewGroupFadeHelper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ViewGroupFadeHelper.kt index 1b43922f652ab00c15a906dc551812e19dc3a11f..af4df321953f6ab1ce3b542f23626abb1ff82840 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ViewGroupFadeHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ViewGroupFadeHelper.kt @@ -21,7 +21,7 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.app.animation.Interpolators /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt index 93a34afc9fc9e874f98609d1fcdb22d07b1c0b7b..94cc7e9d1a9ff772d03906d1bf3c27c4a20f5b5b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt @@ -17,7 +17,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.notification.AssistantFeedbackController import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotifPipeline diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt index 82c7aae08f6abbb4611bcacc102eb937439a50e4..6b70a0807b86aac150fd551bb721e4b83c3547a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt @@ -17,7 +17,7 @@ package com.android.systemui.statusbar.notification.collection.provider import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/MediaContainerController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/MediaContainerController.kt index 8de03819ec322d090917cc14ecc457ea25ad8fc1..70fabc0587d46dff21c304b9457f7e5c883cc77d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/MediaContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/MediaContainerController.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.collection.render import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.stack.MediaContainerView import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt index 49990d9c559e89f364f5d1732367c58881b5e23e..c2b6f3277ffb53f1e1f0fad988815c6a36d6b2a2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt @@ -21,7 +21,7 @@ import android.content.Intent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.notification.dagger.HeaderClickAction import com.android.systemui.statusbar.notification.dagger.HeaderText diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt index 75801a8db65d071fb8ae3c0486aa988be67ef239..ca43591e0776a2f521036f80bc600e31030680b9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt @@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.dagger import android.annotation.StringRes import android.provider.Settings -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.collection.render.NodeController import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index 5664a2af7c0e27ec6734085a38a4e9860c609dc8..8ee0de691557e211bc5b59d9f15fee930d58d7bc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -20,7 +20,7 @@ import android.content.Context; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.statusbar.StatusBarStateController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt index 98e167f8478103e4f2ab107bc8828dc104a0036d..84678aa2ee23ecd6a96f8a0031b5261b193ada98 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt @@ -27,7 +27,7 @@ import android.util.Log import android.view.View import android.widget.ImageView import com.android.internal.statusbar.StatusBarIcon -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.notification.InflationException diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt index 26dfe3edf793ced34c2f9ee1159f42214bea8731..a54687c6c46b46b9bb3a40ca85273d5bac76ab3a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt @@ -30,7 +30,7 @@ import com.android.app.animation.Interpolators import com.android.internal.statusbar.StatusBarIcon import com.android.internal.util.ContrastColorUtil import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java index cb21291dae1bf4b1fa6738bac737fb440f60b7fe..c61258b5e0ec4131d8b6229ec1b8e422f3c9ed0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java @@ -36,7 +36,7 @@ import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor.Configuration; import com.android.settingslib.Utils; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.notification.FakeShadowView; import com.android.systemui.statusbar.notification.NotificationUtils; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt index 88dbb4cf13421fc40d0192810fe1442b7902530c..a5b32b8d4fa76fd8f493ff9f4ec89f77f9d2a746 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt @@ -89,6 +89,7 @@ constructor( this.lastLoadingJob?.cancel() this.lastLoadingJob = when { + skipLazyLoading(state.icon) -> null state is Empty && shown -> state.icon?.let(::startLoadingJob) state is PlaceHolder && shown -> startLoadingJob(state.icon) state is FullImage && !shown -> @@ -119,12 +120,6 @@ constructor( return Runnable {} } - if (displayedState.iconSameAs(icon)) { - // We're already handling this icon, nothing to do here. - log("skipping updateIcon for consumer:$drawableConsumer with icon:$icon") - return Runnable {} - } - this.drawableConsumer = drawableConsumer this.displayedState = Empty(icon) this.lastLoadingJob?.cancel() @@ -144,7 +139,7 @@ constructor( private fun loadImageOrPlaceHolderSync(icon: Icon?): Drawable? { icon ?: return null - if (viewShown) { + if (viewShown || skipLazyLoading(icon)) { return loadImageSync(icon) } @@ -228,6 +223,19 @@ constructor( } ) + /** + * We don't support lazy-loading or set placeholders for bitmap and data based icons, because + * they gonna stay in memory anyways. + */ + private fun skipLazyLoading(icon: Icon?): Boolean = + when (icon?.type) { + Icon.TYPE_BITMAP, + Icon.TYPE_ADAPTIVE_BITMAP, + Icon.TYPE_DATA, + null -> true + else -> false + } + private fun log(msg: String) { if (DEBUG) { Log.d(TAG, "$msg state=${getDebugString()}") @@ -242,15 +250,6 @@ constructor( data class PlaceHolder(override val icon: Icon, val drawableSize: Size) : DrawableState(icon) data class FullImage(override val icon: Icon, val drawableSize: Size) : DrawableState(icon) - - fun iconSameAs(other: Icon?): Boolean { - val displayedIcon = icon - return when { - displayedIcon == null && other == null -> true - displayedIcon != null && other != null -> displayedIcon.sameAs(other) - else -> false - } - } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt index 0de3246e01faab005df1e7ad53eff17de34a342c..4114eb2a78961232f4942e21772b94f7395e8b1a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt @@ -38,7 +38,7 @@ import android.view.WindowInsets.Type.statusBars import android.view.WindowManager import android.widget.TextView import com.android.internal.annotations.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorListView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorListView.kt index 9c4aa072a83dfc0a79a97a8ba5d731dc02352b0e..2cfd075a17a9b4a5c1e9bc3d78eb5c513cd55a92 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorListView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorListView.kt @@ -37,7 +37,7 @@ import android.widget.Switch import android.widget.TextView import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.util.Assert /** 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 acece33f0b9358a3aa557964ed761e11e89b3b5a..fb8024c88191b38210cd6b4f7420912f9bc61f0a 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 @@ -73,7 +73,7 @@ import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.ContrastColorUtil; import com.android.internal.widget.CachingIconView; import com.android.internal.widget.CallLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.flags.ViewRefactorFlag; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java index b95018777feaf6a0e8199f6265274d85c708c90d..77f5717d0e91c3821147694ebfa3e88d7cb74bc3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java @@ -48,7 +48,7 @@ import androidx.annotation.VisibleForTesting; import com.android.app.animation.Interpolators; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java index c8f13a6302cd760136d26c1c3902826bd702cf5d..259923170477e65c55927cee297f583d3970d60b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java @@ -28,7 +28,7 @@ import android.util.IndentingPrintWriter; import android.view.View; import android.view.ViewOutlineProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.Flags; import com.android.systemui.flags.ViewRefactorFlag; import com.android.systemui.statusbar.notification.RoundableState; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java index c4c116ba061346761b3561014396c966dfb7165f..5aae48899bc9edb39d8379d97625f635eaf66e3a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java @@ -34,7 +34,7 @@ import androidx.annotation.Nullable; import com.android.app.animation.Interpolators; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.Roundable; import com.android.systemui.statusbar.notification.RoundableState; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java index 3f4fd50064088adfbaff54cdd48789348864a38c..42c80ed227174fbc66a398a38e9176668b92cd4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java @@ -43,7 +43,7 @@ import android.widget.TextView; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java index 0989df61a5e35569bd7ffb03001cfef94f4b20db..26db5f2bc095f5df6926c1beef9b53354706ea36 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java @@ -34,7 +34,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.util.DumpUtilsKt; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java index 99a24cb3e9ca6351e51d8230243ae14aa037a658..43d99a0e03f2b9f8fe682a093297923ffbd88672 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java @@ -27,7 +27,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.internal.widget.ConversationLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.NotificationFadeAware; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java index 3e10f2ad52e5f4a213ee7e7b99b0a5be4c9b0819..ddd9bddc73750e18aa79ad9a300154a56fe21619 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java @@ -31,7 +31,7 @@ import android.view.ViewGroup; import android.widget.TextView; import com.android.internal.widget.ConversationLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * A class managing hybrid groups that include {@link HybridNotificationView} and the notification diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java index ce6dd893cb697a163b93e911a1c873e94c872b57..892a63505a7171a76185b45abdedad433e9196f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java @@ -30,7 +30,7 @@ import androidx.annotation.ColorInt; import com.android.internal.util.ContrastColorUtil; import com.android.keyguard.AlphaOptimizedLinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.TransformableView; import com.android.systemui.statusbar.ViewTransformationHelper; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java index 1fd4d12c06ca31b636411f53efa4566155b341f1..b95e053ae508db81563167476f1a7502fc587f1d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java @@ -33,7 +33,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.io.PrintWriter; import java.util.Arrays; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java index f805183d52aa3647093021a6cdc28b6d37e7dbd9..f186e665f77396f7a7b950958e1b5db8eb4b02a3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java @@ -41,7 +41,7 @@ import android.widget.RemoteViews; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.ImageMessageConsumer; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.media.controls.util.MediaFeatureFlag; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java index 065828bee746622fbe4c0bb13c1a8c97a6544d2b..a27a305428c4a42388ea6fb18c6a59b1a3ca9da1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java @@ -45,7 +45,7 @@ import androidx.annotation.MainThread; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.SmartReplyController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java index 7134f15d4fec8ea03521270f779311220dee9172..62b268b90cf3f81cc01daffcb7f8c30b2c7cf832 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java @@ -65,7 +65,7 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.notification.ConversationIconFactory; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.people.widget.PeopleSpaceWidgetManager; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java index 047db2046529c14f980556360fb3900ebe4392f5..b86d1d93426902d589cb0dd0c93fe97b1b8db66d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java @@ -35,7 +35,7 @@ import androidx.annotation.Nullable; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java index 44ead26de0120d90836bcac56b2570f1dc5e7d70..1dd3739d0e84850f0f5dd5f3fcb3ff73353f3224 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java @@ -46,7 +46,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.settingslib.notification.ConversationIconFactory; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java index 99a77550cc7698535afe80642cbade2a5611f1db..d8f31d4fb8a24016ad44a8bfe43ed12f02004444 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java @@ -60,7 +60,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java index 5a129fccff0604062e1f130f088a2642ce5a90b5..a317f95c9e659b7f278bdb3236d3d104a8c73237 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java @@ -41,7 +41,7 @@ import android.widget.FrameLayout.LayoutParams; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java index d5d7f75fbaa18543055806e9023d25111df04f0d..3443da19895e320c741d4769c8e057a8f04512dc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java @@ -49,7 +49,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java index ac97e77f84a27a3d4815521a545fe9817bd77381..06c3b7951db347239d5927479fcbafcd7753aaed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java @@ -34,7 +34,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import java.util.Set; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java index 6feffe65463017d90eba09681af1de6244e14b34..8e974c24dd0cc7bf0a43b9aa99ce701eec2b7aa6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.asynclayoutinflater.view.AsyncLayoutInflater; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.InflationTask; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt index bb43b95357db51965438118d76d31d4bbe97e2db..2d946945597ed01292d3d94692d4dad86f7ffdfa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt @@ -20,7 +20,7 @@ import android.content.Context import android.view.View import com.android.internal.widget.CachingIconView import com.android.internal.widget.CallLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.notification.NotificationFadeAware import com.android.systemui.statusbar.notification.NotificationUtils import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt index 10753f21510397d6d395efc3a0bdc262a7dc4b64..b4411f1a33a56687a0713f52574ef4ad6828f78f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt @@ -25,7 +25,7 @@ import com.android.internal.widget.ConversationLayout import com.android.internal.widget.MessagingGroup import com.android.internal.widget.MessagingImageMessage import com.android.internal.widget.MessagingLinearLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.notification.NotificationFadeAware import com.android.systemui.statusbar.notification.NotificationUtils import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapper.java index fdff12d223545e30715e2189268e9fe08074d32f..45c35d8ff8d1181fbddbaf7d35ec27c7d39adc88 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapper.java @@ -21,7 +21,7 @@ import android.graphics.Color; import android.view.View; import com.android.internal.graphics.ColorUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.NotificationFadeAware; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java index 87205e2df9c3998572b750f41660965809b62bab..bd7f766c6860ea1c9e05bf380af56c69573ec7c7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java @@ -37,7 +37,7 @@ import androidx.annotation.Nullable; import com.android.app.animation.Interpolators; import com.android.internal.widget.CachingIconView; import com.android.internal.widget.NotificationExpandButton; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.TransformableView; import com.android.systemui.statusbar.ViewTransformationHelper; import com.android.systemui.statusbar.notification.CustomInterpolatorTransformation; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMessagingTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMessagingTemplateViewWrapper.java index 4592fde69a93a606039f6be47b775a4cdecf5503..ba1deede65a694b75f2ce3895fa5d454c1024482 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMessagingTemplateViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMessagingTemplateViewWrapper.java @@ -26,7 +26,7 @@ import com.android.internal.widget.MessagingGroup; import com.android.internal.widget.MessagingImageMessage; import com.android.internal.widget.MessagingLayout; import com.android.internal.widget.MessagingLinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.TransformableView; import com.android.systemui.statusbar.ViewTransformationHelper; import com.android.systemui.statusbar.notification.NotificationUtils; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java index 199692bc3b79174a487e79bd581be165a422a8b0..875a409c07f0c4e03a1d36c1e839211194b33834 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java @@ -39,7 +39,7 @@ import androidx.annotation.Nullable; import com.android.internal.util.ContrastColorUtil; import com.android.internal.widget.NotificationActionListLayout; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.UiOffloadThread; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.TransformableView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index 38a368e1fdc84af06626a1fec33751775cbb07f6..cb671447bbb41e7923f91ad1621b2205cc478f0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -26,7 +26,7 @@ import android.util.MathUtils; import androidx.annotation.VisibleForTesting; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java index d73bbebe40b4de50a34eec4e0b610e8458c7f1c3..33473a6f6b0a37e9857ba41dd248935fa449d0de 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java @@ -23,7 +23,7 @@ import android.animation.ValueAnimator; import android.view.View; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt index a8d8a8e03ed5301642601bd8c7cd8e3eeaefdba9..5d46f52dba871cb4d39549708fd31bef8a8d3d28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt @@ -22,7 +22,7 @@ import android.graphics.Canvas import android.graphics.Path import android.graphics.RectF import android.util.AttributeSet -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.notification.row.ExpandableView /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java index 626f851d9d1141af1f4dea601c061c674bf7665b..a929e4f3ea7faf9c7172d44db55c93fde64f6821 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java @@ -42,7 +42,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.NotificationExpandButton; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.NotificationGroupingUtil; import com.android.systemui.statusbar.notification.FeedbackIcon; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index e8521d1673cf0ae3caf3cf99c7370364edcecd6c..28f0a0c5fd78a412ffd5f822d4e3805927c8cabe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -86,7 +86,7 @@ import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.ExpandHelper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.flags.ViewRefactorFlag; @@ -569,6 +569,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private boolean mShouldUseSplitNotificationShade; private boolean mHasFilteredOutSeenNotifications; @Nullable private SplitShadeStateController mSplitShadeStateController = null; + private boolean mIsSmallLandscapeLockscreenEnabled = false; /** Pass splitShadeStateController to view and update split shade */ public void passSplitShadeStateController(SplitShadeStateController splitShadeStateController) { @@ -628,6 +629,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable super(context, attrs, 0, 0); Resources res = getResources(); FeatureFlags featureFlags = Dependency.get(FeatureFlags.class); + mIsSmallLandscapeLockscreenEnabled = featureFlags.isEnabled( + Flags.LOCKSCREEN_ENABLE_LANDSCAPE); mDebugLines = featureFlags.isEnabled(Flags.NSSL_DEBUG_LINES); mDebugRemoveAnimation = featureFlags.isEnabled(Flags.NSSL_DEBUG_REMOVE_ANIMATION); mSensitiveRevealAnimEndabled = featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM); @@ -1054,6 +1057,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mOverflingDistance = configuration.getScaledOverflingDistance(); Resources res = context.getResources(); + boolean useSmallLandscapeLockscreenResources = mIsSmallLandscapeLockscreenEnabled + && res.getBoolean(R.bool.is_small_screen_landscape); + // TODO (b/293252410) remove condition here when flag is launched + // Instead update the config_skinnyNotifsInLandscape to be false whenever + // is_small_screen_landscape is true. Then, only use the config_skinnyNotifsInLandscape. + if (useSmallLandscapeLockscreenResources) { + mSkinnyNotifsInLandscape = false; + } else { + mSkinnyNotifsInLandscape = res.getBoolean( + R.bool.config_skinnyNotifsInLandscape); + } mGapHeight = res.getDimensionPixelSize(R.dimen.notification_section_divider_height); mStackScrollAlgorithm.initView(context); mAmbientState.reload(context); @@ -1065,7 +1079,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mBottomPadding = res.getDimensionPixelSize(R.dimen.notification_panel_padding_bottom); mMinimumPaddings = res.getDimensionPixelSize(R.dimen.notification_side_paddings); mQsTilePadding = res.getDimensionPixelOffset(R.dimen.qs_tile_margin_horizontal); - mSkinnyNotifsInLandscape = res.getBoolean(R.bool.config_skinnyNotifsInLandscape); mSidePaddings = mMinimumPaddings; // Updated in onMeasure by updateSidePadding() mMinInteractionHeight = res.getDimensionPixelSize( R.dimen.notification_min_interaction_height); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt index 24104d2f37e166357e005d10e10c330bd9d66a83..30708b708f2510e3d527cf0d3176be41d566c846 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt @@ -20,7 +20,7 @@ import android.content.res.Resources import android.util.Log import android.view.View.GONE import androidx.annotation.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.media.controls.pipeline.MediaDataManager diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java index baf09c70f9367beea22edbd09e07921d3635730c..722c28c43e8a45b90720c59dd34bbfcea28e5232 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java @@ -28,7 +28,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.row.StackScrollerDecorView; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index 90e10a766cbc9f6a4d758f3300de88f53b3d9df7..f2d5394e0aee9d588f68b32e3e6770716ab5731b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -27,7 +27,7 @@ import android.view.ViewGroup; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.SystemBarUtils; import com.android.keyguard.BouncerPanelExpansionCalculator; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; import com.android.systemui.statusbar.EmptyShadeView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java index 2742a23d5fad62ca61fdaa451d6737be0555daa0..4e81d0c7cbdc9d8ce20f127cf81775520672c0e2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java @@ -24,7 +24,7 @@ import android.view.View; import com.android.app.animation.Interpolators; import com.android.keyguard.KeyguardSliceView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java index f4605be2b9c5210b377138f6b6f2a3da448d4e4b..f097d068e903c8444c7f319d49a85ffdd609c242 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java @@ -28,7 +28,7 @@ import android.view.animation.Interpolator; import com.android.app.animation.Interpolators; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.NotificationFadeAware.FadeOptimizedNotification; import com.android.systemui.statusbar.notification.PropertyAnimator; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt index 51b6c75f44b00eca2e57472ad2db96adb894bbe6..57cea5d3b31e41c317969d2a04a2dba3483622d1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt @@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.data.repository.ConfigurationRepository import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.policy.SplitShadeStateController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt index e52d604d7b0243d1c549d569f279396825b7cb66..b4f578fec910a9bb70c8dd8eb6684f3ff8866035 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt @@ -28,7 +28,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.constraintlayout.widget.ConstraintSet.VERTICAL -import com.android.systemui.R +import com.android.systemui.res.R /** * Container for the stack scroller, so that the bounds can be externally specified, such as from diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt index 45ae4e0afc3ac92a6bc07aff9b5954381fdd2bfb..dee3973edb55169daff368612a6e3828b69403d2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt @@ -17,7 +17,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewbinder import android.view.LayoutInflater -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.NotificationShelf diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt index baeae79f4d7d53ee2626984a8db5db1324b2e7fa..07d3a1cf24c06e9a51810b255eafc1ef4a0fd0b5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt @@ -30,7 +30,7 @@ import android.view.View import android.view.WindowManager import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.ActivityIntentHelper -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.animation.ActivityLaunchAnimator.PendingIntentStarter import com.android.systemui.animation.DelegateLaunchAnimatorController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java index 5eafa9e970885d9ab1ea3f138f6f6bca4dc99eb8..697d2978db0c3f42b8f12eafc6675bd8b8d96062 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java @@ -28,7 +28,7 @@ import android.os.UserHandle; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.NightDisplayListenerModule; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.plugins.qs.QSTile; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java index 459071280a1e24b98e45f36a4b8150b069c1f916..f62a79f199e93296c95a3412defc19c53f524b90 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java @@ -35,7 +35,7 @@ import android.view.View; import com.android.app.animation.Interpolators; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index 3b9afa1a5eabb2fc549e746a2d46ec3bdf51578c..023efdd9a2e2c5ddb958237d12aac3d4c71ff048 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -47,7 +47,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardViewController; import com.android.keyguard.logging.BiometricUnlockLogger; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java index c9db153ff28068fad63887b4241a65460cf4ac59..485ab3262725b90fc601201207520eeccf696267 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java @@ -47,7 +47,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.LetterboxDetails; import com.android.internal.view.AppearanceRegion; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.assist.AssistManager; import com.android.systemui.camera.CameraIntents; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 6b260ff77b3c85442867e4e8f86774c832b23b56..3a8850408f18763a2fb51f3c560de00426c6b61d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -121,7 +121,7 @@ import com.android.systemui.DejankUtils; import com.android.systemui.EventLogTags; import com.android.systemui.InitController; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.assist.AssistManager; @@ -2049,7 +2049,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { } mPowerButtonReveal = new PowerButtonReveal(mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen.physical_power_button_center_screen_location_y)); + com.android.systemui.res.R.dimen.physical_power_button_center_screen_location_y)); } private void logStateToEventlog() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java index 374543dd0c5856cbe088f84d7c1ce2610811570e..de9854afdba1b5618b1e2e12ac8a3d51fb36a6dc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java @@ -28,7 +28,7 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.demomode.DemoMode; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java index ae715b3f20c8e0d4325c1c84864a57ee3e80eee6..7730f7d99f511c71cc3a267bbbea39b7f51799a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java @@ -37,7 +37,7 @@ import androidx.annotation.VisibleForTesting; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java index efc289185cfaab02dce2009f73bbbba417235ebf..92b0f3f262587c6c858bd841e43ee7c347a5b93c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java @@ -19,7 +19,7 @@ import android.graphics.drawable.AnimatedVectorDrawable; import android.util.AttributeSet; import android.widget.ImageView; -import com.android.systemui.R; +import com.android.systemui.res.R; public class ExpandableIndicator extends ImageView { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java index a1f12b896d3b6d793e730900867406e09b4efd82..270c40e801cda76604a3e0fcae6403025b651584 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java @@ -26,7 +26,7 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.ViewClippingUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shade.ShadeHeadsUpTracker; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java index 4f0cd80ab5abacb046969f7ebd41f1ca969b2cfc..a5ea1426164bce1d4eac1acab6dedc60b55d2e03 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java @@ -30,7 +30,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.internal.policy.SystemBarUtils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.kt index 5de0d15ee7d6a4a52e425c21ea948ba8bd796d97..25e634a03ef7376784c1487b0f502c9292a1359a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.kt @@ -24,7 +24,7 @@ import android.view.WindowInsets import android.widget.FrameLayout import androidx.annotation.StringRes import com.android.keyguard.LockIconViewController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.keyguard.ui.binder.KeyguardBottomAreaViewBinder import com.android.systemui.keyguard.ui.binder.KeyguardBottomAreaViewBinder.bind import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt index 924aac4e70bef7f8421feb0e015ae5e683abe950..430b0e9fab7291e910316f38efd67d04c2d121da 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt @@ -22,7 +22,7 @@ import android.content.pm.PackageManager import android.hardware.biometrics.BiometricSourceType import android.provider.Settings import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java index fc3c85a0807b98feabe583abb471a93e8b020905..fb5a530e38754431204e89906de2063e8ba198f8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java @@ -26,7 +26,7 @@ import android.util.MathUtils; import com.android.app.animation.Interpolators; import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.keyguard.KeyguardStatusView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shade.ShadeViewController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherListView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java index 29a249fcaa4154a177520acbf778e39ba5c1be77..c6690c91c1f8c7cc57a0229959928fc3cf0c634a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java @@ -32,7 +32,7 @@ import androidx.annotation.StyleRes; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.keyguard.KeyguardIndication; /** @@ -296,6 +296,6 @@ public class KeyguardIndicationTextView extends TextView { private int getYTranslationPixels() { return mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen.keyguard_indication_y_translation); + com.android.systemui.res.R.dimen.keyguard_indication_y_translation); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 914e0c0af3588b0ebf4e7c237e9d9536defebbac..7efa705b79298ebeb79b63b9e62fcdce47d78655 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -43,7 +43,7 @@ import android.widget.TextView; import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher.DarkChange; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java index 16413d2ef33a7f329af84f036b8cfa5b554d902d..fc9ecb3f14d6cf825384a0ead3d30886977f37bc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java @@ -42,7 +42,7 @@ import com.android.keyguard.CarrierTextController; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.battery.BatteryMeterViewController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LegacyNotificationIconAreaControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LegacyNotificationIconAreaControllerImpl.java index d22ed3802eedda34bbbffcc9f94e6334747915fb..4bfce4cc173a4e7af7911cdbd6f34ff799dc4da0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LegacyNotificationIconAreaControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LegacyNotificationIconAreaControllerImpl.java @@ -34,7 +34,7 @@ import com.android.app.animation.Interpolators; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.util.ContrastColorUtil; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 46a2457670b0f0aeda5cc93bc091aaf5e9b009cf..572b7f12a8bfee17f6b4e6fc82a4503b1a4523d5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -33,7 +33,7 @@ import android.view.ViewTreeObserver.OnPreDrawListener; import com.android.app.animation.Interpolators; import com.android.internal.graphics.ColorUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.KeyguardAffordanceView; import java.lang.annotation.Retention; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java index 365fbace16080c99c94a55252139022bd8bf1dc5..ec7767bca544280c1f1208831d71c477b3c4ad18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java @@ -24,7 +24,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Button; import android.widget.FrameLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Container for image of the multi user switcher (tappable). diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 3770c1df77ff767b008112b12ca8d42866af4713..7cbaf63bc6dbc566d355b60f7eb1f76c43fdfa45 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -39,7 +39,7 @@ import androidx.collection.ArrayMap; import com.android.app.animation.Interpolators; import com.android.internal.statusbar.StatusBarIcon; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.stack.AnimationFilter; import com.android.systemui.statusbar.notification.stack.AnimationProperties; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 79151fd987d10899b09d9933ef486126e25f99fb..54d81b83197eeca7ec65c9fd202855bdd61de81b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -43,7 +43,7 @@ import android.view.View; import androidx.lifecycle.Observer; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java index cc38405701f56b9ee51ae44fd6695c372a6f403b..ae3f923555105e5739c79b93174e4c09aa2964dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java @@ -22,7 +22,7 @@ import android.animation.ObjectAnimator; import android.content.res.Resources; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; public final class PhoneStatusBarTransitions extends BarTransitions { private static final float ICON_ALPHA_WHEN_NOT_OPAQUE = 1; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 1966033363d430603e5532e68c0e989e03ba1e45..b53939e594fbdb8324ea39b6f5ae883a8cc22b3e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -36,7 +36,7 @@ import android.widget.LinearLayout; import com.android.internal.policy.SystemBarUtils; import com.android.systemui.Dependency; import com.android.systemui.Gefingerpoken; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt index fc5f91506c06d73639fdcaf727859b121515ba42..e1096e2d348262e225215edfe64780088d2e22cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt @@ -24,7 +24,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.scene.shared.flag.SceneContainerFlags diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 40432eee95bbe1784972ab1b04e25eef615a30db..5b552640f3974ae871cc127c722aa14398961523 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -51,7 +51,7 @@ import com.android.settingslib.Utils; import com.android.systemui.CoreStartable; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt index ad1817019284946ecc36ae61e2da0b7e834d7d7e..6a24174ff3cb69bad8c05859771cf31275ec3c33 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt @@ -26,7 +26,7 @@ import android.view.DisplayCutout import androidx.annotation.VisibleForTesting import com.android.internal.policy.SystemBarUtils import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.policy.CallbackController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 4878d45cec84e7e12dc613fb62f78527c64fc3b3..ffeb1a8cb8b601daa94f1d7f324ff6a33db5e0e9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -31,7 +31,7 @@ import android.widget.LinearLayout.LayoutParams; import androidx.annotation.VisibleForTesting; import com.android.internal.statusbar.StatusBarIcon; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java index 53662f4334e1ddd94362a286ca399de163140da1..fb7f9d1ec19b2b6a754b09467dd0757ebfb36349 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java @@ -31,7 +31,7 @@ import android.view.View; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.InitController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter.OnDismissAction; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java index 344e56cf570fec7538c00bac872535011e9b93bf..30a445f7ce4a6a9ea444d324a4af300a44169a95 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -23,7 +23,7 @@ import android.util.ArraySet; import android.util.Log; import com.android.settingslib.mobile.TelephonyIcons; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java index 5773612d55c7948fec9e2cd193ec0c3c57ef1724..40bd8d3446b554ef4523e095c44af35e000d07c5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java @@ -31,7 +31,7 @@ import android.view.WindowInsets; import com.android.internal.policy.SystemBarUtils; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.ScreenDecorations; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.scene.domain.interactor.SceneInteractor; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java index d83664f9156a5ddcf98c471e2745522d50ab2a01..7910e6f7413cb41908da12d407325aa93c7dca28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java @@ -33,7 +33,7 @@ import android.util.Log; import android.view.View; import com.android.keyguard.AlphaOptimizedLinearLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.notification.stack.AnimationFilter; import com.android.systemui.statusbar.notification.stack.AnimationProperties; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListener.kt index 881741ae57461165be5fb6ae03c2cde1f5e861af..640ec281e162e9a616bd146219048157129fe309 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListener.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListener.kt @@ -27,7 +27,7 @@ import androidx.annotation.ColorInt import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.plugins.DarkIconDispatcher diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java index 69510cedaeb2ee213758cb776b957e4c406483bb..9d627af357cb407729efce0a49ab6c2468920bd4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java @@ -42,7 +42,7 @@ import android.view.WindowManager.LayoutParams; import androidx.annotation.Nullable; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TapAgainView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TapAgainView.java index 52e0e8a7a0cb6b930a6a666a80df789c53584404..a033e1d5533364910600781a13a4b01f00338360 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TapAgainView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TapAgainView.java @@ -28,7 +28,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.wm.shell.animation.Interpolators; /** @@ -83,7 +83,7 @@ public class TapAgainView extends TextView { public void animateOut() { long fadeOutDuration = 167L; // From KeyguardIndicationTextView#getFadeOutDuration int yTranslation = mContext.getResources().getDimensionPixelSize( - com.android.systemui.R.dimen.keyguard_indication_y_translation); + com.android.systemui.res.R.dimen.keyguard_indication_y_translation); AnimatorSet animatorSet = new AnimatorSet(); ObjectAnimator fadeOut = ObjectAnimator.ofFloat(this, View.ALPHA, 0f); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UserAvatarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UserAvatarView.java index 1b93c16dd45c04bf9eb98b3674bbc1c91cfb21c5..c6d2eca4d53358b4426f08ad56e4e4773b8d20a3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UserAvatarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UserAvatarView.java @@ -25,7 +25,7 @@ import android.util.AttributeSet; import android.view.View; import com.android.settingslib.drawable.UserIconDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * A view that displays a user image cropped to a circle with an optional frame. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 66f0f597ea6e96bb8daad16660d4ca60bd587f33..babd435c62ba599e20b2e833aa57efc381f70114 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -38,7 +38,7 @@ import com.android.app.animation.Interpolators; import com.android.app.animation.InterpolatorsAndroidX; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarIconBlocklist.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarIconBlocklist.kt index b845bada29dc3829edcb350d7f551f0b27aac268..48a9e0f519791bf26041263abebee7271c93594c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarIconBlocklist.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarIconBlocklist.kt @@ -37,7 +37,7 @@ fun getStatusBarIconBlocklist( ): List<String> { // Load the default blocklist from res val blocklist = res.getStringArray( - com.android.systemui.R.array.config_collapsed_statusbar_icon_blocklist).toList() + com.android.systemui.res.R.array.config_collapsed_statusbar_icon_blocklist).toList() val vibrateIconSlot: String = res.getString(R.string.status_bar_volume) val showVibrateIcon = settings.getIntForUser( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarSystemEventAnimator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarSystemEventAnimator.kt index 5903fa3d5bd1d453d68c0bcb7308a0826a380326..e73063b809cfe33db3bb6fd56d451b930bdff842 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarSystemEventAnimator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/StatusBarSystemEventAnimator.kt @@ -21,7 +21,7 @@ import androidx.core.animation.AnimatorSet import androidx.core.animation.ValueAnimator import android.content.res.Resources import android.view.View -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.events.STATUS_BAR_X_MOVE_IN import com.android.systemui.statusbar.events.STATUS_BAR_X_MOVE_OUT import com.android.systemui.statusbar.events.SystemStatusAnimationCallback diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java index cd6ccb5b9a8e8200546b6bf668560c653fc57984..07c23d1f66a07616ad3d75106cc20d1758f16451 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.phone.fragment.dagger; import android.view.View; import android.view.ViewStub; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.dagger.qualifiers.RootView; import com.android.systemui.statusbar.HeadsUpStatusBarView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt index 230bb58d0581d0133a813ba5025c44196c37a003..4b1e7a46836dae0b1d297987511b9aa2c8fac0b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt @@ -29,7 +29,7 @@ import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.CoreStartable import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherContainer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherContainer.kt index 12594771a0df21f85d1c732cbc74bee10914ed8f..387b970251fa25e5da05da21e274c0a141de602a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherContainer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherContainer.kt @@ -20,7 +20,7 @@ import android.content.Context import android.util.AttributeSet import android.widget.ImageView import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.view.LaunchableLinearLayout class StatusBarUserSwitcherContainer( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt index 3709e4c060099a46ab359f808e7740c178705d95..b0b6b325bc8306ce9e8cb6967c8ff3ee73c6a046 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt @@ -17,7 +17,7 @@ package com.android.systemui.statusbar.pipeline.ethernet.domain import com.android.settingslib.AccessibilityContentDescriptions -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt index 67b04db6446396f9cafc775486dea32c3d21a3e9..74a849a8c01ff241bb61a2f87a9d11ffe7055d95 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt @@ -30,7 +30,7 @@ import androidx.annotation.VisibleForTesting import com.android.internal.telephony.PhoneConstants import com.android.settingslib.SignalIcon.MobileIconGroup import com.android.settingslib.mobile.MobileMappings.Config -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt index 7ec8e12e557e89c50a7d2e9c7e952cc6d31a213b..f0470ca0a1ad21a7715d8e005f3a6ed0a34f7beb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt @@ -28,7 +28,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.settingslib.graph.SignalDrawable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.binder.ContentDescriptionViewBinder import com.android.systemui.common.ui.binder.IconViewBinder import com.android.systemui.lifecycle.repeatWhenAttached diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt index f407127f3161e9515df5aa601b4a219d238acd53..fbd074d5b00324f85cbcb1d15505fcee649dcbc6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt @@ -20,7 +20,7 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt index 68d02de51dc9f4a7ca8d877a633354fa5e54434e..900a920521533379f2d07576b9b6077344bd4454 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.mobile.ui.view import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.getVisibleStateString import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt index 0fe53294fa7ddd63b6879d8b98af415659751260..9ea167f4815cc63a743ecfd5c243e095f92ff2ba 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.shared import android.content.Context import android.telephony.TelephonyManager import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import java.io.PrintWriter diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt index 7076f345df97340ad23f86ca72d2604c366a06ab..4227f9eb8f10fe0ef1e09d8e12383691672d6bdb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt @@ -31,7 +31,7 @@ import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import androidx.annotation.ArrayRes import androidx.annotation.VisibleForTesting import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/InternetTileModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/InternetTileModel.kt index 1f076ed30f8a4c5fec428c44fb1e62ba65af9f19..18865900eef6df41dc724ee650faa0e99a326e36 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/InternetTileModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/InternetTileModel.kt @@ -20,6 +20,8 @@ import android.content.Context import android.graphics.drawable.Drawable import android.service.quicksettings.Tile import com.android.settingslib.graph.SignalDrawable +import com.android.systemui.common.shared.model.ContentDescription +import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.Text.Companion.loadText import com.android.systemui.plugins.qs.QSTile @@ -31,6 +33,8 @@ sealed interface InternetTileModel { val secondaryLabel: Text? val iconId: Int? val icon: QSTile.Icon? + val stateDescription: ContentDescription? + val contentDescription: ContentDescription? fun applyTo(state: QSTile.BooleanState, context: Context) { if (secondaryLabel != null) { @@ -39,6 +43,9 @@ sealed interface InternetTileModel { state.secondaryLabel = secondaryTitle } + state.stateDescription = stateDescription.loadContentDescription(context) + state.contentDescription = contentDescription.loadContentDescription(context) + // To support both SignalDrawable and other icons, give priority to icons over IDs if (icon != null) { state.icon = icon @@ -59,6 +66,8 @@ sealed interface InternetTileModel { override val secondaryLabel: Text? = null, override val iconId: Int? = null, override val icon: QSTile.Icon? = null, + override val stateDescription: ContentDescription? = null, + override val contentDescription: ContentDescription? = null, ) : InternetTileModel data class Inactive( @@ -66,6 +75,8 @@ sealed interface InternetTileModel { override val secondaryLabel: Text? = null, override val iconId: Int? = null, override val icon: QSTile.Icon? = null, + override val stateDescription: ContentDescription? = null, + override val contentDescription: ContentDescription? = null, ) : InternetTileModel } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/ModernStatusBarView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/ModernStatusBarView.kt index a1b96dd327e93fab8c48a55bc363b001aa67e20f..fe69d818dedba32351af442d3f8443c02de30fb7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/ModernStatusBarView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/ModernStatusBarView.kt @@ -20,7 +20,7 @@ import android.content.Context import android.graphics.Rect import android.util.AttributeSet import android.view.Gravity -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.DarkIconDispatcher import com.android.systemui.statusbar.BaseStatusBarFrameLayout import com.android.systemui.statusbar.StatusBarIconView diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModel.kt index b6f167704cd7d358b1db58fce767c2ced1f06617..a80ea905e6e7c43ec4bbbe3efedf8e2994418aa6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModel.kt @@ -17,7 +17,8 @@ package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel import android.content.Context -import com.android.systemui.R +import com.android.systemui.res.R +import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Text import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application @@ -61,16 +62,21 @@ constructor( private val context: Context, @Application scope: CoroutineScope, ) { + private val internetLabel: String = context.getString(R.string.quick_settings_internet_label) + // Three symmetrical Flows that can be switched upon based on the value of // [DefaultConnectionModel] private val wifiIconFlow: Flow<InternetTileModel> = wifiInteractor.wifiNetwork.flatMapLatest { val wifiIcon = WifiIcon.fromModel(it, context, showHotspotInfo = true) if (it is WifiNetworkModel.Active && wifiIcon is WifiIcon.Visible) { + val secondary = removeDoubleQuotes(it.ssid) flowOf( InternetTileModel.Active( - secondaryTitle = removeDoubleQuotes(it.ssid), - icon = ResourceIcon.get(wifiIcon.icon.res) + secondaryTitle = secondary, + icon = ResourceIcon.get(wifiIcon.icon.res), + stateDescription = wifiIcon.contentDescription, + contentDescription = ContentDescription.Loaded("$internetLabel,$secondary"), ) ) } else { @@ -109,10 +115,13 @@ constructor( it.signalLevelIcon, mobileDataContentName, ) { networkNameModel, signalIcon, dataContentDescription -> + val secondary = + mobileDataContentConcat(networkNameModel.name, dataContentDescription) InternetTileModel.Active( - secondaryTitle = - mobileDataContentConcat(networkNameModel.name, dataContentDescription), + secondaryTitle = secondary, icon = SignalIcon(signalIcon.toSignalDrawableState()), + stateDescription = ContentDescription.Loaded(secondary), + contentDescription = ContentDescription.Loaded(internetLabel), ) } } @@ -148,10 +157,13 @@ constructor( if (it == null) { notConnectedFlow } else { + val secondary = it.contentDescription.toString() flowOf( InternetTileModel.Active( - secondaryTitle = it.contentDescription.toString(), - iconId = it.res + secondaryTitle = secondary, + iconId = it.res, + stateDescription = null, + contentDescription = ContentDescription.Loaded(secondary), ) ) } @@ -164,16 +176,23 @@ constructor( ) { networksAvailable, isAirplaneMode -> when { isAirplaneMode -> { + val secondary = context.getString(R.string.status_bar_airplane) InternetTileModel.Inactive( - secondaryTitle = context.getString(R.string.status_bar_airplane), - icon = ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable) + secondaryTitle = secondary, + icon = ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable), + stateDescription = null, + contentDescription = ContentDescription.Loaded(secondary), ) } networksAvailable -> { + val secondary = + context.getString(R.string.quick_settings_networks_available) InternetTileModel.Inactive( - secondaryTitle = - context.getString(R.string.quick_settings_networks_available), + secondaryTitle = secondary, iconId = R.drawable.ic_qs_no_internet_available, + stateDescription = null, + contentDescription = + ContentDescription.Loaded("$internetLabel,$secondary") ) } else -> { @@ -206,6 +225,9 @@ constructor( InternetTileModel.Inactive( secondaryLabel = Text.Resource(R.string.quick_settings_networks_unavailable), iconId = R.drawable.ic_qs_no_internet_unavailable, + stateDescription = null, + contentDescription = + ContentDescription.Resource(R.string.quick_settings_networks_unavailable), ) private fun removeDoubleQuotes(string: String?): String? { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt index 8bea7728170f36e31688280594de6a974b61c79b..2da76d4f4051d8c8e15dbd7236139c1f9f762e11 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt @@ -18,7 +18,7 @@ package com.android.systemui.statusbar.pipeline.wifi.shared import android.content.Context import com.android.systemui.Dumpable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import java.io.PrintWriter diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt index e593575bd791ef59ec27e81494b04836a2f1980d..a9ac51d7c47230a46143fea992cce7cfcbacee47 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt @@ -23,7 +23,7 @@ import android.widget.ImageView import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.binder.IconViewBinder import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.statusbar.StatusBarIconView diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt index 668c5b3c4b7856a154d6fea8e7f904f855bf3b9e..efa092bb3f40661aeffe58eba8f837db863a32e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt @@ -22,7 +22,7 @@ import androidx.annotation.StringRes import androidx.annotation.VisibleForTesting import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.log.table.Diffable diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt index f23e1028716406a45fc499395f3bcd4d74739218..4cd348412f63bb3b3212bd6bb8f2f1b7d5f89e49 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt @@ -20,7 +20,7 @@ import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView import com.android.systemui.statusbar.pipeline.wifi.ui.binder.WifiViewBinder diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt index 27e40e06fcf0f37ad83f8b1db38d4df8f367c1a8..a078dd5cf28c768c12de7b86b10debfecf53f628 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt @@ -23,7 +23,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.net.Uri -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.util.concurrency.DelayableExecutor import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java index 6186c43017b3c432249c7f2bb9cedbbbc3e47a50..13f76feca9fd5d7a7d97eb9f2565c39708ae5d80 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java @@ -25,7 +25,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.settings.brightness.BrightnessSliderController; import com.android.systemui.settings.brightness.ToggleSlider; import com.android.systemui.shade.NotificationShadeWindowView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java index f7b601b9d2840e6b9940c1a0040507af1461609a..b06ebe9b935850fca4a930c31450c0c7d35947d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java @@ -35,7 +35,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.internal.annotations.GuardedBy; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.util.Utils; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index b7ae233c8e52163a3ecceeaeeeb80a891ee3447b..713283ebf9471dd393cf4ea222c2092819fee8ca 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -47,7 +47,7 @@ import android.widget.TextView; import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.FontSizeUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java index b5bd1d8f010232f879a4e913a52db32a51e9bff7..74e02d7cfec1a773e39d14bab79d79cad1cd4c07 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java @@ -29,7 +29,7 @@ import android.util.AttributeSet; import android.widget.TextView; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import java.util.Date; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt index ffb743ff926c1b94963a583f710c8fd92479e06f..1224275aaf93354c1576b1d3ddc7a55ef3971516 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt @@ -21,7 +21,7 @@ import android.content.Context import android.content.SharedPreferences import android.provider.Settings import android.util.Log -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java index d472c35724338024b6f3957b1b2e4e55c4e9d7ca..e59ec044bece25aef0b132f1418116fa8803a6b9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java @@ -34,7 +34,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.systemui.EventLogTags; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.AlertingNotificationManager; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpUtil.java index feef029134169b6e697070fe5eb6402be9fd7a3b..f4a1975fab52b407010807d4f39cc2ec4e560d28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpUtil.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpUtil.java @@ -21,7 +21,7 @@ import android.annotation.Nullable; import android.util.Log; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.util.Compile; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index a4821e0e9299725ab92decc9f62ca8c0793d0d0f..4b97197536ccae2fa5aa083693caf6a9957199eb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -32,7 +32,7 @@ import android.util.Log; import androidx.annotation.NonNull; import com.android.internal.util.ConcurrentUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java index 880e0d2eef31ba288105ac245f7bcbf967cf5206..62e2381645149e6ac56928ff8e32d593979974b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java @@ -35,7 +35,7 @@ import com.android.keyguard.KeyguardConstants; import com.android.keyguard.KeyguardVisibilityHelper; import com.android.keyguard.dagger.KeyguardUserSwitcherScope; import com.android.settingslib.drawable.CircleFramedDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.Expandable; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.FalsingManager; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index 63dcad98f0567cf1b19910718efe1fa1b6f00248..1c88289706f30a4e1c3acbab02f930b6f7a3c72e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -37,7 +37,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardUpdateMonitorLogger; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java index e1ec94fada818a104b211c5d17a775d01171c52c..012408e29b4946afd8915903fa80ad68079e9ee5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java @@ -26,7 +26,7 @@ import androidx.core.graphics.ColorUtils; import com.android.app.animation.Interpolators; import com.android.keyguard.KeyguardConstants; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.qs.tiles.UserDetailItemView; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java index 2d04ffa9e624f19140778c621aa82d49001c0a29..bb074ac33ddbe691a50cdb21c593ec68fa3f8bd4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java @@ -38,7 +38,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardVisibilityHelper; import com.android.keyguard.dagger.KeyguardUserSwitcherScope; import com.android.settingslib.drawable.CircleFramedDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java index 1d9d33d2aab1bec6f09d5ee8f3018f88b33caef3..5ed207cc3447a68051e589e13f520de6dd3b204a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java @@ -28,7 +28,7 @@ import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Gradient background for the user switcher on Keyguard. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index e00365d8fbcbe55a836011a0d037c73e9478d3ff..53fed3d2438fd3827cf6125192dc09d208d9153a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -81,7 +81,7 @@ import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.util.ContrastColorUtil; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt index 736b14574da08d770ef9f62a5d8c749af2a2c408..a50fd6f86e097dff8a95c716bcb736f521c9b22c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt @@ -30,7 +30,7 @@ import android.util.ArraySet import android.util.Log import android.view.View import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags.NOTIFICATION_INLINE_REPLY_ANIMATION import com.android.systemui.statusbar.NotificationRemoteInputManager diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ResourcesSplitShadeStateController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ResourcesSplitShadeStateController.kt index e71c972266f21fd58e4c024a751300aacbadc868..c302d6aeadbccea4e4a73135fb5017759e6d7d7a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ResourcesSplitShadeStateController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ResourcesSplitShadeStateController.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar.policy import android.content.res.Resources -import com.android.systemui.R +import com.android.systemui.res.R /** * Fake SplitShadeStateController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 03656f000c071b8fd42b7b765eb60e9bf4632df6..4a4d4e1f27b2858f88d04b3095fb3a15e006c70c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -50,7 +50,7 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.GuardedBy; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java index 52a6bcaa6753708a311a6c753e9d0e414a6a4d55..7ac3e9c2d94c606edbcb6480c7e71f1da27efa20 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java @@ -26,7 +26,7 @@ import android.util.KeyValueListParser; import android.util.Log; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.DeviceConfigProxy; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyStateInflater.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyStateInflater.kt index 1776e5b76e55a0454e42887ef0ca75d5f7ee6bdf..616992eb0865da7a7bcc63d25701401277e0e9c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyStateInflater.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyStateInflater.kt @@ -41,7 +41,7 @@ import android.view.ViewGroup import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction import android.widget.Button -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.plugins.ActivityStarter import com.android.systemui.shared.system.ActivityManagerWrapper import com.android.systemui.shared.system.DevicePolicyManagerWrapper diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java index fb6ba8542a3f67ce9a359fe1ccbc5374815d6933..b46f52c2ac2dbe615ed2ecbf2fe7cb6434b2e4d9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java @@ -32,7 +32,7 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ContrastColorUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.NotificationUtils; import java.text.BreakIterator; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java index 9f6157492a38ee3ca259cf80ae4babf5fb21067f..0d36b48e909907005dd7fdf7fbaa588a192faa98 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java @@ -27,7 +27,7 @@ import android.util.AttributeSet; import android.widget.LinearLayout; import android.widget.TextClock; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Container for a clock which has two separate views for the clock itself and AM/PM indicator. This diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitShadeStateControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitShadeStateControllerImpl.kt index ab4a8afcc3c92cfeb3547f2983389b54dbf03409..43905c593bdc33d4fb9f26dd56421b89c93e4cd1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitShadeStateControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitShadeStateControllerImpl.kt @@ -16,7 +16,7 @@ package com.android.systemui.statusbar.policy import android.content.res.Resources -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java index a593d518c2074d2bac3bf0e049a2f01c21d4873d..2ed9d154800789a19207923bbef53e593c448f60 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java @@ -36,7 +36,7 @@ import androidx.annotation.NonNull; import com.android.internal.util.UserIcons; import com.android.settingslib.drawable.UserIconDrawable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt index cd1dcd585ed95558db4e1f7ed069f57f8f815e9a..2f171bbc0bfc04188cd689b3369efd7e346eaf25 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt @@ -20,7 +20,7 @@ import android.content.Context import android.text.StaticLayout import android.util.AttributeSet import android.widget.TextView -import com.android.systemui.R +import com.android.systemui.res.R /** * View for showing a date that can toggle between two different formats depending on size. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java index 927024fbdd34b01f9a322d0074c589660fb29417..a77c69236946f8f75252a6c04a640d7ff224d7f9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java @@ -213,12 +213,11 @@ public interface StatusBarPolicyModule { return networkController.getDataSaverController(); } - /** Provides a log bufffer for BatteryControllerImpl */ + /** Provides a log buffer for BatteryControllerImpl */ @Provides @SysUISingleton @BatteryControllerLog - //TODO(b/300147438): reduce the size of this log buffer static LogBuffer provideBatteryControllerLog(LogBufferFactory factory) { - return factory.create(BatteryControllerLogger.TAG, 300); + return factory.create(BatteryControllerLogger.TAG, 30); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java index f4cc0ed3078154763c09289b01035cc52da39998..e4e9554e1ab7e761c19fd4d63e7a9f4bc28b6a92 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java @@ -47,7 +47,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import com.android.internal.policy.SystemBarUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DelegateLaunchAnimatorController; import com.android.systemui.dagger.SysUISingleton; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt index 874217a67613cbdba9d7103a2d6239076d4dfed1..1c7debcdf39dd3b2c8a2c997bbde9cc21914dc0f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt @@ -1,7 +1,7 @@ package com.android.systemui.statusbar.window import android.view.LayoutInflater -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import dagger.Module import dagger.Provides diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt index c1ac800b8159c7bd09332b1708c177e01e5f03c5..fa9256f82dbdf0f884c9b619abd2e43334965498 100644 --- a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt +++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt @@ -36,7 +36,7 @@ import com.android.internal.annotations.VisibleForTesting import com.android.internal.logging.InstanceId import com.android.internal.logging.InstanceIdSequence import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.log.DebugLogger.debugLog diff --git a/packages/SystemUI/src/com/android/systemui/telephony/ui/activity/SwitchToManagedProfileForCallActivity.kt b/packages/SystemUI/src/com/android/systemui/telephony/ui/activity/SwitchToManagedProfileForCallActivity.kt index b9c24871eac815da818d9a01ba258826a05a37a6..ccd8e48d164c1c08a8ae5e6590df85fceaa041b0 100644 --- a/packages/SystemUI/src/com/android/systemui/telephony/ui/activity/SwitchToManagedProfileForCallActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/telephony/ui/activity/SwitchToManagedProfileForCallActivity.kt @@ -26,7 +26,7 @@ import android.telecom.TelecomManager import android.util.Log import android.view.WindowManager import com.android.internal.app.AlertActivity -import com.android.systemui.R +import com.android.systemui.res.R import javax.inject.Inject /** Dialog shown to the user to switch to managed profile for making a call using work SIM. */ diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt index f0aae0f83722309fd180fb5da0a94bf7cdea0ba3..fc414b66b042abfa3fd458232bc795d62c8905cd 100644 --- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt @@ -39,7 +39,7 @@ import androidx.annotation.VisibleForTesting import com.android.app.animation.Interpolators import com.android.internal.widget.CachingIconView import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.classifier.FalsingCollector import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.common.shared.model.Text.Companion.loadText diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt index f24d5263ff89bd5be33d8f9c3d827d33c789a396..4449f8d06f153772c55797f81d307a6798e56016 100644 --- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt +++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt @@ -21,7 +21,7 @@ import android.view.HapticFeedbackConstants import android.view.View import androidx.annotation.AttrRes import com.android.internal.logging.InstanceId -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.TintedIcon import com.android.systemui.temporarydisplay.TemporaryViewInfo diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeModule.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeModule.java index 7fa90df0e79288b4e8d4cb4ad0d226b235940077..e78eba49a3da439d5596c41e5052c95decb3a5fd 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeModule.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeModule.java @@ -18,7 +18,7 @@ package com.android.systemui.theme; import android.content.res.Resources; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.concurrency.SysUIConcurrencyModule; diff --git a/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java index 29f16c7b924a620175e3a7836483a9cfac1061a7..d97cae2a99e34491a1a0ee97631a064e88102c00 100644 --- a/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java +++ b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java @@ -170,9 +170,9 @@ public class SystemUIToast implements ToastPlugin.Toast { } final View toastView = mLayoutInflater.inflate( - com.android.systemui.R.layout.text_toast, null); - final TextView textView = toastView.findViewById(com.android.systemui.R.id.text); - final ImageView iconView = toastView.findViewById(com.android.systemui.R.id.icon); + com.android.systemui.res.R.layout.text_toast, null); + final TextView textView = toastView.findViewById(com.android.systemui.res.R.id.text); + final ImageView iconView = toastView.findViewById(com.android.systemui.res.R.id.icon); textView.setText(mText); ApplicationInfo appInfo = null; @@ -189,7 +189,7 @@ public class SystemUIToast implements ToastPlugin.Toast { textView.setMaxLines(Integer.MAX_VALUE); // no app icon - toastView.findViewById(com.android.systemui.R.id.icon).setVisibility(View.GONE); + toastView.findViewById(com.android.systemui.res.R.id.icon).setVisibility(View.GONE); } else { Drawable icon = getBadgedIcon(mContext, mPackageName, mUserId); if (icon == null) { diff --git a/packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt b/packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt index 8187956962b6a76e6da4458eae2d9494b6ed5816..8b5fd0b33658e5efb74c0876c90374fd4620f553 100644 --- a/packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt +++ b/packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt @@ -31,8 +31,8 @@ class ToastDefaultAnimation { companion object { // total duration shouldn't exceed NotificationManagerService's delay for "in" animation fun toastIn(view: View): AnimatorSet? { - val icon: View? = view.findViewById(com.android.systemui.R.id.icon) - val text: View? = view.findViewById(com.android.systemui.R.id.text) + val icon: View? = view.findViewById(com.android.systemui.res.R.id.icon) + val text: View? = view.findViewById(com.android.systemui.res.R.id.text) if (icon == null || text == null) { return null } @@ -69,8 +69,8 @@ class ToastDefaultAnimation { fun toastOut(view: View): AnimatorSet? { // total duration shouldn't exceed NotificationManagerService's delay for "out" anim - val icon: View? = view.findViewById(com.android.systemui.R.id.icon) - val text: View? = view.findViewById(com.android.systemui.R.id.text) + val icon: View? = view.findViewById(com.android.systemui.res.R.id.icon) + val text: View? = view.findViewById(com.android.systemui.res.R.id.text) if (icon == null || text == null) { return null } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ClipboardView.java b/packages/SystemUI/src/com/android/systemui/tuner/ClipboardView.java index 919f1505010728926dd626dd45cf8833aa5b69aa..5ae4cdf1f56fce1836d979d585dc66dfdc92c44a 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/ClipboardView.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/ClipboardView.java @@ -24,7 +24,7 @@ import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; -import com.android.systemui.R; +import com.android.systemui.res.R; public class ClipboardView extends ImageView implements OnPrimaryClipChangedListener { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java index 246488600eef67809284a78f59e9dd4605203e9d..a43524a15b6769ba5e5ce2394057a1c1fc85e969 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java @@ -29,7 +29,7 @@ import androidx.preference.SwitchPreference; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeAvailabilityTracker; import com.android.systemui.demomode.DemoModeController; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java index 4dbceac9b3a7f3d4b1e4ef1e3e017d627ef004b5..771a8c8a0cfd80c00a9a2ffa5d9148c60acdf9e0 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java @@ -41,7 +41,7 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.IntentButtonProvider.IntentButton; import com.android.systemui.statusbar.ScalingDrawableWrapper; import com.android.systemui.statusbar.phone.ExpandableIndicator; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java b/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java index 87d2063d18e982a771baf164e7bb81500007d9b2..ec6f86297baeb39ca0cb772db905fe42a1dc9693 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java @@ -46,7 +46,7 @@ import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceChangeListener; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.tuner.TunerService.Tunable; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/OtherPrefs.java b/packages/SystemUI/src/com/android/systemui/tuner/OtherPrefs.java index 7239c8a22a31881d95a23d89449048d9f67d0ed2..32b1b2607323ca5a9517ac7288b4c9b57c71c2b7 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/OtherPrefs.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/OtherPrefs.java @@ -18,7 +18,7 @@ import android.os.Bundle; import androidx.preference.PreferenceFragment; -import com.android.systemui.R; +import com.android.systemui.res.R; public class OtherPrefs extends PreferenceFragment { @Override diff --git a/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java index 49995155f251db81653623e8942735525b67b5e1..7635a84539ca8b27911391621b11c6a751f210b4 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java @@ -36,7 +36,7 @@ import androidx.preference.SwitchPreference; import com.android.internal.util.ArrayUtils; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.PluginEnablerImpl; import com.android.systemui.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginActionManager; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/PowerNotificationControlsFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/PowerNotificationControlsFragment.java index 80f9de6b4ba56f628200e649b97aa2c36257fd20..ce1a2e9b329c6fa68fe59d2a7ae2c50dfc2d2fa2 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/PowerNotificationControlsFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/PowerNotificationControlsFragment.java @@ -27,7 +27,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; public class PowerNotificationControlsFragment extends Fragment { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/RadioListPreference.java b/packages/SystemUI/src/com/android/systemui/tuner/RadioListPreference.java index 24758908cff2c5cfc979fd115602e81d0eb6461c..20ce23077cddabfbb7f5809ac0bd0531cd08795d 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/RadioListPreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/RadioListPreference.java @@ -29,7 +29,7 @@ import androidx.preference.PreferenceScreen; import com.android.settingslib.Utils; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.fragments.FragmentService; import java.util.Objects; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/SelectablePreference.java b/packages/SystemUI/src/com/android/systemui/tuner/SelectablePreference.java index 0be793eefa188570735e977e6ee2de6fd54483c1..386b7bb1e04902bb70c847828df84641bd522438 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/SelectablePreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/SelectablePreference.java @@ -27,7 +27,7 @@ public class SelectablePreference extends CheckBoxPreference { public SelectablePreference(Context context) { super(context); - setWidgetLayoutResource(com.android.systemui.R.layout.preference_widget_radiobutton); + setWidgetLayoutResource(com.android.systemui.res.R.layout.preference_widget_radiobutton); setSelectable(true); mSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, context.getResources().getDisplayMetrics()); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ShortcutPicker.java b/packages/SystemUI/src/com/android/systemui/tuner/ShortcutPicker.java index 11e1f278a2719a18dd368963311eecd43ab277c7..5b340527dd3fc58c86517c36fec2ce844e8a8d32 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/ShortcutPicker.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/ShortcutPicker.java @@ -30,7 +30,7 @@ import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceViewHolder; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.tuner.ShortcutParser.Shortcut; import com.android.systemui.tuner.TunerService.Tunable; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java index ecaf7921a4df74ea4a71c3c0686859d2514e402b..14d7281e5b9923e8ec92fe83de88a8913b29220a 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java @@ -30,7 +30,7 @@ import androidx.preference.PreferenceFragment; import androidx.preference.PreferenceScreen; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.fragments.FragmentService; import com.android.systemui.util.settings.GlobalSettings; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java index 989462a9fd34f04bfd0ea4d8a89c19f732e96fff..9cc526a1c0f3103fefe20f4e6023da27a1ad8822 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java @@ -33,7 +33,7 @@ import androidx.preference.PreferenceFragment; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.shared.plugins.PluginPrefs; public class TunerFragment extends PreferenceFragment { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java index ccc0a79d2cfea871b84f7eeede3a5bdfaaf26f09..8087a8755a6ec3535afd11338b2d8d4ffa970bd8 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java @@ -38,7 +38,7 @@ import androidx.annotation.WorkerThread; import com.android.internal.util.ArrayUtils; import com.android.systemui.DejankUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.demomode.DemoModeController; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java index 71355bbb23e1a9bcad4349692f632083e947751c..1c441b39cc641fc9b23222db87c8dec60536ed7a 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -9,7 +9,7 @@ import androidx.preference.SwitchPreference; import com.android.internal.logging.MetricsLogger; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.tuner.TunerService.Tunable; public class TunerSwitch extends SwitchPreference implements Tunable { diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java index 3a7ac9c8a8bd06a4603d911080f37f2754d5fd0a..c1eb5b6a92df33b07749dfd6fab127f7d3d77419 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java @@ -30,7 +30,7 @@ import android.view.WindowManager; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbAudioWarningDialogMessage.java b/packages/SystemUI/src/com/android/systemui/usb/UsbAudioWarningDialogMessage.java index e06353b3aad3f42b2f222b545f478d0c7d2fb2fd..7e9c5e9546cdc3c6b37f01ce015680cfdc2b69bf 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbAudioWarningDialogMessage.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbAudioWarningDialogMessage.java @@ -22,7 +22,7 @@ import android.annotation.IntDef; import android.content.res.Resources; import android.util.Log; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.lang.annotation.Retention; diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java index 534049b65cb407d2d91046baba767f9c4893a675..7ede21a025c286a10c5a1f066527695845316f50 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbContaminantActivity.java @@ -29,7 +29,7 @@ import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Activity that alerts the user when contaminant is detected on USB port. diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java index 941cd7783ed0006cc511daefec3978441d7c0d54..e7e907a90d3484c51318986f31338f149caa4177 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java @@ -38,7 +38,7 @@ import android.widget.CheckBox; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java index 2871263dbb1e96c792a9196844d0b1708652f444..ea871be7093628348d80424292564b25ad3a180f 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java @@ -34,7 +34,7 @@ import android.view.WindowManager; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDialogActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDialogActivity.java index 55dec5fbe3441dd4ee35e720980b7377e111f6c6..44dee7234bd9b178186725b160c82021511a95fe 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDialogActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDialogActivity.java @@ -29,7 +29,7 @@ import android.widget.TextView; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; abstract class UsbDialogActivity extends AlertActivity implements DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener { diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java index 02a763794a6c0361a41da23b90817372ae7e95ae..080a9dc64ac86fe586ac527f2cfba6ccac758d1a 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java @@ -38,7 +38,7 @@ import android.widget.CheckBox; import com.android.internal.app.ResolverActivity; import com.android.internal.app.chooser.TargetInfo; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.Iterator; diff --git a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java index 08b0c647628cad006dffdc9132028b5f3ec7b597..562feb2e7b4556303500b7eb7e8d7b86ce716c6c 100644 --- a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java @@ -33,7 +33,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; import com.android.settingslib.users.CreateUserDialogController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.ActivityStarter; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherFullscreenDialog.kt b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherFullscreenDialog.kt index 5ad963035e36f37b5d8b380e9b36f3a00f9274bd..6df02e86fb61b7997306a2b23d4000c52ca041f2 100644 --- a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherFullscreenDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherFullscreenDialog.kt @@ -22,7 +22,7 @@ import android.view.LayoutInflater import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.WindowInsets import android.view.WindowInsetsController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.classifier.FalsingCollector import com.android.systemui.statusbar.phone.SystemUIDialog import com.android.systemui.user.ui.binder.UserSwitcherViewBinder diff --git a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt index ee84580ac4ecbdad2d6e04199e60367348147897..1fa48723d0a6a7ab73a4e616e52d245870ad3506 100644 --- a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt +++ b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt @@ -23,7 +23,7 @@ import android.view.View.MeasureSpec import android.widget.ListAdapter import android.widget.ListPopupWindow import android.widget.ListView -import com.android.systemui.R +import com.android.systemui.res.R /** * Popup menu for displaying items on the fullscreen user switcher. diff --git a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt index 8cfa55570723b03e8fa6f14f4627cd4b03590f25..f40454915ee31574f7d61e36be1389598f32e749 100644 --- a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt @@ -23,7 +23,7 @@ import android.os.UserHandle import android.os.UserManager import android.provider.Settings import androidx.annotation.VisibleForTesting -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt index a3e648d4fb1b18e0ed585ce28cd2707a0f569b39..e4894992b49ff5cb416707e3816aed4dac8c6750 100644 --- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt @@ -37,7 +37,7 @@ import com.android.internal.logging.UiEventLogger import com.android.internal.util.UserIcons import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SystemUISecondaryUserService import com.android.systemui.animation.Expandable import com.android.systemui.broadcast.BroadcastDispatcher diff --git a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/data/LegacyUserDataHelper.kt b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/data/LegacyUserDataHelper.kt index 03a7470a3fe6025a8fccc6b91ec497446008e54e..93573fa42c96d6cb84a05f12e225f626f9f8d510 100644 --- a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/data/LegacyUserDataHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/data/LegacyUserDataHelper.kt @@ -23,7 +23,7 @@ import android.graphics.Bitmap import android.os.UserManager import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin import com.android.settingslib.RestrictedLockUtilsInternal -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.user.data.source.UserRecord import com.android.systemui.user.shared.model.UserActionModel diff --git a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt index 1ac86ce6162b5db97317f14940afa6f2d86e4a9f..8957fe1ee2147fab26e91cae1e9a07f7298c0bc2 100644 --- a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt @@ -20,7 +20,7 @@ package com.android.systemui.user.legacyhelper.ui import android.content.Context import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.user.data.source.UserRecord /** diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserSwitcherViewBinder.kt b/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserSwitcherViewBinder.kt index 59f2cdb745cadfc68a7f832d1ff48f4aeaba2332..c578702910555b6875f2a3534fa56ae7f5c0fbf1 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserSwitcherViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserSwitcherViewBinder.kt @@ -34,7 +34,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.Gefingerpoken -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.classifier.FalsingCollector import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.user.UserSwitcherPopupMenu diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserViewBinder.kt b/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserViewBinder.kt index e78807e675b3d7e4c8021c15096c2a622aef8390..8fc1b2515c6a9a995ac61fbd4d7af9cb2b0f6dd2 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/binder/UserViewBinder.kt @@ -25,7 +25,7 @@ import android.view.View import android.widget.ImageView import androidx.core.content.res.ResourcesCompat import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.ui.binder.TextViewBinder import com.android.systemui.user.ui.viewmodel.UserViewModel diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt index fdf13be13a9babf95af67699b04d6fd221e7011d..b88f9fb3cee2a16c1c21c6c9a14061246669833e 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt @@ -82,7 +82,7 @@ class AddUserDialog( context.getString(R.string.user_add_user_message_short) + if (showEphemeralMessage) { context.getString( - com.android.systemui.R.string.user_add_user_message_guest_remove + com.android.systemui.res.R.string.user_add_user_message_guest_remove ) } else { "" diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitchDialog.kt b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitchDialog.kt index b8ae257aaac543ba985038bcbf97c6aac8b64d2a..40582150a21db80e724d118d3b23268edfd41fd1 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitchDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitchDialog.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.provider.Settings import android.view.LayoutInflater import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt index aeed5fc5928129185adcd822f504051c11cdf2b2..61952baba7b1d35ced117478304fdb86f14283b7 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt @@ -17,7 +17,7 @@ package com.android.systemui.user.ui.viewmodel -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text import com.android.systemui.common.ui.drawable.CircularDrawable import com.android.systemui.dagger.SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/util/AlphaTintDrawableWrapper.java b/packages/SystemUI/src/com/android/systemui/util/AlphaTintDrawableWrapper.java index 516efc06386a6846e86b545175489dc1ca8ce1fc..947746c94198e2a7e137ae78292bd056e9caa266 100644 --- a/packages/SystemUI/src/com/android/systemui/util/AlphaTintDrawableWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/util/AlphaTintDrawableWrapper.java @@ -28,7 +28,7 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; diff --git a/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt index 8b90547f7bdb1e670a3682fb9d58764c22b74550..ef9340a332dccd59c9732205c39d9b0f294ce230 100644 --- a/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt +++ b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt @@ -18,7 +18,7 @@ package com.android.systemui.util import android.content.Context import android.util.AttributeSet -import com.android.systemui.R +import com.android.systemui.res.R class DelayableMarqueeTextView @JvmOverloads constructor( context: Context, diff --git a/packages/SystemUI/src/com/android/systemui/util/LargeScreenUtils.kt b/packages/SystemUI/src/com/android/systemui/util/LargeScreenUtils.kt index 9b241a72b708755a499588813f6242bad2f0b99c..bbfdaa368a03f8ef0671b76cdbd8468783843afb 100644 --- a/packages/SystemUI/src/com/android/systemui/util/LargeScreenUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/util/LargeScreenUtils.kt @@ -1,7 +1,7 @@ package com.android.systemui.util import android.content.res.Resources -import com.android.systemui.R +import com.android.systemui.res.R object LargeScreenUtils { /** diff --git a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java index 904a98b5e54de88991f09a4ea1b946f6159ea9a3..8a6f79dc93b3a6b7434a2ec7b5532d097bc910d4 100644 --- a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java +++ b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java @@ -24,7 +24,7 @@ import android.provider.Settings; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.wm.shell.pip.tv.TvPipNotificationController; import java.util.Arrays; diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java index e0daa0706b865fd52da390895741bcb5f1100f01..760fe6a96fdae4a15393907fc2fc07c5c965a2cb 100644 --- a/packages/SystemUI/src/com/android/systemui/util/Utils.java +++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java @@ -23,7 +23,7 @@ import android.provider.Settings; import android.view.DisplayCutout; import com.android.internal.policy.SystemBarUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.settings.DisplayTracker; import com.android.systemui.shared.system.QuickStepContract; diff --git a/packages/SystemUI/src/com/android/systemui/util/animation/UniqueObjectHostView.kt b/packages/SystemUI/src/com/android/systemui/util/animation/UniqueObjectHostView.kt index 47a2d35e57f511bcb68479c56ca7e17e0da5eada..577d18eaea84c37e81fa87d5c292e398d74a3910 100644 --- a/packages/SystemUI/src/com/android/systemui/util/animation/UniqueObjectHostView.kt +++ b/packages/SystemUI/src/com/android/systemui/util/animation/UniqueObjectHostView.kt @@ -21,7 +21,7 @@ import android.content.Context import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import com.android.systemui.R +import com.android.systemui.res.R /** * A special view that is designed to host a single "unique object". The unique object is diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java index 58cffa761a66efddcf00ff7c100b6f3d6cc42855..de392d3f444fd002371d97cd27e4ecbd301c3060 100644 --- a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java @@ -48,7 +48,7 @@ import android.view.View; import com.android.internal.logging.MetricsLogger; import com.android.systemui.CoreStartable; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/util/sensors/SensorModule.java b/packages/SystemUI/src/com/android/systemui/util/sensors/SensorModule.java index 96980b85e410216e52073de5ac9669547546c3b6..7934ab1c197e65b96da2fe733d7ca87b2af6622b 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/SensorModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/SensorModule.java @@ -24,7 +24,7 @@ import android.util.Log; import androidx.annotation.NonNull; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.util.concurrency.DelayableExecutor; diff --git a/packages/SystemUI/src/com/android/systemui/util/service/dagger/ObservableServiceModule.java b/packages/SystemUI/src/com/android/systemui/util/service/dagger/ObservableServiceModule.java index c62c95755ce8e7dd70fd9f4463e1e571d34eff0e..bcf34f833d32a2044d8ab52fb33c7092c7d4cb19 100644 --- a/packages/SystemUI/src/com/android/systemui/util/service/dagger/ObservableServiceModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/service/dagger/ObservableServiceModule.java @@ -19,7 +19,7 @@ package com.android.systemui.util.service.dagger; import android.content.res.Resources; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import javax.inject.Named; diff --git a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java index ae23ca64e31e588fe10610690c6fc685942c793f..ac41a509213ddfe701e426fc063d5f8db5bdd50e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java +++ b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java @@ -26,7 +26,7 @@ import androidx.core.view.ViewCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat; import com.android.keyguard.AlphaOptimizedImageButton; -import com.android.systemui.R; +import com.android.systemui.res.R; /** Toggle button in Volume Dialog for controlling system captions state */ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { diff --git a/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java index fb5a71c0b06fe2fe9300b1ab62d095e8356f1c17..eb0bf46159dd17a4be90414c88c9b0bfb36b907e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java @@ -35,7 +35,7 @@ import android.view.WindowManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.messages.nano.SystemMessageProto; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.util.NotificationChannels; diff --git a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java index 89bc75760b4bf5a2d96c353474364bdeba3a5f8d..d9593bd56f007a5e9d551a9d4405d60a15b4b645 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java +++ b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java @@ -25,7 +25,7 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.Objects; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 9cc3cdbf5c340e7f0e4198bea4fbb35640d53b6b..ea4d31bca035794026e80f1ab92bc09c87378755 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -64,7 +64,7 @@ import androidx.lifecycle.Observer; import com.android.internal.annotations.GuardedBy; import com.android.settingslib.volume.MediaSessions; import com.android.systemui.Dumpable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index dcc0525bb4362aaac95dc01b1f6b62dc564a9ed5..727d649c811811c6b730300e38664f3e4881a555 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -120,7 +120,7 @@ import com.android.internal.view.RotationPolicy; import com.android.settingslib.Utils; import com.android.systemui.Dumpable; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.media.dialog.MediaOutputDialogFactory; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java index 96936e3eb5f04f01bd94d177094fd0f3e8cf17cb..605038766651dc98f312425b0a74d97eb7d7fb82 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java @@ -51,7 +51,7 @@ import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.media.MediaOutputConstants; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.phone.SystemUIDialog; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelSlicesAdapter.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelSlicesAdapter.java index 23714021a2cc10e24870886bd1d493bc4efc95ca..d7669d45cb646ff98e305ee9a879282a702ab714 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelSlicesAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelSlicesAdapter.java @@ -33,7 +33,7 @@ import androidx.slice.Slice; import androidx.slice.SliceItem; import androidx.slice.widget.SliceView; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.ArrayList; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeToolTipView.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeToolTipView.java index 1de55856f942858b36f3a1d8a40b4099f00bc3d7..2143771ef696dabf67d12282eb513fbedf80f381 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeToolTipView.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeToolTipView.java @@ -28,7 +28,7 @@ import android.widget.LinearLayout; import androidx.core.content.ContextCompat; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.recents.TriangleShape; /** diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java index 0b3521b048c4fe796899d6e7fd51ab466b72140c..3451ae0a9be342658c8d54366c13fdf1bbb448e3 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java @@ -22,7 +22,7 @@ import android.os.Handler; import android.util.Log; import com.android.systemui.CoreStartable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.qs.tiles.DndTile; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java index de9b5ee2e19af0e80aa20b7a6efd6dda46dc65b5..0e6df6b11e7b1a1b39b435811a81073c65dde66a 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java @@ -30,7 +30,7 @@ import android.service.quickaccesswallet.QuickAccessWalletClient; import android.service.quickaccesswallet.QuickAccessWalletClientImpl; import android.util.Log; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java index e5c55b0a5e7ff0f36e51039cc1ef3ba7620db6e5..e90d9e281a9b539f1b75502e8f7c3d5288bdcab7 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java @@ -27,7 +27,7 @@ import androidx.annotation.ColorInt; import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.RecyclerView; -import com.android.systemui.R; +import com.android.systemui.res.R; final class DotIndicatorDecoration extends RecyclerView.ItemDecoration { private final int mUnselectedRadius; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java index 2491e2bdd623e79578d34f1676c16cb8f34269ce..750b6f95d52e0b6f9df9592ff6e812600eeda551 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java @@ -40,7 +40,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java index b7c8b4900e87403995427bfe2f25177d7a99b5f4..02a764c97126fc7cfdc89d9c8fd7288c6f887ca0 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java @@ -38,7 +38,7 @@ import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; -import com.android.systemui.R; +import com.android.systemui.res.R; import java.util.Collections; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java index fc1adc37d09be7bb9527522950334dd090604580..7b50a6568da93699641aebc7b94ca6207acf4a35 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java @@ -25,7 +25,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.cardview.widget.CardView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** Customized card view of the wallet card carousel. */ public class WalletCardView extends CardView { diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java index 3197976456e3867a110c7cbb34f06b854c67b34f..c33a8053133e75ab9d09e6329c545b776da9c613 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java @@ -22,7 +22,7 @@ import android.widget.ImageView; import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * View holder for the quick access wallet card. diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java index 6fd0a4db5a142557e1d34681055c7b3ae6c95109..d21ccc9502cfe94f227d3f59bb27168a43a6d046 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java @@ -43,7 +43,7 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java index cab47a3c4b4bb3fe1c81ffc8af81a77d62df72c4..f498520f219b298f9a24924d23e134c5da24b903 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java @@ -40,7 +40,7 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.Utils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingActivity.java index 1c7a9b5e868120c07f5b0db782e4b648834c9634..f8ffab094e0fd566f9203f8d00efd2ce8db80f94 100644 --- a/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingActivity.java +++ b/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingActivity.java @@ -43,7 +43,7 @@ import android.widget.Toast; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Alerts the user of an untrusted network when enabling wireless debugging. diff --git a/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingSecondaryUserActivity.java b/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingSecondaryUserActivity.java index f9f14e0bc362291c7bd5a60f51eae04225f2ec0a..972d3c01f75fe297a5cf36318da1eb9ce103b5d9 100644 --- a/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingSecondaryUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/wifi/WifiDebuggingSecondaryUserActivity.java @@ -30,7 +30,7 @@ import android.os.Bundle; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; -import com.android.systemui.R; +import com.android.systemui.res.R; /** * Alerts the user that wireless debugging cannot be enabled by a secondary user. diff --git a/packages/SystemUI/tests/Android.bp b/packages/SystemUI/tests/Android.bp index 3c418ed49adcf9c29cad886f413d273b782d120e..ec0414e94eba0656485cddd992c52ad407dcfe2d 100644 --- a/packages/SystemUI/tests/Android.bp +++ b/packages/SystemUI/tests/Android.bp @@ -20,6 +20,7 @@ package { android_test { name: "SystemUITests", + use_resource_processor: true, dxflags: ["--multi-dex"], platform_apis: true, diff --git a/packages/SystemUI/tests/robolectric/src/com/android/systemui/robotests/SysuiResourceLoadingTest.java b/packages/SystemUI/tests/robolectric/src/com/android/systemui/robotests/SysuiResourceLoadingTest.java index 188dff21efa485470bb0b5e2ae7abaca894b8f9f..205168ea0b7dbd7ca2cd2cb8d6fbd80e57c7a678 100644 --- a/packages/SystemUI/tests/robolectric/src/com/android/systemui/robotests/SysuiResourceLoadingTest.java +++ b/packages/SystemUI/tests/robolectric/src/com/android/systemui/robotests/SysuiResourceLoadingTest.java @@ -27,7 +27,7 @@ import org.junit.runner.RunWith; public class SysuiResourceLoadingTest extends SysuiRoboBase { @Test public void testResources() { - assertThat(getContext().getString(com.android.systemui.R.string.app_label)) + assertThat(getContext().getString(com.android.systemui.res.R.string.app_label)) .isEqualTo("System UI"); assertThat(getContext().getString(com.android.systemui.tests.R.string.test_content)) .isNotEmpty(); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java index 9016220b40cfb0e0e41b93ac10cd3eeb56ee29f8..9ce9bd6865a40fe6901e7a015cd838bbb9a244e6 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java @@ -55,7 +55,7 @@ import android.testing.AndroidTestingRunner; import android.text.TextUtils; import com.android.keyguard.logging.CarrierTextManagerLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.LogBufferHelperKt; import com.android.systemui.keyguard.WakefulnessLifecycle; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/FaceWakeUpTriggersConfigTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/FaceWakeUpTriggersConfigTest.kt index 6c5620d42abb2ce3ad830011e69ed2231fb1ec90..94c34a525547d70b98de67dfa2af1378f9704550 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/FaceWakeUpTriggersConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/FaceWakeUpTriggersConfigTest.kt @@ -67,7 +67,7 @@ class FaceWakeUpTriggersConfigTest : SysuiTestCase() { private fun createFaceWakeUpTriggersConfig(wakeUpTriggers: IntArray): FaceWakeUpTriggersConfig { overrideResource( - com.android.systemui.R.array.config_face_auth_wake_up_triggers, + com.android.systemui.res.R.array.config_face_auth_wake_up_triggers, wakeUpTriggers ) diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java index c894d914bfa3cd9bf9975b969046fd21d1594013..42f65f6f53b4d55380db94ef211734629e831422 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java @@ -37,7 +37,7 @@ import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardAbsKeyInputView.KeyDownListener; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.classifier.FalsingCollectorFake; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java index 00f88bfa2abb5eac91d0eba983f6f85da972554f..8401e6734d61daed92961c7d14ed0df33626ec0c 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java @@ -27,7 +27,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java index 3d8719656a1e03019290f5506b884b62ee33c94c..00a2efe7f8382b0a8f7cd5e2809e6827adcb6eec 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java @@ -35,7 +35,7 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; @@ -148,7 +148,7 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { when(mView.getResources()).thenReturn(mResources); when(mResources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)) .thenReturn(100); - when(mResources.getDimensionPixelSize(R.dimen.keyguard_large_clock_top_margin)) + when(mResources.getDimensionPixelSize(com.android.systemui.customization.R.dimen.keyguard_large_clock_top_margin)) .thenReturn(-200); when(mResources.getInteger(R.integer.keyguard_date_weather_view_invisibility)) .thenReturn(INVISIBLE); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java index 65c677ea7e5ae0ff2c6f618db18e0102cf4cadb4..e54b1845ce6b57d3a29035f1bd6d56e43cb40c79 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java @@ -40,7 +40,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.ClockController; import com.android.systemui.plugins.ClockFaceController; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt index ee67348c9b93b6c87e098434bb94be18d6fdb6bf..f943acd9180ea903e53e6112bdf5e16f2e166b0e 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt index 0ef9f45330154ecb3b55d07937077ee40ad1a2f3..e09009389f8bee8ae23e80b92dce104589f7b772 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java index 2b90e7c66e8dfd357b4943b34adfd9832155870b..8322b37151ded35a497dcb1b7f1880ccb98f975b 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java @@ -31,7 +31,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.RoboPilotTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingCollector; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt index a9f044ccd144ff5661f185105b725431aabf0ade..2f08804d8c051ee00e0de4f94f2e465f172b46dd 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt @@ -25,7 +25,7 @@ import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils import com.android.keyguard.KeyguardSecurityModel.SecurityMode -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java index 62906f3656c7f2d224ae53f83aa955bdb9be4f6b..f3a1b68a87ae0bc336081a4faebc3b2a97a39954 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java @@ -32,7 +32,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardDisplayManager.KeyguardPresentation; import com.android.keyguard.dagger.KeyguardStatusViewComponent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.After; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index 929604bc81b6811366f3bdc2ca00f08ea75a56ee..f6649bdc9d3fbfb7545125b86d701b5814152871 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -36,7 +36,7 @@ import com.android.internal.logging.UiEventLogger import com.android.internal.widget.LockPatternUtils import com.android.keyguard.KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback import com.android.keyguard.KeyguardSecurityModel.SecurityMode -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index 3e330d65329e64926b1fb4f787a033d1c91f8e10..aad11d90f5a43d320d722b1b1ff300e4207131cc 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -56,7 +56,7 @@ import androidx.constraintlayout.widget.ConstraintSet; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.RoboPilotTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingA11yDelegate; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java index 19bc8186eee5518813449f5d219c805cdebdcfd9..b02b1f9df9fbcba821f47d630b4c7b5f2ff5335b 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java @@ -35,7 +35,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.RoboPilotTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt index 4db5f35ca07d8d7e7e45fb5408d3b079f4d26e2a..d0bb5a9993271a5e9354dd5900e4eb15a76c9848 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt index 47ff3b90e2e278072168613ecf100f867352c4d8..59cd26cc6b9be0653fc8e61d7d0a0f6933e7c42f 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java index 77302ce30f090686f14dfab2110a10889580b1d4..6654a6ce816b57e64b80e022aa8f5e220e794f5c 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java @@ -28,7 +28,7 @@ import androidx.slice.SliceSpecs; import androidx.slice.builders.ListBuilder; import androidx.slice.widget.RowContent; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.KeyguardSliceProvider; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt index 210f3cb65ac0f21c85fc10c57627ced8cb899b2f..86439e557f8b4da0a1c48375599461aaf5b95a52 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt @@ -6,7 +6,7 @@ import android.testing.TestableLooper.RunWithLooper import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.children import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt index bb03f288147ea566d6f0ef7814bd2081e4689650..3afca5933e5d0334e1c662c625756e178c080e14 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState.KEYGUARD diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 1d7c32803248711777144f2315e6d94f2338c22f..47be236b1272515d05d0c9c04cc11e10cce97a79 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -341,7 +341,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { when(mUserTracker.getUserId()).thenReturn(mCurrentUserId); mContext.getOrCreateTestableResources().addOverride( - com.android.systemui.R.integer.config_face_auth_supported_posture, + com.android.systemui.res.R.integer.config_face_auth_supported_posture, DEVICE_POSTURE_UNKNOWN); mFaceWakeUpTriggersConfig = new FaceWakeUpTriggersConfig( mContext.getResources(), @@ -349,7 +349,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mDumpManager ); - mContext.getOrCreateTestableResources().addOverride(com.android.systemui + mContext.getOrCreateTestableResources().addOverride(com.android.systemui.res .R.array.config_fingerprint_listen_on_occluding_activity_packages, new String[]{ PKG_ALLOWING_FP_LISTEN_ON_OCCLUDING_ACTIVITY }); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUserSwitcherAnchorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUserSwitcherAnchorTest.kt index 08185af1238e36c4f10998a0236eb2500f5c8cc4..c6740535d903527dcd0494319370e842e60d9c5f 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUserSwitcherAnchorTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUserSwitcherAnchorTest.kt @@ -18,7 +18,7 @@ package com.android.keyguard import android.testing.AndroidTestingRunner import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java index 0e4b3c9b6a233002ec0e354a1bbcceab605e246a..21a28222ccf4242e0fb6c8d4e3115d47f2fba2ff 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java @@ -39,7 +39,7 @@ import android.view.View; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.AuthRippleController; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/PinShapeHintingViewTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/PinShapeHintingViewTest.kt index 42e12df431c5552ceb9f8c7879a4954a6479b3fc..835c9ff5138147d7e6dd74b4457a8ab38c134f6e 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/PinShapeHintingViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/PinShapeHintingViewTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.LayoutInflater import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/keyguard/PinShapeNonHintingViewTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/PinShapeNonHintingViewTest.kt index c04fd39168de95c455caec724a7d21742198c236..d431731b710e2baf782e95c9751c12fa74284bc0 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/PinShapeNonHintingViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/PinShapeNonHintingViewTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.LayoutInflater import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java index d1573c3cac76f408433e9aa30481ba3ef9143bca..532c59aab18b3742982ebfd588dcfb32c6263896 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java @@ -32,6 +32,7 @@ import android.test.suitebuilder.annotation.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.settingslib.R; import com.android.settingslib.graph.BatteryMeterDrawableBase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java index f81ef10e6b1408cbcdf3a6ca5f1ef841fc211de1..af88df79be87ee2736a1a2740dfaec6fec2ed43f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java @@ -78,6 +78,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; +import com.android.systemui.res.R; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.biometrics.AuthController; import com.android.systemui.decor.CornerDecorProvider; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java index 79dc057e4f284db6280489d14f5e9fb8a7667129..8fd2bd6ad76218745d592d21d1a56c84242c81c5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java @@ -71,7 +71,7 @@ import android.widget.ImageView; import androidx.test.filters.SmallTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.After; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java index 09d0eebd510df02048f14c37ab18dd39cdb8e0b9..22ebd995b472f1add3c083e214258d93f5d47ea5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java @@ -46,7 +46,7 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.LargeTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.model.SysUiState; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index 39fe6fbe78fb121ff757d1e020a3c761118a2f12..187f0986353e6defc98bbb310882c4c524280659 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -88,7 +88,7 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.LargeTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.model.SysUiState; import com.android.systemui.settings.FakeDisplayTracker; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java index 91c47480ae45665c3575f6922d3eec63e486d507..95e21cf6138afb0117e48ff1eecaba62d6eb8b32 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java @@ -59,7 +59,7 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapterTest.java index afd5f77f7a4c5905354b0995328f94925be0f26a..403385f21db06184cd259d5491542cae19a1043e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapterTest.java @@ -28,7 +28,7 @@ import android.view.View; import androidx.test.filters.SmallTest; import com.android.internal.accessibility.dialog.AccessibilityTarget; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.accessibility.floatingmenu.AccessibilityTargetAdapter.ViewHolder; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AnnotationLinkSpanTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AnnotationLinkSpanTest.java index 46c930f9a5eb557c00f9c91c3d317a74ea4ee540..43ebeee3f597f42730e6f118a116417eb926b349 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AnnotationLinkSpanTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AnnotationLinkSpanTest.java @@ -26,7 +26,7 @@ import android.view.View; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipViewTest.java index 42b610a18bc0306dd1b4f34d7a2d9149f8c2e723..9b819479ec709d207fc6ba37e0317d6a51f08482 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuEduTooltipViewTest.java @@ -26,7 +26,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java index 1b0a10e680629573cf37958279529249b0ac1964..5764839d160d6a7d2d2be06eb7b5ccc295f561d1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuItemAccessibilityDelegateTest.java @@ -37,7 +37,7 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.settings.SecureSettings; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt index 7b99314692b4ac50f6b1261253bb4fd9177dceef..83bee932fc5980f5df44a77d822e2414edbfd2ae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt @@ -24,7 +24,7 @@ import android.view.ViewGroup import android.widget.Button import android.widget.SeekBar import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt index cc004363a0499905f88ee174372562a5b24e7307..59c7e7669b63ccb8d93f7f2c452315a83108ecdb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt @@ -57,7 +57,8 @@ class ActivityLaunchAnimatorTest : SysuiTestCase() { @Before fun setup() { - activityLaunchAnimator = ActivityLaunchAnimator(testLaunchAnimator, testLaunchAnimator) + activityLaunchAnimator = + ActivityLaunchAnimator(testLaunchAnimator, testLaunchAnimator, disableWmTimeout = true) activityLaunchAnimator.callback = callback activityLaunchAnimator.addListener(listener) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/ui/DisplayUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/ui/DisplayUtilsTest.java index dd9683f83c3729bc627c8d08449003d9b1026832..957443a23f93dc0d61d8a9eedd7c365e5fd74e95 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/assist/ui/DisplayUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/assist/ui/DisplayUtilsTest.java @@ -25,7 +25,7 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewControllerTest.java index ec8be8ef3047f28212df49bff7287a0103f9ceb9..323f15a2cb46001fd69758ca58088f7a75032905 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewControllerTest.java @@ -33,7 +33,7 @@ import android.provider.Settings; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewTest.kt index f0f4ca7f3e66864d1fea4784e492fafc712a45f4..4ab7ab450fae47151117d7daaa56f29e1cd49da8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/battery/BatteryMeterViewTest.kt @@ -19,7 +19,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import android.widget.ImageView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.battery.BatteryMeterView.BatteryEstimateFetcher import com.android.systemui.statusbar.policy.BatteryController.EstimateFetchCompletion diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt index 52bf350bfcc89420293f7ab357d1e122168efcc8..215d63508306674c772647766d7a7058bb9b7460 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt @@ -25,7 +25,7 @@ import android.view.ViewGroup.LayoutParams import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.airbnb.lottie.LottieAnimationView -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.ui.binder.Spaghetti.BiometricState import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index 969a01164734bb34e3a9362fe6ff9eafff8a22c6..f899e2fb968a531dc04c24b27e4d9cf865cb41fc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -37,7 +37,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.jank.InteractionJankMonitor import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.data.repository.FakeFingerprintPropertyRepository import com.android.systemui.biometrics.data.repository.FakePromptRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java index d0b3833a24a1fa3bfa8343bca154fe22494747b0..2bc0171939b4e88fd98360b36b7d0b35e1d7a495 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -906,14 +906,14 @@ public class AuthControllerTest extends SysuiTestCase { when(mContextSpy.getResources()).thenReturn(mResources); doReturn(500).when(mResources) - .getDimensionPixelSize(eq(com.android.systemui.R.dimen + .getDimensionPixelSize(eq(com.android.systemui.res.R.dimen .physical_fingerprint_sensor_center_screen_location_y)); mAuthController.onConfigurationChanged(null /* newConfig */); final Point firstFpLocation = mAuthController.getFingerprintSensorLocation(); doReturn(1000).when(mResources) - .getDimensionPixelSize(eq(com.android.systemui.R.dimen + .getDimensionPixelSize(eq(com.android.systemui.res.R.dimen .physical_fingerprint_sensor_center_screen_location_y)); mAuthController.onConfigurationChanged(null /* newConfig */); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java index b0d006353a9829f5c2560056cd709e01e6469e20..3c106789290d03b34d3402284c6ea84104a7f80e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java @@ -30,9 +30,12 @@ import static org.mockito.Mockito.when; import android.app.Notification; import android.app.NotificationManager; import android.hardware.biometrics.BiometricFaceConstants; -import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricSourceType; +import android.hardware.biometrics.BiometricStateListener; +import android.hardware.face.FaceManager; +import android.hardware.fingerprint.FingerprintManager; import android.os.Handler; +import android.os.UserHandle; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -52,6 +55,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.Optional; + @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper(setAsMainLooper = true) @@ -65,11 +70,20 @@ public class BiometricNotificationServiceTest extends SysuiTestCase { KeyguardStateController mKeyguardStateController; @Mock NotificationManager mNotificationManager; + @Mock + Optional<FingerprintReEnrollNotification> mFingerprintReEnrollNotificationOptional; + @Mock + FingerprintReEnrollNotification mFingerprintReEnrollNotification; + @Mock + FingerprintManager mFingerprintManager; + @Mock + FaceManager mFaceManager; private static final String TAG = "BiometricNotificationService"; private static final int FACE_NOTIFICATION_ID = 1; private static final int FINGERPRINT_NOTIFICATION_ID = 2; private static final long SHOW_NOTIFICATION_DELAY_MS = 5_000L; // 5 seconds + private static final int FINGERPRINT_ACQUIRED_RE_ENROLL = 0; private final ArgumentCaptor<Notification> mNotificationArgumentCaptor = ArgumentCaptor.forClass(Notification.class); @@ -77,39 +91,61 @@ public class BiometricNotificationServiceTest extends SysuiTestCase { private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback; private KeyguardStateController.Callback mKeyguardStateControllerCallback; private BiometricNotificationService mBiometricNotificationService; + private BiometricStateListener mFaceStateListener; + private BiometricStateListener mFingerprintStateListener; @Before public void setUp() { + when(mFingerprintReEnrollNotificationOptional.orElse(any())) + .thenReturn(mFingerprintReEnrollNotification); + when(mFingerprintReEnrollNotification.isFingerprintReEnrollRequired( + FINGERPRINT_ACQUIRED_RE_ENROLL)).thenReturn(true); + mLooper = TestableLooper.get(this); Handler handler = new Handler(mLooper.getLooper()); BiometricNotificationDialogFactory dialogFactory = new BiometricNotificationDialogFactory(); BiometricNotificationBroadcastReceiver broadcastReceiver = new BiometricNotificationBroadcastReceiver(mContext, dialogFactory); - mBiometricNotificationService = new BiometricNotificationService(mContext, - mKeyguardUpdateMonitor, mKeyguardStateController, handler, - mNotificationManager, broadcastReceiver); + mBiometricNotificationService = + new BiometricNotificationService(mContext, + mKeyguardUpdateMonitor, mKeyguardStateController, handler, + mNotificationManager, + broadcastReceiver, + mFingerprintReEnrollNotificationOptional, + mFingerprintManager, + mFaceManager); mBiometricNotificationService.start(); ArgumentCaptor<KeyguardUpdateMonitorCallback> updateMonitorCallbackArgumentCaptor = ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class); ArgumentCaptor<KeyguardStateController.Callback> stateControllerCallbackArgumentCaptor = ArgumentCaptor.forClass(KeyguardStateController.Callback.class); + ArgumentCaptor<BiometricStateListener> faceStateListenerArgumentCaptor = + ArgumentCaptor.forClass(BiometricStateListener.class); + ArgumentCaptor<BiometricStateListener> fingerprintStateListenerArgumentCaptor = + ArgumentCaptor.forClass(BiometricStateListener.class); verify(mKeyguardUpdateMonitor).registerCallback( updateMonitorCallbackArgumentCaptor.capture()); verify(mKeyguardStateController).addCallback( stateControllerCallbackArgumentCaptor.capture()); + verify(mFaceManager).registerBiometricStateListener( + faceStateListenerArgumentCaptor.capture()); + verify(mFingerprintManager).registerBiometricStateListener( + fingerprintStateListenerArgumentCaptor.capture()); + mFaceStateListener = faceStateListenerArgumentCaptor.getValue(); + mFingerprintStateListener = fingerprintStateListenerArgumentCaptor.getValue(); mKeyguardUpdateMonitorCallback = updateMonitorCallbackArgumentCaptor.getValue(); mKeyguardStateControllerCallback = stateControllerCallbackArgumentCaptor.getValue(); } @Test - public void testShowFingerprintReEnrollNotification() { + public void testShowFingerprintReEnrollNotification_onAcquiredReEnroll() { when(mKeyguardStateController.isShowing()).thenReturn(false); - mKeyguardUpdateMonitorCallback.onBiometricError( - BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL, + mKeyguardUpdateMonitorCallback.onBiometricHelp( + FINGERPRINT_ACQUIRED_RE_ENROLL, "Testing Fingerprint Re-enrollment" /* errString */, BiometricSourceType.FINGERPRINT ); @@ -127,7 +163,7 @@ public class BiometricNotificationServiceTest extends SysuiTestCase { .isEqualTo(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG); } @Test - public void testShowFaceReEnrollNotification() { + public void testShowFaceReEnrollNotification_onErrorReEnroll() { when(mKeyguardStateController.isShowing()).thenReturn(false); mKeyguardUpdateMonitorCallback.onBiometricError( @@ -149,6 +185,54 @@ public class BiometricNotificationServiceTest extends SysuiTestCase { .isEqualTo(ACTION_SHOW_FACE_REENROLL_DIALOG); } + @Test + public void testCancelReEnrollmentNotification_onFaceEnrollmentStateChange() { + when(mKeyguardStateController.isShowing()).thenReturn(false); + + mKeyguardUpdateMonitorCallback.onBiometricError( + BiometricFaceConstants.BIOMETRIC_ERROR_RE_ENROLL, + "Testing Face Re-enrollment" /* errString */, + BiometricSourceType.FACE + ); + mKeyguardStateControllerCallback.onKeyguardShowingChanged(); + + mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS); + mLooper.processAllMessages(); + + verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID), + mNotificationArgumentCaptor.capture(), any()); + + mFaceStateListener.onEnrollmentsChanged(0 /* userId */, 0 /* sensorId */, + false /* hasEnrollments */); + + verify(mNotificationManager).cancelAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID), + eq(UserHandle.CURRENT)); + } + + @Test + public void testCancelReEnrollmentNotification_onFingerprintEnrollmentStateChange() { + when(mKeyguardStateController.isShowing()).thenReturn(false); + + mKeyguardUpdateMonitorCallback.onBiometricHelp( + FINGERPRINT_ACQUIRED_RE_ENROLL, + "Testing Fingerprint Re-enrollment" /* errString */, + BiometricSourceType.FINGERPRINT + ); + mKeyguardStateControllerCallback.onKeyguardShowingChanged(); + + mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS); + mLooper.processAllMessages(); + + verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FINGERPRINT_NOTIFICATION_ID), + mNotificationArgumentCaptor.capture(), any()); + + mFingerprintStateListener.onEnrollmentsChanged(0 /* userId */, 0 /* sensorId */, + false /* hasEnrollments */); + + verify(mNotificationManager).cancelAsUser(eq(TAG), eq(FINGERPRINT_NOTIFICATION_ID), + eq(UserHandle.CURRENT)); + } + @Test public void testResetFaceUnlockReEnroll_onStart() { when(mKeyguardStateController.isShowing()).thenReturn(false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt index 17928a3da14091b3a04909c24f6aeb06b6a4dc1b..57cf834bfa38b14071cfd8682cc0aa4572eb4a61 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt @@ -52,7 +52,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.airbnb.lottie.LottieAnimationView import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestableContext diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt index c73541972a3cebeda2ef9e36743d6ae36419bf9b..21e614f3db3a59af3f381955976c3d3b07e69f77 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt @@ -37,7 +37,7 @@ import android.view.accessibility.AccessibilityManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ActivityLaunchAnimator diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index b6bc7afe2c7a5762aa43dd3adc76f2b878b50c67..ee3bd0d79ad87bd6e2ce4ed736a10e6be19b0695 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -74,7 +74,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.InstanceIdSequence; import com.android.internal.util.LatencyTracker; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.RoboPilotTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.ActivityLaunchAnimator; @@ -1575,6 +1575,53 @@ public class UdfpsControllerTest extends SysuiTestCase { anyBoolean()); } + + @Test + public void onTouch_withNewTouchDetection_qsDrag_processesTouchWhenAlternateBouncerVisible() + throws RemoteException { + final NormalizedTouchData touchData = new NormalizedTouchData(0, 0f, 0f, 0f, 0f, 0f, 0L, + 0L); + final TouchProcessorResult processorResultMove = + new TouchProcessorResult.ProcessedTouch(InteractionEvent.DOWN, + 1 /* pointerId */, touchData); + + // Enable new touch detection. + when(mFeatureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)).thenReturn(true); + + // Configure UdfpsController to use FingerprintManager as opposed to AlternateTouchProvider. + initUdfpsController(mOpticalProps, false /* hasAlternateTouchProvider */); + + // Configure UdfpsView to accept the ACTION_MOVE event + when(mUdfpsView.isDisplayConfigured()).thenReturn(false); + when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); + + // GIVEN that the alternate bouncer is showing and a11y touch exploration NOT enabled + when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false); + when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(true); + mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, mOpticalProps.sensorId, + BiometricOverlayConstants.REASON_AUTH_KEYGUARD, mUdfpsOverlayControllerCallback); + mFgExecutor.runAllReady(); + + verify(mUdfpsView).setOnTouchListener(mTouchListenerCaptor.capture()); + + // GIVEN swipe down for QS + when(mPrimaryBouncerInteractor.isInTransit()).thenReturn(false); + when(mLockscreenShadeTransitionController.getQSDragProgress()).thenReturn(1f); + + // WHEN ACTION_MOVE is received and touch is within sensor + when(mSinglePointerTouchProcessor.processTouch(any(), anyInt(), any())).thenReturn( + processorResultMove); + MotionEvent moveEvent = MotionEvent.obtain(0, 0, ACTION_MOVE, 0, 0, 0); + mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); + mBiometricExecutor.runAllReady(); + moveEvent.recycle(); + + // THEN the touch is still processed + verify(mFingerprintManager).onPointerDown(anyLong(), anyInt(), anyInt(), + anyFloat(), anyFloat(), anyFloat(), anyFloat(), anyFloat(), anyLong(), anyLong(), + anyBoolean()); + } + @Test public void onAodInterrupt_onAcquiredGood_fingerNoLongerDown() throws RemoteException { // GIVEN UDFPS overlay is showing diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt index 1885f649929933e5337a5f17bedcac1ae1ef085c..17f435b75d5a1e1fe0797c1051988aa76ec3a49d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt @@ -30,8 +30,6 @@ import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.classifier.FalsingCollector -import com.android.systemui.flags.FakeFeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository import com.android.systemui.keyguard.data.repository.FakeTrustRepository @@ -99,7 +97,6 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : context, mKeyguardUpdateMonitor, FakeTrustRepository(), - FakeFeatureFlags().apply { set(Flags.DELAY_BOUNCER, true) }, testScope.backgroundScope, ) mAlternateBouncerInteractor = diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt index 6d4588da775155b4b7ce2f86bbe38aaaecb07535..ebadfc78a079c8e9472e4b4db6e6827ba8ef0d26 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt @@ -25,7 +25,7 @@ import android.view.LayoutInflater import android.view.Surface import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams @@ -67,7 +67,7 @@ class UdfpsViewTest : SysuiTestCase() { @Before fun setup() { - context.setTheme(R.style.Theme_AppCompat) + context.setTheme(androidx.appcompat.R.style.Theme_AppCompat) view = LayoutInflater.from(context).inflate(R.layout.udfps_view, null) as UdfpsView view.animationViewController = animationViewController val sensorBounds = SensorLocationInternal("", SENSOR_X, SENSOR_Y, SENSOR_RADIUS).rect diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java index 6fa19162b1505387214c0f9d1ff87fdaad838811..eee0ed45345dedf7733b9b27c8a1544d92eb4d3c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java @@ -36,7 +36,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.SysuiTestCase; import com.android.systemui.media.dialog.MediaOutputDialogFactory; diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt index 562a8ef512d4f19a504e7af1dd7a701634de79fb..f158b433d5dc1ac715cf72cbd1b1157a20fcf0d9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt @@ -35,15 +35,15 @@ import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback -import com.android.systemui.R -import com.android.systemui.R.string.keyguard_enter_pin -import com.android.systemui.R.string.kg_prompt_after_dpm_lock -import com.android.systemui.R.string.kg_prompt_after_user_lockdown_pin -import com.android.systemui.R.string.kg_prompt_auth_timeout -import com.android.systemui.R.string.kg_prompt_pin_auth_timeout -import com.android.systemui.R.string.kg_prompt_reason_restart_pin -import com.android.systemui.R.string.kg_prompt_unattended_update -import com.android.systemui.R.string.kg_trust_agent_disabled +import com.android.systemui.res.R +import com.android.systemui.res.R.string.keyguard_enter_pin +import com.android.systemui.res.R.string.kg_prompt_after_dpm_lock +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pin +import com.android.systemui.res.R.string.kg_prompt_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_pin_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_reason_restart_pin +import com.android.systemui.res.R.string.kg_prompt_unattended_update +import com.android.systemui.res.R.string.kg_trust_agent_disabled import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.factory.BouncerMessageFactory import com.android.systemui.bouncer.data.repository.BouncerMessageRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt index 86e0c751085b1e707c17ed8f31140f6ef6cadc06..6205c277bbd900c68973ab8b989178da8de096bf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.domain.interactor import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.model.AuthenticationMethodModel import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt index 4089abef399b62f1f57533c33858c46c7cdb948a..c1286a1664217be672e2461a5f49598acea9c056 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt @@ -22,8 +22,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN -import com.android.systemui.R.string.kg_too_many_failed_attempts_countdown -import com.android.systemui.R.string.kg_unlock_with_pin_or_fp +import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown +import com.android.systemui.res.R.string.kg_unlock_with_pin_or_fp import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.factory.BouncerMessageFactory import com.android.systemui.bouncer.data.repository.FakeBouncerMessageRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt index 420fdba7fde2e16613a72a27844a930c6010e0e5..9a5b4585e0ae555e01fdcb58d84770af8fd87984 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt @@ -25,7 +25,7 @@ import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.DejankUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN @@ -34,8 +34,6 @@ import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.bouncer.ui.BouncerViewDelegate import com.android.systemui.classifier.FalsingCollector -import com.android.systemui.flags.FakeFeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.plugins.ActivityStarter @@ -76,7 +74,6 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { private lateinit var underTest: PrimaryBouncerInteractor private lateinit var resources: TestableResources private lateinit var trustRepository: FakeTrustRepository - private lateinit var featureFlags: FakeFeatureFlags private lateinit var testScope: TestScope @Before @@ -89,7 +86,6 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { testScope = TestScope() mainHandler = FakeHandler(android.os.Looper.getMainLooper()) trustRepository = FakeTrustRepository() - featureFlags = FakeFeatureFlags().apply { set(Flags.DELAY_BOUNCER, true) } underTest = PrimaryBouncerInteractor( repository, @@ -103,7 +99,6 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { context, keyguardUpdateMonitor, trustRepository, - featureFlags, testScope.backgroundScope, ) whenever(repository.primaryBouncerStartingDisappearAnimation.value).thenReturn(null) diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt index 665456d5cd8074d807ba1072f434e7ffa24474a7..cb0b74f3015d2a922ff32f2005e5fd9faca1fe3b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt @@ -27,8 +27,6 @@ import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepositor import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.flags.FakeFeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository import com.android.systemui.statusbar.phone.KeyguardBypassController @@ -77,7 +75,6 @@ class PrimaryBouncerInteractorWithCoroutinesTest : SysuiTestCase() { context, keyguardUpdateMonitor, Mockito.mock(TrustRepository::class.java), - FakeFeatureFlags().apply { set(Flags.DELAY_BOUNCER, true) }, TestScope().backgroundScope, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt index d4bba723a989d55bf4b8a51e5eab4c9ecb47e093..333bd214fe9a4428314825b5f306d7e623b1d883 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt @@ -31,8 +31,6 @@ import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues -import com.android.systemui.flags.FakeFeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository import com.android.systemui.statusbar.phone.KeyguardBypassController @@ -85,7 +83,6 @@ class KeyguardBouncerViewModelTest : SysuiTestCase() { context, keyguardUpdateMonitor, Mockito.mock(TrustRepository::class.java), - FakeFeatureFlags().apply { set(Flags.DELAY_BOUNCER, true) }, TestScope().backgroundScope, ) underTest = KeyguardBouncerViewModel(bouncerView, bouncerInteractor) diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt index 12090e5264df577c1500002b9f3b5e523bfbd9e8..8df29e4d4e585a2237a54cad5da00b9d4b8ba8c6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.ui.viewmodel import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.model.AuthenticationMethodModel import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt index 8ce738ca89f6f0766c6369be18169e9f8693a507..102cfe21838e6d289698594ecfdce970130e8b60 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.ui.viewmodel import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.model.AuthenticationMethodModel import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt index a684221e1a7823fe99f63c147c6f237daad987e7..35238ce00057f181875fc020464ab1a978af389d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt @@ -17,7 +17,7 @@ package com.android.systemui.bouncer.ui.viewmodel import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.model.AuthenticationMethodModel import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt index 5a5c058793b2f85a71ea91676806ed1102a4c848..11756d5b8ea2459cb25feab1ecbe313807e93756 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt @@ -24,7 +24,7 @@ import android.view.WindowManager import android.view.WindowMetrics import androidx.test.filters.SmallTest import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java index 673b5eb5dc3c368047fee41f56154ddbc7b12077..db85522f6cd84cb2921c98906396072f4308ebd1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java @@ -39,7 +39,7 @@ import android.view.textclassifier.TextLinks; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.google.android.collect.Lists; diff --git a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/IntentCreatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/IntentCreatorTest.java index 662c89c268e68d807201bf612e4d3d4ddc61ab16..fb07e6e4fa108f8c077fb60f7ad4a0e5c3c0a882 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/IntentCreatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/IntentCreatorTest.java @@ -28,7 +28,7 @@ import android.text.SpannableString; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Test; diff --git a/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsViewTest.java index f0006e5e0ba71d6fe0245d9824e3261339ab8398..98f7f590216fc76be005ca9752eab25ab6a0c06e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsViewTest.java @@ -33,7 +33,7 @@ import android.widget.SeekBar; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener; diff --git a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java index 69d8d0b6f091577ce4c526cef82515f4021605f4..a78f0b7295b859da4a453c01046c7cdbf29ef05a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java @@ -28,7 +28,7 @@ import android.view.View; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.complication.ComplicationLayoutEngine.Margins; import com.android.systemui.touch.TouchInsetManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImplTest.kt index bd4e8da6b326ae85158f25485d16eefeb900dbf8..581e88b52c0f2eda8aacd82ecfa384d1bfabe406 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsTileResourceConfigurationImplTest.kt @@ -18,7 +18,7 @@ package com.android.systemui.controls.controller import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertEquals diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsEditingActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsEditingActivityTest.kt index bd3d09dfbb20401e1babb33452cb40d89fcaac67..2a4524b971a4788114a6bc8cfca7bbfb3a92cb47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsEditingActivityTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsEditingActivityTest.kt @@ -11,7 +11,7 @@ import android.window.OnBackInvokedCallback import android.window.OnBackInvokedDispatcher import androidx.test.filters.SmallTest import androidx.test.rule.ActivityTestRule -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.activity.SingleActivityFactory import com.android.systemui.controls.CustomIconCache diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsFavoritingActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsFavoritingActivityTest.kt index 70d93a10b445b34f7b378978dae6130e64226796..88d36af719588f4c0db4f667a89f4a72ee964661 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsFavoritingActivityTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsFavoritingActivityTest.kt @@ -13,7 +13,7 @@ import android.window.OnBackInvokedDispatcher import androidx.test.filters.FlakyTest import androidx.test.filters.SmallTest import androidx.test.rule.ActivityTestRule -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.activity.SingleActivityFactory import com.android.systemui.controls.ControlStatus diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt index 74d0d210b9b029e3bc81ee85e8ea883f5adb5257..6361e94bd0ef5115603d18bc0c91d40d7e07df24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt @@ -31,7 +31,7 @@ import android.service.controls.ControlsProviderService import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.settingslib.applications.ServiceListing -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt index 756f267671e15b3d30ff82d31b9731507b84f333..4e8f866155220b87e7d857c5baad01c89178454e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt @@ -20,7 +20,7 @@ package com.android.systemui.controls.management import android.content.DialogInterface import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.phone.SystemUIDialog import com.android.systemui.util.mockito.argumentCaptor diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImplTest.kt index 7ac1953ee4951656c24ca5649081e83f033e8e06..4828ba37ecb5b5698a08258c840323be58ccf4dd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImplTest.kt @@ -20,7 +20,7 @@ package com.android.systemui.controls.panels import android.content.SharedPreferences import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt index 2ae342a5cfa50253da4cc4d3a7ec5d38501fa850..101b8ed4f6f0cc1b8b544471591f08f830b343c0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt @@ -30,7 +30,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsMetricsLogger import com.android.systemui.controls.controller.ControlInfo diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt index 1e8cd41176887958cf432e4e5950b4ac67b26eff..8eebceebe874c6bfd2c0792148d0d02a4becff17 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.controls.ui import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.FakeSystemUIDialogController import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt index df6fa11ff72c4f28fbb5b3628234b843679f059a..48e3962717c1e48fbf713bb0a892d510ad545524 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt @@ -26,7 +26,7 @@ import android.view.ViewGroup import android.widget.PopupWindow.OnDismissListener import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.activity.EmptyTestActivity import com.android.systemui.util.mockito.whenever diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt index a400ff96302665a8e59ac95a9cbb9581961a86a5..5a4ad011bf49a3009ec8bfc1bc753569a5de8268 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt @@ -33,7 +33,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsMetricsLogger import com.android.systemui.controls.ControlsServiceInfo diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/TemperatureControlBehaviorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/TemperatureControlBehaviorTest.kt index 588e34d3111dd520a9b6c35d0ed2be440373a975..ac1f90cc6ddac58bc3d4e7c49e687018399d8f5b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/TemperatureControlBehaviorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/TemperatureControlBehaviorTest.kt @@ -11,7 +11,7 @@ import android.service.controls.templates.ThumbnailTemplate import android.view.LayoutInflater import android.view.ViewGroup import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsMetricsLogger import com.android.systemui.controls.controller.ControlInfo diff --git a/packages/SystemUI/tests/src/com/android/systemui/decor/OverlayWindowTest.kt b/packages/SystemUI/tests/src/com/android/systemui/decor/OverlayWindowTest.kt index 8bf17d7c62f993888bdc4ce37b63124801eb9bd4..a1cffc1419d5e6b2cd45990090cff016ae990378 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/decor/OverlayWindowTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/decor/OverlayWindowTest.kt @@ -23,7 +23,7 @@ import android.view.DisplayCutout import android.view.Surface import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import org.junit.Assert import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/decor/PrivacyDotDecorProviderFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/decor/PrivacyDotDecorProviderFactoryTest.kt index 171b76748d26d7bc1fd4a862cb4577b8cc594bbf..e4ddc37c4f3cf425e70f9dd1b96be26c2fe94cae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/decor/PrivacyDotDecorProviderFactoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/decor/PrivacyDotDecorProviderFactoryTest.kt @@ -20,7 +20,7 @@ import android.content.res.Resources import android.testing.AndroidTestingRunner import android.view.DisplayCutout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import org.junit.Assert import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerDecorProviderFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerDecorProviderFactoryTest.kt index 8f0b1930700014436e2695aeb0de42e5d6698a4d..d1d48803c48628aaf3bd84e1d4d975f37d648f25 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerDecorProviderFactoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerDecorProviderFactoryTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.util.Size import android.view.DisplayCutout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import org.junit.Assert import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt index 4feba7bfd359666fcfd34a568a32bbf313d0b0a8..2bff7d22785a00720039303ee6b43b6d9c5bd9d8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt @@ -23,7 +23,7 @@ import android.util.Size import androidx.annotation.DrawableRes import androidx.test.filters.SmallTest import com.android.internal.R as InternalR -import com.android.systemui.R as SystemUIR +import com.android.systemui.res.R as SystemUIR import com.android.systemui.SysuiTestCase import com.android.systemui.tests.R import org.junit.Assert.assertEquals diff --git a/packages/SystemUI/tests/src/com/android/systemui/display/ui/view/MirroringConfirmationDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/display/ui/view/MirroringConfirmationDialogTest.kt index 46f758216aae35f53c1bc8324f0ab263e9e0678d..dcc15ae0e2c3ea5347648f564c1ad00b71dde307 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/display/ui/view/MirroringConfirmationDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/display/ui/view/MirroringConfirmationDialogTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java index ec9acdf26c8a9458f8d1e660591a12ee1caada11..ea7467f9dc4ddb9553362e31aec3f4218a842216 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java @@ -24,7 +24,7 @@ import android.text.format.DateUtils; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.After; diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java index af2dab599a669aab1afc67315bfcd7adfc5377dc..9566e81ed08d44bbd298527e07c1dab27108ac4e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java @@ -46,7 +46,7 @@ import android.view.View; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.RoboPilotTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.log.LogBuffer; diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsColumnLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsColumnLayoutTest.java index 16d665cbafcdab8f03fa6ca8ae91143160e179cc..f89a0b698c697c59ab0b11e3b025143d910c6a12 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsColumnLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsColumnLayoutTest.java @@ -30,7 +30,7 @@ import android.view.View; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.leak.RotationUtils; diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsGridLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsGridLayoutTest.java index ea478597ef77ee772fef0abe01dcdc7006ccce0a..5a97b7489f39c434801b23d48f78ff208211a2da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsGridLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsGridLayoutTest.java @@ -28,7 +28,7 @@ import android.view.ViewGroup; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.leak.RotationUtils; diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java index 74e8cc28097953e4a15549fa854baa5a442bad83..a003e077e7aac815b74956e4f134f3757df92038 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/graphics/ImageLoaderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/graphics/ImageLoaderTest.kt index 8f663447861730a392b4d0c1d2b0a41e1daa5f75..76c3349c25ba08161e2b42c90856e0f4cdce31ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/graphics/ImageLoaderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/graphics/ImageLoaderTest.kt @@ -12,7 +12,7 @@ import android.net.Uri import android.util.Size import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import java.io.ByteArrayInputStream diff --git a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/FakeSliderEventProducer.kt b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/FakeSliderEventProducer.kt new file mode 100644 index 0000000000000000000000000000000000000000..9deabc76065c47d77fd5da34eaf3323782536556 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/FakeSliderEventProducer.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow + +/** Fake implementation of a slider event producer */ +class FakeSliderEventProducer : SliderEventProducer { + + private val _currentEvent = MutableStateFlow(SliderEvent(SliderEventType.NOTHING, 0f)) + + fun sendEvent(event: SliderEvent) { + _currentEvent.value = event + } + override fun produceEvents(): Flow<SliderEvent> = _currentEvent.asStateFlow() +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..add601c4b1b3c7126f01a3a792b24d8a48ee5987 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt @@ -0,0 +1,547 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestCoroutineScheduler +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.anyFloat +import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoMoreInteractions +import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidJUnit4::class) +class SeekableSliderTrackerTest : SysuiTestCase() { + + @Mock private lateinit var sliderStateListener: SliderStateListener + private val sliderEventProducer = FakeSliderEventProducer() + private lateinit var mSeekableSliderTracker: SeekableSliderTracker + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + } + + @Test + fun initializeSliderTracker_startsTracking() = runTest { + // GIVEN Initialized tracker + initTracker(testScheduler) + + // THEN the tracker job is active + assertThat(mSeekableSliderTracker.isTracking).isTrue() + } + + @Test + fun stopTracking_onAnyState_resetsToIdle() = runTest { + enumValues<SliderState>().forEach { + // GIVEN Initialized tracker + initTracker(testScheduler) + + // GIVEN a state in the state machine + mSeekableSliderTracker.setState(it) + + // WHEN the tracker stops tracking the state and listening to events + mSeekableSliderTracker.stopTracking() + + // THEN The state is idle and the tracker is not active + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + assertThat(mSeekableSliderTracker.isTracking).isFalse() + } + } + + // Tests on the IDLE state + @Test + fun initializeSliderTracker_isIdle() = runTest { + // GIVEN Initialized tracker + initTracker(testScheduler) + + // THEN The state is idle and the listener is not called to play haptics + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyZeroInteractions(sliderStateListener) + } + + @Test + fun startsTrackingTouch_onIdle_entersWaitState() = runTest { + initTracker(testScheduler) + + // GIVEN a start of tracking touch event + val progress = 0f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // THEN the tracker moves to the wait state and the timer job begins + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.WAIT) + verifyZeroInteractions(sliderStateListener) + assertThat(mSeekableSliderTracker.isWaiting).isTrue() + } + + // Tests on the WAIT state + + @OptIn(ExperimentalCoroutinesApi::class) + @Test + fun waitCompletes_onWait_movesToHandleAcquired() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT + val progress = 0f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // WHEN the wait time completes plus a small buffer time + advanceTimeBy(config.waitTimeMillis + 10L) + + // THEN the tracker moves to the DRAG_HANDLE_ACQUIRED_BY_TOUCH state + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + verify(sliderStateListener).onHandleAcquiredByTouch() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun impreciseTouch_onWait_movesToHandleAcquired() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the + // slider + var progress = 0.5f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // GIVEN a progress event due to an imprecise touch with a progress below threshold + progress += (config.jumpThreshold - 0.01f) + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_ACQUIRED_BY_TOUCH state without the timer job + // being complete + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + verify(sliderStateListener).onHandleAcquiredByTouch() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun trackJump_onWait_movesToJumpTrackLocationSelected() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the + // slider + var progress = 0.5f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // GIVEN a progress event due to a touch on the slider track at threshold + progress += config.jumpThreshold + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the jump-track location selected state + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.JUMP_TRACK_LOCATION_SELECTED) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + verify(sliderStateListener).onProgressJump(anyFloat()) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun upperBookendSelection_onWait_movesToBookendSelected() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the + // slider + var progress = 0.5f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // GIVEN a progress event due to a touch on the slider upper bookend zone. + progress = (config.upperBookendThreshold + 0.01f) + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the jump-track location selected state + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + verify(sliderStateListener).onUpperBookend() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun lowerBookendSelection_onWait_movesToBookendSelected() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the + // slider + var progress = 0.5f + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress)) + + // GIVEN a progress event due to a touch on the slider lower bookend zone + progress = (config.lowerBookendThreshold - 0.01f) + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the JUMP_TRACK_LOCATION_SELECTED state + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + verify(sliderStateListener).onLowerBookend() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun stopTracking_onWait_whenWaitingJobIsActive_resetsToIdle() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the + // slider + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, 0.5f)) + assertThat(mSeekableSliderTracker.isWaiting).isTrue() + + // GIVEN that the tracker stops tracking the state and listening to events + mSeekableSliderTracker.stopTracking() + + // THEN the tracker moves to the IDLE state without the timer job being complete + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + assertThat(mSeekableSliderTracker.isWaiting).isFalse() + assertThat(mSeekableSliderTracker.isTracking).isFalse() + verifyNoMoreInteractions(sliderStateListener) + } + + // Tests on the JUMP_TRACK_LOCATION_SELECTED state + + @Test + fun progressChangeByUser_onJumpTrackLocationSelected_movesToDragHandleDragging() = runTest { + initTracker(testScheduler) + + // GIVEN a JUMP_TRACK_LOCATION_SELECTED state + mSeekableSliderTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED) + + // GIVEN a progress event due to dragging the handle + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 0.5f)) + + // THEN the tracker moves to the DRAG_HANDLE_DRAGGING state + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verify(sliderStateListener).onProgress(anyFloat()) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun touchRelease_onJumpTrackLocationSelected_movesToIdle() = runTest { + initTracker(testScheduler) + + // GIVEN a JUMP_TRACK_LOCATION_SELECTED state + mSeekableSliderTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED) + + // GIVEN that the slider stopped tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f)) + + // THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state + verify(sliderStateListener).onHandleReleasedFromTouch() + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_onJumpBookendSelected_movesToDragHandleDragging() = runTest { + initTracker(testScheduler) + + // GIVEN a JUMP_BOOKEND_SELECTED state + mSeekableSliderTracker.setState(SliderState.JUMP_BOOKEND_SELECTED) + + // GIVEN that the slider stopped tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 0.5f)) + + // THEN the tracker moves to the DRAG_HANDLE_DRAGGING state + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verify(sliderStateListener).onProgress(anyFloat()) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun touchRelease_onJumpBookendSelected_movesToIdle() = runTest { + initTracker(testScheduler) + + // GIVEN a JUMP_BOOKEND_SELECTED state + mSeekableSliderTracker.setState(SliderState.JUMP_BOOKEND_SELECTED) + + // GIVEN that the slider stopped tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f)) + + // THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state + verify(sliderStateListener).onHandleReleasedFromTouch() + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyNoMoreInteractions(sliderStateListener) + } + + // Tests on the DRAG_HANDLE_ACQUIRED state + + @Test + fun progressChangeByUser_onHandleAcquired_movesToDragHandleDragging() = runTest { + initTracker(testScheduler) + + // GIVEN a DRAG_HANDLE_ACQUIRED_BY_TOUCH state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + + // GIVEN a progress change by the user + val progress = 0.5f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_DRAGGING state + verify(sliderStateListener).onProgress(progress) + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun touchRelease_onHandleAcquired_movesToIdle() = runTest { + initTracker(testScheduler) + + // GIVEN a DRAG_HANDLE_ACQUIRED_BY_TOUCH state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH) + + // GIVEN that the handle stops tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f)) + + // THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state + verify(sliderStateListener).onHandleReleasedFromTouch() + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyNoMoreInteractions(sliderStateListener) + } + + // Tests on DRAG_HANDLE_DRAGGING + + @Test + fun progressChangeByUser_onHandleDragging_progressOutsideOfBookends_doesNotChangeState() = + runTest { + initTracker(testScheduler) + + // GIVEN a DRAG_HANDLE_DRAGGING state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING) + + // GIVEN a progress change by the user outside of bookend bounds + val progress = 0.5f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker does not change state and executes the onProgress call + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verify(sliderStateListener).onProgress(progress) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_onHandleDragging_reachesLowerBookend_movesToHandleReachedBookend() = + runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_DRAGGING state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING) + + // GIVEN a progress change by the user reaching the lower bookend + val progress = config.lowerBookendThreshold - 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_REACHED_BOOKEND state and executes the + // corresponding callback + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + verify(sliderStateListener).onLowerBookend() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_onHandleDragging_reachesUpperBookend_movesToHandleReachedBookend() = + runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_DRAGGING state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING) + + // GIVEN a progress change by the user reaching the upper bookend + val progress = config.upperBookendThreshold + 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_REACHED_BOOKEND state and executes the + // corresponding callback + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + verify(sliderStateListener).onUpperBookend() + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun touchRelease_onHandleDragging_movesToIdle() = runTest { + initTracker(testScheduler) + + // GIVEN a DRAG_HANDLE_DRAGGING state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING) + + // GIVEN that the slider stops tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f)) + + // THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state + verify(sliderStateListener).onHandleReleasedFromTouch() + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyNoMoreInteractions(sliderStateListener) + } + + // Tests on the DRAG_HANDLE_REACHED_BOOKEND state + + @Test + fun progressChangeByUser_outsideOfBookendRange_onLowerBookend_movesToDragHandleDragging() = + runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_REACHED_BOOKEND state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + + // GIVEN a progress event that falls outside of the lower bookend range + val progress = config.lowerBookendThreshold + 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_DRAGGING state and executes accordingly + verify(sliderStateListener).onProgress(progress) + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_insideOfBookendRange_onLowerBookend_doesNotChangeState() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_REACHED_BOOKEND state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + + // GIVEN a progress event that falls inside of the lower bookend range + val progress = config.lowerBookendThreshold - 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker stays in the current state and executes accordingly + verify(sliderStateListener).onLowerBookend() + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_outsideOfBookendRange_onUpperBookend_movesToDragHandleDragging() = + runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_REACHED_BOOKEND state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + + // GIVEN a progress event that falls outside of the upper bookend range + val progress = config.upperBookendThreshold - 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker moves to the DRAG_HANDLE_DRAGGING state and executes accordingly + verify(sliderStateListener).onProgress(progress) + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun progressChangeByUser_insideOfBookendRange_onUpperBookend_doesNotChangeState() = runTest { + val config = SeekableSliderTrackerConfig() + initTracker(testScheduler, config) + + // GIVEN a DRAG_HANDLE_REACHED_BOOKEND state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + + // GIVEN a progress event that falls inside of the upper bookend range + val progress = config.upperBookendThreshold + 0.01f + sliderEventProducer.sendEvent( + SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress) + ) + + // THEN the tracker stays in the current state and executes accordingly + verify(sliderStateListener).onUpperBookend() + assertThat(mSeekableSliderTracker.currentState) + .isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + verifyNoMoreInteractions(sliderStateListener) + } + + @Test + fun touchRelease_onHandleReachedBookend_movesToIdle() = runTest { + initTracker(testScheduler) + + // GIVEN a DRAG_HANDLE_REACHED_BOOKEND state + mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND) + + // GIVEN that the handle stops tracking touch + sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f)) + + // THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state + verify(sliderStateListener).onHandleReleasedFromTouch() + assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE) + verifyNoMoreInteractions(sliderStateListener) + } + + @OptIn(ExperimentalCoroutinesApi::class) + private fun initTracker( + scheduler: TestCoroutineScheduler, + config: SeekableSliderTrackerConfig = SeekableSliderTrackerConfig(), + ) { + mSeekableSliderTracker = + SeekableSliderTracker( + sliderStateListener, + sliderEventProducer, + UnconfinedTestDispatcher(scheduler), + config + ) + mSeekableSliderTracker.startTracking() + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProviderTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..0ee348e0d23df5c0d8c9a8c6647e01f55f9156d0 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderHapticFeedbackProviderTest.kt @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.haptics.slider + +import android.os.VibrationAttributes +import android.os.VibrationEffect +import android.view.VelocityTracker +import android.view.animation.AccelerateInterpolator +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.statusbar.VibratorHelper +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.eq +import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.time.FakeSystemClock +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidJUnit4::class) +class SliderHapticFeedbackProviderTest : SysuiTestCase() { + + @Mock private lateinit var velocityTracker: VelocityTracker + @Mock private lateinit var vibratorHelper: VibratorHelper + + private val config = SliderHapticFeedbackConfig() + private val clock = FakeSystemClock() + + private val lowTickDuration = 12 // Mocked duration of a low tick + private val dragTextureThresholdMillis = + lowTickDuration * config.numberOfLowTicks + config.deltaMillisForDragInterval + private val progressInterpolator = AccelerateInterpolator(config.progressInterpolatorFactor) + private val velocityInterpolator = AccelerateInterpolator(config.velocityInterpolatorFactor) + private lateinit var sliderHapticFeedbackProvider: SliderHapticFeedbackProvider + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + whenever(vibratorHelper.getPrimitiveDurations(any())) + .thenReturn(intArrayOf(lowTickDuration)) + whenever(velocityTracker.xVelocity).thenReturn(config.maxVelocityToScale) + sliderHapticFeedbackProvider = + SliderHapticFeedbackProvider(vibratorHelper, velocityTracker, config, clock) + } + + @Test + fun playHapticAtLowerBookend_playsClick() { + val vibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + sliderHapticFeedbackProvider.onLowerBookend() + + verify(vibratorHelper).vibrate(eq(vibration), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtLowerBookend_twoTimes_playsClickOnlyOnce() { + val vibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + sliderHapticFeedbackProvider.onLowerBookend() + sliderHapticFeedbackProvider.onLowerBookend() + + verify(vibratorHelper).vibrate(eq(vibration), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtUpperBookend_playsClick() { + val vibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + sliderHapticFeedbackProvider.onUpperBookend() + + verify(vibratorHelper).vibrate(eq(vibration), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtUpperBookend_twoTimes_playsClickOnlyOnce() { + val vibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + sliderHapticFeedbackProvider.onUpperBookend() + sliderHapticFeedbackProvider.onUpperBookend() + + verify(vibratorHelper, times(1)) + .vibrate(eq(vibration), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtProgress_onQuickSuccession_playsLowTicksOnce() { + // GIVEN max velocity and slider progress + val progress = 1f + val expectedScale = scaleAtProgressChange(config.maxVelocityToScale.toFloat(), progress) + val ticks = VibrationEffect.startComposition() + repeat(config.numberOfLowTicks) { + ticks.addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK, expectedScale) + } + + // GIVEN system running for 1s + clock.advanceTime(1000) + + // WHEN two calls to play occur immediately + sliderHapticFeedbackProvider.onProgress(progress) + sliderHapticFeedbackProvider.onProgress(progress) + + // THEN the correct composition only plays once + verify(vibratorHelper, times(1)) + .vibrate(eq(ticks.compose()), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtProgress_afterNextDragThreshold_playsLowTicksTwice() { + // GIVEN max velocity and slider progress + val progress = 1f + val expectedScale = scaleAtProgressChange(config.maxVelocityToScale.toFloat(), progress) + val ticks = VibrationEffect.startComposition() + repeat(config.numberOfLowTicks) { + ticks.addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK, expectedScale) + } + + // GIVEN system running for 1s + clock.advanceTime(1000) + + // WHEN two calls to play occur with the required threshold separation + sliderHapticFeedbackProvider.onProgress(progress) + clock.advanceTime(dragTextureThresholdMillis.toLong()) + sliderHapticFeedbackProvider.onProgress(progress) + + // THEN the correct composition plays two times + verify(vibratorHelper, times(2)) + .vibrate(eq(ticks.compose()), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtLowerBookend_afterPlayingAtProgress_playsTwice() { + // GIVEN max velocity and slider progress + val progress = 1f + val expectedScale = scaleAtProgressChange(config.maxVelocityToScale.toFloat(), progress) + val ticks = VibrationEffect.startComposition() + repeat(config.numberOfLowTicks) { + ticks.addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK, expectedScale) + } + val bookendVibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + // GIVEN a vibration at the lower bookend followed by a request to vibrate at progress + sliderHapticFeedbackProvider.onLowerBookend() + sliderHapticFeedbackProvider.onProgress(progress) + + // WHEN a vibration is to trigger again at the lower bookend + sliderHapticFeedbackProvider.onLowerBookend() + + // THEN there are two bookend vibrations + verify(vibratorHelper, times(2)) + .vibrate(eq(bookendVibration), any(VibrationAttributes::class.java)) + } + + @Test + fun playHapticAtUpperBookend_afterPlayingAtProgress_playsTwice() { + // GIVEN max velocity and slider progress + val progress = 1f + val expectedScale = scaleAtProgressChange(config.maxVelocityToScale.toFloat(), progress) + val ticks = VibrationEffect.startComposition() + repeat(config.numberOfLowTicks) { + ticks.addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK, expectedScale) + } + val bookendVibration = + VibrationEffect.startComposition() + .addPrimitive( + VibrationEffect.Composition.PRIMITIVE_CLICK, + scaleAtBookends(config.maxVelocityToScale) + ) + .compose() + + // GIVEN a vibration at the upper bookend followed by a request to vibrate at progress + sliderHapticFeedbackProvider.onUpperBookend() + sliderHapticFeedbackProvider.onProgress(progress) + + // WHEN a vibration is to trigger again at the upper bookend + sliderHapticFeedbackProvider.onUpperBookend() + + // THEN there are two bookend vibrations + verify(vibratorHelper, times(2)) + .vibrate(eq(bookendVibration), any(VibrationAttributes::class.java)) + } + + private fun scaleAtBookends(velocity: Float): Float { + val range = config.upperBookendScale - config.lowerBookendScale + val interpolatedVelocity = + velocityInterpolator.getInterpolation(velocity / config.maxVelocityToScale) + return interpolatedVelocity * range + config.lowerBookendScale + } + + private fun scaleAtProgressChange(velocity: Float, progress: Float): Float { + val range = config.progressBasedDragMaxScale - config.progressBasedDragMinScale + val interpolatedVelocity = + velocityInterpolator.getInterpolation(velocity / config.maxVelocityToScale) + val interpolatedProgress = progressInterpolator.getInterpolation(progress) + val bump = interpolatedVelocity * config.additionalVelocityMaxBump + return interpolatedProgress * range + config.progressBasedDragMinScale + bump + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt index f3c9432cb4bf56506c0c6325629ed2dd622e4efe..6c990e4572096594ae95cdddcfe06bf82a310c6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt @@ -30,7 +30,7 @@ import android.testing.TestableLooper import android.view.SurfaceControlViewHost import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SystemUIAppComponentFactoryBase import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt index d84a4f7416373af04831a5f2c74e1fbdbc2ee1ee..49168d08795878c3583e097111ac1fcfd95c3a92 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt @@ -25,7 +25,7 @@ import android.provider.Settings.Secure.ZEN_DURATION_PROMPT import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.settingslib.notification.EnableZenModeDialog -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt index b6dffff4c797ab1e06cd95cfb972577becd26d06..c3e28ae848059123b4c86ec6e0fbb602183fb61f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt @@ -20,7 +20,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.content.Context import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.common.shared.model.Icon import com.android.systemui.keyguard.shared.quickaffordance.ActivationState diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt index 1815ea9530e27974eb754c57d21eb581c35031dc..12fa4c85c34d02a2a67717a6cb27b162aae89486 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.app.Activity import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.controller.ControlsController diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt index 2fd4947b968ce4aef9b68c42ae4baa111caa69c6..ef56a9892060755962a5f460cbf7aa1c3bf66d3f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.data.quickaffordance import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfigTest.kt index 7941a23fe30d4e6c918244d4744c68d24ea4bd73..bd4525b28f71ba7a5d25cb814bcf1308ef178c63 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfigTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.content.Intent import android.net.Uri import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt index de3bb6f3d03126b4fd3b192269c23d1d1e72c4b2..4f071bd9904fda7772a144b81e0cab460db8b3c0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt @@ -22,7 +22,7 @@ import android.content.res.Resources import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.settings.FakeUserTracker diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt index edaff44cf543f244a5aeaca71f58e035f88d5936..bd0b71df3e5c64485c3fea85dbfae73f85c7d9df 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt @@ -22,7 +22,7 @@ import android.content.SharedPreferences import android.content.pm.UserInfo import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.backup.BackupHelper diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt index b9c0b7fe35d7652bc14406254706c84f04fe37b4..613c4ce4ccef8d3b6b193890af1459b95ab08e7d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt @@ -23,7 +23,7 @@ import android.service.quickaccesswallet.QuickAccessWalletClient import android.service.quickaccesswallet.WalletCard import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ActivityLaunchAnimator diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt index a6930d5953264859c88366b585fe5fd92c156647..360fa5652e209fe863f1c468dfef81509e7e1b9f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt @@ -32,7 +32,7 @@ import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUT import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt index 6b194f243b2ca13079e7040cbe219da3df89fb87..5a95ebec1fb382e3c114c6ed78478a3cc761c8e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt @@ -25,6 +25,9 @@ import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_HW_UNAVAILA import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT import android.hardware.biometrics.ComponentInfoInternal import android.hardware.face.FaceAuthenticateOptions +import android.hardware.face.FaceAuthenticateOptions.AUTHENTICATE_REASON_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN +import android.hardware.face.FaceAuthenticateOptions.AUTHENTICATE_REASON_NOTIFICATION_PANEL_CLICKED +import android.hardware.face.FaceAuthenticateOptions.AUTHENTICATE_REASON_SWIPE_UP_ON_BOUNCER import android.hardware.face.FaceManager import android.hardware.face.FaceSensorProperties import android.hardware.face.FaceSensorPropertiesInternal @@ -39,7 +42,7 @@ import com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_TRIGGERED_ALTERNATE_BIOMET import com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_TRIGGERED_NOTIFICATION_PANEL_CLICKED import com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.data.repository.FakeDisplayStateRepository @@ -102,7 +105,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.any -import org.mockito.ArgumentMatchers.eq import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.atLeastOnce @@ -133,6 +135,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { @Captor private lateinit var detectionCallback: ArgumentCaptor<FaceManager.FaceDetectionCallback> + @Captor private lateinit var faceAuthenticateOptions: ArgumentCaptor<FaceAuthenticateOptions> @Captor private lateinit var cancellationSignal: ArgumentCaptor<CancellationSignal> private lateinit var bypassStateChangedListener: @@ -412,7 +415,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { underTest = createDeviceEntryFaceAuthRepositoryImpl() initCollectors() - underTest.detect() + underTest.detect(FACE_AUTH_TRIGGERED_NOTIFICATION_PANEL_CLICKED) faceDetectIsCalled() detectionCallback.value.onFaceDetected(1, 1, true) @@ -421,6 +424,8 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { assertThat(status.sensorId).isEqualTo(1) assertThat(status.userId).isEqualTo(1) assertThat(status.isStrongBiometric).isEqualTo(true) + assertThat(faceAuthenticateOptions.value.authenticateReason) + .isEqualTo(AUTHENTICATE_REASON_NOTIFICATION_PANEL_CLICKED) } @Test @@ -432,7 +437,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { initCollectors() clearInvocations(faceManager) - underTest.detect() + underTest.detect(FACE_AUTH_TRIGGERED_NOTIFICATION_PANEL_CLICKED) verify(faceManager, never()) .detectFace(any(), any(), any(FaceAuthenticateOptions::class.java)) @@ -467,6 +472,8 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { faceAuthenticateIsCalled() uiEventIsLogged(FACE_AUTH_TRIGGERED_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN) + assertThat(faceAuthenticateOptions.value.authenticateReason) + .isEqualTo(AUTHENTICATE_REASON_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN) } @Test @@ -484,6 +491,8 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { underTest.requestAuthenticate(FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER) faceAuthenticateIsCalled() + assertThat(faceAuthenticateOptions.value.authenticateReason) + .isEqualTo(AUTHENTICATE_REASON_SWIPE_UP_ON_BOUNCER) } @Test @@ -1238,7 +1247,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { .detectFace( cancellationSignal.capture(), detectionCallback.capture(), - eq(FaceAuthenticateOptions.Builder().setUserId(primaryUserId).build()) + faceAuthenticateOptions.capture(), ) } @@ -1251,7 +1260,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() { cancellationSignal.capture(), authenticationCallback.capture(), isNull(), - eq(FaceAuthenticateOptions.Builder().setUserId(primaryUserId).build()) + faceAuthenticateOptions.capture(), ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt index 6b5be58b6d030a6aa0313d6215e7a450166011f4..126b841610b4ebaaa71c49048ce09394f64a9fda 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt @@ -21,7 +21,7 @@ import android.content.pm.UserInfo import android.os.UserHandle import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt index 2ed9de26dfa310b253554b77ac234444c7000668..518b3cc8933f812f6809e6530c6ffbd3d3fb6e9c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt @@ -23,6 +23,7 @@ import android.os.Handler import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.keyguard.FaceAuthUiEvent +import com.android.keyguard.FaceWakeUpTriggersConfig import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.SysuiTestCase @@ -42,17 +43,22 @@ import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.keyguard.shared.model.ErrorFaceAuthenticationStatus import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep +import com.android.systemui.keyguard.shared.model.WakeSleepReason +import com.android.systemui.keyguard.shared.model.WakefulnessModel +import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.log.FaceAuthenticationLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.data.model.SelectionStatus import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -83,8 +89,10 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { private lateinit var facePropertyRepository: FakeFacePropertyRepository private lateinit var fakeDeviceEntryFingerprintAuthRepository: FakeDeviceEntryFingerprintAuthRepository + private lateinit var fakeKeyguardRepository: FakeKeyguardRepository @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + @Mock private lateinit var faceWakeUpTriggersConfig: FaceWakeUpTriggersConfig @Before fun setup() { @@ -108,6 +116,7 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { fakeUserRepository = FakeUserRepository() fakeUserRepository.setUserInfos(listOf(primaryUser, secondaryUser)) facePropertyRepository = FakeFacePropertyRepository() + fakeKeyguardRepository = FakeKeyguardRepository() underTest = SystemUIKeyguardFaceAuthInteractor( mContext, @@ -126,7 +135,6 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { context, keyguardUpdateMonitor, FakeTrustRepository(), - FakeFeatureFlags().apply { set(Flags.DELAY_BOUNCER, true) }, testScope.backgroundScope, ), AlternateBouncerInteractor( @@ -144,6 +152,8 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { fakeDeviceEntryFingerprintAuthRepository, fakeUserRepository, facePropertyRepository, + fakeKeyguardRepository, + faceWakeUpTriggersConfig, ) } @@ -152,6 +162,18 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { testScope.runTest { underTest.start() + fakeKeyguardRepository.setWakefulnessModel( + WakefulnessModel( + WakefulnessState.STARTING_TO_WAKE, + WakeSleepReason.LID, + WakeSleepReason.LID + ) + ) + whenever( + faceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(WakeSleepReason.LID) + ) + .thenReturn(true) + keyguardTransitionRepository.sendTransitionStep( TransitionStep( KeyguardState.OFF, @@ -188,6 +210,18 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { testScope.runTest { underTest.start() + fakeKeyguardRepository.setWakefulnessModel( + WakefulnessModel( + WakefulnessState.STARTING_TO_WAKE, + WakeSleepReason.LID, + WakeSleepReason.LID + ) + ) + whenever( + faceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(WakeSleepReason.LID) + ) + .thenReturn(true) + keyguardTransitionRepository.sendTransitionStep( TransitionStep( KeyguardState.AOD, @@ -203,11 +237,52 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { ) } + @Test + fun faceAuthIsNotRequestedWhenLockscreenBecomesVisibleDueToIgnoredWakeReasons() = + testScope.runTest { + underTest.start() + + fakeKeyguardRepository.setWakefulnessModel( + WakefulnessModel( + WakefulnessState.STARTING_TO_WAKE, + WakeSleepReason.LIFT, + WakeSleepReason.POWER_BUTTON + ) + ) + whenever( + faceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(WakeSleepReason.LIFT) + ) + .thenReturn(false) + + keyguardTransitionRepository.sendTransitionStep( + TransitionStep( + KeyguardState.DOZING, + KeyguardState.LOCKSCREEN, + transitionState = TransitionState.STARTED + ) + ) + + runCurrent() + assertThat(faceAuthRepository.runningAuthRequest.value).isNull() + } + @Test fun faceAuthIsRequestedWhenLockscreenBecomesVisibleFromDozingState() = testScope.runTest { underTest.start() + fakeKeyguardRepository.setWakefulnessModel( + WakefulnessModel( + WakefulnessState.STARTING_TO_WAKE, + WakeSleepReason.LID, + WakeSleepReason.LID + ) + ) + whenever( + faceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(WakeSleepReason.LID) + ) + .thenReturn(true) + keyguardTransitionRepository.sendTransitionStep( TransitionStep( KeyguardState.DOZING, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt index 0bbeeff8eee36c75a81c83db265c6743599e41e0..13025a016eff5b1db2bed5ac27d55f7224b71dbd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt @@ -21,7 +21,7 @@ import android.content.Intent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt index e8542aad9cd2b13939d5d98f2a406413086834c0..8c13bb465103c3ffd4b32998517ee533a0cc5ba6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt @@ -22,7 +22,7 @@ import android.os.UserHandle import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt index d4576053f9c79181f97824e265739bf97804ea8a..f2636c54384409dc6a68115713d72bcf0d7566d9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt @@ -32,6 +32,7 @@ import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeTransitionModel import com.android.systemui.keyguard.shared.model.KeyguardState +import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep @@ -39,11 +40,12 @@ import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.shade.data.repository.ShadeRepository +import com.android.systemui.shade.domain.model.ShadeModel import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancelChildren import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.advanceUntilIdle @@ -56,6 +58,7 @@ import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock +import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.spy @@ -66,6 +69,7 @@ import org.mockito.MockitoAnnotations * Class for testing user journeys through the interactors. They will all be activated during setup, * to ensure the expected transitions are still triggered. */ +@ExperimentalCoroutinesApi @SmallTest @RunWith(JUnit4::class) class KeyguardTransitionScenariosTest : SysuiTestCase() { @@ -74,7 +78,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var commandQueue: FakeCommandQueue - private lateinit var shadeRepository: ShadeRepository + private lateinit var shadeRepository: FakeShadeRepository private lateinit var transitionRepository: FakeKeyguardTransitionRepository private lateinit var transitionInteractor: KeyguardTransitionInteractor private lateinit var featureFlags: FakeFeatureFlags @@ -1213,6 +1217,58 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } + @Test + fun lockscreenToPrimaryBouncerDragging() = + testScope.runTest { + // GIVEN a prior transition has run to LOCKSCREEN + runTransition(KeyguardState.AOD, KeyguardState.LOCKSCREEN) + runCurrent() + + // GIVEN the keyguard is showing locked + keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) + keyguardRepository.setKeyguardUnlocked(false) + runCurrent() + shadeRepository.setShadeModel( + ShadeModel( + expansionAmount = .9f, + isUserDragging = true, + ) + ) + runCurrent() + + // THEN a transition from LOCKSCREEN => PRIMARY_BOUNCER should occur + val info = + withArgCaptor<TransitionInfo> { + verify(transitionRepository).startTransition(capture(), anyBoolean()) + } + assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") + assertThat(info.from).isEqualTo(KeyguardState.LOCKSCREEN) + assertThat(info.to).isEqualTo(KeyguardState.PRIMARY_BOUNCER) + assertThat(info.animator).isNull() // dragging should be manually animated + + // WHEN the user stops dragging and shade is back to expanded + clearInvocations(transitionRepository) + runTransition(KeyguardState.LOCKSCREEN, KeyguardState.PRIMARY_BOUNCER) + shadeRepository.setShadeModel( + ShadeModel( + expansionAmount = 1f, + isUserDragging = false, + ) + ) + runCurrent() + + // THEN a transition from PRIMARY_BOUNCER => LOCKSCREEN should occur + val info2 = + withArgCaptor<TransitionInfo> { + verify(transitionRepository).startTransition(capture(), anyBoolean()) + } + assertThat(info2.from).isEqualTo(KeyguardState.PRIMARY_BOUNCER) + assertThat(info2.to).isEqualTo(KeyguardState.LOCKSCREEN) + assertThat(info2.animator).isNotNull() + + coroutineContext.cancelChildren() + } + private fun startingToWake() = WakefulnessModel( WakefulnessState.STARTING_TO_WAKE, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt index b81a3d46b4341e737006eafb15b5d8be7f34ac2b..47365457d9e487e471581398d77c9826cdc2ddf1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt @@ -100,11 +100,7 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() { keyguardRepository = FakeKeyguardRepository() bouncerRepository = FakeKeyguardBouncerRepository() configurationRepository = FakeConfigurationRepository() - featureFlags = - FakeFeatureFlags().apply { - set(Flags.FACE_AUTH_REFACTOR, false) - set(Flags.DELAY_BOUNCER, false) - } + featureFlags = FakeFeatureFlags().apply { set(Flags.FACE_AUTH_REFACTOR, false) } trustRepository = FakeTrustRepository() powerRepository = FakePowerRepository() underTest = @@ -138,7 +134,6 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() { context, keyguardUpdateMonitor, trustRepository, - featureFlags, testScope.backgroundScope, ), AlternateBouncerInteractor( diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt index 623c8771b3d21315335effd530ab9e12c4743232..7a17435b9165af59bcd50983d1c1a5aee419baae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt @@ -67,6 +67,7 @@ class WindowManagerLockscreenVisibilityManagerTest : SysuiTestCase() { underTest.setLockscreenShown(true) underTest.setAodVisible(true) + verify(activityTaskManagerService).setLockScreenShown(true, false) verify(activityTaskManagerService).setLockScreenShown(true, true) verifyNoMoreInteractions(activityTaskManagerService) } @@ -76,6 +77,7 @@ class WindowManagerLockscreenVisibilityManagerTest : SysuiTestCase() { underTest.setLockscreenShown(true) underTest.setAodVisible(true) + verify(activityTaskManagerService).setLockScreenShown(true, false) verify(activityTaskManagerService).setLockScreenShown(true, true) verifyNoMoreInteractions(activityTaskManagerService) @@ -97,4 +99,12 @@ class WindowManagerLockscreenVisibilityManagerTest : SysuiTestCase() { verifyNoMoreInteractions(activityTaskManagerService) } + + @Test + fun testAodVisible_noLockscreenShownCallYet_defaultsToShowLockscreen() { + underTest.setAodVisible(false) + + verify(activityTaskManagerService).setLockScreenShown(true, false) + verifyNoMoreInteractions(activityTaskManagerService) + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSectionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSectionTest.kt index 4e31af22f77160c732a581c778a7b26f908dcf46..8b8c59b78e46dc8c6cc51c760f21b6292b184853 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSectionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultIndicationAreaSectionTest.kt @@ -21,7 +21,7 @@ import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSectionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSectionTest.kt index 1c3b5e616ddfa3ff0b0b7c53832d46a241c5ce36..74956377d345fd521e15448428a06c460a192f36 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSectionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSectionTest.kt @@ -24,7 +24,7 @@ import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.LockIconViewController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.flags.FeatureFlags diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt index 06bf7f06a12d9b9007e7411dfb86760cfec6dc42..32d28a3d7bb27ef39f0d8918b7d8743ea8ec5a16 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt @@ -22,7 +22,7 @@ import android.os.UserHandle import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt index b935e1d3c65af9cb6f908252fed79d3359d5cc53..1c6cc873c54731ea5192868560d4de4bbd7b9d86 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt @@ -22,7 +22,7 @@ import android.content.Intent import android.os.UserHandle import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.animation.Expandable diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt index bd17de3ee93979e30181d1f40d3a0fa0fdc82e1b..9ab9b3d160d1c920a47d6c68e8a7fdcc815961d4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsAodViewModelTest.kt @@ -66,7 +66,7 @@ class UdfpsAodViewModelTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - overrideResource(com.android.systemui.R.dimen.lock_icon_padding, defaultPadding) + overrideResource(com.android.systemui.res.R.dimen.lock_icon_padding, defaultPadding) testScope = TestScope() shadeRepository = FakeShadeRepository() featureFlags = diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt index 0ad14d029e4006f76031030150b73c1fb189d780..4f970d708425c557af7cea77804aee2ac96951ab 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt @@ -69,7 +69,7 @@ class UdfpsFingerprintViewModelTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - overrideResource(com.android.systemui.R.dimen.lock_icon_padding, defaultPadding) + overrideResource(com.android.systemui.res.R.dimen.lock_icon_padding, defaultPadding) testScope = TestScope() configRepository = FakeConfigurationRepository() keyguardRepository = FakeKeyguardRepository() diff --git a/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java index 1d7d5df80f45642229333db0b213ee198ab34cc0..eed7ecd9d7b013e797b676633570cfcc3469d761 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java @@ -31,7 +31,7 @@ import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import com.android.internal.app.ILogAccessDialogCallback; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarObserverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarObserverTest.kt index d6ceea11b80102eec827ac4362a9c0c38ee8b24e..043dae608aa7ef986284188a260b62e2aab6fb90 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarObserverTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarObserverTest.kt @@ -24,7 +24,7 @@ import android.view.View import android.widget.SeekBar import android.widget.TextView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.media.controls.ui.SquigglyProgress import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/recommendation/SmartspaceMediaDataTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/recommendation/SmartspaceMediaDataTest.kt index 670f11787ce46c0ed217ae63f8b96f18e293ca7e..f7c20ac3595789cdfff21ed65dde8ae39c415574 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/recommendation/SmartspaceMediaDataTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/recommendation/SmartspaceMediaDataTest.kt @@ -20,7 +20,7 @@ import android.app.smartspace.SmartspaceAction import android.graphics.drawable.Icon import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt index 5939bb50bb25fc5e9ec8bf5033df585c1d01f67b..fb0a4be25aa0dc81fb6ff2884d133a25d9f3628f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt @@ -48,7 +48,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.internal.logging.InstanceId import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.InstanceIdSequenceFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDeviceManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDeviceManagerTest.kt index 0c57e7b825865d9ecc14f71817483cda89e3485e..85d3fbad5a6ee840096c15d6f08e7c0d4151bbb0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDeviceManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDeviceManagerTest.kt @@ -34,7 +34,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager import com.android.settingslib.bluetooth.LocalBluetoothProfileManager import com.android.settingslib.media.LocalMediaManager import com.android.settingslib.media.MediaDevice -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.media.controls.MediaTestUtils diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt index 3961a945414d1f29ea5e336cff5b98447b1ff1b4..a4c2a0850ce4c837865f473701130e9f1871ccbc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt @@ -31,7 +31,7 @@ import com.android.internal.logging.InstanceId import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.keyguard.TestScopeProvider -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt index 9a90a5ceb259bc3887a1643c9a40797829d4d4b1..d6e2e973b29d179a64715fa8df2551900e7592c9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt @@ -61,7 +61,7 @@ import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.internal.widget.CachingIconView import com.android.systemui.ActivityIntentHelper -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.bluetooth.BroadcastDialogController import com.android.systemui.broadcast.BroadcastSender @@ -1884,7 +1884,7 @@ public class MediaControlPanelTest : SysuiTestCase() { @Test fun bindRecommendation_listHasTooFewRecs_notDisplayed() { player.attachRecommendation(recommendationViewHolder) - val icon = Icon.createWithResource(context, R.drawable.ic_1x_mobiledata) + val icon = Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata) val data = smartspaceData.copy( recommendations = @@ -1911,7 +1911,7 @@ public class MediaControlPanelTest : SysuiTestCase() { @Test fun bindRecommendation_listHasTooFewRecsWithIcons_notDisplayed() { player.attachRecommendation(recommendationViewHolder) - val icon = Icon.createWithResource(context, R.drawable.ic_1x_mobiledata) + val icon = Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata) val data = smartspaceData.copy( recommendations = @@ -1955,7 +1955,7 @@ public class MediaControlPanelTest : SysuiTestCase() { val subtitle1 = "Subtitle1" val subtitle2 = "Subtitle2" val subtitle3 = "Subtitle3" - val icon = Icon.createWithResource(context, R.drawable.ic_1x_mobiledata) + val icon = Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata) val data = smartspaceData.copy( @@ -1998,7 +1998,7 @@ public class MediaControlPanelTest : SysuiTestCase() { listOf( SmartspaceAction.Builder("id1", "") .setSubtitle("fake subtitle") - .setIcon(Icon.createWithResource(context, R.drawable.ic_1x_mobiledata)) + .setIcon(Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata)) .setExtras(Bundle.EMPTY) .build() ) @@ -2013,7 +2013,7 @@ public class MediaControlPanelTest : SysuiTestCase() { useRealConstraintSets() player.attachRecommendation(recommendationViewHolder) - val icon = Icon.createWithResource(context, R.drawable.ic_1x_mobiledata) + val icon = Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata) val data = smartspaceData.copy( recommendations = @@ -2047,7 +2047,7 @@ public class MediaControlPanelTest : SysuiTestCase() { useRealConstraintSets() player.attachRecommendation(recommendationViewHolder) - val icon = Icon.createWithResource(context, R.drawable.ic_1x_mobiledata) + val icon = Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata) val data = smartspaceData.copy( recommendations = @@ -2086,7 +2086,7 @@ public class MediaControlPanelTest : SysuiTestCase() { listOf( SmartspaceAction.Builder("id1", "title1") .setSubtitle("") - .setIcon(Icon.createWithResource(context, R.drawable.ic_1x_mobiledata)) + .setIcon(Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata)) .setExtras(Bundle.EMPTY) .build(), SmartspaceAction.Builder("id2", "title2") @@ -2096,7 +2096,7 @@ public class MediaControlPanelTest : SysuiTestCase() { .build(), SmartspaceAction.Builder("id3", "title3") .setSubtitle("") - .setIcon(Icon.createWithResource(context, R.drawable.ic_3g_mobiledata)) + .setIcon(Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_3g_mobiledata)) .setExtras(Bundle.EMPTY) .build() ) @@ -2119,7 +2119,7 @@ public class MediaControlPanelTest : SysuiTestCase() { listOf( SmartspaceAction.Builder("id1", "") .setSubtitle("subtitle1") - .setIcon(Icon.createWithResource(context, R.drawable.ic_1x_mobiledata)) + .setIcon(Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_1x_mobiledata)) .setExtras(Bundle.EMPTY) .build(), SmartspaceAction.Builder("id2", "") @@ -2129,7 +2129,7 @@ public class MediaControlPanelTest : SysuiTestCase() { .build(), SmartspaceAction.Builder("id3", "") .setSubtitle("subtitle3") - .setIcon(Icon.createWithResource(context, R.drawable.ic_3g_mobiledata)) + .setIcon(Icon.createWithResource(context, com.android.settingslib.R.drawable.ic_3g_mobiledata)) .setExtras(Bundle.EMPTY) .build() ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaHierarchyManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaHierarchyManagerTest.kt index 33ed01f115b5928ba467da62f4929d2cd61f004b..25faeef85e500fa3ae284838561b57e47a4bd03a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaHierarchyManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaHierarchyManagerTest.kt @@ -24,7 +24,7 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardViewController -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq import com.android.systemui.dreams.DreamOverlayStateController diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt index ba97df910e436104df191525a0616a00a903c938..1f99303f10edd0a0bd02b8cccb41459a4c272e18 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt @@ -22,7 +22,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.media.controls.models.player.MediaViewHolder import com.android.systemui.media.controls.models.recommendation.RecommendationViewHolder diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java index e4f89a226a341b5f79ea7ffba28292384188b44f..2f057a2e14e4152a423411a46a0181d520578260 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java @@ -46,7 +46,7 @@ import androidx.test.filters.SmallTest; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.google.common.collect.ImmutableList; @@ -467,7 +467,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { @Test public void subStatusSupported_onBindViewHolder_bindDeviceRequirePremium_verifyView() { String deviceStatus = (String) mContext.getText( - R.string.media_output_status_require_premium); + com.android.settingslib.R.string.media_output_status_require_premium); when(mMediaDevice2.hasSubtext()).thenReturn(true); when(mMediaDevice2.getSubtext()).thenReturn(SUBTEXT_SUBSCRIPTION_REQUIRED); when(mMediaDevice2.getSubtextString()).thenReturn(deviceStatus); @@ -491,7 +491,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { @Test public void subStatusSupported_onBindViewHolder_bindDeviceWithAdPlaying_verifyView() { String deviceStatus = (String) mContext.getText( - R.string.media_output_status_try_after_ad); + com.android.settingslib.R.string.media_output_status_try_after_ad); when(mMediaDevice2.hasSubtext()).thenReturn(true); when(mMediaDevice2.getSubtext()).thenReturn(SUBTEXT_AD_ROUTING_DISALLOWED); when(mMediaDevice2.getSubtextString()).thenReturn(deviceStatus); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java index db00e09278867bd238d4075b1d4f20c15566ca89..9dfb5a5dcb3d6d4bff95f20a3b6399ae9af81a27 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java @@ -47,7 +47,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java index f25454c19ac96a51410278d9ae8e1e2cb04d9027..e7400e7ba454d60ecc7ad661bbe21ff46aa7de7c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialogTest.java @@ -50,7 +50,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index 19315803c7402a3a2f5757c1552489fa7ee581a1..ce999cb41e60f2d6104ef609fe9f7af17a8fbe6b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -71,7 +71,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DialogLaunchAnimator; diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java index bfc8c83c1c2ab0f9f48a8ad80b589951891e8138..379136b0586f16af7d89385fd000bf72e8266b1a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java @@ -49,7 +49,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt index b09fc558d0501e2dd73ad903eb8477c947335f1f..53e9dc8141617997eb384120f845a0db9c611d17 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt @@ -27,7 +27,7 @@ import android.media.AudioManager.MuteAwaitConnectionCallback.EVENT_CONNECTION import androidx.test.filters.SmallTest import com.android.settingslib.media.DeviceIconUtil import com.android.settingslib.media.LocalMediaManager -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttUtilsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttUtilsTest.kt index 6c3d6f533acee7282d2147696c325ffb856be14f..5c6d9131e1f07848f49ef6008b79c64dd92582f2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttUtilsTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttUtilsTest.kt @@ -20,7 +20,7 @@ import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.graphics.drawable.Drawable import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt index 2b66e7b3cd805fad5eba3e574a8a0e18afe87ccb..e2be4cbab14db1eaf34b15c923e575e4cf1eee1e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt @@ -33,7 +33,7 @@ import android.widget.ImageView import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.internal.logging.testing.UiEventLoggerFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.media.taptotransfer.MediaTttFlags diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt index c7a74da0a87df5bb327d51644cc87049c2a4e221..83145bd8bee869a9b855d50ea1714841e9265e70 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt @@ -35,7 +35,7 @@ import android.widget.TextView import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake import com.android.internal.statusbar.IUndoMediaTransferCallback -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.common.shared.model.Text.Companion.loadText diff --git a/packages/SystemUI/tests/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinatorTest.kt index b396cafb28d5563c74494ddcb779aa9430137a38..d0c6d7cddc4692d16fd58b7041e8734b854a2414 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/mediaprojection/taskswitcher/ui/TaskSwitcherNotificationCoordinatorTest.kt @@ -21,7 +21,7 @@ import android.app.NotificationManager import android.os.Handler import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.mediaprojection.taskswitcher.data.repository.ActivityTaskManagerTasksRepository import com.android.systemui.mediaprojection.taskswitcher.data.repository.FakeActivityTaskManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskBubblesServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskBubblesServiceTest.kt index baac9e020280305fca3d37562e7217eeafb7d05c..06127a7d83e7644dc6f8d076a848ac49db2b5859 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskBubblesServiceTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskBubblesServiceTest.kt @@ -21,7 +21,7 @@ import android.graphics.drawable.Icon import android.os.UserHandle import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.notetask.NoteTaskBubblesController.NoteTaskBubblesService import com.android.wm.shell.bubbles.Bubbles diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt index b50032fb073b75de31fa1139abbfda2a8c425cf8..cf43b2e122831d297e2dfe0c54a39a9d4e04edcd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt @@ -45,7 +45,7 @@ import android.provider.Settings import androidx.test.ext.truth.content.IntentSubject.assertThat import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.notetask.NoteTaskController.Companion.EXTRA_SHORTCUT_BADGE_OVERRIDE_PACKAGE import com.android.systemui.notetask.NoteTaskController.Companion.SHORTCUT_ID diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfigTest.kt index 58c762e3cc996340fce3de959094588681659fd3..119ffd28bebe982ec8ff065f88c94ae561abf08c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfigTest.kt @@ -28,7 +28,7 @@ import android.os.UserManager import android.test.suitebuilder.annotation.SmallTest import android.testing.AndroidTestingRunner import com.android.dx.mockito.inline.extended.ExtendedMockito -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java index bd913bab6f6513f14178353360b8a53d4032c080..30d66dc8b0407568f4283ddc8d415e1c98d38253 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java @@ -58,7 +58,7 @@ import android.util.DisplayMetrics; import androidx.test.filters.SmallTest; import com.android.internal.appwidget.IAppWidgetService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.people.widget.PeopleSpaceWidgetManager; import com.android.systemui.people.widget.PeopleTileKey; diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleTileViewHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleTileViewHelperTest.java index e6b960d752157dd0398029bed3927e604abccc28..d0e8cce8559c36ee8dc4e1022e02f75acd1c301b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleTileViewHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleTileViewHelperTest.java @@ -60,7 +60,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.people.widget.PeopleTileKey; diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java index e669d069700475f49d71deac13a60786bdb69a7a..a63b2211f71a83115a82b382d99ab435c9212093 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java @@ -101,7 +101,7 @@ import android.text.TextUtils; import androidx.preference.PreferenceManager; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.people.PeopleBackupFollowUpJob; import com.android.systemui.people.PeopleSpaceUtils; diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java index b9ee19b9eaf24ed64265abc8c2c2238f18f23544..2bdad2bc49a93356220c80a9fe58183a951020ea 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java @@ -45,7 +45,7 @@ import android.testing.TestableLooper.RunWithLooper; import android.testing.TestableResources; import com.android.settingslib.fuelgauge.Estimate; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.keyguard.WakefulnessLifecycle; diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogTest.kt index 1d687b141d1e43a0678b42a54315b826e30de33c..b7541456a76c94c11cd349ab10170709641641c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogTest.kt @@ -22,7 +22,7 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.After diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogV2Test.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogV2Test.kt index f4644a578d241d7f9c5708d663c33fb0b2c8a507..6c01ba5b145bbca7034ccd43c3b27d917cd1bd2e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogV2Test.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogV2Test.kt @@ -24,7 +24,7 @@ import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.widget.TextView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.After diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt index bf237abba8fae85e404229102d4a617290ce4115..8c5d99a844116f17c23fb351f555b5a2259e65e4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt @@ -5,7 +5,7 @@ import android.testing.TestableLooper import android.view.View import android.widget.FrameLayout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.qs.customize.QSCustomizer import com.android.systemui.util.mockito.eq diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java index d9db60d770777bcdd61741fe100c564a6edd4405..98e803f15561c6cfb25937dad48b4ef5c3388ea2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java @@ -34,7 +34,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.retail.data.repository.FakeRetailModeRepository; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index 8afe095cbaf0eaa4b536df44d11899769dc46dd9..c4c233ca5eef49f94d7033e600f24f08aa96bad3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -48,7 +48,7 @@ import androidx.lifecycle.Lifecycle; import androidx.test.filters.SmallTest; import com.android.keyguard.BouncerPanelExpansionCalculator; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java index 24cd3e7de5b56c01745c51f8542a8bb6fe45536a..e2ac7bc4fc6efcc6f1b3a8fe1c03373293ae6b35 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java @@ -42,7 +42,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.testing.UiEventLoggerFake; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.media.controls.ui.MediaHost; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt index 4cb194443112df9b958437b8f7deb0feebc577b4..5e4c954a0b26fb27ba02de12f79aedcd2ee1830c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt @@ -7,7 +7,7 @@ import android.testing.TestableResources import android.view.ContextThemeWrapper import com.android.internal.logging.MetricsLogger import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.media.controls.ui.MediaHost diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt index 1df504a668f42751919a24728a70dba70889f144..cc48640b15bcb0d3f96d61c04839fbabf4f95c28 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt @@ -26,7 +26,7 @@ import android.view.accessibility.AccessibilityNodeInfo import android.widget.FrameLayout import android.widget.LinearLayout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTileView diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java index 2dc78a323f55c0b0bf02af37806e75ed5fd73016..fbf3724c1d38251955c6779f34d5092589151d1f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java @@ -53,7 +53,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.animation.Expandable; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java index 64d3b822f13c626c3d4b56bf8bca2bb5de98cf6c..b595e8de3bad5f4189b88057193c9f26e5efa645 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java @@ -48,7 +48,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.CollectionUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.dump.nano.SystemUIProtoDump; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt index 9bd3b79799463fe14edcac59f6ca6908a6ea3c5c..2db79c2dc52700c4e64b8fe325dda94a1bcff54c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt @@ -22,7 +22,7 @@ import android.view.ContextThemeWrapper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger import com.android.internal.logging.testing.UiEventLoggerFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.media.controls.ui.MediaHost diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java index 4a15d746eb32a10ba8e10e94050d9e463474119f..f809259eedc1011aacb76821b029d7b64be58adf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java @@ -39,7 +39,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.tileimpl.QSTileViewImpl; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterDelegateTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterDelegateTest.java index a5dead0f325893ca4f97b9e66ec472b26ad475ce..6cad985c7b57ba972dba1cdc51151910b1bb5d81 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterDelegateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterDelegateTest.java @@ -31,7 +31,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java index 2eed38fcb767eae3d877355fac7d2b9562628747..bde30382ba05d988d1fd44ecae44c1817f350f37 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java @@ -50,7 +50,7 @@ import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; import com.android.internal.logging.InstanceId; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.QSHost; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt index 244f627c46b8e4b7fe6add3300628a9210bf631c..126dd633108e1b4790bd978100ae76743ee84dfb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt @@ -34,7 +34,7 @@ import android.testing.TestableLooper import android.view.IWindowManager import android.view.View import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.animation.view.LaunchableFrameLayout diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java index ec8552b7f3949bb0dd73c5606c4a929c620c177a..b8e6403696a580800ecc1f132098a0713d531573 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java @@ -23,7 +23,7 @@ import android.test.suitebuilder.annotation.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt index fb17fc0a05956995ce986126b42eab4c3d10e58c..365e8a5187d4730d94b191ad7c3921639296184b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt @@ -23,7 +23,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.qs.QSTileView import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt index d647d6add512c5cc69dcd4f7bc46d5f83428a509..4ada44c40f49c30326767623d74ae73b7fb09cdc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt @@ -25,7 +25,7 @@ import android.view.ContextThemeWrapper import androidx.test.filters.SmallTest import com.android.settingslib.Utils import com.android.settingslib.drawable.UserIconDrawable -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/TileSpecSettingsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/TileSpecSettingsRepositoryTest.kt index aef5fafe05ba29f43d674b572825045b80a6fc54..1c28e4c022a66388866f33d59f04a726ce4bd4b0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/TileSpecSettingsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/TileSpecSettingsRepositoryTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.qs.pipeline.data.repository import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingListTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingListTest.kt index 6e579d46fc349b837b0d708815a5a6a8c6f9fd58..15e401d24b020d7d8293c02a0baf27ae4bfe6f6d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingListTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/AutoAddableSettingListTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.qs.pipeline.domain.autoaddable import android.content.ComponentName import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.qs.pipeline.shared.TileSpec diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddableTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddableTest.kt index 8036cb44e45d81783142b94fa68c879d845a577e..5ce15fa57b1f3f24cce451f0f483b74477483859 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddableTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/domain/autoaddable/SafetyCenterAutoAddableTest.kt @@ -20,7 +20,7 @@ import android.content.ComponentName import android.content.pm.PackageManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileViewImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileViewImplTest.kt index 780c56cf7c52542a5c8b15b7e6533fef5097c9a1..e0fff9c1087397e51f3691db0e291f0411726ea3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileViewImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileViewImplTest.kt @@ -27,7 +27,7 @@ import android.view.View import android.view.accessibility.AccessibilityNodeInfo import android.widget.TextView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.qs.QSTile import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/TilesStatesTextTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/TilesStatesTextTest.kt index b8d018f5f8503f45b0c3f42295d35d10ecf0ce4d..f2400ec85febc21fe5e029cf271d767d27e47430 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/TilesStatesTextTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/TilesStatesTextTest.kt @@ -18,7 +18,7 @@ package com.android.systemui.qs.tileimpl import android.testing.AndroidTestingRunner import androidx.test.filters.MediumTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertEquals diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt index c60cecb29d75b10adacfcaf050bdf8eeeb3884ad..e2a3fac60ee8b8890f8ddbc13862159a2e8ef227 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt @@ -22,7 +22,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.classifier.FalsingManagerFake diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt index ff6814c060019a1b2e2fb094396b00dcfeba61a8..605dc1402fc3f228a7b2afeb6a7b9f276627e634 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt @@ -24,7 +24,7 @@ import android.testing.TestableLooper.RunWithLooper import android.view.View import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt index e5c55d8b6c560dcf6f346664539445c3c1ecd509..623a8e0f7437bdda6a4c0ec768767df634949b5f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt @@ -11,7 +11,7 @@ import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger import com.android.settingslib.Utils import com.android.settingslib.bluetooth.CachedBluetoothDevice -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt index 70d82fdb6e5a4864a5b71fc91cda394860e319ec..c4cf3425ed760ffa212efd099dacb8027b926767 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt @@ -21,7 +21,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java index 2e02bbe2ebf244a61da173d0c68bcbb8a7d9877f..c93ff4b61f45c431aae8313ab5262b4f001a3af0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java @@ -32,7 +32,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt index 176b33fa9fc840b109bd81c767647ea942674643..51e95be3611bf9810f3332e26757d0d19e28dd4a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt @@ -21,7 +21,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.classifier.FalsingManagerFake diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt index 1346069d3c25705ebdd29ede6adce783f259266a..bce4c06d320f4fc09afe6268c5640169e9cc1013 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt @@ -27,7 +27,7 @@ import android.testing.TestableLooper import androidx.lifecycle.LifecycleOwner import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.classifier.FalsingManagerFake diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt index 77a4436664427081113b4b691839a73488c15af7..5dd297ca1bdcfb16235194ebb48a034b65d705a9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt @@ -29,7 +29,7 @@ import android.view.ContextThemeWrapper import android.view.View import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.classifier.FalsingManagerFake diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java index f231c6e560969d17db7882daa687dfa12588cdde..a0c107340dcd35f2edef6bd5c32322a7da68e19e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java @@ -41,7 +41,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.classifier.FalsingManagerFake; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt index 73aa6991c18a43d82a7fe501bff7c64f0da5ead9..c1a09288d8a206149b1979697c47b4d9984fbf60 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt @@ -6,7 +6,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java index 73f61d0690e2242421e331d038f2842185ca102c..14dfdea6fbc95107ac73e9f8100280e7e0b26efe 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java @@ -31,7 +31,7 @@ import androidx.test.filters.SmallTest; import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.internal.logging.MetricsLogger; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; @@ -116,7 +116,7 @@ public class HotspotTileTest extends SysuiTestCase { assertThat(mState.state).isNotEqualTo(Tile.STATE_UNAVAILABLE); assertThat(String.valueOf(mState.secondaryLabel)) - .isNotEqualTo(mContext.getString(R.string.wifitrackerlib_admin_restricted_network)); + .isNotEqualTo(mContext.getString(com.android.wifitrackerlib.R.string.wifitrackerlib_admin_restricted_network)); mockitoSession.finishMocking(); } @@ -131,7 +131,7 @@ public class HotspotTileTest extends SysuiTestCase { assertThat(mState.state).isEqualTo(Tile.STATE_UNAVAILABLE); assertThat(String.valueOf(mState.secondaryLabel)) - .isEqualTo(mContext.getString(R.string.wifitrackerlib_admin_restricted_network)); + .isEqualTo(mContext.getString(com.android.wifitrackerlib.R.string.wifitrackerlib_admin_restricted_network)); mockitoSession.finishMocking(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt index b6cf459f579c19603c8699c09f20cdb5ccf4a1b0..83f8f180ae9d93b9fcd185fb9d320da1abb7dd09 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt @@ -22,7 +22,7 @@ import android.testing.TestableLooper import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java index 7957c6a7cfb6563d55eb1e3e616d9ba60a7285cc..c1f19645e4a7b6f99a815ace18406e487925a132 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java @@ -29,7 +29,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt index 0bf0b38f7471c9a1758a3ffb81bdd4aba243365d..62a50e369b7db69a5294afd0b4b5753983e43b12 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt @@ -22,7 +22,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt index ceff546106f48945c0f7d9e57de7636e8031cf7a..3511bb31c443111a5f3f74c6d06f521bb6f9a46f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt @@ -21,7 +21,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java index 763a7e5e4e0699997c46c38900036d7c8bdddafd..118ad2c258a24c5a26e059408aea189c812b8c61 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java @@ -30,7 +30,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.classifier.FalsingManagerFake; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt index 6c8f76b48f033b02dbb47c36b1ce3e6a11a6d62a..a1d9e4149b95e54b339c5ff8e4d970d16600fc1c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt @@ -23,7 +23,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.dagger.NightDisplayListenerModule diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java index 71aa7a8d001571972d5a1e8b75a1d7c3334ec0c7..7b3171dbedd05353d301eb1121dd28ca9f9aa89c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java @@ -30,7 +30,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java index dd55baddc2d991925985085923447b5f78fbc274..2d18f9293ec85330fe14d057851cfb0a08bb3053 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java @@ -58,7 +58,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java index d2445944c182ed0bcba8eef9a76f055cbbd374d7..c5721ffb912d47a52ff05d81ad16c12cb46e4226 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java @@ -32,7 +32,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.R; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R.drawable; +import com.android.systemui.res.R.drawable; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java index 41545fc2abfd1b7ada561e7a7f96dab550d086a5..df6993d11447d06a6b6fc587281baac99679eaaf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java @@ -33,7 +33,7 @@ import android.testing.TestableLooper; import android.testing.TestableResources; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java index fff2b8f5f8cd95c7aeb5351b0002a044238cc122..5b3d45bb6625ec4ddf030161c1d7451c55464d1c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java @@ -35,7 +35,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.classifier.FalsingManagerFake; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt index 79147e7e66b445e547f62e23195536bcffefd3c7..47fc3ec5107800d46a4c52ae182173e1c635d978 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt @@ -25,7 +25,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt index 18e40f63395519b9d450802348ac12851afb49d9..f9d69c2cce64150f2d8113f1d976b375bf1a99a2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt @@ -26,7 +26,7 @@ import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake import com.android.internal.util.UserIcons -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.qs.QSUserSwitcherEvent diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java index df037c0661f32f355ad5115864d7c22c1737cd50..8004c6de16027d5ba3890fd4cf15d3e5c3ab7792 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java @@ -20,7 +20,7 @@ import android.widget.LinearLayout; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.wifitrackerlib.WifiEntry; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index 25684ce2333039ada3a257b5390bf3f70d37c506..6dc7a064af15cb9570a5f105b71864fd3ef7140b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -63,7 +63,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.settingslib.wifi.WifiUtils; import com.android.settingslib.wifi.dpp.WifiDppIntentHelper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -983,7 +983,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { spyController.mCarrierNetworkChangeMode = true; String dds = spyController.getMobileNetworkSummary(SUB_ID); - assertThat(dds).contains(mContext.getString(R.string.carrier_network_change_mode)); + assertThat(dds).contains(mContext.getString(com.android.settingslib.R.string.carrier_network_change_mode)); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 2c74d4fa9748ea65c63db8faa6c8f34677008752..039e58a64eb5d8227070223c97846fa910d8558b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -33,7 +33,7 @@ import androidx.test.filters.SmallTest; import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.internal.logging.UiEventLogger; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.statusbar.policy.KeyguardStateController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java index 55813f60aecd504835d0378e157c542a2ca3d37b..c108a80d0c7246bc9db649288cdb446833e1b653 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java @@ -28,7 +28,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.util.concurrency.FakeExecutor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogTest.kt index a6c25be1e6a5d0b1836f46fb601f58b924aa43c9..d470d24489af1d2856d95cbf8acff3b20119ef19 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogTest.kt @@ -22,7 +22,7 @@ import android.testing.TestableLooper import android.view.View import android.widget.Spinner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionIntentCreatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionIntentCreatorTest.kt index ca4486b533ff56f592b9237ab00c6c219aed5a94..36639d4b7ca4bcda095438fdca6191c76662fb24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionIntentCreatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionIntentCreatorTest.kt @@ -22,7 +22,7 @@ import android.content.Intent import android.net.Uri import androidx.test.ext.truth.content.IntentSubject.assertThat as assertThatIntent import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/MessageContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/MessageContainerControllerTest.kt index d6720568cef5abce04f8b123ac0dbfbc9b0753af..d4e8d37b3b444e88f91cd5c801608fe4a1bd0eff 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/MessageContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/MessageContainerControllerTest.kt @@ -61,19 +61,19 @@ class MessageContainerControllerTest : SysuiTestCase() { workProfileData = WorkProfileMessageController.WorkProfileFirstRunData(appName, icon) val guideline = Guideline(mContext) - guideline.id = com.android.systemui.R.id.guideline + guideline.id = com.android.systemui.res.R.id.guideline screenshotView.addView(guideline) container = FrameLayout(mContext) - container.id = com.android.systemui.R.id.screenshot_message_container + container.id = com.android.systemui.res.R.id.screenshot_message_container screenshotView.addView(container) workProfileFirstRunView = FrameLayout(mContext) - workProfileFirstRunView.id = com.android.systemui.R.id.work_profile_first_run + workProfileFirstRunView.id = com.android.systemui.res.R.id.work_profile_first_run container.addView(workProfileFirstRunView) detectionNoticeView = FrameLayout(mContext) - detectionNoticeView.id = com.android.systemui.R.id.screenshot_detection_notice + detectionNoticeView.id = com.android.systemui.res.R.id.screenshot_detection_notice container.addView(detectionNoticeView) messageContainer.setView(screenshotView) diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/WorkProfileMessageControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/WorkProfileMessageControllerTest.java index 31f7771bb9394868bd3bb78c0e6c09a8de3338f3..10bd6af7ddf02b68291b9a3074987c68f75d1a79 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/WorkProfileMessageControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/WorkProfileMessageControllerTest.java @@ -38,7 +38,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.FakeSharedPreferences; diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsActivityTest.java index ab91d9fc0f8dc9e2269dc7fbe8929bc9b92aa08a..0f33aaf2019510a243a106fe05108884baeb72c1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsActivityTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsActivityTest.java @@ -47,7 +47,7 @@ import androidx.test.rule.ActivityTestRule; import androidx.test.runner.intercepting.SingleActivityFactory; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.screenshot.ImageExporter; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivityTest.java index 674ce9cab0d259848a053e1b97cbc71fc304d949..3d5552719aca3c0d2c8c969d052e3f8be3c6e5db 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivityTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/appclips/AppClipsTrampolineActivityTest.java @@ -57,7 +57,7 @@ import androidx.test.runner.intercepting.SingleActivityFactory; import com.android.internal.infra.ServiceConnector; import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IAppClipsService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.qualifiers.Background; diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessDialogTest.kt index ed1397ff70132287ede17f8aa22dbf4c1124516d..152be6529464ed075131e5c0fc1661de4b6ace59 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessDialogTest.kt @@ -25,7 +25,7 @@ import android.view.ViewGroup import android.view.WindowManagerPolicyConstants.EXTRA_FROM_BRIGHTNESS_KEY import androidx.test.filters.SmallTest import androidx.test.rule.ActivityTestRule -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.activity.SingleActivityFactory import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt index d75405fe503f4e8f13a71457529babcb9723443d..707a2971b1eba24385e5bdcab5d4e49a8f079d0f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt @@ -40,7 +40,6 @@ import org.mockito.Mock import org.mockito.Mockito.isNull import org.mockito.Mockito.never import org.mockito.Mockito.notNull -import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.mockito.Mockito.`when` as whenever @@ -61,6 +60,8 @@ class BrightnessSliderControllerTest : SysuiTestCase() { private lateinit var motionEvent: MotionEvent @Mock private lateinit var listener: ToggleSlider.Listener + @Mock + private lateinit var mBrightnessSliderHapticPlugin: BrightnessSliderHapticPlugin @Captor private lateinit var seekBarChangeCaptor: ArgumentCaptor<SeekBar.OnSeekBarChangeListener> @@ -79,7 +80,12 @@ class BrightnessSliderControllerTest : SysuiTestCase() { whenever(motionEvent.copy()).thenReturn(motionEvent) mController = - BrightnessSliderController(brightnessSliderView, mFalsingManager, uiEventLogger) + BrightnessSliderController( + brightnessSliderView, + mFalsingManager, + uiEventLogger, + mBrightnessSliderHapticPlugin, + ) mController.init() mController.setOnChangedListener(listener) } @@ -94,6 +100,7 @@ class BrightnessSliderControllerTest : SysuiTestCase() { mController.onViewAttached() verify(brightnessSliderView).setOnSeekBarChangeListener(notNull()) + verify(mBrightnessSliderHapticPlugin).start() } @Test @@ -103,6 +110,7 @@ class BrightnessSliderControllerTest : SysuiTestCase() { verify(brightnessSliderView).setOnSeekBarChangeListener(isNull()) verify(brightnessSliderView).setOnDispatchTouchEventListener(isNull()) + verify(mBrightnessSliderHapticPlugin).stop() } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImplTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..51629b5c01e3fa26ac9cbc4ee060da213673651a --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderHapticPluginImplTest.kt @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings.brightness + +import android.view.VelocityTracker +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.haptics.slider.SeekableSliderEventProducer +import com.android.systemui.statusbar.VibratorHelper +import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.time.FakeSystemClock +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.Mock +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidJUnit4::class) +class BrightnessSliderHapticPluginImplTest : SysuiTestCase() { + + @Mock private lateinit var vibratorHelper: VibratorHelper + @Mock private lateinit var velocityTracker: VelocityTracker + @Mock private lateinit var mainDispatcher: CoroutineDispatcher + + private val systemClock = FakeSystemClock() + private val sliderEventProducer = SeekableSliderEventProducer() + + private lateinit var plugin: BrightnessSliderHapticPluginImpl + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + whenever(vibratorHelper.getPrimitiveDurations(anyInt())).thenReturn(intArrayOf(0)) + } + + @Test + fun start_beginsTrackingSlider() = runTest { + createPlugin(UnconfinedTestDispatcher(testScheduler)) + plugin.start() + + assertThat(plugin.isTracking).isTrue() + } + + @Test + fun stop_stopsTrackingSlider() = runTest { + createPlugin(UnconfinedTestDispatcher(testScheduler)) + // GIVEN that the plugin started the tracking component + plugin.start() + + // WHEN called to stop + plugin.stop() + + // THEN the tracking component stops + assertThat(plugin.isTracking).isFalse() + } + + @Test + fun start_afterStop_startsTheTrackingAgain() = runTest { + createPlugin(UnconfinedTestDispatcher(testScheduler)) + // GIVEN that the plugin started the tracking component + plugin.start() + + // WHEN the plugin is restarted + plugin.stop() + plugin.start() + + // THEN the tracking begins again + assertThat(plugin.isTracking).isTrue() + } + + private fun createPlugin(dispatcher: CoroutineDispatcher) { + plugin = + BrightnessSliderHapticPluginImpl( + vibratorHelper, + systemClock, + dispatcher, + velocityTracker, + sliderEventProducer, + ) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt index 0a1eca69f1ced372ed9f38e31a0a2334e79c59d8..2b3588aa6e3c2c47a7d09ead1b7c5e9f9b2bd568 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt @@ -22,7 +22,7 @@ import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Expect import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt index 38a666eeb410c91d5ed408190689ac894fb37854..bff408a7ddbaf6ea428d60f98edf1da195c9b0d5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState.KEYGUARD diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java index 9130bc266d11fa1be9188fd5911891e1ddb1234c..31c8a3d77d6b2594199c336f619f928f887528c2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java @@ -79,7 +79,7 @@ import com.android.keyguard.dagger.KeyguardStatusBarViewComponent; import com.android.keyguard.dagger.KeyguardStatusViewComponent; import com.android.keyguard.dagger.KeyguardUserSwitcherComponent; import com.android.keyguard.logging.KeyguardLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index 911cab4f9dd7ddeb2b52d7629fbd701841ba3944..37ec7622a83632fea1ab7ed17101982e9ee38266 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -57,7 +57,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.FaceAuthApiRequestReason; import com.android.systemui.DejankUtils; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.shared.model.WakeSleepReason; import com.android.systemui.keyguard.shared.model.WakefulnessModel; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt index b0125f8289ec1a3f852c9c961b5890272e597c4d..aead53e7ce9f0406be3f1bee0007d80276876963 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt @@ -25,7 +25,7 @@ import android.view.ViewStub import androidx.test.filters.SmallTest import com.android.internal.util.CollectionUtils import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.statusbar.StatusBarState.KEYGUARD diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index dfd782b73a222056e2c24239fe7d6d8973ca7372..2d00e8c24f339b7815f60b2197f8864eb2bb1170 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -46,7 +46,7 @@ import android.view.WindowManager; import androidx.test.filters.SmallTest; import com.android.internal.colorextraction.ColorExtractor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.colorextraction.SysuiColorExtractor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt index 3da5f6a4b7c0a9acc8095d65ddab1729fe5a61be..223b1c431b2ddce06b71d09749f7fb8b4d163638 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt @@ -26,7 +26,7 @@ import com.android.keyguard.KeyguardMessageAreaController import com.android.keyguard.KeyguardSecurityContainerController import com.android.keyguard.LockIconViewController import com.android.keyguard.dagger.KeyguardBouncerComponent -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.back.domain.interactor.BackActionInteractor import com.android.systemui.bouncer.data.factory.BouncerMessageFactory diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt index 04c4b45251f29ee031039d4363b13251e3c22d1f..e8170163d616175cfdcfb8f4ccb093a712a48bee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt @@ -25,7 +25,7 @@ import com.android.keyguard.KeyguardMessageAreaController import com.android.keyguard.KeyguardSecurityContainerController import com.android.keyguard.LockIconViewController import com.android.keyguard.dagger.KeyguardBouncerComponent -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.back.domain.interactor.BackActionInteractor import com.android.systemui.bouncer.data.factory.BouncerMessageFactory diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt index e9e6d31ff21473b9225525a0648c5ef08dcb06ff..e70dbc7f4fdab8081ebbfdfe2e9ce95d75313c43 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt @@ -27,7 +27,7 @@ import androidx.annotation.IdRes import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt index 6801f2fb73949854109d1a094ff099ad56a97b66..ac8c924fe68968c630f1a9adc48b5230f6bf873b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt @@ -27,7 +27,7 @@ import androidx.annotation.IdRes import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQuickSettingsContainerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQuickSettingsContainerTest.kt index 8bb8f6247e254375d1e4d14d8b8c4ab2b50b5f90..f7d2497d0bbf0e4b185b5789ce4d07b72b1200ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQuickSettingsContainerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQuickSettingsContainerTest.kt @@ -22,7 +22,7 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.qs.QSFragment import com.android.systemui.util.mockito.whenever diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt index d421acac2daa3c615aa617c4d70fc3d7a5b28109..2cd740d35c1440f3e02aad8c8844cf01194f6a99 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt @@ -6,7 +6,7 @@ import android.graphics.Rect import android.testing.AndroidTestingRunner import android.view.DisplayCutout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.battery.BatteryMeterView import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java index 849127ed10e6974c707fe291fba763556b65307c..fb0d4db4840a06d7b9680a4b2c7c6deb601e1301 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java @@ -34,7 +34,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardStatusView; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java index 6d288e1db1cb801f7e56a0c4cbf883b01cbdea92..5ca45f3df472af8dc7c94fa82430d61a54fda3dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java @@ -41,7 +41,7 @@ import android.view.MotionEvent; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.qs.QS; import org.junit.Test; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt index 7d5f68e783d5a4e8f9b36949067f7707673720f6..56061f64c3152e3f93baeca7fcde5bae4bab40c3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt @@ -35,7 +35,7 @@ import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest import com.android.app.animation.Interpolators -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/carrier/ShadeCarrierTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/carrier/ShadeCarrierTest.java index dae9c975b997608462bc11dc362e82a9c69f4e2f..a657edfada279a9993191727975b8c828db4b360 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/carrier/ShadeCarrierTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/carrier/ShadeCarrierTest.java @@ -31,7 +31,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; import com.android.settingslib.mobile.TelephonyIcons; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt index 342b1c5b1ad2adfb8ed7939b865916ada1baeec7..d018cbbfbc24fb8fe6c70918d122600c8585e246 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt @@ -25,7 +25,7 @@ import android.os.UserManager import androidx.test.filters.SmallTest import com.android.internal.logging.UiEventLogger import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/transition/LargeScreenShadeInterpolatorImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/LargeScreenShadeInterpolatorImplTest.kt index 36f82c2a0e1c6096c60a29e7ba8c3cf7df7a99a7..a844bffc3ea3ee3e7621dae43f4fea8b5a65c40e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/transition/LargeScreenShadeInterpolatorImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/LargeScreenShadeInterpolatorImplTest.kt @@ -2,7 +2,7 @@ package com.android.systemui.shade.transition import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController diff --git a/packages/SystemUI/tests/src/com/android/systemui/shadow/DoubleShadowTextClockTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shadow/DoubleShadowTextClockTest.kt index f5a24ff0c7316e40a519b642e1136908b0f95ee1..eb418fd05b5fd7fd86d92564b12f6f0f7a11d5e2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shadow/DoubleShadowTextClockTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shadow/DoubleShadowTextClockTest.kt @@ -22,7 +22,7 @@ import android.content.res.TypedArray import android.testing.AndroidTestingRunner import android.util.AttributeSet import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.shared.R import com.android.systemui.SysuiTestCase import com.android.systemui.shared.shadow.DoubleShadowTextClock import com.android.systemui.util.mockito.whenever diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/AnimatableClockViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/AnimatableClockViewTest.kt index e92368df86632b4fb531e1dcaf6f46b77b461c9f..7b0cd19ca7f285014f8419968f7561ce0c501ca9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/AnimatableClockViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/AnimatableClockViewTest.kt @@ -20,7 +20,7 @@ import android.testing.AndroidTestingRunner import android.view.LayoutInflater import androidx.test.filters.SmallTest import com.android.app.animation.Interpolators -import com.android.systemui.R +import com.android.systemui.customization.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.TextAnimator import com.android.systemui.util.mockito.any diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt index 3f3faf7f232779216dd9cd44bbcceb1042726bfa..bd3dae4f5faedb5a07f94194aef012492d9c940a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt @@ -24,7 +24,7 @@ import android.util.TypedValue import android.view.LayoutInflater import android.widget.FrameLayout import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.customization.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.ClockSettings import com.android.systemui.shared.clocks.DefaultClockController.Companion.DOZE_COLOR diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java index 280897d8bd75faf5ef4e7ea95886271012ad20a9..b98dc00160666dd5469b3216ed29a310ee744a46 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java @@ -39,7 +39,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerBaseTest.java index d44846ec45b06f18fdd1e96d6a94812998b1022f..63e46d1895bd4ec978216c31c5932a610a18aca1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerBaseTest.java @@ -56,7 +56,7 @@ import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FaceHelpMessageDeferral; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index 1240f26c8af819e71df5920304afa5800a3d49f4..2bcad1d27b62eee9b571ca809a6aa707ed04b0d7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -73,7 +73,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.TrustGrantFlags; import com.android.settingslib.fuelgauge.BatteryStatus; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dock.DockManager; import com.android.systemui.keyguard.KeyguardIndication; import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionControllerTest.kt index 673d63f3a07d2b63ec2bccf6b10146ab922fa74a..0b4de345e2d7e053101ff01d4e90d42fc3dda7d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeQsTransitionControllerTest.kt @@ -18,7 +18,7 @@ package com.android.systemui.statusbar import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.qs.QS diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt index 2c9dfcc25324ef4972c52f9068651a6be929d11d..6e990a7aae235a65afec498c606e641fb3f0a156 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt @@ -6,7 +6,7 @@ import android.testing.TestableLooper import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import com.android.systemui.ExpandHelper -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt index a258f67932bd51d15a1805378e297ebf322a29e7..68bc72b09f941bff00b7573592402479550cd5e7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt @@ -23,7 +23,7 @@ import android.view.Choreographer import android.view.View import android.view.ViewRootImpl import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java index c75aa81e4c43063bd0e6fa8f2fc48032331b2f81..544860e935f53a0770cf6329eff74ac3b6567b74 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java @@ -36,7 +36,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.IStatusBarService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.notification.collection.NotifPipeline; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java index 8d016e30c0c123f075588a8923a34ae92c2ae6f0..1592c3007ec837265ed966ae0a3ea4282ceadf82 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java @@ -52,7 +52,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.util.ContrastColorUtil; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/VibratorHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/VibratorHelperTest.kt index aab4bc361d7b62a4e464a2807f08480e8ed12ff3..b90582575970a4676fb749315ee9bcff3624046c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/VibratorHelperTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/VibratorHelperTest.kt @@ -74,6 +74,18 @@ class VibratorHelperTest : SysuiTestCase() { verifyAsync().vibrate(any(VibrationEffect::class.java)) } + @Test + fun testVibrate5() { + vibratorHelper.vibrate( + mock(VibrationEffect::class.java), + mock(VibrationAttributes::class.java) + ) + verifyAsync().vibrate( + any(VibrationEffect::class.java), + any(VibrationAttributes::class.java) + ) + } + @Test fun testPerformHapticFeedback() { val constant = HapticFeedbackConstants.CONFIRM diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java index 2d29c80a15ac681f80ad5a65d19846a6fb1dc4fb..44e3bb43c4ce88f9d8f3b4d708b9c7031ef5bffa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java @@ -29,7 +29,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.settingslib.mobile.TelephonyIcons; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener; -import com.android.systemui.tests.R; +import com.android.systemui.res.R; import org.junit.Before; import org.junit.Test; @@ -179,7 +179,7 @@ public class CallbackHandlerTest extends SysuiTestCase { @Test public void testSignalCallback_setIsAirplaneMode() { IconState state = - new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description"); + new IconState(true, com.android.settingslib.R.drawable.stat_sys_airplane_mode, "Test Description"); mHandler.setIsAirplaneMode(state); waitForCallbacks(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java index 35b9814cd81d6676b09f4e87e8e081aa3b88635a..375ca06399264cab14ab0d21f96ec23bb2b23041 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java @@ -41,7 +41,7 @@ import android.testing.TestableLooper.RunWithLooper; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.log.LogBuffer; import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/DisableFlagsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/DisableFlagsRepositoryTest.kt index 88ddc2d9ef03448ac8b510fc37001f196e0dee7a..31e1fef76383704c1644bfbde2c263b56b469ef9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/DisableFlagsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/DisableFlagsRepositoryTest.kt @@ -22,7 +22,7 @@ import android.app.StatusBarManager.DISABLE_NONE import android.app.StatusBarManager.DISABLE_NOTIFICATION_ALERTS import android.content.res.Configuration import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.log.LogBufferFactory diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java index 524ead22ee9468e3f654e4f4f058fc21024d5dc9..a59ba071d7e8751053c4f283fa74c48085f6f2ee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java @@ -32,7 +32,7 @@ import android.util.ArrayMap; import android.view.LayoutInflater; import android.view.View; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.media.dialog.MediaOutputDialogFactory; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt index 470d34037e452604642b94fe6fbbcc95b2635b34..d86f8bbbeb15a7ba9a40efb2effc498116963c24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt @@ -16,7 +16,7 @@ import com.android.systemui.statusbar.notification.row.NotificationTestHelper import com.android.systemui.statusbar.notification.stack.NotificationListContainer import com.android.systemui.statusbar.phone.HeadsUpManagerPhone import com.android.systemui.statusbar.policy.HeadsUpUtil -import com.android.systemui.tests.R +import com.android.systemui.res.R import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue import kotlinx.coroutines.test.TestScope diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java index f0abf2f4a24f7637df3778cc817f3d6274c08afd..c664c39f443265b10b7e6a552c068f091d6a3217 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java @@ -33,7 +33,7 @@ import android.view.View; import android.view.animation.Interpolator; import com.android.app.animation.Interpolators; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.notification.stack.AnimationFilter; import com.android.systemui.statusbar.notification.stack.AnimationProperties; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java index 90f6201e29d7a201c342e7641f978f88af10bd43..ccc9dc0d961844242c77e8ff53e7000d3ac99926 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java @@ -50,7 +50,7 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.RankingBuilder; import com.android.systemui.statusbar.SbnBuilder; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java index daa45db6b90c8cc4720c0693d1c66053a026f0f5..f05436f66d823b0e9300fdaac8002492352fc1ad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java @@ -61,7 +61,7 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; import com.android.internal.logging.testing.UiEventLoggerFake; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt index 3f61af0425de0b5b64071c78c21036ebe582cd4e..ccef1d56c6a0d2beff6872a4702b819d5c4759fb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt @@ -22,7 +22,7 @@ import android.testing.TestableLooper.RunWithLooper import android.view.View import androidx.test.filters.SmallTest import com.android.settingslib.Utils -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.notification.FakeShadowView import com.android.systemui.statusbar.notification.NotificationUtils diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt index c650e01263bc0c909c7a57f2dd497e42a555607d..d52cbce488eccfd5d81daba5c9229f006db2e2c3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt @@ -23,7 +23,7 @@ import android.net.Uri import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.internal.widget.NotificationDrawableConsumer -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.graphics.ImageLoader import com.android.systemui.util.mockito.argumentCaptor @@ -70,7 +70,7 @@ class BigPictureIconManagerTest : SysuiTestCase() { } private val unsupportedIcon by lazy { Icon.createWithBitmap( - BitmapFactory.decodeResource(context.resources, R.drawable.dessert_zombiegingerbread) + BitmapFactory.decodeResource(context.resources, R.drawable.dessert_donutburger) ) } private val invalidIcon by lazy { Icon.createWithContentUri(Uri.parse("this.is/broken")) } @@ -100,7 +100,7 @@ class BigPictureIconManagerTest : SysuiTestCase() { } @Test - fun onIconUpdated_notSupportedType_fullImageLoaded() = + fun onIconUpdated_unsupportedType_fullImageLoaded() = testScope.runTest { // WHEN update with an unsupported icon iconManager.updateIcon(mockConsumer, unsupportedIcon).run() @@ -111,6 +111,16 @@ class BigPictureIconManagerTest : SysuiTestCase() { assertSize(drawableCaptor.value) } + @Test + fun onIconUpdated_withNull_drawableIsNull() = + testScope.runTest { + // WHEN update with null + iconManager.updateIcon(mockConsumer, null).run() + + // THEN consumer is updated with null + verify(mockConsumer).setImageDrawable(null) + } + @Test fun onIconUpdated_invalidIcon_drawableIsNull() = testScope.runTest { @@ -152,6 +162,43 @@ class BigPictureIconManagerTest : SysuiTestCase() { assertSize(drawableCaptor.value) } + @Test + fun onIconUpdated_iconAlreadySetForTheSameIcon_loadsIconAgain() = + testScope.runTest { + // GIVEN an icon is set + iconManager.updateIcon(mockConsumer, supportedIcon).run() + // AND the view is shown + iconManager.onViewShown(true) + runCurrent() + reset(mockConsumer) + // WHEN the icon is set again + iconManager.updateIcon(mockConsumer, supportedIcon).run() + + // THEN consumer is updated with the new image + verify(mockConsumer).setImageDrawable(drawableCaptor.capture()) + assertIsFullImage(drawableCaptor.value) + assertSize(drawableCaptor.value) + } + + @Test + fun onIconUpdated_iconAlreadySetForUnsupportedIcon_loadsNewIcon() = + testScope.runTest { + // GIVEN an unsupported icon is set + iconManager.updateIcon(mockConsumer, unsupportedIcon).run() + // AND the view is shown + iconManager.onViewShown(true) + runCurrent() + reset(mockConsumer) + + // WHEN a new icon is set + iconManager.updateIcon(mockConsumer, supportedIcon).run() + + // THEN consumer is updated with the new image + verify(mockConsumer).setImageDrawable(drawableCaptor.capture()) + assertIsFullImage(drawableCaptor.value) + assertSize(drawableCaptor.value) + } + @Test fun onIconUpdated_supportedTypeButTooWide_resizedPlaceholderLoaded() = testScope.runTest { @@ -249,12 +296,10 @@ class BigPictureIconManagerTest : SysuiTestCase() { verifyZeroInteractions(mockConsumer) } - // nice to have tests - @Test - fun onViewShown_fullImageLoaded_nothingHappens() = + fun onViewShown_unsupportedIconLoaded_nothingHappens() = testScope.runTest { - // GIVEN full image is showing + // GIVEN full image is showing for an unsupported icon iconManager.updateIcon(mockConsumer, unsupportedIcon).run() reset(mockConsumer) @@ -266,11 +311,46 @@ class BigPictureIconManagerTest : SysuiTestCase() { verifyZeroInteractions(mockConsumer) } + @Test + fun onViewShown_nullSetForIcon_nothingHappens() = + testScope.runTest { + // GIVEN null is set for the icon + iconManager.updateIcon(mockConsumer, null).run() + reset(mockConsumer) + + // WHEN the view is shown + iconManager.onViewShown(true) + runCurrent() + + // THEN nothing happens + verifyZeroInteractions(mockConsumer) + } + + @Test + fun onViewHidden_unsupportedIconLoadedAndViewIsShown_nothingHappens() = + testScope.runTest { + // GIVEN full image is showing for an unsupported icon + iconManager.updateIcon(mockConsumer, unsupportedIcon).run() + // AND the view is shown + iconManager.onViewShown(true) + runCurrent() + reset(mockConsumer) + + // WHEN the view goes off the screen + iconManager.onViewShown(false) + // AND we wait a bit + advanceTimeBy(FREE_IMAGE_DELAY_MS) + runCurrent() + + // THEN nothing happens + verifyZeroInteractions(mockConsumer) + } + @Test fun onViewHidden_placeholderShowing_nothingHappens() = testScope.runTest { // GIVEN placeholder image is showing - iconManager.updateIcon(mockConsumer, unsupportedIcon).run() + iconManager.updateIcon(mockConsumer, supportedIcon).run() reset(mockConsumer) // WHEN the view is hidden @@ -296,6 +376,7 @@ class BigPictureIconManagerTest : SysuiTestCase() { iconManager.onViewShown(true) runCurrent() + // THEN nothing happens verifyZeroInteractions(mockConsumer) } @@ -303,7 +384,7 @@ class BigPictureIconManagerTest : SysuiTestCase() { fun onViewHidden_alreadyHidden_nothingHappens() = testScope.runTest { // GIVEN placeholder image is showing and the view is hidden - iconManager.updateIcon(mockConsumer, unsupportedIcon).run() + iconManager.updateIcon(mockConsumer, supportedIcon).run() iconManager.onViewShown(false) advanceTimeBy(FREE_IMAGE_DELAY_MS) runCurrent() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java index cf1d2ca2859d62fc50ddd2796bce3d487c7e2c06..c9b77c5372df41326a4eadbe66224bf2e5887283 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java @@ -54,7 +54,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.internal.statusbar.IStatusBarService; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.notification.AssistantFeedbackController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java index 90cb7341377d7c3ae4ff807227579bc0ecee05ed..b120c4747cb93b0972f47951e44b86ce5a81d881 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java @@ -31,7 +31,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java index e52cb572f2893922c31ace78715cc7c75bbc2f5f..b0996ad48d0a04cd7554dd4925a7eae4dd440b0c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java @@ -115,7 +115,7 @@ public class NotificationContentInflaterTest extends SysuiTestCase { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mBuilder = new Notification.Builder(mContext).setSmallIcon( - R.drawable.ic_person) + com.android.systemui.res.R.drawable.ic_person) .setContentTitle("Title") .setContentText("Text") .setStyle(new Notification.BigTextStyle().bigText("big text")); @@ -191,7 +191,7 @@ public class NotificationContentInflaterTest extends SysuiTestCase { public void testInflationThrowsErrorDoesntCallUpdated() throws Exception { mRow.getPrivateLayout().removeAllViews(); mRow.getEntry().getSbn().getNotification().contentView - = new RemoteViews(mContext.getPackageName(), R.layout.status_bar); + = new RemoteViews(mContext.getPackageName(), com.android.systemui.res.R.layout.status_bar); inflateAndWait(true /* expectingException */, mNotificationInflater, FLAG_CONTENT_VIEW_ALL, mRow); assertTrue(mRow.getPrivateLayout().getChildCount() == 0); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java index 596e9a2613d7e417b4971ad874b3d8bc07ec6bdb..1763d9b0235877dcc71c47f30e703ad4902f8a7e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java @@ -74,7 +74,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.settingslib.notification.ConversationIconFactory; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.people.widget.PeopleSpaceWidgetManager; import com.android.systemui.shade.ShadeController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsTest.kt index fdfb4f4612fd2aa68e219a415e61991bc7984473..7f9471e5271f6afa9af66f77ecb3f84a877a4921 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsTest.kt @@ -22,7 +22,7 @@ import android.testing.ViewUtils import android.view.LayoutInflater import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import org.junit.After import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java index 8dd0488c924e038f55179d8cd58d1902e28b2b5d..f0b4dd46654abf2becbc1664b1bd3f248b5c6c6e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java @@ -66,7 +66,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationSnoozeTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationSnoozeTest.java index f8f7af071e4c8b82f615527bff41e6031775c80f..0a15f0de0bf4742c711ebb39e8f1a9efdbc23caa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationSnoozeTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationSnoozeTest.java @@ -23,7 +23,7 @@ import android.testing.TestableResources; import android.testing.UiThreadTest; import android.util.KeyValueListParser; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java index 638694038a6aae5b16322055051bab16d3bfa070..ac680e6c902ef55d53e74563ef9e9618b4e2108b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java @@ -88,7 +88,7 @@ import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder; import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.SmartReplyStateInflater; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; -import com.android.systemui.tests.R; +import com.android.systemui.res.R; import com.android.systemui.wmshell.BubblesManager; import com.android.systemui.wmshell.BubblesTestActivity; @@ -495,7 +495,7 @@ public class NotificationTestHelper { Notification publicVersion = new Notification.Builder(mContext).setSmallIcon( R.drawable.ic_person) .setCustomContentView(new RemoteViews(mContext.getPackageName(), - R.layout.custom_view_dark)) + com.android.systemui.tests.R.layout.custom_view_dark)) .build(); Notification.Builder notificationBuilder = new Notification.Builder(mContext, "channelId") .setSmallIcon(R.drawable.ic_person) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/PartialConversationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/PartialConversationInfoTest.java index 12c8fd5db751029a3a44239a75915523d8913ff5..e42ce2789e0b254d79fd27462eae58027f2c485c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/PartialConversationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/PartialConversationInfoTest.java @@ -52,7 +52,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/MediaContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/MediaContainerViewTest.kt index 0909ff2e59937ab57ad8bbccde232355fc036621..f4e236e5bbf923acb1df4f407b00a7c09d99400b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/MediaContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/MediaContainerViewTest.kt @@ -5,7 +5,7 @@ import android.testing.TestableLooper import android.view.LayoutInflater import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase -import com.android.systemui.R +import com.android.systemui.res.R import junit.framework.Assert.assertTrue import org.junit.Before import org.junit.Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt index 1dc0ab07349b48805c88444d697d99204d836174..957cb885aa066dff6302e7981c88c3c8cb5c2927 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt @@ -6,7 +6,7 @@ import android.view.LayoutInflater import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.flags.FakeFeatureFlags diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 4307066e2d4479afc56c0f8963569c22f52b6f19..3a820e8087a864b1a61ad8387523837847728190 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -65,7 +65,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.ExpandHelper; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; @@ -154,6 +154,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { assertFalse(Flags.NSSL_DEBUG_REMOVE_ANIMATION.getDefault()); mFeatureFlags.set(Flags.NSSL_DEBUG_LINES, false); mFeatureFlags.set(Flags.NSSL_DEBUG_REMOVE_ANIMATION, false); + mFeatureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, false); // Register the feature flags we use // TODO: Ideally we wouldn't need to set these unless a test actually reads them, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt index bc12bb0fca4e2e134042c9c0a459c0575770b090..2b3f9d0f3c39d85122128a7e5011e6cb9dd5c303 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt @@ -21,7 +21,7 @@ import android.service.notification.StatusBarNotification import android.testing.AndroidTestingRunner import android.view.View.VISIBLE import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.media.controls.pipeline.MediaDataManager import com.android.systemui.statusbar.LockscreenShadeTransitionController diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt index d9c3c3cecf9c725b8259bf45dd4217f17db9a9ec..a52466d2fa416b9d7457fa0a809e9819c79bcee6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt @@ -5,7 +5,7 @@ import android.content.pm.PackageManager import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation.getContentAlpha import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorTest.kt index 7fc399b447955f1401b12e273bfca096aca85777..198f278bf43ac2e3f87a8f817c67eeca20c57167 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt index bfc09103ba414e201a7513451194fde173345829..e254dd085b2ed7c686709489bcf56b4c78d7a8c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.SharedNotificationContainerPosition import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java index e4a2236211b1e157e8ffbd8ef17102a178b64625..416694b29f69ae4ac4e834105bdf51ed6b4a0039 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java @@ -50,7 +50,7 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dagger.NightDisplayListenerModule; import com.android.systemui.plugins.qs.QSTile; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 26c0fd695b95735043c19d54d2c3f2ef1ea20a7a..5c3dde59596e26c62a37c4f8edb9d2c25db9ae18 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -85,7 +85,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.TestScopeProvider; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.InitController; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController; import com.android.systemui.animation.ActivityLaunchAnimator; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java index bb20d1806bce64f54cd8fe82e8217200654f88a3..1bc522d72213f89aeb533d81a116bb0dd59b6731 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java @@ -32,7 +32,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.statusbar.AlertingNotificationManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBypassControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBypassControllerTest.kt index 4aac8419af3be98c2cb8383fd11acee474991cdd..ab441e39e8620bfe7a8c34443463ffdfa68d6372 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBypassControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBypassControllerTest.kt @@ -20,7 +20,7 @@ import android.content.pm.PackageManager import android.test.suitebuilder.annotation.SmallTest import android.testing.AndroidTestingRunner import android.testing.TestableLooper -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 5d2b59b6e00e33b092e8f286120ba7251a95cd0b..03f5f005ee47d1936ff017a93619fa14f5fa6f25 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -30,7 +30,7 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.doze.util.BurnInHelperKt; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java index 79f8dbd687eeb08cabf5fe81baa7f0c2492a1960..2b1ce0e16bbf6588d7ede6279d10129566562a76 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java @@ -50,7 +50,7 @@ import com.android.keyguard.CarrierTextController; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardLogger; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.battery.BatteryMeterViewController; import com.android.systemui.flags.FakeFeatureFlagsClassic; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewTest.java index fe1205161e8d386b60b4f08441e011b52e6a8dc5..e88fd95a5849479cfb184db5a695a5ed9523c65b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewTest.java @@ -25,7 +25,7 @@ import android.view.View; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupTestHelper.java index 47f15a1720a94775c9bfe21eac9bc06f741db158..c5abd026b3695fcb9612a042b2f8dbf884458306 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupTestHelper.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupTestHelper.java @@ -27,7 +27,7 @@ import android.content.Context; import android.os.UserHandle; import android.service.notification.StatusBarNotification; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.SbnBuilder; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationTapHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationTapHelperTest.java index b70c6dd1242d87387835f4bfd5afb62e20d6f692..d25a06b6c8b3eb1a8af4bfb844771c1f8a10a504 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationTapHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationTapHelperTest.java @@ -29,7 +29,7 @@ import android.view.ViewConfiguration; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.util.concurrency.FakeExecutor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitionsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitionsTest.kt index 4af1b24ba96c81863a11edcafbf330206327cb01..c4568a9ecfe6b42f78a1a642f58eab6d55ccaf68 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitionsTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitionsTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.phone import android.testing.TestableLooper import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT import com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt index 3a629e642d3deec5734f4addeca26571682e5574..b7560ad7902634d26ae352e6c51cfbe23e6a8b36 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt @@ -27,7 +27,7 @@ import android.view.ViewTreeObserver.OnPreDrawListener import android.widget.FrameLayout import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListenerTest.kt index 63508e193bb8a8c82efe4205a00f643cdbdffabb..1455693fc54b8970d06440eb5015f0d443772405 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListenerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusOverlayHoverListenerTest.kt @@ -31,7 +31,7 @@ import android.view.ViewGroupOverlay import android.widget.LinearLayout import androidx.annotation.ColorInt import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher.DarkChange import com.android.systemui.statusbar.policy.FakeConfigurationController diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index b8f2cab3019e520de8ea5f1f0d520983489b843d..bcb34d6d93421e1c670a82c0745e838e53e17d21 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -48,7 +48,7 @@ import android.widget.FrameLayout; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.animation.AnimatorTestRule; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallBackgroundContainerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallBackgroundContainerTest.kt index ec074d76da10aee0aa87188491eebbebe360e259..f0a457e2c19fd13a0987dfb1cb6d00b8e983d10e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallBackgroundContainerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallBackgroundContainerTest.kt @@ -21,7 +21,7 @@ import android.testing.TestableLooper import android.view.LayoutInflater import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallChronometerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallChronometerTest.kt index c3326b2bb7a27a944510eedcb1c65f4a27b75bfe..7e25aa373097dc6dd10ee8eba233fa2943370762 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallChronometerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallChronometerTest.kt @@ -21,7 +21,7 @@ import android.testing.TestableLooper import android.view.LayoutInflater import android.view.View import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Before diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt index dc5d55ec274a06c2cdeff1bd792bc235d62a1889..32320b45a36dcd144c040c9501f58dd8b22a17fb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt @@ -30,7 +30,7 @@ import android.view.View import android.widget.LinearLayout import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.ActivityStarter diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt index 5784be34ce25cfcd4e82ffcbc95bbca65187af9e..6028712c29fcae00a7d1e7266ec270d5c180d8f6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt @@ -18,7 +18,7 @@ package com.android.systemui.statusbar.pipeline.ethernet.domain import androidx.test.filters.SmallTest import com.android.settingslib.AccessibilityContentDescriptions -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt index 59fc0aceec97c9f64631ba8ffbf9610d953f7675..218fd33ac0fc02325f61a0055010aba226d38533 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt @@ -24,7 +24,7 @@ import android.testing.ViewUtils import android.view.View import android.widget.ImageView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.StatusBarIconView diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt index 6624ec2ece773df67d38323e58dad98d0f9f4a3b..15b9d61fc96bdc3b1f55bc76d784a0902b9651e4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt @@ -17,8 +17,9 @@ package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase +import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.common.shared.model.Text import com.android.systemui.coroutines.collectLastValue import com.android.systemui.log.table.TableLogBuffer @@ -42,6 +43,7 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepo import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiScanEntry +import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon import com.android.systemui.util.CarrierConfigTracker import com.android.systemui.util.mockito.mock import com.google.common.truth.Truth.assertThat @@ -72,6 +74,8 @@ class InternetTileViewModelTest : SysuiTestCase() { private val mobileConnectionRepository = FakeMobileConnectionRepository(SUB_1_ID, tableLogBuffer) + private val internet = context.getString(R.string.quick_settings_internet_label) + @Before fun setUp() { mobileConnectionRepository.apply { @@ -139,6 +143,9 @@ class InternetTileViewModelTest : SysuiTestCase() { level = 4, ssid = "test ssid", ) + val wifiIcon = + WifiIcon.fromModel(model = networkModel, context = context, showHotspotInfo = false) + as WifiIcon.Visible connectivityRepository.setWifiConnected() wifiRepository.setIsWifiDefault(true) @@ -149,6 +156,10 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(WifiIcons.WIFI_NO_INTERNET_ICONS[4])) assertThat(latest?.iconId).isNull() + assertThat(latest?.contentDescription.loadContentDescription(context)) + .isEqualTo("$internet,test ssid") + val expectedSd = wifiIcon.contentDescription + assertThat(latest?.stateDescription).isEqualTo(expectedSd) } @Test @@ -281,6 +292,11 @@ class InternetTileViewModelTest : SysuiTestCase() { .isEqualTo(context.getString(R.string.quick_settings_networks_available)) assertThat(latest?.icon).isNull() assertThat(latest?.iconId).isEqualTo(R.drawable.ic_qs_no_internet_available) + assertThat(latest?.stateDescription).isNull() + val expectedCd = + "$internet,${context.getString(R.string.quick_settings_networks_available)}" + assertThat(latest?.contentDescription.loadContentDescription(context)) + .isEqualTo(expectedCd) } @Test @@ -300,6 +316,10 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.secondaryLabel).isNull() assertThat(latest?.icon).isInstanceOf(SignalIcon::class.java) assertThat(latest?.iconId).isNull() + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(latest?.secondaryTitle) + assertThat(latest?.contentDescription.loadContentDescription(context)) + .isEqualTo(internet) } @Test @@ -315,6 +335,9 @@ class InternetTileViewModelTest : SysuiTestCase() { .isEqualTo(ethernetIcon!!.contentDescription.toString()) assertThat(latest?.iconId).isEqualTo(R.drawable.stat_sys_ethernet_fully) assertThat(latest?.icon).isNull() + assertThat(latest?.stateDescription).isNull() + assertThat(latest?.contentDescription.loadContentDescription(context)) + .isEqualTo(latest?.secondaryTitle) } @Test @@ -330,6 +353,9 @@ class InternetTileViewModelTest : SysuiTestCase() { .isEqualTo(ethernetIcon!!.contentDescription.toString()) assertThat(latest?.iconId).isEqualTo(R.drawable.stat_sys_ethernet) assertThat(latest?.icon).isNull() + assertThat(latest?.stateDescription).isNull() + assertThat(latest?.contentDescription.loadContentDescription(context)) + .isEqualTo(latest?.secondaryTitle) } private fun setWifiNetworkWithHotspot(hotspot: WifiNetworkModel.HotspotDeviceType) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt index bbf048d6697fb559abfc3ca9ee06184bbb034080..a27f8990dec157e7f28b893661f74aaeb00fd1f6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt @@ -25,7 +25,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt index 655775465e1ff1adf0ab078a6f75b5593d44f63c..fb4ccb52929a5379caa9c08bb5b819432078d283 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt @@ -24,7 +24,7 @@ import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.dagger.ControlsComponent diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java index e5bbead520f21cf55d2f65b2c84e8caa12b557a3..64ebcd9e3abf16a4e0b44b322e8bfc5e9a9fe22c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java @@ -49,7 +49,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.testing.UiEventLoggerFake; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.statusbar.AlertingNotificationManager; import com.android.systemui.statusbar.AlertingNotificationManagerTest; import com.android.systemui.statusbar.notification.collection.NotificationEntry; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java index dc08aba7d5e5d7a145f073bf889e1f941eb88787..3fae3f6b4054566e195afa9208457f4b8223e52c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java @@ -38,7 +38,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.settings.UserTracker; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java index e4318659bef99afa33d4782945644e44d50a6b24..bf280c9a2d54e6ff0ae449d7f5bed1a12d056403 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java @@ -37,7 +37,7 @@ import androidx.test.annotation.UiThreadTest; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.DevicePolicyManagerWrapper; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchControllerTest.kt index b86ca6fc537579af5daf4b02fff2e8efa2363cd1..1250228e2d3772f03661226620c029cf71622e48 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchControllerTest.kt @@ -24,7 +24,7 @@ import android.view.View import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.internal.logging.UiEventLogger -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.user.UserSwitchDialogController diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherAdapterTest.kt index 1ab62d00d307b0915346e3cb8071027d145f6906..0bd6a685708b30901066dbe382d1c32c7c498206 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherAdapterTest.kt @@ -25,7 +25,7 @@ import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.internal.util.UserIcons -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.qs.tiles.UserDetailItemView import com.android.systemui.user.data.source.UserRecord diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.kt index cfb48a8f69950925c583846b1709945b6b1c7565..635d63ed5eb2b55e3cd313c9c7e3d070f761db40 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.kt @@ -19,7 +19,7 @@ import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.CommandQueue import com.google.common.truth.Truth.assertThat diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java index 79feb417a0629b237100e7a66454fef89cdeaca4..658e6b01d7b4d1e61d6e8c93abeb777a3f20b9d0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java @@ -67,7 +67,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.Dependency; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.AnimatorTestRule; import com.android.systemui.flags.FakeFeatureFlags; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java index e4e0dc9ec39ce16cd17b61263be258ef93056ece..3555a7415435da54395c5da932a875c9edfacd63 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java @@ -29,7 +29,7 @@ import android.testing.TestableLooper; import android.testing.TestableResources; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.DeviceConfigProxyFake; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java index ae38958ecb44983655f7b4ffe03186a337d12f71..4b6c68aeccc7282116760ce6ec0c9965e2fba543 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java @@ -47,7 +47,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter.OnDismissAction; diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt index d212c026d66eb8eea9a1a3d3b4954bce1d88b7c9..5b9db4bf88699a04e1ad98aa1e3ac91b9032a5d2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt @@ -31,7 +31,7 @@ import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.internal.logging.UiEventLogger import com.android.systemui.InstanceIdSequenceFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argumentCaptor diff --git a/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt index 98bbb26eb7038c9169835334d891f41e84fd3fda..ae4dfbd6ab319d1d69844a17fd5a1e50b606e2d2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt @@ -26,7 +26,7 @@ import android.view.accessibility.AccessibilityManager import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.internal.logging.testing.UiEventLoggerFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt index 8c21fac82dfef59b98ba0035ba35e0fe58a8e647..1e7e1842fa3358cb34a991941f451ef91738ae25 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt @@ -33,7 +33,7 @@ import androidx.core.animation.doOnCancel import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.internal.logging.testing.UiEventLoggerFake -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.common.shared.model.ContentDescription diff --git a/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java index 7593e8429e607cb48d1a0fbffe5ada2da9e2ec98..85359ca3aebe3aa698e6c55489303c42931e3e0c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java @@ -62,7 +62,7 @@ import android.widget.Toast; import androidx.test.filters.SmallTest; import com.android.internal.util.IntPair; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.PluginManager; @@ -364,7 +364,7 @@ public class ToastUITest extends SysuiTestCase { // THEN the view can have unlimited lines assertThat(((TextView) mToastUI.mToast.getView() - .findViewById(com.android.systemui.R.id.text)) + .findViewById(com.android.systemui.res.R.id.text)) .getMaxLines()).isEqualTo(Integer.MAX_VALUE); } @@ -383,7 +383,7 @@ public class ToastUITest extends SysuiTestCase { // THEN the view is limited to 2 lines assertThat(((TextView) mToastUI.mToast.getView() - .findViewById(com.android.systemui.R.id.text)) + .findViewById(com.android.systemui.res.R.id.text)) .getMaxLines()).isEqualTo(2); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt index 5a54aff72af49d3948b96affbe5cc5daed8da3b1..bbc49c8598213e79b94ebb6737c8f225bcfcfb6c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt @@ -34,7 +34,7 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.GuestResetOrExitSessionReceiver import com.android.systemui.GuestResumeSessionReceiver -import com.android.systemui.R +import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Text @@ -120,7 +120,7 @@ class UserInteractorTest : SysuiTestCase() { whenever(manager.getUserIcon(anyInt())).thenReturn(ICON) whenever(manager.canAddMoreUsers(any())).thenReturn(true) - overrideResource(R.drawable.ic_account_circle, GUEST_ICON) + overrideResource(com.android.settingslib.R.drawable.ic_account_circle, GUEST_ICON) overrideResource(R.dimen.max_avatar_size, 10) overrideResource( com.android.internal.R.string.config_supervisedUserCreationPackage, diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java index aa9d62da4b2a3544a60c64f7dc9fb70afd999d9e..8e57dc1f8b2c6154e6f3753ef8c2e35b3715f9f3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java @@ -57,7 +57,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.Prefs; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.AnimatorTestRule; import com.android.systemui.dump.DumpManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java index 53e5e7d859ac44c9255d8d6ec6b59028027a8373..82631744d12db9d057591925d84c7577ecc43859 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/QuickAccessWalletControllerTest.java @@ -37,7 +37,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index 7595a54a18fd9deed1ce312f360dc493f5bf4fad..d8511e8f38e2e75c3e8ccd56ed21c3c6574eb2df 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -87,7 +87,7 @@ import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.launcher3.icons.BubbleIconFactory; -import com.android.systemui.R; +import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.colorextraction.SysuiColorExtractor; @@ -1273,9 +1273,9 @@ public class BubblesTest extends SysuiTestCase { mBubbleController, mBubbleController.getStackView(), new BubbleIconFactory(mContext, - mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size), - mContext.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size), - mContext.getResources().getColor(R.color.important_conversation), + mContext.getResources().getDimensionPixelSize(com.android.wm.shell.R.dimen.bubble_size), + mContext.getResources().getDimensionPixelSize(com.android.wm.shell.R.dimen.bubble_badge_size), + mContext.getResources().getColor(com.android.launcher3.icons.R.color.important_conversation), mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.importance_ring_stroke_width)), bubble, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java index 5ff57aad9f5d715dfa81783539c08a6a19875ab6..2d76027ba744183bf83feb935de98e8b79424e84 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java @@ -28,6 +28,7 @@ import android.util.Log; import android.view.Display; import com.android.internal.annotations.GuardedBy; +import com.android.systemui.res.R; import java.util.Set; diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt index 16442bb525b683ccce78eabc640aecfae75e5267..dd513db03d34212e862e75d6275e20bd1da7fdb6 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt @@ -38,7 +38,7 @@ class FakeKeyguardTransitionRepository : KeyguardTransitionRepository { } override fun startTransition(info: TransitionInfo, resetIfCanceled: Boolean): UUID? { - return null + return if (info.animator == null) UUID.randomUUID() else null } override fun updateTransition( diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt index 6dd41f488e2da6f9915d5a18559b10de2a6950cb..ceab8e9e52ee4464ebc2fa5fa408469d190bdd71 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt @@ -72,7 +72,6 @@ object KeyguardDismissInteractorFactory { keyguardUpdateMonitor: KeyguardUpdateMonitor = mock(KeyguardUpdateMonitor::class.java), featureFlags: FakeFeatureFlagsClassic = FakeFeatureFlagsClassic().apply { - set(Flags.DELAY_BOUNCER, true) set(Flags.REFACTOR_KEYGUARD_DISMISS_INTENT, true) set(Flags.FULL_SCREEN_USER_SWITCHER, false) }, @@ -92,7 +91,6 @@ object KeyguardDismissInteractorFactory { context, keyguardUpdateMonitor, trustRepository, - featureFlags, testScope.backgroundScope, ) val alternateBouncerInteractor = diff --git a/packages/SystemUI/unfold/Android.bp b/packages/SystemUI/unfold/Android.bp index 1f0181f2e5bd4c7dd5d23e4741646c40a31238f0..81fd8ce12f05434a531804f8aad7787c0cdb2d18 100644 --- a/packages/SystemUI/unfold/Android.bp +++ b/packages/SystemUI/unfold/Android.bp @@ -23,6 +23,7 @@ package { android_library { name: "SystemUIUnfoldLib", + use_resource_processor: true, srcs: [ "src/**/*.java", "src/**/*.kt", diff --git a/services/autofill/java/com/android/server/autofill/ui/BottomSheetLayout.java b/services/autofill/java/com/android/server/autofill/ui/BottomSheetLayout.java new file mode 100644 index 0000000000000000000000000000000000000000..06bbc2b0bdcbf3bde49a02b988a53c68bd18f3e3 --- /dev/null +++ b/services/autofill/java/com/android/server/autofill/ui/BottomSheetLayout.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2023 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.server.autofill.ui; + +import static com.android.server.autofill.Helper.sDebug; + +import android.annotation.Nullable; +import android.content.Context; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.Slog; +import android.widget.LinearLayout; + +import com.android.internal.R; + +/** + {@link LinearLayout} that displays content of save dialog. + */ +public class BottomSheetLayout extends LinearLayout { + + private static final String TAG = "BottomSheetLayout"; + + public BottomSheetLayout(Context context) { + super(context); + } + + public BottomSheetLayout(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public BottomSheetLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public void onMeasure(int widthSpec, int heightSpec) { + if (getContext() == null || getContext().getResources() == null) { + super.onMeasure(widthSpec, heightSpec); + Slog.w(TAG, "onMeasure failed due to missing context or missing resources."); + return; + } + + if (getChildCount() == 0) { + // Should not happen + super.onMeasure(widthSpec, heightSpec); + Slog.wtf(TAG, "onMeasure failed due to missing children views."); + return; + } + + DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); + + final int pxOffset = getContext().getResources().getDimensionPixelSize( + R.dimen.autofill_dialog_offset); + final int outerMargin = getContext().getResources().getDimensionPixelSize( + R.dimen.autofill_save_outer_margin); + + final boolean includeHorizontalSpace = + getContext().getResources().getBoolean( + R.bool.autofill_dialog_horizontal_space_included); + + + final int screenHeight = displayMetrics.heightPixels; + final int screenWidth = displayMetrics.widthPixels; + + final int maxHeight = screenHeight - pxOffset - outerMargin; + + int maxWidth = screenWidth; + + if (includeHorizontalSpace) { + maxWidth -= 2 * pxOffset; + } + + maxWidth = + Math.min(maxWidth, getContext().getResources().getDimensionPixelSize( + R.dimen.autofill_dialog_max_width)); + + super.onMeasure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST)); + + + if (sDebug) { + Slog.d(TAG, "onMeasure() values in dp:" + + " screenHeight: " + screenHeight / displayMetrics.density + ", screenWidth: " + + screenWidth / displayMetrics.density + + ", maxHeight: " + maxHeight / displayMetrics.density + + ", maxWidth: " + maxWidth / displayMetrics.density + ", getMeasuredWidth(): " + + getMeasuredWidth() / displayMetrics.density + ", getMeasuredHeight(): " + + getMeasuredHeight() / displayMetrics.density); + } + setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight()); + } + + +} diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java index 4488d86c60b59f18cda774b1ee6056b0f02d066a..5635dd59e3f1832c77065bcd0b77bebf3c820a58 100644 --- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java +++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java @@ -48,7 +48,6 @@ import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.util.ArraySet; -import android.util.DisplayMetrics; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; @@ -363,13 +362,6 @@ final class SaveUi { window.setCloseOnTouchOutside(true); final WindowManager.LayoutParams params = window.getAttributes(); - DisplayMetrics displayMetrics = new DisplayMetrics(); - window.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - final int screenWidth = displayMetrics.widthPixels; - final int maxWidth = - context.getResources().getDimensionPixelSize(R.dimen.autofill_dialog_max_width); - params.width = Math.min(screenWidth, maxWidth); - params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title); params.windowAnimations = R.style.AutofillSaveAnimation; params.setTrustedOverlay(); diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index 3b02be5d6342990acbc0fc4f2399e637414d5062..976504a8d880b21fbe31b510876c2ec43b5a7963 100644 --- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java @@ -487,6 +487,13 @@ public class UserBackupManagerService { File baseStateDir, File dataDir, TransportManager transportManager) { + // check if we are past the retention period for BMM Events, + // if so delete expired events and do not print them to dumpsys + BackupManagerMonitorDumpsysUtils backupManagerMonitorDumpsysUtils = + new BackupManagerMonitorDumpsysUtils(); + if (backupManagerMonitorDumpsysUtils.deleteExpiredBMMEvents() && DEBUG){ + Slog.d(TAG, "BMM Events recorded for dumpsys have expired"); + } return new UserBackupManagerService( userId, context, @@ -657,6 +664,13 @@ public class UserBackupManagerService { // the pending backup set mBackupHandler.postDelayed(this::parseLeftoverJournals, INITIALIZATION_DELAY_MILLIS); + // check if we are past the retention period for BMM Events, + // if so delete expired events and do not print them to dumpsys + BackupManagerMonitorDumpsysUtils backupManagerMonitorDumpsysUtils = + new BackupManagerMonitorDumpsysUtils(); + mBackupHandler.postDelayed(backupManagerMonitorDumpsysUtils::deleteExpiredBMMEvents, + INITIALIZATION_DELAY_MILLIS); + mBackupPreferences = new UserBackupPreferences(mContext, mBaseStateDir); // Power management @@ -4181,7 +4195,19 @@ public class UserBackupManagerService { private void dumpBMMEvents(PrintWriter pw) { BackupManagerMonitorDumpsysUtils bm = new BackupManagerMonitorDumpsysUtils(); + if (bm.deleteExpiredBMMEvents()) { + pw.println("BACKUP MANAGER MONITOR EVENTS HAVE EXPIRED"); + return; + } File events = bm.getBMMEventsFile(); + if (events.length() == 0){ + // We have not recorded BMMEvents yet. + pw.println("NO BACKUP MANAGER MONITOR EVENTS"); + return; + } else if (bm.isFileLargerThanSizeLimit(events)){ + pw.println("BACKUP MANAGER MONITOR EVENTS FILE OVER SIZE LIMIT - " + + "future events will not be recorded"); + } pw.println("START OF BACKUP MANAGER MONITOR EVENTS"); try (BufferedReader reader = new BufferedReader(new FileReader(events))) { String line; diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index e04bf11dad9f58a348161643abc6253a3cd847fa..bbec79d6cd4739e21529536bab852566a50a51c4 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -394,6 +394,20 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // If we're starting a full-system restore, set up to begin widget ID remapping if (mIsSystemRestore) { AppWidgetBackupBridge.systemRestoreStarting(mUserId); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE, + null, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); + } else { + //We are either performing RestoreAtInstall or Bmgr. + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL, + null, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); } try { @@ -421,6 +435,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { mStatus = transport.startRestore(mToken, packages); if (mStatus != BackupTransport.TRANSPORT_OK) { Slog.e(TAG, "Transport error " + mStatus + "; no restore possible"); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, + monitoringExtras); mStatus = BackupTransport.TRANSPORT_ERROR; executeNextState(UnifiedRestoreState.FINAL); return; @@ -528,6 +548,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { final String pkgName = (mRestoreDescription != null) ? mRestoreDescription.getPackageName() : null; if (pkgName == null) { + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME, + null, + BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, + monitoringExtras); Slog.e(TAG, "Failure getting next package name"); EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE); nextState = UnifiedRestoreState.FINAL; @@ -550,6 +576,14 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { Metadata metaInfo = mPmAgent.getRestoredMetadata(pkgName); if (metaInfo == null) { + PackageInfo pkgInfo = new PackageInfo(); + pkgInfo.packageName = pkgName; + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA, + pkgInfo, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); Slog.e(TAG, "No metadata for " + pkgName); EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, pkgName, "Package metadata missing"); @@ -560,6 +594,13 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { try { mCurrentPackage = backupManagerService.getPackageManager().getPackageInfoAsUser( pkgName, PackageManager.GET_SIGNING_CERTIFICATES, mUserId); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); + } catch (NameNotFoundException e) { // Whoops, we thought we could restore this package but it // turns out not to be present. Skip it. @@ -641,12 +682,24 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } else { // Unknown restore type; ignore this package and move on Slog.e(TAG, "Unrecognized restore type " + type); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);; + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); nextState = UnifiedRestoreState.RUNNING_QUEUE; return; } } catch (Exception e) { Slog.e(TAG, "Can't get next restore target from transport; halting: " + e.getMessage()); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null);; + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE); nextState = UnifiedRestoreState.FINAL; return; @@ -663,6 +716,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { final String packageName = mCurrentPackage.packageName; // Validate some semantic requirements that apply in this way // only to the key/value restore API flow + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + /*monitoringExtras*/ addRestoreOperationTypeToEvent(/*extras*/null)); if (mCurrentPackage.applicationInfo.backupAgentName == null || "".equals(mCurrentPackage.applicationInfo.backupAgentName)) { if (MORE_DEBUG) { @@ -721,6 +778,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { ++mCount; } catch (Exception e) { Slog.e(TAG, "Error when attempting restore: " + e.toString()); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, + monitoringExtras); keyValueAgentErrorCleanup(false); executeNextState(UnifiedRestoreState.RUNNING_QUEUE); } @@ -759,6 +821,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // Transport-level failure. This failure could be specific to package currently in // restore. Slog.e(TAG, "Error getting restore data for " + packageName); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE); stage.close(); downloadFile.delete(); @@ -815,6 +883,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { new ArrayList<>(getExcludedKeysForPackage(packageName))); } catch (Exception e) { Slog.e(TAG, "Unable to call app for restore: " + packageName, e); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, packageName, e.toString()); // Clears any pending timeout messages as well. @@ -888,6 +961,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // // When finished, StreamFeederThread executes next state as appropriate on the // backup looper, and the overall unified restore task resumes + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + /*monitoringExtras*/ addRestoreOperationTypeToEvent(/*extras*/null)); try { StreamFeederThread feeder = new StreamFeederThread(); if (MORE_DEBUG) { @@ -903,6 +980,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // current target. We haven't asked the transport for data yet, though, // so we can do that simply by going back to running the restore queue. Slog.e(TAG, "Unable to construct pipes for stream restore!"); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); executeNextState(UnifiedRestoreState.RUNNING_QUEUE); } } @@ -927,6 +1009,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } catch (Exception e) { final String packageName = mCurrentPackage.packageName; Slog.e(TAG, "Unable to finalize restore of " + packageName); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, packageName, e.toString()); keyValueAgentErrorCleanup(true); @@ -1020,6 +1106,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // handling will deal properly with that. Slog.e(TAG, "Error " + result + " streaming restore for " + mCurrentPackage.packageName); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE); status = result; } @@ -1032,6 +1124,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // but potentially recoverable; abandon this package's restore but // carry on with the next restore target. Slog.e(TAG, "Unable to route data for restore"); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, mCurrentPackage.packageName, "I/O error on pipes"); status = BackupTransport.AGENT_ERROR; @@ -1040,6 +1138,12 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // the sockets will wake up the engine and it will then tidy up the // remote end. Slog.e(TAG, "Transport failed during restore: " + e.getMessage()); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE, + mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE); status = BackupTransport.TRANSPORT_ERROR; } finally { @@ -1213,6 +1317,13 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } Slog.i(TAG, "Restore complete."); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE, + null, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); + mListener.onFinished(callerLogString); } @@ -1313,6 +1424,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { @Override public void operationComplete(long unusedResult) { mOperationStorage.removeOperation(mEphemeralOpToken); + if (MORE_DEBUG) { Slog.i(TAG, "operationComplete() during restore: target=" + mCurrentPackage.packageName @@ -1341,6 +1453,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // Okay, we're done with this package. Tidy up and go on to the next // app in the queue. int size = (int) mBackupDataName.length(); + Bundle monitoringExtras = addRestoreOperationTypeToEvent(/*extras*/null); + mBackupManagerMonitorEventSender.monitorEvent( + BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED, mCurrentPackage, + BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, + monitoringExtras); EventLog.writeEvent(EventLogTags.RESTORE_PACKAGE, mCurrentPackage.packageName, size); diff --git a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java index 0b55ca21371b7d26ad2f361a6c5860a62c1f32d2..797aed9297a39f536c4f140af8ea234cf799beba 100644 --- a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java +++ b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java @@ -23,15 +23,22 @@ import android.os.Bundle; import android.os.Environment; import android.util.Slog; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FastPrintWriter; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Map; +import java.util.concurrent.TimeUnit; /* @@ -46,12 +53,27 @@ public class BackupManagerMonitorDumpsysUtils { // Name of the subdirectory where the text file containing the BMM events will be stored. // Same as {@link UserBackupManagerFiles} private static final String BACKUP_PERSISTENT_DIR = "backup"; + private static final String INITIAL_SETUP_TIMESTAMP_KEY = "initialSetupTimestamp"; + // Retention period of 60 days (in millisec) for the BMM Events. + // After tha time has passed the text file containing the BMM events will be emptied + private static final long LOGS_RETENTION_PERIOD_MILLISEC = 60 * TimeUnit.DAYS.toMillis(1); + // Size limit for the text file containing the BMM events + private static final long BMM_FILE_SIZE_LIMIT_BYTES = 25 * 1024 * 1000; // 2.5 MB + + // We cache the value of IsAfterRetentionPeriod() to avoid unnecessary disk I/O + // mIsAfterRetentionPeriodCached tracks if we have cached the value of IsAfterRetentionPeriod() + private boolean mIsAfterRetentionPeriodCached = false; + // The cached value of IsAfterRetentionPeriod() + private boolean mIsAfterRetentionPeriod; + // If isFileLargerThanSizeLimit(bmmEvents) returns true we cache the value to avoid + // unnecessary disk I/O + private boolean mIsFileLargerThanSizeLimit = false; /** * Parses the BackupManagerMonitor bundle for a RESTORE event in a series of strings that * will be persisted in a text file and printed in the dumpsys. * - * If the evenntBundle passed is not a RESTORE event, return early + * If the eventBundle passed is not a RESTORE event, return early * * Key information related to the event: * - Timestamp (HAS TO ALWAYS BE THE FIRST LINE OF EACH EVENT) @@ -62,17 +84,22 @@ public class BackupManagerMonitorDumpsysUtils { * - Agent logs (if available) * * Example of formatting: - * RESTORE Event: [2023-08-18 17:16:00.735] Agent - Agent logging results - * Package name: com.android.wallpaperbackup - * Agent Logs: - * Data Type: wlp_img_system - * Item restored: 0/1 - * Agent Error - Category: no_wallpaper, Count: 1 - * Data Type: wlp_img_lock - * Item restored: 0/1 - * Agent Error - Category: no_wallpaper, Count: 1 + * [2023-09-21 14:43:33.824] - Agent logging results + * Package: com.android.wallpaperbackup + * Agent Logs: + * Data Type: wlp_img_system + * Item restored: 0/1 + * Agent Error - Category: no_wallpaper, Count: 1 + * Data Type: wlp_img_lock + * Item restored: 0/1 + * Agent Error - Category: no_wallpaper, Count: 1 */ public void parseBackupManagerMonitorRestoreEventForDumpsys(Bundle eventBundle) { + if (isAfterRetentionPeriod()) { + // We only log data for the first 60 days since setup + return; + } + if (eventBundle == null) { return; } @@ -89,8 +116,19 @@ public class BackupManagerMonitorDumpsysUtils { } File bmmEvents = getBMMEventsFile(); + if (bmmEvents.length() == 0) { + // We are parsing the first restore event. + // Time to also record the setup timestamp of the device + recordSetUpTimestamp(); + } + + if(isFileLargerThanSizeLimit(bmmEvents)){ + // Do not write more events if the file is over size limit + return; + } + try (FileOutputStream out = new FileOutputStream(bmmEvents, /*append*/ true); - PrintWriter pw = new FastPrintWriter(out);) { + PrintWriter pw = new FastPrintWriter(out);) { int eventCategory = eventBundle.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY); int eventId = eventBundle.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); @@ -101,17 +139,16 @@ public class BackupManagerMonitorDumpsysUtils { return; } - pw.println("RESTORE Event: [" + timestamp() + "] " + - getCategory(eventCategory) + " - " + - getId(eventId)); + pw.println("[" + timestamp() + "] - " + getId(eventId)); if (eventBundle.containsKey(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME)) { - pw.println("\tPackage name: " + pw.println("\tPackage: " + eventBundle.getString(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME)); } // TODO(b/296818666): add extras to the events addAgentLogsIfAvailable(eventBundle, pw); + addExtrasIfAvailable(eventBundle, pw); } catch (java.io.IOException e) { Slog.e(TAG, "IO Exception when writing BMM events to file: " + e); } @@ -156,6 +193,37 @@ public class BackupManagerMonitorDumpsysUtils { } } + /** + * Extracts some extras (defined in BackupManagerMonitor as EXTRA_LOG_<description>) + * from the BackupManagerMonitor event. Not all extras have the same importance. For now only + * focus on extras relating to version mismatches between packages on the source and target. + * + * When an event with ID LOG_EVENT_ID_RESTORE_VERSION_HIGHER (trying to restore from higher to + * lower version of a package) parse: + * EXTRA_LOG_RESTORE_VERSION [int]: the version of the package on the source + * EXTRA_LOG_RESTORE_ANYWAY [bool]: if the package allows restore any version + * EXTRA_LOG_RESTORE_VERSION_TARGET [int]: an extra to record the package version on the target + */ + private void addExtrasIfAvailable(Bundle eventBundle, PrintWriter pw) { + if (eventBundle.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID) == + BackupManagerMonitor.LOG_EVENT_ID_RESTORE_VERSION_HIGHER) { + if (eventBundle.containsKey(BackupManagerMonitor.EXTRA_LOG_RESTORE_ANYWAY)) { + pw.println("\t\tPackage supports RestoreAnyVersion: " + + eventBundle.getBoolean(BackupManagerMonitor.EXTRA_LOG_RESTORE_ANYWAY)); + } + if (eventBundle.containsKey(BackupManagerMonitor.EXTRA_LOG_RESTORE_VERSION)) { + pw.println("\t\tPackage version on source: " + + eventBundle.getLong(BackupManagerMonitor.EXTRA_LOG_RESTORE_VERSION)); + } + if (eventBundle.containsKey( + BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION)) { + pw.println("\t\tPackage version on target: " + + eventBundle.getLong( + BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION)); + } + } + } + /* * Get the path of the text files which stores the BMM events */ @@ -165,6 +233,13 @@ public class BackupManagerMonitorDumpsysUtils { return fname; } + public boolean isFileLargerThanSizeLimit(File events){ + if (!mIsFileLargerThanSizeLimit) { + mIsFileLargerThanSizeLimit = events.length() > getBMMEventsFileSizeLimit(); + } + return mIsFileLargerThanSizeLimit; + } + private String timestamp() { long currentTime = System.currentTimeMillis(); Date date = new Date(currentTime); @@ -245,6 +320,32 @@ public class BackupManagerMonitorDumpsysUtils { case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED -> "Transport non-incremental backup required"; case BackupManagerMonitor.LOG_EVENT_ID_AGENT_LOGGING_RESULTS -> "Agent logging results"; + case BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE -> "Start system restore"; + case BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL -> + "Start restore at install"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_DURING_START_RESTORE -> + "Transport error during start restore"; + case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_GET_NEXT_PKG_NAME -> + "Cannot get next package name"; + case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_RESTORE_TYPE -> "Unknown restore type"; + case BackupManagerMonitor.LOG_EVENT_ID_KV_RESTORE -> "KV restore"; + case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE -> "Full restore"; + case BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET -> + "No next restore target"; + case BackupManagerMonitor.LOG_EVENT_ID_KV_AGENT_ERROR -> "KV agent error"; + case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_RESTORE_FINISHED -> + "Package restore finished"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_KV_RESTORE -> + "Transport error KV restore"; + case BackupManagerMonitor.LOG_EVENT_ID_NO_FEEDER_THREAD -> "No feeder thread"; + case BackupManagerMonitor.LOG_EVENT_ID_FULL_AGENT_ERROR -> "Full agent error"; + case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_ERROR_FULL_RESTORE -> + "Transport error full restore"; + case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_COMPLETE -> "Restore complete"; + case BackupManagerMonitor.LOG_EVENT_ID_START_PACKAGE_RESTORE -> + "Start package restore"; + case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE -> + "Agent failure"; default -> "Unknown log event ID: " + code; }; return id; @@ -257,4 +358,128 @@ public class BackupManagerMonitorDumpsysUtils { default -> false; }; } + + /** + * Store the timestamp when the device was set up (date when the first BMM event is parsed) + * in a text file. + */ + @VisibleForTesting + void recordSetUpTimestamp() { + File setupDateFile = getSetUpDateFile(); + // record setup timestamp only once + if (setupDateFile.length() == 0) { + try (FileOutputStream out = new FileOutputStream(setupDateFile, /*append*/ true); + PrintWriter pw = new FastPrintWriter(out);) { + long currentDate = System.currentTimeMillis(); + pw.println(currentDate); + } catch (IOException e) { + Slog.w(TAG, "An error occurred while recording the setup date: " + + e.getMessage()); + } + } + + } + + @VisibleForTesting + String getSetUpDate() { + File fname = getSetUpDateFile(); + try (FileInputStream inputStream = new FileInputStream(fname); + InputStreamReader reader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(reader);) { + return bufferedReader.readLine(); + } catch (Exception e) { + Slog.w(TAG, "An error occurred while reading the date: " + e.getMessage()); + return "Could not retrieve setup date"; + } + } + + @VisibleForTesting + static boolean isDateAfterNMillisec(long startTimeStamp, long endTimeStamp, long millisec) { + if (startTimeStamp > endTimeStamp) { + // Something has gone wrong, timeStamp1 should always precede timeStamp2. + // Out of caution return true: we would delete the logs rather than + // risking them being kept for longer than the retention period + return true; + } + long timeDifferenceMillis = endTimeStamp - startTimeStamp; + return (timeDifferenceMillis >= millisec); + } + + /** + * Check if current date is after retention period + */ + @VisibleForTesting + boolean isAfterRetentionPeriod() { + if (mIsAfterRetentionPeriodCached) { + return mIsAfterRetentionPeriod; + } else { + File setUpDateFile = getSetUpDateFile(); + if (setUpDateFile.length() == 0) { + // We are yet to record a setup date. This means we haven't parsed the first event. + mIsAfterRetentionPeriod = false; + mIsAfterRetentionPeriodCached = true; + return false; + } + try { + long setupTimestamp = Long.parseLong(getSetUpDate()); + long currentTimestamp = System.currentTimeMillis(); + mIsAfterRetentionPeriod = isDateAfterNMillisec(setupTimestamp, currentTimestamp, + getRetentionPeriodInMillisec()); + mIsAfterRetentionPeriodCached = true; + return mIsAfterRetentionPeriod; + } catch (NumberFormatException e) { + // An error occurred when parsing the setup timestamp. + // Out of caution return true: we would delete the logs rather than + // risking them being kept for longer than the retention period + mIsAfterRetentionPeriod = true; + mIsAfterRetentionPeriodCached = true; + return true; + } + } + } + + @VisibleForTesting + File getSetUpDateFile() { + File dataDir = new File(Environment.getDataDirectory(), BACKUP_PERSISTENT_DIR); + File setupDateFile = new File(dataDir, INITIAL_SETUP_TIMESTAMP_KEY + ".txt"); + return setupDateFile; + } + + @VisibleForTesting + long getRetentionPeriodInMillisec() { + return LOGS_RETENTION_PERIOD_MILLISEC; + } + + @VisibleForTesting + long getBMMEventsFileSizeLimit(){ + return BMM_FILE_SIZE_LIMIT_BYTES; + } + + /** + * Delete the BMM Events file after the retention period has passed. + * + * @return true if the retention period has passed false otherwise. + * we want to return true even if we were unable to delete the file, as this will prevent + * expired BMM events from being printed to the dumpsys + */ + public boolean deleteExpiredBMMEvents() { + try { + if (isAfterRetentionPeriod()) { + File bmmEvents = getBMMEventsFile(); + if (bmmEvents.exists()) { + if (bmmEvents.delete()) { + Slog.i(TAG, "Deleted expired BMM Events"); + } else { + Slog.e(TAG, "Unable to delete expired BMM Events"); + } + } + return true; + } + return false; + } catch (Exception e) { + // Handle any unexpected exceptions + // To be safe we return true as we want to avoid exposing expired BMMEvents + return true; + } + } } diff --git a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java index 92e3107b6977052c44c057b1d43342f69a5bd21b..549d08c0393343fd0c7b05bca4fa571081ecb0bd 100644 --- a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java +++ b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java @@ -222,4 +222,21 @@ public class BackupManagerMonitorEventSender { extras.putBoolean(key, value); return extras; } + + /** + * Adds given key-value pair in the bundle and returns the bundle. If bundle was null it will + * be created. + * + * @param extras - bundle where to add key-value to, if null a new bundle will be created. + * @param key - key. + * @param value - value. + * @return extras if it was not null and new bundle otherwise. + */ + public static Bundle putMonitoringExtra(Bundle extras, String key, int value) { + if (extras == null) { + extras = new Bundle(); + } + extras.putInt(key, value); + return extras; + } } diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java index 3b13410720afad166d76df698d669c4c0cd5d252..f328b22352aefc898cc247b9f8283473e03679a5 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java @@ -37,6 +37,7 @@ import android.app.Activity; import android.app.ActivityOptions; import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; +import android.app.compat.CompatChanges; import android.companion.AssociationInfo; import android.companion.virtual.IVirtualDevice; import android.companion.virtual.IVirtualDeviceActivityListener; @@ -51,6 +52,8 @@ import android.companion.virtual.audio.IAudioRoutingCallback; import android.companion.virtual.flags.Flags; import android.companion.virtual.sensor.VirtualSensor; import android.companion.virtual.sensor.VirtualSensorEvent; +import android.compat.annotation.ChangeId; +import android.compat.annotation.EnabledSince; import android.content.AttributionSource; import android.content.ComponentName; import android.content.Context; @@ -75,6 +78,7 @@ import android.hardware.input.VirtualNavigationTouchpadConfig; import android.hardware.input.VirtualTouchEvent; import android.hardware.input.VirtualTouchscreenConfig; import android.os.Binder; +import android.os.Build; import android.os.IBinder; import android.os.LocaleList; import android.os.Looper; @@ -115,12 +119,33 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub private static final String TAG = "VirtualDeviceImpl"; + /** + * Virtual displays created by a {@link VirtualDeviceManager.VirtualDevice} are more consistent + * with virtual displays created via {@link DisplayManager} and allow for the creation of + * private, auto-mirror, and fixed orientation displays since + * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM}. + * + * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_PUBLIC + * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY + * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR + * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT + */ + @ChangeId + @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM) + public static final long MAKE_VIRTUAL_DISPLAY_FLAGS_CONSISTENT_WITH_DISPLAY_MANAGER = + 294837146L; + private static final int DEFAULT_VIRTUAL_DISPLAY_FLAGS = DisplayManager.VIRTUAL_DISPLAY_FLAG_TOUCH_FEEDBACK_DISABLED | DisplayManager.VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL | DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_FOCUS; + private static final int DEFAULT_VIRTUAL_DISPLAY_FLAGS_PRE_VIC = + DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC + | DisplayManager.VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT + | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY; + private static final String PERSISTENT_ID_PREFIX_CDM_ASSOCIATION = "companion:"; /** @@ -130,6 +155,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub private final Object mVirtualDeviceLock = new Object(); + private final int mBaseVirtualDisplayFlags; + private final Context mContext; private final AssociationInfo mAssociationInfo; private final VirtualDeviceManagerService mService; @@ -311,6 +338,16 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub ? mParams.getBlockedActivities() : mParams.getAllowedActivities(); } + + int flags = DEFAULT_VIRTUAL_DISPLAY_FLAGS; + if (!CompatChanges.isChangeEnabled( + MAKE_VIRTUAL_DISPLAY_FLAGS_CONSISTENT_WITH_DISPLAY_MANAGER, mOwnerUid)) { + flags |= DEFAULT_VIRTUAL_DISPLAY_FLAGS_PRE_VIC; + } + if (mParams.getLockState() == VirtualDeviceParams.LOCK_STATE_ALWAYS_UNLOCKED) { + flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; + } + mBaseVirtualDisplayFlags = flags; } @VisibleForTesting @@ -323,11 +360,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub * device. */ int getBaseVirtualDisplayFlags() { - int flags = DEFAULT_VIRTUAL_DISPLAY_FLAGS; - if (mParams.getLockState() == VirtualDeviceParams.LOCK_STATE_ALWAYS_UNLOCKED) { - flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; - } - return flags; + return mBaseVirtualDisplayFlags; } /** Returns the camera access controller of this device. */ diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index cbc9ff16e6de8c33cdf97468f4766d1a218b9d2b..d3ce47c56e4987404620441e657b4b4a20f9ebf9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -315,7 +315,6 @@ import android.net.ConnectivityManager; import android.net.Proxy; import android.net.Uri; import android.os.AppZygote; -import android.os.BatteryManager; import android.os.BatteryStats; import android.os.Binder; import android.os.BinderProxy; @@ -15096,16 +15095,6 @@ public class ActivityManagerService extends IActivityManager.Stub } } - // STOPSHIP(b/298884211): Remove this logging - if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { - final int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); - if (level < 0) { - Slog.wtf(BroadcastQueue.TAG, "Unexpected broadcast: " + intent - + "; callingUid: " + callingUid + ", callingPid: " + callingPid, - new Throwable()); - } - } - int[] users; if (userId == UserHandle.USER_ALL) { // Caller wants broadcast to go to all started users. diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java index a3dac6dc3404693e5deadeb56fdca843ce8eaf18..eb219a8819c6ce70a3d6632bd04819a9d6c236ff 100644 --- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java @@ -59,7 +59,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.os.BatteryManager; import android.os.Bundle; import android.os.BundleMerger; import android.os.Handler; @@ -1078,16 +1077,6 @@ class BroadcastQueueModernImpl extends BroadcastQueue { queue.lastProcessState = app.mState.getCurProcState(); if (receiver instanceof BroadcastFilter) { notifyScheduleRegisteredReceiver(app, r, (BroadcastFilter) receiver); - // STOPSHIP(b/298884211): Remove this logging - if (Intent.ACTION_BATTERY_CHANGED.equals(receiverIntent.getAction())) { - int level = receiverIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); - if (level < 0) { - Slog.wtf(TAG, "Dispatching unexpected broadcast: " + receiverIntent - + " to " + receiver - + "; callingUid: " + r.callingUid - + ", callingPid: " + r.callingPid); - } - } thread.scheduleRegisteredReceiver( ((BroadcastFilter) receiver).receiverList.receiver, receiverIntent, r.resultCode, r.resultData, r.resultExtras, diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 905589f70dc11dd41390aad44fb0a8f6ba58c7f1..824bdd4ccb79f3bc63bb9342fde342783ccee21b 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -417,59 +417,6 @@ public final class GameManagerService extends IGameManagerService.Stub { } } - public enum FrameRate { - FPS_DEFAULT(0), - FPS_30(30), - FPS_36(36), - FPS_40(40), - FPS_45(45), - FPS_48(48), - FPS_60(60), - FPS_72(72), - FPS_90(90), - FPS_120(120), - FPS_144(144), - FPS_INVALID(-1); - - public final int fps; - - FrameRate(int fps) { - this.fps = fps; - } - } - - // Turn the raw string to the corresponding fps int. - // Return 0 when disabling, -1 for invalid fps. - static int getFpsInt(String raw) { - // TODO(b/243448953): make sure this translates to proper values based on current display - switch (raw) { - case "30": - return FrameRate.FPS_30.fps; - case "36": - return FrameRate.FPS_36.fps; - case "40": - return FrameRate.FPS_40.fps; - case "45": - return FrameRate.FPS_45.fps; - case "48": - return FrameRate.FPS_48.fps; - case "60": - return FrameRate.FPS_60.fps; - case "72": - return FrameRate.FPS_72.fps; - case "90": - return FrameRate.FPS_90.fps; - case "120": - return FrameRate.FPS_120.fps; - case "144": - return FrameRate.FPS_144.fps; - case "disable": - case "": - return FrameRate.FPS_DEFAULT.fps; - } - return FrameRate.FPS_INVALID.fps; - } - /** * Called by games to communicate the current state to the platform. * @@ -717,7 +664,12 @@ public final class GameManagerService extends IGameManagerService.Stub { } public synchronized int getFps() { - return GameManagerService.getFpsInt(mFps); + try { + final int fpsInt = Integer.parseInt(mFps); + return fpsInt; + } catch (NumberFormatException e) { + return 0; + } } synchronized String getFpsStr() { @@ -757,7 +709,12 @@ public final class GameManagerService extends IGameManagerService.Stub { } android.app.GameModeConfiguration toPublicGameModeConfig() { - int fpsOverride = getFpsInt(mFps); + int fpsOverride; + try { + fpsOverride = Integer.parseInt(mFps); + } catch (NumberFormatException e) { + fpsOverride = 0; + } // TODO(b/243448953): match to proper value in case of display change? fpsOverride = fpsOverride > 0 ? fpsOverride : android.app.GameModeConfiguration.FPS_OVERRIDE_NONE; diff --git a/services/core/java/com/android/server/app/GameManagerShellCommand.java b/services/core/java/com/android/server/app/GameManagerShellCommand.java index 00ff489ee0ff6670edb951b9e07cb0fa832a8e30..ab57c4fe837ea9d8273645a187b5beeb10d1e3f0 100644 --- a/services/core/java/com/android/server/app/GameManagerShellCommand.java +++ b/services/core/java/com/android/server/app/GameManagerShellCommand.java @@ -241,8 +241,10 @@ public class GameManagerShellCommand extends ShellCommand { case "--fps": if (fpsStr == null) { fpsStr = getNextArgRequired(); - if (fpsStr != null && GameManagerService.getFpsInt(fpsStr) == -1) { - pw.println("Invalid frame rate '" + fpsStr + "'"); + try { + Integer.parseInt(fpsStr); + } catch (NumberFormatException e) { + pw.println("Invalid frame rate: '" + fpsStr + "'"); return -1; } } else { @@ -375,8 +377,8 @@ public class GameManagerShellCommand extends ShellCommand { pw.println(" --downscale [0.3|0.35|0.4|0.45|0.5|0.55|0.6|0.65"); pw.println(" |0.7|0.75|0.8|0.85|0.9|disable]: Set app to run at the"); pw.println(" specified scaling ratio."); - pw.println(" --fps [30|45|60|90|120|disable]: Set app to run at the specified fps,"); - pw.println(" if supported."); + pw.println(" --fps: Integer value to set app to run at the specified fps,"); + pw.println(" if supported. 0 to disable."); pw.println(" reset [--mode [2|3|performance|battery] --user <USER_ID>] <PACKAGE_NAME>"); pw.println(" Resets the game mode of the app to device configuration."); pw.println(" This should only be used to reset any override to non custom game mode"); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java index 50d375c56f4a93f0584ccd874c6152e790227418..35fc43ae5f7470592a12a6c7ea1a6b9d85f8b5ea 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java @@ -43,7 +43,6 @@ import com.android.server.biometrics.log.BiometricLogger; import com.android.server.biometrics.log.OperationContextExt; import com.android.server.biometrics.sensors.AuthSessionCoordinator; import com.android.server.biometrics.sensors.AuthenticationClient; -import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; @@ -242,9 +241,6 @@ class FaceAuthenticationClient extends AuthenticationClient<AidlSession, FaceAut vendorCode, getTargetUserId())); - if (error == BiometricConstants.BIOMETRIC_ERROR_RE_ENROLL) { - BiometricNotificationUtils.showReEnrollmentNotification(getContext()); - } super.onError(error, vendorCode); } diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java index df16c5bcc6738f7a71fb84006f9385116a30e21c..4ef2f1e98a80dd6e32c57e0641b655bf00bb476e 100644 --- a/services/core/java/com/android/server/camera/CameraServiceProxy.java +++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java @@ -77,6 +77,7 @@ import android.view.WindowManagerGlobal; import com.android.framework.protobuf.nano.MessageNano; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; +import com.android.internal.camera.flags.Flags; import com.android.internal.util.FrameworkStatsLog; import com.android.server.LocalServices; import com.android.server.ServiceThread; @@ -244,6 +245,7 @@ public class CameraServiceProxy extends SystemService public List<CameraStreamStats> mStreamStats; public String mUserTag; public int mVideoStabilizationMode; + public boolean mUsedUltraWide; public final long mLogId; public final int mSessionIndex; @@ -271,7 +273,8 @@ public class CameraServiceProxy extends SystemService public void markCompleted(int internalReconfigure, long requestCount, long resultErrorCount, boolean deviceError, List<CameraStreamStats> streamStats, String userTag, - int videoStabilizationMode, CameraExtensionSessionStats extStats) { + int videoStabilizationMode, boolean usedUltraWide, + CameraExtensionSessionStats extStats) { if (mCompleted) { return; } @@ -284,6 +287,7 @@ public class CameraServiceProxy extends SystemService mStreamStats = streamStats; mUserTag = userTag; mVideoStabilizationMode = videoStabilizationMode; + mUsedUltraWide = usedUltraWide; mExtSessionStats = extStats; if (CameraServiceProxy.DEBUG) { Slog.v(TAG, "A camera facing " + cameraFacingToString(mCameraFacing) + @@ -873,6 +877,10 @@ public class CameraServiceProxy extends SystemService streamCount = e.mStreamStats.size(); } if (CameraServiceProxy.DEBUG) { + String ultrawideDebug = Flags.logUltrawideUsage() + ? ", wideAngleUsage " + e.mUsedUltraWide + : ""; + Slog.v(TAG, "CAMERA_ACTION_EVENT: action " + e.mAction + " clientName " + e.mClientName + ", duration " + e.getDuration() @@ -889,6 +897,7 @@ public class CameraServiceProxy extends SystemService + ", streamCount is " + streamCount + ", userTag is " + e.mUserTag + ", videoStabilizationMode " + e.mVideoStabilizationMode + + ultrawideDebug + ", logId " + e.mLogId + ", sessionIndex " + e.mSessionIndex + ", mExtSessionStats {type " + extensionType @@ -952,8 +961,9 @@ public class CameraServiceProxy extends SystemService MessageNano.toByteArray(streamProtos[2]), MessageNano.toByteArray(streamProtos[3]), MessageNano.toByteArray(streamProtos[4]), - e.mUserTag, e.mVideoStabilizationMode, e.mLogId, e.mSessionIndex, - extensionType, extensionIsAdvanced); + e.mUserTag, e.mVideoStabilizationMode, + e.mLogId, e.mSessionIndex, + extensionType, extensionIsAdvanced, e.mUsedUltraWide); } } @@ -1148,6 +1158,7 @@ public class CameraServiceProxy extends SystemService List<CameraStreamStats> streamStats = cameraState.getStreamStats(); String userTag = cameraState.getUserTag(); int videoStabilizationMode = cameraState.getVideoStabilizationMode(); + boolean usedUltraWide = Flags.logUltrawideUsage() ? cameraState.getUsedUltraWide() : false; long logId = cameraState.getLogId(); int sessionIdx = cameraState.getSessionIndex(); CameraExtensionSessionStats extSessionStats = cameraState.getExtensionSessionStats(); @@ -1205,7 +1216,7 @@ public class CameraServiceProxy extends SystemService Slog.w(TAG, "Camera " + cameraId + " was already marked as active"); oldEvent.markCompleted(/*internalReconfigure*/0, /*requestCount*/0, /*resultErrorCount*/0, /*deviceError*/false, streamStats, - /*userTag*/"", /*videoStabilizationMode*/-1, + /*userTag*/"", /*videoStabilizationMode*/-1, /*usedUltraWide*/false, new CameraExtensionSessionStats()); mCameraUsageHistory.add(oldEvent); } @@ -1217,7 +1228,7 @@ public class CameraServiceProxy extends SystemService doneEvent.markCompleted(internalReconfigureCount, requestCount, resultErrorCount, deviceError, streamStats, userTag, - videoStabilizationMode, extSessionStats); + videoStabilizationMode, usedUltraWide, extSessionStats); mCameraUsageHistory.add(doneEvent); // Do not double count device error deviceError = false; diff --git a/services/core/java/com/android/server/display/BrightnessRangeController.java b/services/core/java/com/android/server/display/BrightnessRangeController.java index 21273e0f278510b61c417e425dbd01a019c80772..13ee47eb91c89e511d3c317efa25247d4510e398 100644 --- a/services/core/java/com/android/server/display/BrightnessRangeController.java +++ b/services/core/java/com/android/server/display/BrightnessRangeController.java @@ -19,6 +19,7 @@ package com.android.server.display; import android.hardware.display.BrightnessInfo; import android.os.Handler; import android.os.IBinder; +import android.os.PowerManager; import com.android.server.display.brightness.clamper.HdrClamper; import com.android.server.display.feature.DisplayManagerFlags; @@ -52,17 +53,26 @@ class BrightnessRangeController { HdrClamper hdrClamper, DisplayManagerFlags flags) { mHbmController = hbmController; mModeChangeCallback = modeChangeCallback; - mUseHdrClamper = false; - mUseNbmController = flags.isNbmControllerEnabled(); - mNormalBrightnessModeController.resetNbmData(displayDeviceConfig.getLuxThrottlingData()); mHdrClamper = hdrClamper; + mUseHdrClamper = flags.isHdrClamperEnabled(); + mUseNbmController = flags.isNbmControllerEnabled(); + if (mUseNbmController) { + mNormalBrightnessModeController.resetNbmData( + displayDeviceConfig.getLuxThrottlingData()); + } + if (mUseHdrClamper) { + mHdrClamper.resetHdrConfig(displayDeviceConfig.getHdrBrightnessData()); + } + } void dump(PrintWriter pw) { pw.println("BrightnessRangeController:"); pw.println(" mUseNormalBrightnessController=" + mUseNbmController); + pw.println(" mUseHdrClamper=" + mUseHdrClamper); mHbmController.dump(pw); mNormalBrightnessModeController.dump(pw); + mHdrClamper.dump(pw); } void onAmbientLuxChange(float ambientLux) { @@ -91,6 +101,9 @@ class BrightnessRangeController { displayDeviceConfig::getHdrBrightnessFromSdr); } ); + if (mUseHdrClamper) { + mHdrClamper.resetHdrConfig(displayDeviceConfig.getHdrBrightnessData()); + } } void stop() { @@ -128,8 +141,10 @@ class BrightnessRangeController { } float getHdrBrightnessValue() { - float hdrBrightness = mHbmController.getHdrBrightnessValue(); - return Math.min(hdrBrightness, mHdrClamper.getMaxBrightness()); + float hdrBrightness = mHbmController.getHdrBrightnessValue(); + float brightnessMax = mUseHdrClamper ? mHdrClamper.getMaxBrightness() + : PowerManager.BRIGHTNESS_MAX; + return Math.min(hdrBrightness, brightnessMax); } float getTransitionPoint() { @@ -151,6 +166,6 @@ class BrightnessRangeController { } public float getHdrTransitionRate() { - return mHdrClamper.getTransitionRate(); + return mUseHdrClamper ? mHdrClamper.getTransitionRate() : -1; } } diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 320684fe3a0f0397f689f048874bb616447ae9e0..f86b8ca5208b74ff20c7e33f9b7f3deb5281ec74 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -2425,7 +2425,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call Slog.d(mTag, "Animating brightness: target=" + target + ", sdrTarget=" + sdrTarget + ", rate=" + rate); } - if (mScreenBrightnessRampAnimator.animateTo(target, sdrTarget, rate)) { + if (mScreenBrightnessRampAnimator.animateTo(target, sdrTarget, rate, false)) { Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target); String propertyKey = "debug.tracing.screen_brightness"; diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 597738e8b293c1b826da0e4042172b9af2c05e3f..da299813d525008c16b70e7fbdd4e34b089bbd66 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -1547,7 +1547,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal SCREEN_ANIMATION_RATE_MINIMUM); } else if (customTransitionRate > 0) { animateScreenBrightness(animateValue, sdrAnimateValue, - customTransitionRate); + customTransitionRate, /* ignoreAnimationLimits = */true); } else { boolean isIncreasing = animateValue > currentBrightness; final float rampSpeed; @@ -2017,11 +2017,17 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } private void animateScreenBrightness(float target, float sdrTarget, float rate) { + animateScreenBrightness(target, sdrTarget, rate, /* ignoreAnimationLimits = */false); + } + + private void animateScreenBrightness(float target, float sdrTarget, float rate, + boolean ignoreAnimationLimits) { if (DEBUG) { Slog.d(mTag, "Animating brightness: target=" + target + ", sdrTarget=" + sdrTarget + ", rate=" + rate); } - if (mScreenBrightnessRampAnimator.animateTo(target, sdrTarget, rate)) { + if (mScreenBrightnessRampAnimator.animateTo(target, sdrTarget, rate, + ignoreAnimationLimits)) { Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target); String propertyKey = "debug.tracing.screen_brightness"; diff --git a/services/core/java/com/android/server/display/RampAnimator.java b/services/core/java/com/android/server/display/RampAnimator.java index 378cdba0952032ad5ea4e91171d386777fa3dfd8..5ba042c51a452c4f754b8885960348ab1a626f0f 100644 --- a/services/core/java/com/android/server/display/RampAnimator.java +++ b/services/core/java/com/android/server/display/RampAnimator.java @@ -30,6 +30,8 @@ class RampAnimator<T> { private final T mObject; private final FloatProperty<T> mProperty; + private final Clock mClock; + private float mCurrentValue; // target in HLG space @@ -47,10 +49,14 @@ class RampAnimator<T> { private boolean mFirstTime = true; - RampAnimator(T object, FloatProperty<T> property) { + this(object, property, System::nanoTime); + } + + RampAnimator(T object, FloatProperty<T> property, Clock clock) { mObject = object; mProperty = property; + mClock = clock; } /** @@ -66,15 +72,24 @@ class RampAnimator<T> { /** * Sets the animation target and the rate of this ramp animator. - * + * Animation rate will be set ignoring maxTime animation limits * If this is the first time the property is being set or if the rate is 0, * the value jumps directly to the target. * * @param targetLinear The target value. * @param rate The convergence rate in units per second, or 0 to set the value immediately. + * @param ignoreAnimationLimits if mAnimationIncreaseMaxTimeSecs and + * mAnimationDecreaseMaxTimeSecs should be respected when adjusting + * animation speed * @return True if the target differs from the previous target. */ - boolean setAnimationTarget(float targetLinear, float rate) { + boolean setAnimationTarget(float targetLinear, float rate, boolean ignoreAnimationLimits) { + float maxIncreaseTimeSecs = ignoreAnimationLimits ? 0 : mAnimationIncreaseMaxTimeSecs; + float maxDecreaseTimeSecs = ignoreAnimationLimits ? 0 : mAnimationDecreaseMaxTimeSecs; + return setAnimationTarget(targetLinear, rate, maxIncreaseTimeSecs, maxDecreaseTimeSecs); + } + private boolean setAnimationTarget(float targetLinear, float rate, + float maxIncreaseTimeSecs, float maxDecreaseTimeSecs) { // Convert the target from the linear into the HLG space. final float target = BrightnessUtils.convertLinearToGamma(targetLinear); @@ -94,12 +109,12 @@ class RampAnimator<T> { } // Adjust the rate so that we do not exceed our maximum animation time. - if (target > mCurrentValue && mAnimationIncreaseMaxTimeSecs > 0.0f - && ((target - mCurrentValue) / rate) > mAnimationIncreaseMaxTimeSecs) { - rate = (target - mCurrentValue) / mAnimationIncreaseMaxTimeSecs; - } else if (target < mCurrentValue && mAnimationDecreaseMaxTimeSecs > 0.0f - && ((mCurrentValue - target) / rate) > mAnimationDecreaseMaxTimeSecs) { - rate = (mCurrentValue - target) / mAnimationDecreaseMaxTimeSecs; + if (target > mCurrentValue && maxIncreaseTimeSecs > 0.0f + && ((target - mCurrentValue) / rate) > maxIncreaseTimeSecs) { + rate = (target - mCurrentValue) / maxIncreaseTimeSecs; + } else if (target < mCurrentValue && maxDecreaseTimeSecs > 0.0f + && ((mCurrentValue - target) / rate) > maxDecreaseTimeSecs) { + rate = (mCurrentValue - target) / maxDecreaseTimeSecs; } // Adjust the rate based on the closest target. @@ -124,7 +139,7 @@ class RampAnimator<T> { if (!mAnimating && target != mCurrentValue) { mAnimating = true; mAnimatedValue = mCurrentValue; - mLastFrameTimeNanos = System.nanoTime(); + mLastFrameTimeNanos = mClock.nanoTime(); } return changed; @@ -184,6 +199,13 @@ class RampAnimator<T> { void onAnimationEnd(); } + interface Clock { + /** + * Returns current system time in nanoseconds. + */ + long nanoTime(); + } + static class DualRampAnimator<T> { private final Choreographer mChoreographer; private final RampAnimator<T> mFirst; @@ -219,11 +241,17 @@ class RampAnimator<T> { * @param linearFirstTarget The first target value in linear space. * @param linearSecondTarget The second target value in linear space. * @param rate The convergence rate in units per second, or 0 to set the value immediately. + * @param ignoreAnimationLimits if mAnimationIncreaseMaxTimeSecs and + * mAnimationDecreaseMaxTimeSecs should be respected + * when adjusting animation speed * @return True if either target differs from the previous target. */ - public boolean animateTo(float linearFirstTarget, float linearSecondTarget, float rate) { - boolean animationTargetChanged = mFirst.setAnimationTarget(linearFirstTarget, rate); - animationTargetChanged |= mSecond.setAnimationTarget(linearSecondTarget, rate); + public boolean animateTo(float linearFirstTarget, float linearSecondTarget, float rate, + boolean ignoreAnimationLimits) { + boolean animationTargetChanged = mFirst.setAnimationTarget(linearFirstTarget, rate, + ignoreAnimationLimits); + animationTargetChanged |= mSecond.setAnimationTarget(linearSecondTarget, rate, + ignoreAnimationLimits); boolean shouldBeAnimating = isAnimating(); if (shouldBeAnimating != mAwaitingCallback) { diff --git a/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java b/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java index 079a196234a8276bbdda7da8a0badaa0b3596b1a..a514136e62a2a94b37ddb0c25a6cd207e5dedf83 100644 --- a/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java +++ b/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java @@ -16,40 +16,41 @@ package com.android.server.display.brightness.clamper; +import android.annotation.Nullable; import android.os.Handler; import android.os.PowerManager; -import com.android.internal.annotations.VisibleForTesting; +import com.android.server.display.config.HdrBrightnessData; -import java.util.HashMap; +import java.io.PrintWriter; import java.util.Map; public class HdrClamper { - private final Configuration mConfiguration = new Configuration(); - private final BrightnessClamperController.ClamperChangeListener mClamperChangeListener; private final Handler mHandler; private final Runnable mDebouncer; - private float mMaxBrightness = PowerManager.BRIGHTNESS_MAX; + @Nullable + private HdrBrightnessData mHdrBrightnessData = null; - // brightness change speed, in units per seconds, - private float mTransitionRate = -1f; + private float mAmbientLux = Float.MAX_VALUE; + private float mMaxBrightness = PowerManager.BRIGHTNESS_MAX; private float mDesiredMaxBrightness = PowerManager.BRIGHTNESS_MAX; - private float mDesiredTransitionDuration = -1; // in seconds + // brightness change speed, in units per seconds, + private float mTransitionRate = -1f; + private float mDesiredTransitionRate = -1f; public HdrClamper(BrightnessClamperController.ClamperChangeListener clamperChangeListener, Handler handler) { mClamperChangeListener = clamperChangeListener; mHandler = handler; mDebouncer = () -> { - mTransitionRate = Math.abs((mMaxBrightness - mDesiredMaxBrightness) - / mDesiredTransitionDuration); + mTransitionRate = mDesiredTransitionRate; mMaxBrightness = mDesiredMaxBrightness; mClamperChangeListener.onChanged(); }; @@ -65,46 +66,74 @@ public class HdrClamper { return mTransitionRate; } - /** * Updates brightness cap in response to ambient lux change. * Called by ABC in same looper: mHandler.getLooper() */ public void onAmbientLuxChange(float ambientLux) { - float expectedMaxBrightness = findBrightnessLimit(ambientLux); + mAmbientLux = ambientLux; + recalculateBrightnessCap(mHdrBrightnessData, ambientLux); + } + + /** + * Updates brightness cap config. + * Called in same looper: mHandler.getLooper() + */ + public void resetHdrConfig(HdrBrightnessData data) { + mHdrBrightnessData = data; + recalculateBrightnessCap(data, mAmbientLux); + } + + /** + * Dumps the state of HdrClamper. + */ + public void dump(PrintWriter pw) { + pw.println("HdrClamper:"); + pw.println(" mMaxBrightness=" + mMaxBrightness); + pw.println(" mDesiredMaxBrightness=" + mDesiredMaxBrightness); + pw.println(" mTransitionRate=" + mTransitionRate); + pw.println(" mDesiredTransitionRate=" + mDesiredTransitionRate); + pw.println(" mHdrBrightnessData=" + (mHdrBrightnessData == null ? "null" + : mHdrBrightnessData.toString())); + pw.println(" mAmbientLux=" + mAmbientLux); + } + + private void recalculateBrightnessCap(HdrBrightnessData data, float ambientLux) { + if (data == null) { + mHandler.removeCallbacks(mDebouncer); + return; + } + float expectedMaxBrightness = findBrightnessLimit(data, ambientLux); + if (mMaxBrightness == expectedMaxBrightness) { mDesiredMaxBrightness = mMaxBrightness; - mDesiredTransitionDuration = -1; + mDesiredTransitionRate = -1f; mTransitionRate = -1f; mHandler.removeCallbacks(mDebouncer); } else if (mDesiredMaxBrightness != expectedMaxBrightness) { mDesiredMaxBrightness = expectedMaxBrightness; long debounceTime; + long transitionDuration; if (mDesiredMaxBrightness > mMaxBrightness) { - debounceTime = mConfiguration.mIncreaseConfig.mDebounceTimeMillis; - mDesiredTransitionDuration = - (float) mConfiguration.mIncreaseConfig.mTransitionTimeMillis / 1000; + debounceTime = mHdrBrightnessData.mBrightnessIncreaseDebounceMillis; + transitionDuration = mHdrBrightnessData.mBrightnessIncreaseDurationMillis; } else { - debounceTime = mConfiguration.mDecreaseConfig.mDebounceTimeMillis; - mDesiredTransitionDuration = - (float) mConfiguration.mDecreaseConfig.mTransitionTimeMillis / 1000; + debounceTime = mHdrBrightnessData.mBrightnessDecreaseDebounceMillis; + transitionDuration = mHdrBrightnessData.mBrightnessDecreaseDurationMillis; } + mDesiredTransitionRate = Math.abs( + (mMaxBrightness - mDesiredMaxBrightness) * 1000f / transitionDuration); mHandler.removeCallbacks(mDebouncer); mHandler.postDelayed(mDebouncer, debounceTime); } } - @VisibleForTesting - Configuration getConfiguration() { - return mConfiguration; - } - - private float findBrightnessLimit(float ambientLux) { + private float findBrightnessLimit(HdrBrightnessData data, float ambientLux) { float foundAmbientBoundary = Float.MAX_VALUE; float foundMaxBrightness = PowerManager.BRIGHTNESS_MAX; for (Map.Entry<Float, Float> brightnessPoint : - mConfiguration.mMaxBrightnessLimits.entrySet()) { + data.mMaxBrightnessLimits.entrySet()) { float ambientBoundary = brightnessPoint.getKey(); // find ambient lux upper boundary closest to current ambient lux if (ambientBoundary > ambientLux && ambientBoundary < foundAmbientBoundary) { @@ -114,19 +143,4 @@ public class HdrClamper { } return foundMaxBrightness; } - - @VisibleForTesting - static class Configuration { - final Map<Float, Float> mMaxBrightnessLimits = new HashMap<>(); - final TransitionConfiguration mIncreaseConfig = new TransitionConfiguration(); - - final TransitionConfiguration mDecreaseConfig = new TransitionConfiguration(); - } - - @VisibleForTesting - static class TransitionConfiguration { - long mDebounceTimeMillis; - - long mTransitionTimeMillis; - } } diff --git a/services/core/java/com/android/server/display/config/HdrBrightnessData.java b/services/core/java/com/android/server/display/config/HdrBrightnessData.java index 06d3c5b87520daba26d2ddc626f1a2dee655c2a6..48d671d356f7a559fb6cbfa659b8f70d048ad9ca 100644 --- a/services/core/java/com/android/server/display/config/HdrBrightnessData.java +++ b/services/core/java/com/android/server/display/config/HdrBrightnessData.java @@ -18,6 +18,8 @@ package com.android.server.display.config; import android.annotation.Nullable; +import com.android.internal.annotations.VisibleForTesting; + import java.util.HashMap; import java.util.List; import java.util.Map; @@ -52,7 +54,8 @@ public class HdrBrightnessData { */ public final long mBrightnessDecreaseDurationMillis; - private HdrBrightnessData(Map<Float, Float> maxBrightnessLimits, + @VisibleForTesting + public HdrBrightnessData(Map<Float, Float> maxBrightnessLimits, long brightnessIncreaseDebounceMillis, long brightnessIncreaseDurationMillis, long brightnessDecreaseDebounceMillis, long brightnessDecreaseDurationMillis) { mMaxBrightnessLimits = maxBrightnessLimits; diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java index aebd8a08ee3fa16a7427786a1a23932f15c0fb43..d23c4fe91c8473f3772029f385945577bdadaa14 100644 --- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java +++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java @@ -39,6 +39,10 @@ public class DisplayManagerFlags { Flags.FLAG_ENABLE_NBM_CONTROLLER, Flags::enableNbmController); + private final FlagState mHdrClamperFlagState = new FlagState( + Flags.FLAG_ENABLE_HDR_CLAMPER, + Flags::enableHdrClamper); + /** Returns whether connected display management is enabled or not. */ public boolean isConnectedDisplayManagementEnabled() { return mConnectedDisplayManagementFlagState.isEnabled(); @@ -49,6 +53,10 @@ public class DisplayManagerFlags { return mNbmControllerFlagState.isEnabled(); } + public boolean isHdrClamperEnabled() { + return mHdrClamperFlagState.isEnabled(); + } + private static class FlagState { private final String mName; diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig index 12306b0392250aac21f7371b490fd27b523f1330..ce64bd3898399909e1bc68bad0c35446b6d95921 100644 --- a/services/core/java/com/android/server/display/feature/display_flags.aconfig +++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig @@ -14,6 +14,14 @@ flag { name: "enable_nbm_controller" namespace: "display_manager" description: "Feature flag for Normal Brightness Mode Controller" - bug: "277877297" + bug: "299527549" + is_fixed_read_only: true +} + +flag { + name: "enable_hdr_clamper" + namespace: "display_manager" + description: "Feature flag for HDR Clamper" + bug: "295100043" is_fixed_read_only: true } diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java index a7c986d04fa468ac7e8c78d9a2ae2ae384ed3d28..ec858ee296e1cd815ae7f908bd7bc1cf9ee3a397 100644 --- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java +++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java @@ -513,6 +513,7 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub { List<String> apkFiles = filesList .map(path -> path.toAbsolutePath().toString()) + .filter(str -> str.endsWith(".apk")) .collect(Collectors.toList()); sourceStampVerificationResult = SourceStampVerifier.verify(apkFiles); } catch (IOException e) { diff --git a/services/core/java/com/android/server/media/MediaKeyDispatcher.java b/services/core/java/com/android/server/media/MediaKeyDispatcher.java index 55511ad637ac09814d04bdb1d15456b1e6cfc5fb..66cafabb1e6e9e90049220eafe4ecaf304976533 100644 --- a/services/core/java/com/android/server/media/MediaKeyDispatcher.java +++ b/services/core/java/com/android/server/media/MediaKeyDispatcher.java @@ -117,24 +117,11 @@ public abstract class MediaKeyDispatcher { /** * Gets the map of key code -> {@link KeyEventType} that have been overridden. - * <p> - * The list of valid key codes are the following: - * <ul> - * <li> {@link KeyEvent#KEYCODE_MEDIA_PLAY} - * <li> {@link KeyEvent#KEYCODE_MEDIA_PAUSE} - * <li> {@link KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE} - * <li> {@link KeyEvent#KEYCODE_MUTE} - * <li> {@link KeyEvent#KEYCODE_HEADSETHOOK} - * <li> {@link KeyEvent#KEYCODE_MEDIA_STOP} - * <li> {@link KeyEvent#KEYCODE_MEDIA_NEXT} - * <li> {@link KeyEvent#KEYCODE_MEDIA_PREVIOUS} - * <li> {@link KeyEvent#KEYCODE_VOLUME_UP} - * <li> {@link KeyEvent#KEYCODE_VOLUME_DOWN} - * <li> {@link KeyEvent#KEYCODE_VOLUME_MUTE} - * </ul> - * @see {@link KeyEvent#isMediaSessionKey(int)} + * + * <p>For the list of relevant key codes, see {@link KeyEvent#isMediaSessionKey(int)}. */ - @KeyEventType Map<Integer, Integer> getOverriddenKeyEvents() { + @KeyEventType + Map<Integer, Integer> getOverriddenKeyEvents() { return mOverriddenKeyEvents; } diff --git a/services/core/java/com/android/server/notification/NotificationAttentionHelper.java b/services/core/java/com/android/server/notification/NotificationAttentionHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..75a0cf521a1dc40792750ba7c1c7ff177a158e2e --- /dev/null +++ b/services/core/java/com/android/server/notification/NotificationAttentionHelper.java @@ -0,0 +1,951 @@ +/* + * Copyright (C) 2023 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.server.notification; + +import static android.app.Notification.FLAG_INSISTENT; +import static android.app.Notification.FLAG_ONLY_ALERT_ONCE; +import static android.app.NotificationManager.IMPORTANCE_MIN; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR; +import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE; +import static android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS; +import static android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS; +import static android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS; + +import android.annotation.IntDef; +import android.app.ActivityManager; +import android.app.KeyguardManager; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.StatusBarManager; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.database.ContentObserver; +import android.media.AudioAttributes; +import android.media.AudioManager; +import android.media.IRingtonePlayer; +import android.net.Uri; +import android.os.Binder; +import android.os.RemoteException; +import android.os.SystemProperties; +import android.os.UserHandle; +import android.os.VibrationEffect; +import android.provider.Settings; +import android.telephony.PhoneStateListener; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.util.Log; +import android.util.Slog; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; + +import com.android.internal.R; +import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.server.EventLogTags; +import com.android.server.lights.LightsManager; +import com.android.server.lights.LogicalLight; + +import java.io.PrintWriter; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * NotificationManagerService helper for handling notification attention effects: + * make noise, vibrate, or flash the LED. + * @hide + */ +public final class NotificationAttentionHelper { + static final String TAG = "NotifAttentionHelper"; + static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + static final boolean DEBUG_INTERRUPTIVENESS = SystemProperties.getBoolean( + "debug.notification.interruptiveness", false); + + private final Context mContext; + private final PackageManager mPackageManager; + private final TelephonyManager mTelephonyManager; + private final NotificationManagerPrivate mNMP; + private final SystemUiSystemPropertiesFlags.FlagResolver mFlagResolver; + private AccessibilityManager mAccessibilityManager; + private KeyguardManager mKeyguardManager; + private AudioManager mAudioManager; + private final LightsManager mLightsManager; + private final NotificationUsageStats mUsageStats; + private final ZenModeHelper mZenModeHelper; + + private VibratorHelper mVibratorHelper; + // The last key in this list owns the hardware. + ArrayList<String> mLights = new ArrayList<>(); + private LogicalLight mNotificationLight; + private LogicalLight mAttentionLight; + + private final boolean mUseAttentionLight; + boolean mHasLight = true; + + private final SettingsObserver mSettingsObserver; + + private boolean mIsAutomotive; + private boolean mNotificationEffectsEnabledForAutomotive; + private boolean mDisableNotificationEffects; + private int mCallState; + private String mSoundNotificationKey; + private String mVibrateNotificationKey; + private boolean mSystemReady; + private boolean mInCallStateOffHook = false; + private boolean mScreenOn = true; + private boolean mUserPresent = false; + boolean mNotificationPulseEnabled; + private final Uri mInCallNotificationUri; + private final AudioAttributes mInCallNotificationAudioAttributes; + private final float mInCallNotificationVolume; + private Binder mCallNotificationToken = null; + + + public NotificationAttentionHelper(Context context, LightsManager lightsManager, + AccessibilityManager accessibilityManager, PackageManager packageManager, + NotificationUsageStats usageStats, + NotificationManagerPrivate notificationManagerPrivate, + ZenModeHelper zenModeHelper, SystemUiSystemPropertiesFlags.FlagResolver flagResolver) { + mContext = context; + mPackageManager = packageManager; + mTelephonyManager = context.getSystemService(TelephonyManager.class); + mAccessibilityManager = accessibilityManager; + mLightsManager = lightsManager; + mNMP = notificationManagerPrivate; + mUsageStats = usageStats; + mZenModeHelper = zenModeHelper; + mFlagResolver = flagResolver; + + mVibratorHelper = new VibratorHelper(context); + + mNotificationLight = mLightsManager.getLight(LightsManager.LIGHT_ID_NOTIFICATIONS); + mAttentionLight = mLightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION); + + Resources resources = context.getResources(); + mUseAttentionLight = resources.getBoolean(R.bool.config_useAttentionLight); + mHasLight = + resources.getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed); + + // Don't start allowing notifications until the setup wizard has run once. + // After that, including subsequent boots, init with notifications turned on. + // This works on the first boot because the setup wizard will toggle this + // flag at least once and we'll go back to 0 after that. + if (Settings.Global.getInt(context.getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 0) == 0) { + mDisableNotificationEffects = true; + } + + mInCallNotificationUri = Uri.parse( + "file://" + resources.getString(R.string.config_inCallNotificationSound)); + mInCallNotificationAudioAttributes = new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) + .build(); + mInCallNotificationVolume = resources.getFloat(R.dimen.config_inCallNotificationVolume); + + mSettingsObserver = new SettingsObserver(); + } + + public void onSystemReady() { + mSystemReady = true; + + mIsAutomotive = mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0); + mNotificationEffectsEnabledForAutomotive = mContext.getResources().getBoolean( + R.bool.config_enableServerNotificationEffectsForAutomotive); + + mAudioManager = mContext.getSystemService(AudioManager.class); + mKeyguardManager = mContext.getSystemService(KeyguardManager.class); + + registerBroadcastListeners(); + } + + private void registerBroadcastListeners() { + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { + mTelephonyManager.listen(new PhoneStateListener() { + @Override + public void onCallStateChanged(int state, String incomingNumber) { + if (mCallState == state) return; + if (DEBUG) Slog.d(TAG, "Call state changed: " + callStateToString(state)); + mCallState = state; + } + }, PhoneStateListener.LISTEN_CALL_STATE); + } + + IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_SCREEN_ON); + filter.addAction(Intent.ACTION_SCREEN_OFF); + filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); + filter.addAction(Intent.ACTION_USER_PRESENT); + mContext.registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter, null, null); + + mContext.getContentResolver().registerContentObserver( + SettingsObserver.NOTIFICATION_LIGHT_PULSE_URI, false, mSettingsObserver, + UserHandle.USER_ALL); + } + + @VisibleForTesting + /** + * Determine whether this notification should attempt to make noise, vibrate, or flash the LED + * @return buzzBeepBlink - bitfield (buzz ? 1 : 0) | (beep ? 2 : 0) | (blink ? 4 : 0) | + * (polite_attenuated ? 8 : 0) | (polite_muted ? 16 : 0) + */ + int buzzBeepBlinkLocked(NotificationRecord record, Signals signals) { + if (mIsAutomotive && !mNotificationEffectsEnabledForAutomotive) { + return 0; + } + boolean buzz = false; + boolean beep = false; + boolean blink = false; + + final String key = record.getKey(); + + if (DEBUG) { + Log.d(TAG, "buzzBeepBlinkLocked " + record); + } + + // Should this notification make noise, vibe, or use the LED? + final boolean aboveThreshold = + mIsAutomotive + ? record.getImportance() > NotificationManager.IMPORTANCE_DEFAULT + : record.getImportance() >= NotificationManager.IMPORTANCE_DEFAULT; + // Remember if this notification already owns the notification channels. + boolean wasBeep = key != null && key.equals(mSoundNotificationKey); + boolean wasBuzz = key != null && key.equals(mVibrateNotificationKey); + // These are set inside the conditional if the notification is allowed to make noise. + boolean hasValidVibrate = false; + boolean hasValidSound = false; + boolean sentAccessibilityEvent = false; + + // If the notification will appear in the status bar, it should send an accessibility event + final boolean suppressedByDnd = record.isIntercepted() + && (record.getSuppressedVisualEffects() & SUPPRESSED_EFFECT_STATUS_BAR) != 0; + if (!record.isUpdate + && record.getImportance() > IMPORTANCE_MIN + && !suppressedByDnd + && isNotificationForCurrentUser(record, signals)) { + sendAccessibilityEvent(record); + sentAccessibilityEvent = true; + } + + if (aboveThreshold && isNotificationForCurrentUser(record, signals)) { + if (mSystemReady && mAudioManager != null) { + Uri soundUri = record.getSound(); + hasValidSound = soundUri != null && !Uri.EMPTY.equals(soundUri); + VibrationEffect vibration = record.getVibration(); + // Demote sound to vibration if vibration missing & phone in vibration mode. + if (vibration == null + && hasValidSound + && (mAudioManager.getRingerModeInternal() + == AudioManager.RINGER_MODE_VIBRATE) + && mAudioManager.getStreamVolume( + AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) == 0) { + boolean insistent = (record.getFlags() & Notification.FLAG_INSISTENT) != 0; + vibration = mVibratorHelper.createFallbackVibration(insistent); + } + hasValidVibrate = vibration != null; + boolean hasAudibleAlert = hasValidSound || hasValidVibrate; + if (hasAudibleAlert && !shouldMuteNotificationLocked(record, signals)) { + if (!sentAccessibilityEvent) { + sendAccessibilityEvent(record); + sentAccessibilityEvent = true; + } + if (DEBUG) Slog.v(TAG, "Interrupting!"); + boolean isInsistentUpdate = isInsistentUpdate(record); + if (hasValidSound) { + if (isInsistentUpdate) { + // don't reset insistent sound, it's jarring + beep = true; + } else { + if (isInCall()) { + playInCallNotification(); + beep = true; + } else { + beep = playSound(record, soundUri); + } + if (beep) { + mSoundNotificationKey = key; + } + } + } + + final boolean ringerModeSilent = + mAudioManager.getRingerModeInternal() + == AudioManager.RINGER_MODE_SILENT; + if (!isInCall() && hasValidVibrate && !ringerModeSilent) { + if (isInsistentUpdate) { + buzz = true; + } else { + buzz = playVibration(record, vibration, hasValidSound); + if (buzz) { + mVibrateNotificationKey = key; + } + } + } + + // Try to start flash notification event whenever an audible and non-suppressed + // notification is received + mAccessibilityManager.startFlashNotificationEvent(mContext, + AccessibilityManager.FLASH_REASON_NOTIFICATION, + record.getSbn().getPackageName()); + + } else if ((record.getFlags() & Notification.FLAG_INSISTENT) != 0) { + hasValidSound = false; + } + } + } + // If a notification is updated to remove the actively playing sound or vibrate, + // cancel that feedback now + if (wasBeep && !hasValidSound) { + clearSoundLocked(); + } + if (wasBuzz && !hasValidVibrate) { + clearVibrateLocked(); + } + + // light + // release the light + boolean wasShowLights = mLights.remove(key); + if (canShowLightsLocked(record, signals, aboveThreshold)) { + mLights.add(key); + updateLightsLocked(); + if (mUseAttentionLight && mAttentionLight != null) { + mAttentionLight.pulse(); + } + blink = true; + } else if (wasShowLights) { + updateLightsLocked(); + } + final int buzzBeepBlink = + (buzz ? 1 : 0) | (beep ? 2 : 0) | (blink ? 4 : 0); + if (buzzBeepBlink > 0) { + // Ignore summary updates because we don't display most of the information. + if (record.getSbn().isGroup() && record.getSbn().getNotification().isGroupSummary()) { + if (DEBUG_INTERRUPTIVENESS) { + Slog.v(TAG, "INTERRUPTIVENESS: " + + record.getKey() + " is not interruptive: summary"); + } + } else if (record.canBubble()) { + if (DEBUG_INTERRUPTIVENESS) { + Slog.v(TAG, "INTERRUPTIVENESS: " + + record.getKey() + " is not interruptive: bubble"); + } + } else { + record.setInterruptive(true); + if (DEBUG_INTERRUPTIVENESS) { + Slog.v(TAG, "INTERRUPTIVENESS: " + + record.getKey() + " is interruptive: alerted"); + } + } + MetricsLogger.action(record.getLogMaker() + .setCategory(MetricsEvent.NOTIFICATION_ALERT) + .setType(MetricsEvent.TYPE_OPEN) + .setSubtype(buzzBeepBlink)); + EventLogTags.writeNotificationAlert(key, buzz ? 1 : 0, beep ? 1 : 0, blink ? 1 : 0); + } + record.setAudiblyAlerted(buzz || beep); + + return buzzBeepBlink; + } + + boolean isInsistentUpdate(final NotificationRecord record) { + return (Objects.equals(record.getKey(), mSoundNotificationKey) + || Objects.equals(record.getKey(), mVibrateNotificationKey)) + && isCurrentlyInsistent(); + } + + boolean isCurrentlyInsistent() { + return isLoopingRingtoneNotification(mNMP.getNotificationByKey(mSoundNotificationKey)) + || isLoopingRingtoneNotification( + mNMP.getNotificationByKey(mVibrateNotificationKey)); + } + + boolean shouldMuteNotificationLocked(final NotificationRecord record, final Signals signals) { + // Suppressed because it's a silent update + final Notification notification = record.getNotification(); + if (record.isUpdate && (notification.flags & FLAG_ONLY_ALERT_ONCE) != 0) { + return true; + } + + // Suppressed because a user manually unsnoozed something (or similar) + if (record.shouldPostSilently()) { + return true; + } + + // muted by listener + final String disableEffects = disableNotificationEffects(record, signals.listenerHints); + if (disableEffects != null) { + ZenLog.traceDisableEffects(record, disableEffects); + return true; + } + + // suppressed due to DND + if (record.isIntercepted()) { + return true; + } + + // Suppressed because another notification in its group handles alerting + if (record.getSbn().isGroup()) { + if (notification.suppressAlertingDueToGrouping()) { + return true; + } + } + + // Suppressed for being too recently noisy + final String pkg = record.getSbn().getPackageName(); + if (mUsageStats.isAlertRateLimited(pkg)) { + Slog.e(TAG, "Muting recently noisy " + record.getKey()); + return true; + } + + // A different looping ringtone, such as an incoming call is playing + if (isCurrentlyInsistent() && !isInsistentUpdate(record)) { + return true; + } + + // Suppressed since it's a non-interruptive update to a bubble-suppressed notification + final boolean isBubbleOrOverflowed = record.canBubble() && (record.isFlagBubbleRemoved() + || record.getNotification().isBubbleNotification()); + if (record.isUpdate && !record.isInterruptive() && isBubbleOrOverflowed + && record.getNotification().getBubbleMetadata() != null) { + if (record.getNotification().getBubbleMetadata().isNotificationSuppressed()) { + return true; + } + } + + return false; + } + + private boolean isLoopingRingtoneNotification(final NotificationRecord playingRecord) { + if (playingRecord != null) { + if (playingRecord.getAudioAttributes().getUsage() == USAGE_NOTIFICATION_RINGTONE + && (playingRecord.getNotification().flags & FLAG_INSISTENT) != 0) { + return true; + } + } + return false; + } + + private boolean playSound(final NotificationRecord record, Uri soundUri) { + boolean looping = (record.getNotification().flags & FLAG_INSISTENT) != 0; + // play notifications if there is no user of exclusive audio focus + // and the stream volume is not 0 (non-zero volume implies not silenced by SILENT or + // VIBRATE ringer mode) + if (!mAudioManager.isAudioFocusExclusive() + && (mAudioManager.getStreamVolume( + AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) { + final long identity = Binder.clearCallingIdentity(); + try { + final IRingtonePlayer player = mAudioManager.getRingtonePlayer(); + if (player != null) { + if (DEBUG) { + Slog.v(TAG, "Playing sound " + soundUri + " with attributes " + + record.getAudioAttributes()); + } + player.playAsync(soundUri, record.getSbn().getUser(), looping, + record.getAudioAttributes()); + return true; + } + } catch (RemoteException e) { + Log.e(TAG, "Failed playSound: " + e); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + return false; + } + + private boolean playVibration(final NotificationRecord record, final VibrationEffect effect, + boolean delayVibForSound) { + // Escalate privileges so we can use the vibrator even if the + // notifying app does not have the VIBRATE permission. + final long identity = Binder.clearCallingIdentity(); + try { + if (delayVibForSound) { + new Thread(() -> { + // delay the vibration by the same amount as the notification sound + final int waitMs = mAudioManager.getFocusRampTimeMs( + AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, + record.getAudioAttributes()); + if (DEBUG) { + Slog.v(TAG, "Delaying vibration for notification " + + record.getKey() + " by " + waitMs + "ms"); + } + try { + Thread.sleep(waitMs); + } catch (InterruptedException e) { } + // Notifications might be canceled before it actually vibrates due to waitMs, + // so need to check that the notification is still valid for vibrate. + if (mNMP.getNotificationByKey(record.getKey()) != null) { + if (record.getKey().equals(mVibrateNotificationKey)) { + vibrate(record, effect, true); + } else { + if (DEBUG) { + Slog.v(TAG, "No vibration for notification " + + record.getKey() + ": a new notification is " + + "vibrating, or effects were cleared while waiting"); + } + } + } else { + Slog.w(TAG, "No vibration for canceled notification " + + record.getKey()); + } + }).start(); + } else { + vibrate(record, effect, false); + } + return true; + } finally { + Binder.restoreCallingIdentity(identity); + } + } + + private void vibrate(NotificationRecord record, VibrationEffect effect, boolean delayed) { + // We need to vibrate as "android" so we can breakthrough DND. VibratorManagerService + // doesn't have a concept of vibrating on an app's behalf, so add the app information + // to the reason so we can still debug from bugreports + String reason = "Notification (" + record.getSbn().getOpPkg() + " " + + record.getSbn().getUid() + ") " + (delayed ? "(Delayed)" : ""); + mVibratorHelper.vibrate(effect, record.getAudioAttributes(), reason); + } + + void playInCallNotification() { + // TODO: Should we apply politeness to mInCallNotificationVolume ? + final ContentResolver cr = mContext.getContentResolver(); + if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_NORMAL + && Settings.Secure.getIntForUser(cr, + Settings.Secure.IN_CALL_NOTIFICATION_ENABLED, 1, cr.getUserId()) != 0) { + new Thread() { + @Override + public void run() { + final long identity = Binder.clearCallingIdentity(); + try { + final IRingtonePlayer player = mAudioManager.getRingtonePlayer(); + if (player != null) { + if (mCallNotificationToken != null) { + player.stop(mCallNotificationToken); + } + mCallNotificationToken = new Binder(); + player.play(mCallNotificationToken, mInCallNotificationUri, + mInCallNotificationAudioAttributes, + mInCallNotificationVolume, false); + } + } catch (RemoteException e) { + Log.e(TAG, "Failed playInCallNotification: " + e); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + }.start(); + } + } + + void clearSoundLocked() { + mSoundNotificationKey = null; + final long identity = Binder.clearCallingIdentity(); + try { + final IRingtonePlayer player = mAudioManager.getRingtonePlayer(); + if (player != null) { + player.stopAsync(); + } + } catch (RemoteException e) { + Log.e(TAG, "Failed clearSoundLocked: " + e); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + + void clearVibrateLocked() { + mVibrateNotificationKey = null; + final long identity = Binder.clearCallingIdentity(); + try { + mVibratorHelper.cancelVibration(); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + + private void clearLightsLocked() { + // light + mLights.clear(); + updateLightsLocked(); + } + + public void clearEffectsLocked(String key) { + if (key.equals(mSoundNotificationKey)) { + clearSoundLocked(); + } + if (key.equals(mVibrateNotificationKey)) { + clearVibrateLocked(); + } + boolean removed = mLights.remove(key); + if (removed) { + updateLightsLocked(); + } + } + + public void clearAttentionEffects() { + clearSoundLocked(); + clearVibrateLocked(); + clearLightsLocked(); + } + + void updateLightsLocked() { + if (mNotificationLight == null) { + return; + } + + // handle notification lights + NotificationRecord ledNotification = null; + while (ledNotification == null && !mLights.isEmpty()) { + final String owner = mLights.get(mLights.size() - 1); + ledNotification = mNMP.getNotificationByKey(owner); + if (ledNotification == null) { + Slog.wtfStack(TAG, "LED Notification does not exist: " + owner); + mLights.remove(owner); + } + } + + // Don't flash while we are in a call or screen is on + if (ledNotification == null || isInCall() || mScreenOn) { + mNotificationLight.turnOff(); + } else { + NotificationRecord.Light light = ledNotification.getLight(); + if (light != null && mNotificationPulseEnabled) { + // pulse repeatedly + mNotificationLight.setFlashing(light.color, LogicalLight.LIGHT_FLASH_TIMED, + light.onMs, light.offMs); + } + } + } + + boolean canShowLightsLocked(final NotificationRecord record, final Signals signals, + boolean aboveThreshold) { + // device lacks light + if (!mHasLight) { + return false; + } + // user turned lights off globally + if (!mNotificationPulseEnabled) { + return false; + } + // the notification/channel has no light + if (record.getLight() == null) { + return false; + } + // unimportant notification + if (!aboveThreshold) { + return false; + } + // suppressed due to DND + if ((record.getSuppressedVisualEffects() & SUPPRESSED_EFFECT_LIGHTS) != 0) { + return false; + } + // Suppressed because it's a silent update + final Notification notification = record.getNotification(); + if (record.isUpdate && (notification.flags & FLAG_ONLY_ALERT_ONCE) != 0) { + return false; + } + // Suppressed because another notification in its group handles alerting + if (record.getSbn().isGroup() && record.getNotification().suppressAlertingDueToGrouping()) { + return false; + } + // not if in call + if (isInCall()) { + return false; + } + // check current user + if (!isNotificationForCurrentUser(record, signals)) { + return false; + } + // Light, but only when the screen is off + return true; + } + + private String disableNotificationEffects(NotificationRecord record, int listenerHints) { + if (mDisableNotificationEffects) { + return "booleanState"; + } + + if ((listenerHints & HINT_HOST_DISABLE_EFFECTS) != 0) { + return "listenerHints"; + } + if (record != null && record.getAudioAttributes() != null) { + if ((listenerHints & HINT_HOST_DISABLE_NOTIFICATION_EFFECTS) != 0) { + if (record.getAudioAttributes().getUsage() + != AudioAttributes.USAGE_NOTIFICATION_RINGTONE) { + return "listenerNoti"; + } + } + if ((listenerHints & HINT_HOST_DISABLE_CALL_EFFECTS) != 0) { + if (record.getAudioAttributes().getUsage() + == AudioAttributes.USAGE_NOTIFICATION_RINGTONE) { + return "listenerCall"; + } + } + } + if (mCallState != TelephonyManager.CALL_STATE_IDLE && !mZenModeHelper.isCall(record)) { + return "callState"; + } + + return null; + } + + public void updateDisableNotificationEffectsLocked(int status) { + mDisableNotificationEffects = + (status & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0; + //if (disableNotificationEffects(null) != null) { + if (mDisableNotificationEffects) { + // cancel whatever is going on + clearAttentionEffects(); + } + } + + private boolean isInCall() { + if (mInCallStateOffHook) { + return true; + } + int audioMode = mAudioManager.getMode(); + if (audioMode == AudioManager.MODE_IN_CALL + || audioMode == AudioManager.MODE_IN_COMMUNICATION) { + return true; + } + return false; + } + + private static String callStateToString(int state) { + switch (state) { + case TelephonyManager.CALL_STATE_IDLE: return "CALL_STATE_IDLE"; + case TelephonyManager.CALL_STATE_RINGING: return "CALL_STATE_RINGING"; + case TelephonyManager.CALL_STATE_OFFHOOK: return "CALL_STATE_OFFHOOK"; + default: return "CALL_STATE_UNKNOWN_" + state; + } + } + + private boolean isNotificationForCurrentUser(final NotificationRecord record, + final Signals signals) { + final int currentUser; + final long token = Binder.clearCallingIdentity(); + try { + currentUser = ActivityManager.getCurrentUser(); + } finally { + Binder.restoreCallingIdentity(token); + } + return (record.getUserId() == UserHandle.USER_ALL || record.getUserId() == currentUser + || signals.isCurrentProfile); + } + + void sendAccessibilityEvent(NotificationRecord record) { + if (!mAccessibilityManager.isEnabled()) { + return; + } + + final Notification notification = record.getNotification(); + final CharSequence packageName = record.getSbn().getPackageName(); + final AccessibilityEvent event = + AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED); + event.setPackageName(packageName); + event.setClassName(Notification.class.getName()); + final int visibilityOverride = record.getPackageVisibilityOverride(); + final int notifVisibility = visibilityOverride == NotificationManager.VISIBILITY_NO_OVERRIDE + ? notification.visibility : visibilityOverride; + final int userId = record.getUser().getIdentifier(); + final boolean needPublic = userId >= 0 && mKeyguardManager.isDeviceLocked(userId); + if (needPublic && notifVisibility != Notification.VISIBILITY_PUBLIC) { + // Emit the public version if we're on the lockscreen and this notification isn't + // publicly visible. + event.setParcelableData(notification.publicVersion); + } else { + event.setParcelableData(notification); + } + final CharSequence tickerText = notification.tickerText; + if (!TextUtils.isEmpty(tickerText)) { + event.getText().add(tickerText); + } + + mAccessibilityManager.sendAccessibilityEvent(event); + } + + public void dump(PrintWriter pw, String prefix, NotificationManagerService.DumpFilter filter) { + pw.println("\n Notification attention state:"); + pw.print(prefix); + pw.println(" mSoundNotificationKey=" + mSoundNotificationKey); + pw.print(prefix); + pw.println(" mVibrateNotificationKey=" + mVibrateNotificationKey); + pw.print(prefix); + pw.println(" mDisableNotificationEffects=" + mDisableNotificationEffects); + pw.print(prefix); + pw.println(" mCallState=" + callStateToString(mCallState)); + pw.print(prefix); + pw.println(" mSystemReady=" + mSystemReady); + pw.print(prefix); + pw.println(" mNotificationPulseEnabled=" + mNotificationPulseEnabled); + + int N = mLights.size(); + if (N > 0) { + pw.print(prefix); + pw.println(" Lights List:"); + for (int i=0; i<N; i++) { + if (i == N - 1) { + pw.print(" > "); + } else { + pw.print(" "); + } + pw.println(mLights.get(i)); + } + pw.println(" "); + } + + } + + // External signals set from NMS + public static class Signals { + private final boolean isCurrentProfile; + private final int listenerHints; + + public Signals(boolean isCurrentProfile, int listenerHints) { + this.isCurrentProfile = isCurrentProfile; + this.listenerHints = listenerHints; + } + } + + //====================== Observers ============================= + private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (action.equals(Intent.ACTION_SCREEN_ON)) { + // Keep track of screen on/off state, but do not turn off the notification light + // until user passes through the lock screen or views the notification. + mScreenOn = true; + updateLightsLocked(); + } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { + mScreenOn = false; + mUserPresent = false; + updateLightsLocked(); + } else if (action.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) { + mInCallStateOffHook = TelephonyManager.EXTRA_STATE_OFFHOOK + .equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE)); + updateLightsLocked(); + } else if (action.equals(Intent.ACTION_USER_PRESENT)) { + mUserPresent = true; + // turn off LED when user passes through lock screen + if (mNotificationLight != null) { + mNotificationLight.turnOff(); + } + } + } + }; + + private final class SettingsObserver extends ContentObserver { + + private static final Uri NOTIFICATION_LIGHT_PULSE_URI = Settings.System.getUriFor( + Settings.System.NOTIFICATION_LIGHT_PULSE); + public SettingsObserver() { + super(null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + if (NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) { + boolean pulseEnabled = Settings.System.getIntForUser( + mContext.getContentResolver(), + Settings.System.NOTIFICATION_LIGHT_PULSE, 0, + UserHandle.USER_CURRENT) + != 0; + if (mNotificationPulseEnabled != pulseEnabled) { + mNotificationPulseEnabled = pulseEnabled; + updateLightsLocked(); + } + } + } + } + + + //TODO: cleanup most (all?) of these + //======================= FOR TESTS ===================== + @VisibleForTesting + void setIsAutomotive(boolean isAutomotive) { + mIsAutomotive = isAutomotive; + } + + @VisibleForTesting + void setNotificationEffectsEnabledForAutomotive(boolean isEnabled) { + mNotificationEffectsEnabledForAutomotive = isEnabled; + } + + @VisibleForTesting + void setSystemReady(boolean systemReady) { + mSystemReady = systemReady; + } + + @VisibleForTesting + void setKeyguardManager(KeyguardManager keyguardManager) { + mKeyguardManager = keyguardManager; + } + + @VisibleForTesting + void setAccessibilityManager(AccessibilityManager am) { + mAccessibilityManager = am; + } + + @VisibleForTesting + VibratorHelper getVibratorHelper() { + return mVibratorHelper; + } + + @VisibleForTesting + void setVibratorHelper(VibratorHelper helper) { + mVibratorHelper = helper; + } + + @VisibleForTesting + void setScreenOn(boolean on) { + mScreenOn = on; + } + + @VisibleForTesting + void setLights(LogicalLight light) { + mNotificationLight = light; + mAttentionLight = light; + mNotificationPulseEnabled = true; + mHasLight = true; + } + + @VisibleForTesting + void setAudioManager(AudioManager audioManager) { + mAudioManager = audioManager; + } + + @VisibleForTesting + void setInCallStateOffHook(boolean inCallStateOffHook) { + mInCallStateOffHook = inCallStateOffHook; + } + +} diff --git a/services/core/java/com/android/server/notification/NotificationManagerPrivate.java b/services/core/java/com/android/server/notification/NotificationManagerPrivate.java new file mode 100644 index 0000000000000000000000000000000000000000..2cc63ebfc962ca634aace01dc7676794767a37c2 --- /dev/null +++ b/services/core/java/com/android/server/notification/NotificationManagerPrivate.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2023 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.server.notification; + +import android.annotation.Nullable; + +/** + * Interface that allows components (helpers) to access NotificationRecords + * without an explicit reference to NotificationManagerService. + */ +interface NotificationManagerPrivate { + @Nullable + NotificationRecord getNotificationByKey(String key); +} diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index bada8165766ca15bfd95721c1f576afed81776bc..802dfb182297d048c6efb4b6750cfcc5890fb74e 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -287,6 +287,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.compat.IPlatformCompat; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags; +import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; import com.android.internal.logging.MetricsLogger; @@ -315,6 +316,7 @@ import com.android.server.SystemService; import com.android.server.job.JobSchedulerInternal; import com.android.server.lights.LightsManager; import com.android.server.lights.LogicalLight; +import com.android.server.notification.Flags; import com.android.server.notification.ManagedServices.ManagedServiceInfo; import com.android.server.notification.ManagedServices.UserProfiles; import com.android.server.notification.toast.CustomToastRecord; @@ -684,6 +686,7 @@ public class NotificationManagerService extends SystemService { private boolean mIsAutomotive; private boolean mNotificationEffectsEnabledForAutomotive; private DeviceConfig.OnPropertiesChangedListener mDeviceConfigChangedListener; + protected NotificationAttentionHelper mAttentionHelper; private int mWarnRemoteViewsSizeBytes; private int mStripRemoteViewsSizeBytes; @@ -1167,12 +1170,16 @@ public class NotificationManagerService extends SystemService { @Override public void onSetDisabled(int status) { synchronized (mNotificationLock) { - mDisableNotificationEffects = - (status & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0; - if (disableNotificationEffects(null) != null) { - // cancel whatever's going on - clearSoundLocked(); - clearVibrateLocked(); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.updateDisableNotificationEffectsLocked(status); + } else { + mDisableNotificationEffects = + (status & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0; + if (disableNotificationEffects(null) != null) { + // cancel whatever's going on + clearSoundLocked(); + clearVibrateLocked(); + } } } } @@ -1309,9 +1316,13 @@ public class NotificationManagerService extends SystemService { public void clearEffects() { synchronized (mNotificationLock) { if (DBG) Slog.d(TAG, "clearEffects"); - clearSoundLocked(); - clearVibrateLocked(); - clearLightsLocked(); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.clearAttentionEffects(); + } else { + clearSoundLocked(); + clearVibrateLocked(); + clearLightsLocked(); + } } } @@ -1534,7 +1545,12 @@ public class NotificationManagerService extends SystemService { int changedFlags = data.getFlags() ^ flags; if ((changedFlags & FLAG_SUPPRESS_NOTIFICATION) != 0) { // Suppress notification flag changed, clear any effects - clearEffectsLocked(key); + if (mFlagResolver.isEnabled( + NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.clearEffectsLocked(key); + } else { + clearEffectsLocked(key); + } } data.setFlags(flags); // Shouldn't alert again just because of a flag change. @@ -1626,6 +1642,12 @@ public class NotificationManagerService extends SystemService { }; + NotificationManagerPrivate mNotificationManagerPrivate = key -> { + synchronized (mNotificationLock) { + return mNotificationsByKey.get(key); + } + }; + @VisibleForTesting void logSmartSuggestionsVisible(NotificationRecord r, int notificationLocation) { // If the newly visible notification has smart suggestions @@ -1873,19 +1895,28 @@ public class NotificationManagerService extends SystemService { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (action.equals(Intent.ACTION_SCREEN_ON)) { - // Keep track of screen on/off state, but do not turn off the notification light - // until user passes through the lock screen or views the notification. - mScreenOn = true; - updateNotificationPulse(); - } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { - mScreenOn = false; - updateNotificationPulse(); - } else if (action.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) { - mInCallStateOffHook = TelephonyManager.EXTRA_STATE_OFFHOOK + if (!mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + if (action.equals(Intent.ACTION_SCREEN_ON)) { + // Keep track of screen on/off state, but do not turn off the notification light + // until user passes through the lock screen or views the notification. + mScreenOn = true; + updateNotificationPulse(); + } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { + mScreenOn = false; + updateNotificationPulse(); + } else if (action.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) { + mInCallStateOffHook = TelephonyManager.EXTRA_STATE_OFFHOOK .equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE)); - updateNotificationPulse(); - } else if (action.equals(Intent.ACTION_USER_STOPPED)) { + updateNotificationPulse(); + } else if (action.equals(Intent.ACTION_USER_PRESENT)) { + // turn off LED when user passes through lock screen + if (mNotificationLight != null) { + mNotificationLight.turnOff(); + } + } + } + + if (action.equals(Intent.ACTION_USER_STOPPED)) { int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (userHandle >= 0) { cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, userHandle, @@ -1898,11 +1929,6 @@ public class NotificationManagerService extends SystemService { REASON_PROFILE_TURNED_OFF); mSnoozeHelper.clearData(userHandle); } - } else if (action.equals(Intent.ACTION_USER_PRESENT)) { - // turn off LED when user passes through lock screen - if (mNotificationLight != null) { - mNotificationLight.turnOff(); - } } else if (action.equals(Intent.ACTION_USER_SWITCHED)) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); mUserProfiles.updateCache(context); @@ -1976,8 +2002,10 @@ public class NotificationManagerService extends SystemService { ContentResolver resolver = getContext().getContentResolver(); resolver.registerContentObserver(NOTIFICATION_BADGING_URI, false, this, UserHandle.USER_ALL); - resolver.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, + if (!mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + resolver.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, false, this, UserHandle.USER_ALL); + } resolver.registerContentObserver(NOTIFICATION_RATE_LIMIT_URI, false, this, UserHandle.USER_ALL); resolver.registerContentObserver(NOTIFICATION_BUBBLES_URI, @@ -2000,13 +2028,15 @@ public class NotificationManagerService extends SystemService { public void update(Uri uri) { ContentResolver resolver = getContext().getContentResolver(); - if (uri == null || NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) { - boolean pulseEnabled = Settings.System.getIntForUser(resolver, - Settings.System.NOTIFICATION_LIGHT_PULSE, 0, UserHandle.USER_CURRENT) + if (!mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + if (uri == null || NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) { + boolean pulseEnabled = Settings.System.getIntForUser(resolver, + Settings.System.NOTIFICATION_LIGHT_PULSE, 0, UserHandle.USER_CURRENT) != 0; - if (mNotificationPulseEnabled != pulseEnabled) { - mNotificationPulseEnabled = pulseEnabled; - updateNotificationPulse(); + if (mNotificationPulseEnabled != pulseEnabled) { + mNotificationPulseEnabled = pulseEnabled; + updateNotificationPulse(); + } } } if (uri == null || NOTIFICATION_RATE_LIMIT_URI.equals(uri)) { @@ -2491,14 +2521,22 @@ public class NotificationManagerService extends SystemService { mToastRateLimiter = toastRateLimiter; + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper = new NotificationAttentionHelper(getContext(), lightsManager, + mAccessibilityManager, mPackageManagerClient, usageStats, + mNotificationManagerPrivate, mZenModeHelper, flagResolver); + } + // register for various Intents. // If this is called within a test, make sure to unregister the intent receivers by // calling onDestroy() IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_SCREEN_ON); - filter.addAction(Intent.ACTION_SCREEN_OFF); - filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); - filter.addAction(Intent.ACTION_USER_PRESENT); + if (!mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + filter.addAction(Intent.ACTION_SCREEN_ON); + filter.addAction(Intent.ACTION_SCREEN_OFF); + filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); + filter.addAction(Intent.ACTION_USER_PRESENT); + } filter.addAction(Intent.ACTION_USER_STOPPED); filter.addAction(Intent.ACTION_USER_SWITCHED); filter.addAction(Intent.ACTION_USER_ADDED); @@ -2818,6 +2856,9 @@ public class NotificationManagerService extends SystemService { } registerNotificationPreferencesPullers(); new LockPatternUtils(getContext()).registerStrongAuthTracker(mStrongAuthTracker); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.onSystemReady(); + } } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) { // This observer will force an update when observe is called, causing us to // bind to listener services. @@ -6375,6 +6416,9 @@ public class NotificationManagerService extends SystemService { pw.println(" mMaxPackageEnqueueRate=" + mMaxPackageEnqueueRate); pw.println(" hideSilentStatusBar=" + mPreferencesHelper.shouldHideSilentStatusIcons()); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.dump(pw, " ", filter); + } } pw.println(" mArchive=" + mArchive.toString()); mArchive.dumpImpl(pw, filter); @@ -7632,7 +7676,11 @@ public class NotificationManagerService extends SystemService { boolean wasPosted = removeFromNotificationListsLocked(r); cancelNotificationLocked(r, false, REASON_SNOOZED, wasPosted, null, SystemClock.elapsedRealtime()); - updateLightsLocked(); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.updateLightsLocked(); + } else { + updateLightsLocked(); + } if (isSnoozable(r)) { if (mSnoozeCriterionId != null) { mAssistants.notifyAssistantSnoozedLocked(r, mSnoozeCriterionId); @@ -7761,7 +7809,11 @@ public class NotificationManagerService extends SystemService { cancelGroupChildrenLocked(r, mCallingUid, mCallingPid, listenerName, mSendDelete, childrenFlagChecker, mReason, mCancellationElapsedTimeMs); - updateLightsLocked(); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.updateLightsLocked(); + } else { + updateLightsLocked(); + } if (mShortcutHelper != null) { mShortcutHelper.maybeListenForShortcutChangesForBubbles(r, true /* isRemoved */, @@ -8054,7 +8106,14 @@ public class NotificationManagerService extends SystemService { int buzzBeepBlinkLoggingCode = 0; if (!r.isHidden()) { - buzzBeepBlinkLoggingCode = buzzBeepBlinkLocked(r); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + buzzBeepBlinkLoggingCode = mAttentionHelper.buzzBeepBlinkLocked(r, + new NotificationAttentionHelper.Signals( + mUserProfiles.isCurrentProfile(r.getUserId()), + mListenerHints)); + } else { + buzzBeepBlinkLoggingCode = buzzBeepBlinkLocked(r); + } } if (notification.getSmallIcon() != null) { @@ -9034,7 +9093,13 @@ public class NotificationManagerService extends SystemService { || interruptiveChanged; if (interceptBefore && !record.isIntercepted() && record.isNewEnoughForAlerting(System.currentTimeMillis())) { - buzzBeepBlinkLocked(record); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.buzzBeepBlinkLocked(record, + new NotificationAttentionHelper.Signals( + mUserProfiles.isCurrentProfile(record.getUserId()), mListenerHints)); + } else { + buzzBeepBlinkLocked(record); + } // Log alert after change in intercepted state to Zen Log as well ZenLog.traceAlertOnUpdatedIntercept(record); @@ -9408,18 +9473,22 @@ public class NotificationManagerService extends SystemService { }); } - // sound - if (canceledKey.equals(mSoundNotificationKey)) { - clearSoundLocked(); - } + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.clearEffectsLocked(canceledKey); + } else { + // sound + if (canceledKey.equals(mSoundNotificationKey)) { + clearSoundLocked(); + } - // vibrate - if (canceledKey.equals(mVibrateNotificationKey)) { - clearVibrateLocked(); - } + // vibrate + if (canceledKey.equals(mVibrateNotificationKey)) { + clearVibrateLocked(); + } - // light - mLights.remove(canceledKey); + // light + mLights.remove(canceledKey); + } } // Record usage stats @@ -9768,7 +9837,11 @@ public class NotificationManagerService extends SystemService { cancellationElapsedTimeMs); } } - updateLightsLocked(); + if (mFlagResolver.isEnabled(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR)) { + mAttentionHelper.updateLightsLocked(); + } else { + updateLightsLocked(); + } } } diff --git a/services/core/java/com/android/server/pm/ApkChecksums.java b/services/core/java/com/android/server/pm/ApkChecksums.java index 5b93244c17102ba1e092694d3cc827672cb53fb4..50ed3b1859df2237eea1017ae8bbea72ec61bc09 100644 --- a/services/core/java/com/android/server/pm/ApkChecksums.java +++ b/services/core/java/com/android/server/pm/ApkChecksums.java @@ -655,7 +655,7 @@ public class ApkChecksums { } } catch (SignatureNotFoundException e) { // Nothing - } catch (SecurityException e) { + } catch (SignatureException | SecurityException e) { Slog.e(TAG, "V4 signature error", e); } return null; diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 316c4aca18914d0f02935d48f30c93e249567b75..6baa889d61aec2eeec36699912c1d68abdad8439 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -1700,7 +1700,9 @@ public class ComputerEngine implements Computer { if (!listApex && ps.getPkg() != null && ps.getPkg().isApex()) { continue; } - if (listArchivedOnly && !isArchived(ps.getUserStateOrDefault(userId))) { + PackageUserStateInternal userState = ps.getUserStateOrDefault(userId); + if (listArchivedOnly && !userState.isInstalled() + && userState.getArchiveState() == null) { continue; } if (filterSharedLibPackage(ps, callingUid, userId, flags)) { @@ -1746,13 +1748,6 @@ public class ComputerEngine implements Computer { return new ParceledListSlice<>(list); } - // TODO(b/288142708) Check for userState.isInstalled() here once this bug is fixed. - // If an app has isInstalled() == true - it should not be filtered above in any case, currently - // it is. - private static boolean isArchived(PackageUserStateInternal userState) { - return userState.getArchiveState() != null; - } - public final ResolveInfo createForwardingResolveInfoUnchecked(WatchedIntentFilter filter, int sourceUserId, int targetUserId) { ResolveInfo forwardingResolveInfo = new ResolveInfo(); diff --git a/services/core/java/com/android/server/pm/PackageArchiver.java b/services/core/java/com/android/server/pm/PackageArchiver.java index 803b6e45cdcafde1ca993e7c765f3ca3d6ac422e..f59188e9fd93eaefb94bf095a13d3e5ddc281d83 100644 --- a/services/core/java/com/android/server/pm/PackageArchiver.java +++ b/services/core/java/com/android/server/pm/PackageArchiver.java @@ -58,6 +58,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.pkg.ArchiveState; import com.android.server.pm.pkg.ArchiveState.ArchiveActivityInfo; import com.android.server.pm.pkg.PackageStateInternal; +import com.android.server.pm.pkg.PackageUserState; import com.android.server.pm.pkg.PackageUserStateInternal; import java.io.ByteArrayOutputStream; @@ -101,6 +102,11 @@ public class PackageArchiver { this.mPm = mPm; } + /** Returns whether a package is archived for a user. */ + public static boolean isArchived(PackageUserState userState) { + return userState.getArchiveState() != null && !userState.isInstalled(); + } + void requestArchive( @NonNull String packageName, @NonNull String callerPackageName, @@ -354,8 +360,7 @@ public class PackageArchiver { private void verifyArchived(PackageStateInternal ps, int userId) throws PackageManager.NameNotFoundException { PackageUserStateInternal userState = ps.getUserStateOrDefault(userId); - // TODO(b/288142708) Check for isInstalled false here too. - if (userState.getArchiveState() == null) { + if (!isArchived(userState)) { throw new PackageManager.NameNotFoundException( TextUtils.formatSimple("Package %s is not currently archived.", ps.getPackageName())); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index d699baa0d9ab286ce2d6fdd613d667be3f6bb436..f554773becad5908a6513142d1759871c8af31d0 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -138,6 +138,7 @@ import android.os.incremental.IncrementalFileStorages; import android.os.incremental.IncrementalManager; import android.os.incremental.PerUidReadTimeouts; import android.os.incremental.StorageHealthCheckParams; +import android.os.incremental.V4Signature; import android.os.storage.StorageManager; import android.provider.DeviceConfig; import android.provider.Settings.Global; @@ -802,6 +803,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { // entries like "lost+found". if (file.isDirectory()) return false; if (file.getName().endsWith(REMOVE_MARKER_EXTENSION)) return false; + if (file.getName().endsWith(V4Signature.EXT)) return false; if (isAppMetadata(file)) return false; if (DexMetadataHelper.isDexMetadataFile(file)) return false; if (VerityUtils.isFsveritySignatureFile(file)) return false; @@ -1501,6 +1503,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { return filterFiles(stageDir, names, sAddedApkFilter); } + @GuardedBy("mLock") + private void enableFsVerityToAddedApksWithIdsig() throws PackageManagerException { + try { + List<File> files = getAddedApksLocked(); + for (var file : files) { + if (new File(file.getPath() + V4Signature.EXT).exists()) { + VerityUtils.setUpFsverity(file.getPath()); + } + } + } catch (IOException e) { + throw new PrepareFailure(PackageManager.INSTALL_FAILED_BAD_SIGNATURE, + "Failed to enable fs-verity to verify with idsig: " + e); + } + } + @GuardedBy("mLock") private List<ApkLite> getAddedApkLitesLocked() throws PackageManagerException { if (!isArchivedInstallation()) { @@ -3294,6 +3311,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + // Needs to happen before the first v4 signature verification, which happens in + // getAddedApkLitesLocked. + if (android.security.Flags.extendVbChainToUpdatedApk()) { + if (!isIncrementalInstallation()) { + enableFsVerityToAddedApksWithIdsig(); + } + } + final List<ApkLite> addedFiles = getAddedApkLitesLocked(); if (addedFiles.isEmpty() && (removeSplitList.size() == 0 || getStagedAppMetadataFile() != null)) { @@ -3655,6 +3680,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") + private void maybeStageV4SignatureLocked(File origFile, File targetFile) + throws PackageManagerException { + final File originalSignature = new File(origFile.getPath() + V4Signature.EXT); + if (originalSignature.exists()) { + final File stagedSignature = new File(targetFile.getPath() + V4Signature.EXT); + stageFileLocked(originalSignature, stagedSignature); + } + } + @GuardedBy("mLock") private void maybeStageDexMetadataLocked(File origFile, File targetFile) throws PackageManagerException { @@ -3782,6 +3817,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { // Stage APK's fs-verity signature if present. maybeStageFsveritySignatureLocked(origFile, targetFile, isFsVerityRequiredForApk(origFile, targetFile)); + // Stage APK's v4 signature if present. + if (android.security.Flags.extendVbChainToUpdatedApk()) { + maybeStageV4SignatureLocked(origFile, targetFile); + } // Stage dex metadata (.dm) and corresponding fs-verity signature if present. maybeStageDexMetadataLocked(origFile, targetFile); // Stage checksums (.digests) if present. @@ -3798,11 +3837,23 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") + private void maybeInheritV4SignatureLocked(File origFile) { + // Inherit the v4 signature file if present. + final File v4SignatureFile = new File(origFile.getPath() + V4Signature.EXT); + if (v4SignatureFile.exists()) { + mResolvedInheritedFiles.add(v4SignatureFile); + } + } + @GuardedBy("mLock") private void inheritFileLocked(File origFile) { mResolvedInheritedFiles.add(origFile); maybeInheritFsveritySignatureLocked(origFile); + if (android.security.Flags.extendVbChainToUpdatedApk()) { + maybeInheritV4SignatureLocked(origFile); + } // Inherit the dex metadata if present. final File dexMetadataFile = diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 72a737084526e24dcfe478a8b15991b5d872e8d6..7264e2eff4aa61aab218faf3989bca486033ccaf 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -4568,6 +4568,10 @@ class PackageManagerShellCommand extends ShellCommand { PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, 0); + if (ai == null) { + Slog.e(TAG, "Failed to get ApplicationInfo for package name(" + pii.packageName + ")."); + return null; + } AssetManager am = new AssetManager(); am.addAssetPath(ai.publicSourceDir); res = new Resources(am, null, null); diff --git a/services/core/java/com/android/server/pm/PackageMetrics.java b/services/core/java/com/android/server/pm/PackageMetrics.java index 7ad336c9074dd8b08e42acf2f50bd46740b83239..24d2a265ebf64e900798a2de5543ee3a854fef23 100644 --- a/services/core/java/com/android/server/pm/PackageMetrics.java +++ b/services/core/java/com/android/server/pm/PackageMetrics.java @@ -310,18 +310,25 @@ final class PackageMetrics { if (!SecurityLog.isLoggingEnabled()) { return; } - final PackageSetting ps = mInstallRequest.getScannedPackageSetting(); - if (ps == null) { - return; - } - final String packageName = ps.getPackageName(); - final long versionCode = ps.getVersionCode(); - if (!mInstallRequest.isInstallReplace()) { - SecurityLog.writeEvent(SecurityLog.TAG_PACKAGE_INSTALLED, packageName, versionCode, - userId); - } else { - SecurityLog.writeEvent(SecurityLog.TAG_PACKAGE_UPDATED, packageName, versionCode, - userId); + // TODO: Remove temp try-catch to avoid IllegalStateException. The reason is because + // the scan result is null for installExistingPackageAsUser(). Because it's installing + // a package that's already existing, there's no scanning or parsing involved + try { + final PackageSetting ps = mInstallRequest.getScannedPackageSetting(); + if (ps == null) { + return; + } + final String packageName = ps.getPackageName(); + final long versionCode = ps.getVersionCode(); + if (!mInstallRequest.isInstallReplace()) { + SecurityLog.writeEvent(SecurityLog.TAG_PACKAGE_INSTALLED, packageName, versionCode, + userId); + } else { + SecurityLog.writeEvent(SecurityLog.TAG_PACKAGE_UPDATED, packageName, versionCode, + userId); + } + } catch (IllegalStateException | NullPointerException e) { + // no-op } } diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java index cc8e62409597ba95f9801b99ec5805ef4a9f1d04..d16a81267370eabd8a9301348be6afa970c56667 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -54,6 +54,7 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.server.SystemConfig; +import com.android.server.pm.PackageArchiver; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.PackageImpl; import com.android.server.pm.pkg.AndroidPackage; @@ -401,14 +402,7 @@ public class PackageInfoUtils { ai.resourceDirs = overlayPaths.getResourceDirs().toArray(new String[0]); ai.overlayPaths = overlayPaths.getOverlayPaths().toArray(new String[0]); } - ai.isArchived = isArchived(state); - } - - // TODO(b/288142708) Check for userState.isInstalled() here once this bug is fixed. - // If an app has isInstalled() == true - it should not be filtered above in any case, currently - // it is. - private static boolean isArchived(PackageUserState userState) { - return userState.getArchiveState() != null; + ai.isArchived = PackageArchiver.isArchived(state); } @Nullable diff --git a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java index 3296c1f284afc26ab191d0b5791e3a875dc35402..150ca9ba2853c3d163d01ecccd964657494f5a15 100644 --- a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java +++ b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java @@ -91,13 +91,14 @@ public class OneTimePermissionUserManager { mHandler = context.getMainThreadHandler(); } - void startPackageOneTimeSession(@NonNull String packageName, long timeoutMillis, + void startPackageOneTimeSession(@NonNull String packageName, int deviceId, long timeoutMillis, long revokeAfterKilledDelayMillis) { int uid; try { uid = mContext.getPackageManager().getPackageUid(packageName, 0); } catch (PackageManager.NameNotFoundException e) { - Log.e(LOG_TAG, "Unknown package name " + packageName, e); + Log.e(LOG_TAG, + "Unknown package name " + packageName + ", device ID " + deviceId, e); return; } @@ -107,7 +108,7 @@ public class OneTimePermissionUserManager { listener.updateSessionParameters(timeoutMillis, revokeAfterKilledDelayMillis); return; } - listener = new PackageInactivityListener(uid, packageName, timeoutMillis, + listener = new PackageInactivityListener(uid, packageName, deviceId, timeoutMillis, revokeAfterKilledDelayMillis); mListeners.put(uid, listener); } @@ -159,6 +160,7 @@ public class OneTimePermissionUserManager { private final int mUid; private final @NonNull String mPackageName; + private final int mDeviceId; private long mTimeout; private long mRevokeAfterKilledDelay; @@ -191,14 +193,15 @@ public class OneTimePermissionUserManager { } }; - private PackageInactivityListener(int uid, @NonNull String packageName, long timeout, - long revokeAfterkilledDelay) { + private PackageInactivityListener(int uid, @NonNull String packageName, int deviceId, + long timeout, long revokeAfterkilledDelay) { Log.i(LOG_TAG, "Start tracking " + packageName + ". uid=" + uid + " timeout=" + timeout + " killedDelay=" + revokeAfterkilledDelay); mUid = uid; mPackageName = packageName; + mDeviceId = deviceId; mTimeout = timeout; mRevokeAfterKilledDelay = revokeAfterkilledDelay == -1 ? DeviceConfig.getLong( @@ -232,7 +235,8 @@ public class OneTimePermissionUserManager { PROPERTY_KILLED_DELAY_CONFIG_KEY, DEFAULT_KILLED_DELAY_MILLIS) : revokeAfterKilledDelayMillis); Log.v(LOG_TAG, - "Updated params for " + mPackageName + ". timeout=" + mTimeout + "Updated params for " + mPackageName + ", device ID " + mDeviceId + + ". timeout=" + mTimeout + " killedDelay=" + mRevokeAfterKilledDelay); updateUidState(); } @@ -260,7 +264,7 @@ public class OneTimePermissionUserManager { private void updateUidState(int state) { Log.v(LOG_TAG, "Updating state for " + mPackageName + " (" + mUid + ")." - + " state=" + state); + + " device ID=" + mDeviceId + ", state=" + state); synchronized (mInnerLock) { // Remove any pending inactivity callback mHandler.removeCallbacksAndMessages(mToken); @@ -283,7 +287,7 @@ public class OneTimePermissionUserManager { if (DEBUG) { Log.d(LOG_TAG, "No longer gone after delayed revocation. " + "Rechecking for " + mPackageName + " (" + mUid - + ")."); + + "). device ID " + mDeviceId); } updateUidState(currentState); }, mToken, mRevokeAfterKilledDelay); @@ -292,7 +296,7 @@ public class OneTimePermissionUserManager { if (mTimerStart == TIMER_INACTIVE) { if (DEBUG) { Log.d(LOG_TAG, "Start the timer for " - + mPackageName + " (" + mUid + ")."); + + mPackageName + " (" + mUid + "). device ID " + mDeviceId); } mTimerStart = System.currentTimeMillis(); setAlarmLocked(); @@ -329,7 +333,8 @@ public class OneTimePermissionUserManager { } if (DEBUG) { - Log.d(LOG_TAG, "Scheduling alarm for " + mPackageName + " (" + mUid + ")."); + Log.d(LOG_TAG, "Scheduling alarm for " + mPackageName + " (" + mUid + ")." + + " device ID " + mDeviceId); } long revokeTime = mTimerStart + mTimeout; if (revokeTime > System.currentTimeMillis()) { @@ -349,7 +354,8 @@ public class OneTimePermissionUserManager { private void cancelAlarmLocked() { if (mIsAlarmSet) { if (DEBUG) { - Log.d(LOG_TAG, "Canceling alarm for " + mPackageName + " (" + mUid + ")."); + Log.d(LOG_TAG, "Canceling alarm for " + mPackageName + " (" + mUid + ")." + + " device ID " + mDeviceId); } mAlarmManager.cancel(this); mIsAlarmSet = false; @@ -366,17 +372,17 @@ public class OneTimePermissionUserManager { } if (DEBUG) { Log.d(LOG_TAG, "onPackageInactiveLocked stack trace for " - + mPackageName + " (" + mUid + ").", new RuntimeException()); + + mPackageName + " (" + mUid + "). device ID " + mDeviceId, + new RuntimeException()); } mIsFinished = true; cancelAlarmLocked(); mHandler.post( () -> { Log.i(LOG_TAG, "One time session expired for " - + mPackageName + " (" + mUid + ")."); - + + mPackageName + " (" + mUid + "). deviceID " + mDeviceId); mPermissionControllerManager.notifyOneTimePermissionSessionTimeout( - mPackageName); + mPackageName, mDeviceId); }); try { mIActivityManager.unregisterUidObserver(mObserver); @@ -391,7 +397,8 @@ public class OneTimePermissionUserManager { @Override public void onAlarm() { if (DEBUG) { - Log.d(LOG_TAG, "Alarm received for " + mPackageName + " (" + mUid + ")."); + Log.d(LOG_TAG, "Alarm received for " + mPackageName + " (" + mUid + ")." + + " device ID " + mDeviceId); } synchronized (mInnerLock) { if (!mIsAlarmSet) { diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 44eb28fc43f703b907260ef22e2788329a9eb860..9610d051db954bcf4817e84a23e69762302cc705 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -404,15 +404,15 @@ public class PermissionManagerService extends IPermissionManager.Stub { @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) @Override - public void startOneTimePermissionSession(String packageName, @UserIdInt int userId, - long timeoutMillis, long revokeAfterKilledDelayMillis) { + public void startOneTimePermissionSession(String packageName, int deviceId, + @UserIdInt int userId, long timeoutMillis, long revokeAfterKilledDelayMillis) { startOneTimePermissionSession_enforcePermission(); Objects.requireNonNull(packageName); final long token = Binder.clearCallingIdentity(); try { getOneTimePermissionUserManager(userId).startPackageOneTimeSession(packageName, - timeoutMillis, revokeAfterKilledDelayMillis); + deviceId, timeoutMillis, revokeAfterKilledDelayMillis); } finally { Binder.restoreCallingIdentity(token); } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index b420acdc08507f73f8d1490fa992dae8c8701669..b001c6aa95efb61df417469630568b301fc0a90d 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -438,7 +438,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mPreloadedRecentApps; final Object mServiceAcquireLock = new Object(); Vibrator mVibrator; // Vibrator for giving feedback of orientation changes - SearchManager mSearchManager; AccessibilityManager mAccessibilityManager; AccessibilityManagerInternal mAccessibilityManagerInternal; BurnInProtectionHelper mBurnInProtectionHelper; @@ -2217,7 +2216,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); mAppOpsManager = mContext.getSystemService(AppOpsManager.class); mSensorPrivacyManager = mContext.getSystemService(SensorPrivacyManager.class); - mSearchManager = mContext.getSystemService(SearchManager.class); mDisplayManager = mContext.getSystemService(DisplayManager.class); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); @@ -4009,8 +4007,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { args.putLong(Intent.EXTRA_TIME, eventTime); args.putInt(AssistUtils.INVOCATION_TYPE_KEY, invocationType); - if (mSearchManager != null) { - mSearchManager.launchAssist(args); + SearchManager searchManager = mContext.getSystemService(SearchManager.class); + if (searchManager != null) { + searchManager.launchAssist(args); } else { // Fallback to status bar if search manager doesn't exist (e.g. on wear). StatusBarManagerInternal statusBar = getStatusBarManagerInternal(); diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index 4c9ec9d863bb47b2a24ff81d510e2474840d054c..3c8e630dba2bd638745f7af6fa49b30f5ff52125 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -1018,8 +1018,7 @@ class ActivityClientController extends IActivityClientController.Stub { } try { - final ClientTransaction transaction = ClientTransaction.obtain( - r.app.getThread(), r.token); + final ClientTransaction transaction = ClientTransaction.obtain(r.app.getThread()); transaction.addCallback(EnterPipRequestedItem.obtain(r.token)); mService.getLifecycleManager().scheduleTransaction(transaction); return true; @@ -1040,8 +1039,7 @@ class ActivityClientController extends IActivityClientController.Stub { } try { - final ClientTransaction transaction = ClientTransaction.obtain( - r.app.getThread(), r.token); + final ClientTransaction transaction = ClientTransaction.obtain(r.app.getThread()); transaction.addCallback(PipStateTransactionItem.obtain(r.token, pipState)); mService.getLifecycleManager().scheduleTransaction(transaction); } catch (Exception e) { diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 5d0a457bbc43f782450af795048f97fe09df912a..d8245348d788a3e03a58db4d6d3cb2d24a13cceb 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1442,7 +1442,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId, config); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), MoveToDisplayItem.obtain(token, displayId, config)); } catch (RemoteException e) { // If process died, whatever. @@ -1459,7 +1459,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending new config to %s, " + "config: %s", this, config); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), ActivityConfigurationChangeItem.obtain(token, config)); } catch (RemoteException e) { // If process died, whatever. @@ -1480,7 +1480,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A ProtoLog.v(WM_DEBUG_STATES, "Sending position change to %s, onTop: %b", this, onTop); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), TopResumedActivityChangeItem.obtain(token, onTop)); } catch (RemoteException e) { // If process died, whatever. @@ -2736,7 +2736,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } try { mTransferringSplashScreenState = TRANSFER_SPLASH_SCREEN_ATTACH_TO_CLIENT; - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), TransferSplashScreenViewStateItem.obtain(token, parcelable, windowAnimationLeash)); scheduleTransferSplashScreenTimeout(); @@ -3903,7 +3903,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A try { if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + this); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), DestroyActivityItem.obtain(token, finishing, configChangeFlags)); } catch (Exception e) { // We can just ignore exceptions here... if the process has crashed, our death @@ -4809,9 +4809,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (isState(RESUMED) && attachedToProcess()) { try { - final ArrayList<ResultInfo> list = new ArrayList<ResultInfo>(); + final ArrayList<ResultInfo> list = new ArrayList<>(); list.add(new ResultInfo(resultWho, requestCode, resultCode, data)); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), ActivityResultItem.obtain(token, list)); return; } catch (Exception e) { @@ -4822,7 +4822,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Schedule sending results now for Media Projection setup. if (forceSendForMediaProjection && attachedToProcess() && isState(STARTED, PAUSING, PAUSED, STOPPING, STOPPED)) { - final ClientTransaction transaction = ClientTransaction.obtain(app.getThread(), token); + final ClientTransaction transaction = ClientTransaction.obtain(app.getThread()); // Build result to be returned immediately. transaction.addCallback(ActivityResultItem.obtain( token, List.of(new ResultInfo(resultWho, requestCode, resultCode, data)))); @@ -4917,7 +4917,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Making sure the client state is RESUMED after transaction completed and doing // so only if activity is currently RESUMED. Otherwise, client may have extra // life-cycle calls to RESUMED (and PAUSED later). - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), NewIntentItem.obtain(token, ar, mState == RESUMED)); unsent = false; } catch (RemoteException e) { @@ -6152,7 +6152,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A EventLogTags.writeWmPauseActivity(mUserId, System.identityHashCode(this), shortComponentName, "userLeaving=false", "make-active"); try { - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), PauseActivityItem.obtain(token, finishing, false /* userLeaving */, configChangeFlags, false /* dontReport */, mAutoEnteringPip)); } catch (Exception e) { @@ -6165,7 +6165,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A setState(STARTED, "makeActiveIfNeeded"); try { - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), StartActivityItem.obtain(token, takeOptions())); } catch (Exception e) { Slog.w(TAG, "Exception thrown sending start: " + intent.getComponent(), e); @@ -6463,7 +6463,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } EventLogTags.writeWmStopActivity( mUserId, System.identityHashCode(this), shortComponentName); - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), StopActivityItem.obtain(token, configChangeFlags)); mAtmService.mH.postDelayed(mStopTimeoutRunnable, STOP_TIMEOUT); @@ -9913,7 +9913,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else { lifecycleItem = PauseActivityItem.obtain(token); } - final ClientTransaction transaction = ClientTransaction.obtain(app.getThread(), token); + final ClientTransaction transaction = ClientTransaction.obtain(app.getThread()); transaction.addCallback(callbackItem); transaction.setLifecycleStateRequest(lifecycleItem); mAtmService.getLifecycleManager().scheduleTransaction(transaction); @@ -10008,7 +10008,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // The process will be killed until the activity reports stopped with saved state (see // {@link ActivityTaskManagerService.activityStopped}). try { - mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token, + mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), StopActivityItem.obtain(token, 0 /* configChanges */)); } catch (RemoteException e) { Slog.w(TAG, "Exception thrown during restart " + this, e); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index f38f6b0e4fa0d05e2648dbd05697fe2f4e60f6df..237bc9203415bb3923eb16ce7f52512241a0145c 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -6420,6 +6420,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { if (!restarting && hasVisibleActivities) { deferWindowLayout(); try { + final Task topTask = mRootWindowContainer.getTopDisplayFocusedRootTask(); + if (topTask != null + && topTask.topRunningActivity(true /* focusableOnly */) == null) { + topTask.adjustFocusToNextFocusableTask("handleAppDied"); + } if (!mRootWindowContainer.resumeFocusedTasksTopActivities()) { // If there was nothing to resume, and we are not already restarting // this process, but there is a visible activity that is hosted by the diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 9bfc5534ef45d6d56fb7ad34ff5d4bfa871f7efa..1ad57986353cb1f1d75d9b7287a49171c3d7a08c 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -919,7 +919,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { // Create activity launch transaction. final ClientTransaction clientTransaction = ClientTransaction.obtain( - proc.getThread(), r.token); + proc.getThread()); final boolean isTransitionForward = r.isTransitionForward(); final IBinder fragmentToken = r.getTaskFragment().getFragmentToken(); diff --git a/services/core/java/com/android/server/wm/ClientLifecycleManager.java b/services/core/java/com/android/server/wm/ClientLifecycleManager.java index 7430f0f1dc476fb30837c22d76326afcaba88eb0..ef31837f810b15113f8ad57ec8e80287c80b04be 100644 --- a/services/core/java/com/android/server/wm/ClientLifecycleManager.java +++ b/services/core/java/com/android/server/wm/ClientLifecycleManager.java @@ -18,11 +18,10 @@ package com.android.server.wm; import android.annotation.NonNull; import android.app.IApplicationThread; +import android.app.servertransaction.ActivityLifecycleItem; import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.ClientTransactionItem; -import android.app.servertransaction.ActivityLifecycleItem; import android.os.Binder; -import android.os.IBinder; import android.os.RemoteException; /** @@ -36,13 +35,13 @@ class ClientLifecycleManager { // TODO(lifecycler): Use object pools for transactions and transaction items. /** - * Schedule a transaction, which may consist of multiple callbacks and a lifecycle request. + * Schedules a transaction, which may consist of multiple callbacks and a lifecycle request. * @param transaction A sequence of client transaction items. * @throws RemoteException * * @see ClientTransaction */ - void scheduleTransaction(ClientTransaction transaction) throws RemoteException { + void scheduleTransaction(@NonNull ClientTransaction transaction) throws RemoteException { final IApplicationThread client = transaction.getClient(); transaction.schedule(); if (!(client instanceof Binder)) { @@ -54,75 +53,22 @@ class ClientLifecycleManager { } /** - * Schedule a single lifecycle request or callback to client activity. - * @param client Target client. - * @param activityToken Target activity token. - * @param stateRequest A request to move target activity to a desired lifecycle state. - * @throws RemoteException - * - * @see ClientTransactionItem - */ - void scheduleTransaction(@NonNull IApplicationThread client, @NonNull IBinder activityToken, - @NonNull ActivityLifecycleItem stateRequest) throws RemoteException { - final ClientTransaction clientTransaction = transactionWithState(client, activityToken, - stateRequest); - scheduleTransaction(clientTransaction); - } - - /** - * Schedule a single callback delivery to client activity. + * Schedules a single transaction item, either a callback or a lifecycle request, delivery to + * client application. * @param client Target client. - * @param activityToken Target activity token. - * @param callback A request to deliver a callback. - * @throws RemoteException - * - * @see ClientTransactionItem - */ - void scheduleTransaction(@NonNull IApplicationThread client, @NonNull IBinder activityToken, - @NonNull ClientTransactionItem callback) throws RemoteException { - final ClientTransaction clientTransaction = transactionWithCallback(client, activityToken, - callback); - scheduleTransaction(clientTransaction); - } - - /** - * Schedule a single callback delivery to client application. - * @param client Target client. - * @param callback A request to deliver a callback. + * @param transactionItem A transaction item to deliver a message. * @throws RemoteException * * @see ClientTransactionItem */ void scheduleTransaction(@NonNull IApplicationThread client, - @NonNull ClientTransactionItem callback) throws RemoteException { - final ClientTransaction clientTransaction = transactionWithCallback(client, - null /* activityToken */, callback); + @NonNull ClientTransactionItem transactionItem) throws RemoteException { + final ClientTransaction clientTransaction = ClientTransaction.obtain(client); + if (transactionItem instanceof ActivityLifecycleItem) { + clientTransaction.setLifecycleStateRequest((ActivityLifecycleItem) transactionItem); + } else { + clientTransaction.addCallback(transactionItem); + } scheduleTransaction(clientTransaction); } - - /** - * @return A new instance of {@link ClientTransaction} with a single lifecycle state request. - * - * @see ClientTransaction - * @see ClientTransactionItem - */ - private static ClientTransaction transactionWithState(@NonNull IApplicationThread client, - @NonNull IBinder activityToken, @NonNull ActivityLifecycleItem stateRequest) { - final ClientTransaction clientTransaction = ClientTransaction.obtain(client, activityToken); - clientTransaction.setLifecycleStateRequest(stateRequest); - return clientTransaction; - } - - /** - * @return A new instance of {@link ClientTransaction} with a single callback invocation. - * - * @see ClientTransaction - * @see ClientTransactionItem - */ - private static ClientTransaction transactionWithCallback(@NonNull IApplicationThread client, - IBinder activityToken, @NonNull ClientTransactionItem callback) { - final ClientTransaction clientTransaction = ClientTransaction.obtain(client, activityToken); - clientTransaction.addCallback(callback); - return clientTransaction; - } } diff --git a/services/core/java/com/android/server/wm/ContentRecorder.java b/services/core/java/com/android/server/wm/ContentRecorder.java index b499dad533261855e78ce3a23642614ae3e5d30c..06448d0c1e84962c531689246ee9effab23b1847 100644 --- a/services/core/java/com/android/server/wm/ContentRecorder.java +++ b/services/core/java/com/android/server/wm/ContentRecorder.java @@ -33,7 +33,6 @@ import android.media.projection.IMediaProjectionManager; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; -import android.provider.DeviceConfig; import android.view.ContentRecordingSession; import android.view.ContentRecordingSession.RecordContent; import android.view.Display; @@ -47,11 +46,6 @@ import com.android.internal.protolog.common.ProtoLog; */ final class ContentRecorder implements WindowContainerListener { - /** - * The key for accessing the device config that controls if task recording is supported. - */ - @VisibleForTesting static final String KEY_RECORD_TASK_FEATURE = "record_task_content"; - /** * The display content this class is handling recording for. */ @@ -411,14 +405,6 @@ final class ContentRecorder implements WindowContainerListener { // TODO(206461622) Migrate to using the RootDisplayArea return dc; case RECORD_CONTENT_TASK: - if (!DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_WINDOW_MANAGER, - KEY_RECORD_TASK_FEATURE, false)) { - handleStartRecordingFailed(); - ProtoLog.v(WM_DEBUG_CONTENT_RECORDING, - "Content Recording: Unable to record task since feature is disabled %d", - mDisplayContent.getDisplayId()); - return null; - } // Given the WindowToken of the region to record, retrieve the associated // SurfaceControl. if (tokenToRecord == null) { diff --git a/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java b/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java index c4ed0dd9d606502d545908681025a7dc5ee0aaa5..534cdc2015e3d8dad157a3a9b5b9d927b9f4f48f 100644 --- a/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java @@ -227,7 +227,7 @@ final class DisplayRotationCompatPolicy { "Refreshing activity for camera compatibility treatment, " + "activityRecord=%s", activity); final ClientTransaction transaction = ClientTransaction.obtain( - activity.app.getThread(), activity.token); + activity.app.getThread()); transaction.addCallback(RefreshCallbackItem.obtain(activity.token, cycleThroughStop ? ON_STOP : ON_PAUSE)); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(activity.token, diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index b4b8a74d0d1ba8d07b1d6e1f1710e2d541211802..261fc2eb26e0f2e51a45e40f5258f91a5e6ea859 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3494,6 +3494,7 @@ class Task extends TaskFragment { info.topActivityLetterboxHeight = TaskInfo.PROPERTY_VALUE_UNSET; info.isUserFullscreenOverrideEnabled = top != null && top.mLetterboxUiController.shouldApplyUserFullscreenOverride(); + info.isTopActivityTransparent = top != null && !top.fillsParent(); info.isFromLetterboxDoubleTap = top != null && top.mLetterboxUiController.isFromDoubleTap(); if (info.isLetterboxDoubleTapEnabled) { info.topActivityLetterboxWidth = top.getBounds().width(); diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index d1b5350bd61ab2295daf94ccb169e9354eef1cea..5d95bc77edcbccf4e2a61ab998aaff82ae8944ed 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1456,8 +1456,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { } try { - final ClientTransaction transaction = - ClientTransaction.obtain(next.app.getThread(), next.token); + final ClientTransaction transaction = ClientTransaction.obtain( + next.app.getThread()); // Deliver all pending results. ArrayList<ResultInfo> a = next.results; if (a != null) { @@ -1741,7 +1741,7 @@ class TaskFragment extends WindowContainer<WindowContainer> { prev.shortComponentName, "userLeaving=" + userLeaving, reason); mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), - prev.token, PauseActivityItem.obtain(prev.token, prev.finishing, userLeaving, + PauseActivityItem.obtain(prev.token, prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately, autoEnteringPip)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. diff --git a/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt b/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt index b2733d4ddb5078e5079e35b7e42f2ff3dd7675c1..240585c000fda147d91c3c44c6961ad9a7622511 100644 --- a/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt +++ b/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt @@ -16,6 +16,7 @@ package com.android.server.permission.access.permission +import android.permission.PermissionManager import android.util.Slog import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer @@ -164,9 +165,18 @@ class DevicePermissionPolicy : SchemePolicy() { deviceId: String, userId: Int, permissionName: String - ): Int = - state.userStates[userId]?.appIdDevicePermissionFlags?.get(appId)?.get(deviceId) - ?.getWithDefault(permissionName, 0) ?: 0 + ): Int { + val flags = state.userStates[userId]?.appIdDevicePermissionFlags?.get(appId)?.get(deviceId) + ?.getWithDefault(permissionName, 0) ?: 0 + if (PermissionManager.DEBUG_DEVICE_PERMISSIONS) { + Slog.i( + LOG_TAG, "getPermissionFlags: appId=$appId, userId=$userId," + + " deviceId=$deviceId, permissionName=$permissionName," + + " flags=${PermissionFlags.toString(flags)}" + ) + } + return flags + } fun MutateStateScope.setPermissionFlags( appId: Int, @@ -202,6 +212,13 @@ class DevicePermissionPolicy : SchemePolicy() { val devicePermissionFlags = appIdDevicePermissionFlags.mutateOrPut(appId) { MutableIndexedReferenceMap() } + if (PermissionManager.DEBUG_DEVICE_PERMISSIONS) { + Slog.i( + LOG_TAG, "setPermissionFlags(): appId=$appId, userId=$userId," + + " deviceId=$deviceId, permissionName=$permissionName," + + " newFlags=${PermissionFlags.toString(newFlags)}" + ) + } val permissionFlags = devicePermissionFlags.mutateOrPut(deviceId) { MutableIndexedMap() } permissionFlags.putWithDefault(permissionName, newFlags, 0) if (permissionFlags.isEmpty()) { diff --git a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt index 1e052c037b3c63744b7f1c25d6819c91e848475a..cee2524657dc02b072837832c9128d65c5204fac 100644 --- a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt +++ b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt @@ -985,7 +985,7 @@ class PermissionService( ) { val appOpPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME) as AppIdAppOpPolicy - val appOpName = checkNotNull(AppOpsManager.permissionToOp(permissionName)) + val appOpName = AppOpsManager.permissionToOp(permissionName)!! val mode = if (isGranted) AppOpsManager.MODE_ALLOWED else AppOpsManager.MODE_ERRORED with(appOpPolicy) { setAppOpMode(packageState.appId, userId, appOpName, mode) } } diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java index 89e28cb8ab830fc608cbadf1c8ad02cdd05146f4..85406b5d12dd0f03fcd904ab4b996389a3be4b82 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java @@ -335,9 +335,9 @@ public final class DisplayPowerController2Test { when(mHolder.brightnessSetting.getBrightness()).thenReturn(leadBrightness); listener.onBrightnessChanged(leadBrightness); advanceTime(1); // Send messages, run updatePowerState - verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), anyFloat(), eq(false)); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), - anyFloat()); + anyFloat(), eq(false)); clearInvocations(mHolder.animator, followerDpc.animator); @@ -351,9 +351,9 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -383,9 +383,9 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -413,9 +413,9 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -445,9 +445,9 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -484,11 +484,11 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); // One triggered by handleBrightnessModeChange, another triggered by setBrightnessToFollow verify(followerDpc.hbmController, times(2)).onAmbientLuxChange(ambientLux); verify(followerDpc.animator, times(2)).animateTo(eq(followerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(leadBrightness); when(followerDpc.displayPowerState.getScreenBrightness()).thenReturn(followerBrightness); @@ -515,10 +515,10 @@ public final class DisplayPowerController2Test { // The second time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE), eq(false)); verify(followerDpc.hbmController).onAmbientLuxChange(ambientLux); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE), eq(false)); } @Test @@ -552,7 +552,7 @@ public final class DisplayPowerController2Test { followerListener.onBrightnessChanged(initialFollowerBrightness); advanceTime(1); verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(followerDpc.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -573,11 +573,11 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); when(followerDpc.displayPowerState.getScreenBrightness()).thenReturn(brightness); @@ -588,7 +588,7 @@ public final class DisplayPowerController2Test { mHolder.dpc.removeDisplayBrightnessFollower(followerDpc.dpc); advanceTime(1); verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); when(followerDpc.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -606,10 +606,11 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); - verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat()); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); + verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat(), + anyBoolean()); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -652,9 +653,9 @@ public final class DisplayPowerController2Test { secondFollowerListener.onBrightnessChanged(initialFollowerBrightness); advanceTime(1); verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(followerHolder.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -677,11 +678,11 @@ public final class DisplayPowerController2Test { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); when(followerHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); @@ -692,9 +693,9 @@ public final class DisplayPowerController2Test { mHolder.dpc.stop(); advanceTime(1); verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); clearInvocations(followerHolder.animator, secondFollowerHolder.animator); } @@ -716,7 +717,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(sdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(sdrBrightness); when(mHolder.displayPowerState.getSdrScreenBrightness()).thenReturn(sdrBrightness); @@ -730,7 +731,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(hdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_MINIMUM)); + eq(BRIGHTNESS_RAMP_RATE_MINIMUM), eq(false)); } @Test @@ -756,7 +757,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(hdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(hdrBrightness); when(mHolder.displayPowerState.getSdrScreenBrightness()).thenReturn(sdrBrightness); @@ -769,7 +770,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(sdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_MINIMUM)); + eq(BRIGHTNESS_RAMP_RATE_MINIMUM), eq(false)); } @Test @@ -823,7 +824,7 @@ public final class DisplayPowerController2Test { verify(mHolder.screenOffBrightnessSensorController, atLeastOnce()) .getAutomaticScreenBrightness(); - verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat(), eq(false)); } @Test @@ -861,7 +862,7 @@ public final class DisplayPowerController2Test { verify(mHolder.screenOffBrightnessSensorController, atLeastOnce()) .getAutomaticScreenBrightness(); - verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat(), eq(false)); } @Test @@ -1104,7 +1105,8 @@ public final class DisplayPowerController2Test { mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState // One triggered by handleBrightnessModeChange, another triggered by onDisplayChanged - verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat()); + verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat(), + eq(false)); } @Test @@ -1213,7 +1215,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); brightness = 0.05f; @@ -1225,7 +1227,7 @@ public final class DisplayPowerController2Test { // The second time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE_IDLE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE_IDLE), eq(false)); brightness = 0.9f; when(mHolder.automaticBrightnessController.getAutomaticScreenBrightness( @@ -1235,7 +1237,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState // The third time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE), eq(false)); } @Test @@ -1254,9 +1256,35 @@ public final class DisplayPowerController2Test { } @Test - public void testRampRateForHdrContent() { + public void testRampRateForHdrContent_HdrClamperOff() { + float hdrBrightness = 0.8f; float clampedBrightness = 0.6f; - float transitionRate = 35.5f; + float transitionRate = 1.5f; + + DisplayPowerRequest dpr = new DisplayPowerRequest(); + when(mHolder.displayPowerState.getColorFadeLevel()).thenReturn(1.0f); + when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(.2f); + when(mHolder.displayPowerState.getSdrScreenBrightness()).thenReturn(.1f); + when(mHolder.hbmController.getHighBrightnessMode()).thenReturn( + BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR); + when(mHolder.hbmController.getHdrBrightnessValue()).thenReturn(hdrBrightness); + when(mHolder.hdrClamper.getMaxBrightness()).thenReturn(clampedBrightness); + when(mHolder.hdrClamper.getTransitionRate()).thenReturn(transitionRate); + + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); // Run updatePowerState + + verify(mHolder.animator, atLeastOnce()).animateTo(eq(hdrBrightness), anyFloat(), + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); + } + + @Test + public void testRampRateForHdrContent_HdrClamperOn() { + float clampedBrightness = 0.6f; + float transitionRate = 1.5f; + DisplayManagerFlags flags = mock(DisplayManagerFlags.class); + when(flags.isHdrClamperEnabled()).thenReturn(true); + mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ true, flags); DisplayPowerRequest dpr = new DisplayPowerRequest(); when(mHolder.displayPowerState.getColorFadeLevel()).thenReturn(1.0f); @@ -1272,7 +1300,7 @@ public final class DisplayPowerController2Test { advanceTime(1); // Run updatePowerState verify(mHolder.animator, atLeastOnce()).animateTo(eq(clampedBrightness), anyFloat(), - eq(transitionRate)); + eq(transitionRate), eq(true)); } /** @@ -1359,6 +1387,12 @@ public final class DisplayPowerController2Test { private DisplayPowerControllerHolder createDisplayPowerController(int displayId, String uniqueId, boolean isEnabled) { + return createDisplayPowerController(displayId, uniqueId, isEnabled, + mock(DisplayManagerFlags.class)); + } + + private DisplayPowerControllerHolder createDisplayPowerController(int displayId, + String uniqueId, boolean isEnabled, DisplayManagerFlags flags) { final DisplayPowerState displayPowerState = mock(DisplayPowerState.class); final DualRampAnimator<DisplayPowerState> animator = mock(DualRampAnimator.class); final AutomaticBrightnessController automaticBrightnessController = @@ -1371,7 +1405,6 @@ public final class DisplayPowerController2Test { mock(ScreenOffBrightnessSensorController.class); final HighBrightnessModeController hbmController = mock(HighBrightnessModeController.class); final HdrClamper hdrClamper = mock(HdrClamper.class); - final DisplayManagerFlags flags = mock(DisplayManagerFlags.class); when(hbmController.getCurrentBrightnessMax()).thenReturn(PowerManager.BRIGHTNESS_MAX); diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java index 971ece365f303e9c203cf72843f3d0f352f75363..c53e763068b77ac08879d0ab72bb8c1b20a5b407 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -336,9 +336,9 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(leadBrightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(leadBrightness); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(followerBrightness); @@ -354,9 +354,9 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -387,9 +387,9 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -418,9 +418,9 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -451,9 +451,9 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -491,11 +491,11 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); // One triggered by handleBrightnessModeChange, another triggered by setBrightnessToFollow verify(followerDpc.hbmController, times(2)).onAmbientLuxChange(ambientLux); verify(followerDpc.animator, times(2)).animateTo(eq(followerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(leadBrightness); when(followerDpc.displayPowerState.getScreenBrightness()).thenReturn(followerBrightness); @@ -522,10 +522,10 @@ public final class DisplayPowerControllerTest { // The second time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE), eq(false)); verify(followerDpc.hbmController).onAmbientLuxChange(ambientLux); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE), eq(false)); } @Test @@ -560,7 +560,7 @@ public final class DisplayPowerControllerTest { followerListener.onBrightnessChanged(initialFollowerBrightness); advanceTime(1); verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(followerDpc.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -581,11 +581,11 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); when(followerDpc.displayPowerState.getScreenBrightness()).thenReturn(brightness); @@ -596,7 +596,7 @@ public final class DisplayPowerControllerTest { mHolder.dpc.removeDisplayBrightnessFollower(followerDpc.dpc); advanceTime(1); verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); when(followerDpc.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -614,10 +614,11 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); - verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat()); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); + verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat(), + anyBoolean()); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); } @Test @@ -661,9 +662,9 @@ public final class DisplayPowerControllerTest { secondFollowerListener.onBrightnessChanged(initialFollowerBrightness); advanceTime(1); verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(followerHolder.displayPowerState.getScreenBrightness()) .thenReturn(initialFollowerBrightness); @@ -686,11 +687,11 @@ public final class DisplayPowerControllerTest { listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(followerHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); when(followerHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); @@ -701,9 +702,9 @@ public final class DisplayPowerControllerTest { mHolder.dpc.stop(); advanceTime(1); verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_DECREASE), eq(false)); clearInvocations(followerHolder.animator, secondFollowerHolder.animator); } @@ -756,7 +757,7 @@ public final class DisplayPowerControllerTest { verify(mHolder.screenOffBrightnessSensorController, atLeastOnce()) .getAutomaticScreenBrightness(); - verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat(), eq(false)); } @Test @@ -793,7 +794,7 @@ public final class DisplayPowerControllerTest { verify(mHolder.screenOffBrightnessSensorController, atLeastOnce()) .getAutomaticScreenBrightness(); - verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat(), eq(false)); } @Test @@ -1038,7 +1039,8 @@ public final class DisplayPowerControllerTest { mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState // One triggered by handleBrightnessModeChange, another triggered by onDisplayChanged - verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat()); + verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat(), + eq(false)); } @Test @@ -1147,7 +1149,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(brightness); brightness = 0.05f; @@ -1159,7 +1161,7 @@ public final class DisplayPowerControllerTest { // The second time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE_IDLE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_DECREASE_IDLE), eq(false)); brightness = 0.9f; when(mHolder.automaticBrightnessController.getAutomaticScreenBrightness( @@ -1169,7 +1171,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState // The third time, the animation rate should be slow verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), - eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE)); + eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE), eq(false)); } @Test @@ -1204,7 +1206,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(sdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(sdrBrightness); when(mHolder.displayPowerState.getSdrScreenBrightness()).thenReturn(sdrBrightness); @@ -1218,7 +1220,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(hdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_MINIMUM)); + eq(BRIGHTNESS_RAMP_RATE_MINIMUM), eq(false)); } @Test @@ -1242,7 +1244,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(hdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE)); + eq(BRIGHTNESS_RAMP_RATE_FAST_INCREASE), eq(false)); when(mHolder.displayPowerState.getScreenBrightness()).thenReturn(hdrBrightness); when(mHolder.displayPowerState.getSdrScreenBrightness()).thenReturn(sdrBrightness); @@ -1255,7 +1257,7 @@ public final class DisplayPowerControllerTest { advanceTime(1); // Run updatePowerState verify(mHolder.animator).animateTo(eq(sdrBrightness), eq(sdrBrightness), - eq(BRIGHTNESS_RAMP_RATE_MINIMUM)); + eq(BRIGHTNESS_RAMP_RATE_MINIMUM), eq(false)); } private void advanceTime(long timeMs) { diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java index c0128ae38a28baa4c5fb3edc6616b1b499a3941a..1c43418f9276f1d7cb9c4348a32860a5ee3f6155 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java @@ -28,7 +28,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.PropertyInvalidatedCache; +import android.content.Context; import android.graphics.Point; +import android.os.IBinder; import android.util.SparseArray; import android.view.Display; import android.view.DisplayInfo; @@ -40,7 +42,6 @@ import androidx.test.filters.SmallTest; import com.android.server.display.layout.Layout; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.io.InputStream; @@ -56,6 +57,9 @@ public class LogicalDisplayTest { private LogicalDisplay mLogicalDisplay; private DisplayDevice mDisplayDevice; + private DisplayAdapter mDisplayAdapter; + private Context mContext; + private IBinder mDisplayToken; private DisplayDeviceRepository mDeviceRepo; private final DisplayDeviceInfo mDisplayDeviceInfo = new DisplayDeviceInfo(); @@ -64,6 +68,9 @@ public class LogicalDisplayTest { // Share classloader to allow package private access. System.setProperty("dexmaker.share_classloader", "true"); mDisplayDevice = mock(DisplayDevice.class); + mDisplayAdapter = mock(DisplayAdapter.class); + mContext = mock(Context.class); + mDisplayToken = mock(IBinder.class); mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice); mDisplayDeviceInfo.copyFrom(new DisplayDeviceInfo()); @@ -131,33 +138,43 @@ public class LogicalDisplayTest { assertEquals(expectedPosition, mLogicalDisplay.getDisplayPosition()); } - // TODO: b/288880734 - fix test after display tests migration @Test - @Ignore public void testDisplayInputFlags() { + DisplayDevice displayDevice = new DisplayDevice(mDisplayAdapter, mDisplayToken, + "unique_display_id", mContext) { + @Override + public boolean hasStableUniqueId() { + return false; + } + + @Override + public DisplayDeviceInfo getDisplayDeviceInfoLocked() { + return mDisplayDeviceInfo; + } + }; SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class); - mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false); + mLogicalDisplay.configureDisplayLocked(t, displayDevice, false); verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT)); reset(t); mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_NONE; - mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false); + mLogicalDisplay.configureDisplayLocked(t, displayDevice, false); verify(t).setDisplayFlags(any(), eq(0)); reset(t); mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_VIRTUAL; - mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false); + mLogicalDisplay.configureDisplayLocked(t, displayDevice, false); verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT)); reset(t); mLogicalDisplay.setEnabledLocked(false); - mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false); + mLogicalDisplay.configureDisplayLocked(t, displayDevice, false); verify(t).setDisplayFlags(any(), eq(0)); reset(t); mLogicalDisplay.setEnabledLocked(true); mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL; - mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false); + mLogicalDisplay.configureDisplayLocked(t, displayDevice, false); verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT)); reset(t); } diff --git a/services/tests/displayservicetests/src/com/android/server/display/RampAnimatorTest.java b/services/tests/displayservicetests/src/com/android/server/display/RampAnimatorTest.java index 2820da7c49c18e062c4a26e2a8c425f6700a39c3..810a8b2c8297dfca8405d4b2e443db75379cae91 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/RampAnimatorTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/RampAnimatorTest.java @@ -28,6 +28,8 @@ import org.junit.Test; @SmallTest public class RampAnimatorTest { + private static final float FLOAT_TOLERANCE = 0.0000001f; + private RampAnimator<TestObject> mRampAnimator; private final TestObject mTestObject = new TestObject(); @@ -46,16 +48,46 @@ public class RampAnimatorTest { @Before public void setUp() { - mRampAnimator = new RampAnimator<>(mTestObject, mTestProperty); + mRampAnimator = new RampAnimator<>(mTestObject, mTestProperty, () -> 0); } @Test public void testInitialValueUsedInLastAnimationStep() { - mRampAnimator.setAnimationTarget(0.67f, 0.1f); + mRampAnimator.setAnimationTarget(0.67f, 0.1f, false); assertEquals(0.67f, mTestObject.mValue, 0); } + @Test + public void testAnimationStep_respectTimeLimits() { + // animation is limited to 2s + mRampAnimator.setAnimationTimeLimits(2_000, 2_000); + // initial brightness value, applied immediately, in HLG = 0.8716434 + mRampAnimator.setAnimationTarget(0.5f, 0.1f, false); + // expected brightness, in HLG = 0.9057269 + // delta = 0.0340835, duration = 3.40835s > 2s + // new rate = delta/2 = 0.01704175 u/s + mRampAnimator.setAnimationTarget(0.6f, 0.01f, false); + // animation step = 1s, new HGL = 0.88868515 + mRampAnimator.performNextAnimationStep(1_000_000_000); + // converted back to Linear + assertEquals(0.54761934f, mTestObject.mValue, FLOAT_TOLERANCE); + } + + @Test + public void testAnimationStep_ignoreTimeLimits() { + // animation is limited to 2s + mRampAnimator.setAnimationTimeLimits(2_000, 2_000); + // initial brightness value, applied immediately, in HLG = 0.8716434 + mRampAnimator.setAnimationTarget(0.5f, 0.1f, false); + // rate = 0.01f, time limits are ignored + mRampAnimator.setAnimationTarget(0.6f, 0.01f, true); + // animation step = 1s, new HGL = 0.8816434 + mRampAnimator.performNextAnimationStep(1_000_000_000); + // converted back to Linear + assertEquals(0.52739114f, mTestObject.mValue, FLOAT_TOLERANCE); + } + private static class TestObject { private float mValue; } diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java index 0ebe46ac0c888a07e309217236552656a441b10c..37d966d044c59758e1e86387f04e3532fe8fc64b 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java @@ -24,6 +24,7 @@ import android.os.PowerManager; import androidx.test.filters.SmallTest; +import com.android.server.display.config.HdrBrightnessData; import com.android.server.testutils.OffsettableClock; import com.android.server.testutils.TestHandler; @@ -34,6 +35,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.Map; + @SmallTest public class HdrClamperTest { @@ -108,10 +111,13 @@ public class HdrClamperTest { } private void configureClamper() { - mHdrClamper.getConfiguration().mMaxBrightnessLimits.put(500f, 0.6f); - mHdrClamper.getConfiguration().mIncreaseConfig.mDebounceTimeMillis = 1000; - mHdrClamper.getConfiguration().mIncreaseConfig.mTransitionTimeMillis = 1500; - mHdrClamper.getConfiguration().mDecreaseConfig.mDebounceTimeMillis = 2000; - mHdrClamper.getConfiguration().mDecreaseConfig.mTransitionTimeMillis = 2500; + HdrBrightnessData data = new HdrBrightnessData( + Map.of(500f, 0.6f), + /* brightnessIncreaseDebounceMillis= */ 1000, + /* brightnessIncreaseDurationMillis= */ 1500, + /* brightnessDecreaseDebounceMillis= */ 2000, + /* brightnessDecreaseDurationMillis= */2500 + ); + mHdrClamper.resetHdrConfig(data); } } diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtilsTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtilsTest.java index 8e17b3a587693b4292fef45484bd7d61c53c2164..dcd531751cd76b6da2d58b5a823faa8a0d6a7197 100644 --- a/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtilsTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtilsTest.java @@ -17,26 +17,33 @@ package com.android.server.backup.utils; import static org.junit.Assert.assertTrue; - +import static org.testng.AssertJUnit.assertFalse; +import android.app.backup.BackupAnnotations; import android.app.backup.BackupManagerMonitor; import android.os.Bundle; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; - import java.io.File; +import java.io.FileWriter; public class BackupManagerMonitorDumpsysUtilsTest { - private File mTempFile; + private long mRetentionPeriod; + private File mTempBMMEventsFile; + private File mTempSetUpDateFile; + + private long mSizeLimit; private TestBackupManagerMonitorDumpsysUtils mBackupManagerMonitorDumpsysUtils; @Rule public TemporaryFolder tmp = new TemporaryFolder(); @Before public void setUp() throws Exception { - mTempFile = tmp.newFile("testbmmevents.txt"); + mRetentionPeriod = 30 * 60 * 1000; + mSizeLimit = 25 * 1024 * 1000; + mTempBMMEventsFile = tmp.newFile("testbmmevents.txt"); + mTempSetUpDateFile = tmp.newFile("testSetUpDate.txt"); mBackupManagerMonitorDumpsysUtils = new TestBackupManagerMonitorDumpsysUtils(); } @@ -46,7 +53,7 @@ public class BackupManagerMonitorDumpsysUtilsTest { throws Exception { mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(null); - assertTrue(mTempFile.length() == 0); + assertTrue(mTempBMMEventsFile.length() == 0); } @@ -57,7 +64,7 @@ public class BackupManagerMonitorDumpsysUtilsTest { event.putInt(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY, 1); mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); - assertTrue(mTempFile.length() == 0); + assertTrue(mTempBMMEventsFile.length() == 0); } @Test @@ -67,18 +74,236 @@ public class BackupManagerMonitorDumpsysUtilsTest { event.putInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID, 1); mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); - assertTrue(mTempFile.length() == 0); + assertTrue(mTempBMMEventsFile.length() == 0); + } + + @Test + public void parseBackupManagerMonitorEventForDumpsys_eventWithCategoryAndId_eventIsWrittenToFile() + throws Exception { + Bundle event = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + + assertTrue(mTempBMMEventsFile.length() != 0); + } + + @Test + public void parseBackupManagerMonitorEventForDumpsys_firstEvent_recordSetUpTimestamp() + throws Exception { + assertTrue(mTempBMMEventsFile.length()==0); + assertTrue(mTempSetUpDateFile.length()==0); + + Bundle event = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + + assertTrue(mTempBMMEventsFile.length() != 0); + assertTrue(mTempSetUpDateFile.length()!=0); + } + + @Test + public void parseBackupManagerMonitorEventForDumpsys_notFirstEvent_doNotChangeSetUpTimestamp() + throws Exception { + Bundle event1 = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event1); + String setUpTimestampBefore = mBackupManagerMonitorDumpsysUtils.getSetUpDate(); + + Bundle event2 = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event2); + String setUpTimestampAfter = mBackupManagerMonitorDumpsysUtils.getSetUpDate(); + + assertTrue(setUpTimestampBefore.equals(setUpTimestampAfter)); + } + + + @Test + public void parseBackupManagerMonitorEventForDumpsys_fileOverSizeLimit_doNotRecordEvents() + throws Exception { + assertTrue(mTempBMMEventsFile.length() == 0); + Bundle event = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + long fileSizeBefore = mTempBMMEventsFile.length(); + + mBackupManagerMonitorDumpsysUtils.setTestSizeLimit(0); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + long fileSizeAfter = mTempBMMEventsFile.length(); + assertTrue(mBackupManagerMonitorDumpsysUtils.isFileLargerThanSizeLimit(mTempBMMEventsFile)); + assertTrue(fileSizeBefore == fileSizeAfter); + } + + @Test + public void parseBackupManagerMonitorEventForDumpsys_fileUnderSizeLimit_recordEvents() + throws Exception { + assertTrue(mTempBMMEventsFile.length() == 0); + Bundle event = createRestoreBMMEvent(); + + mBackupManagerMonitorDumpsysUtils.setTestSizeLimit(25 * 1024 * 1000); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + assertFalse(mBackupManagerMonitorDumpsysUtils.isFileLargerThanSizeLimit(mTempBMMEventsFile)); + assertTrue(mTempBMMEventsFile.length() != 0); + } + + @Test + public void deleteExpiredBackupManagerMonitorEvent_eventsAreExpired_deleteEventsAndReturnTrue() + throws Exception { + Bundle event = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + assertTrue(mTempBMMEventsFile.length() != 0); + // Re-initialise the test BackupManagerMonitorDumpsysUtils to + // clear the cached value of isAfterRetentionPeriod + mBackupManagerMonitorDumpsysUtils = new TestBackupManagerMonitorDumpsysUtils(); + + // set a retention period of 0 second + mBackupManagerMonitorDumpsysUtils.setTestRetentionPeriod(0); + + assertTrue(mBackupManagerMonitorDumpsysUtils.deleteExpiredBMMEvents()); + assertFalse(mTempBMMEventsFile.exists()); + } + + @Test + public void deleteExpiredBackupManagerMonitorEvent_eventsAreNotExpired_returnFalse() throws + Exception { + Bundle event = createRestoreBMMEvent(); + mBackupManagerMonitorDumpsysUtils.parseBackupManagerMonitorRestoreEventForDumpsys(event); + assertTrue(mTempBMMEventsFile.length() != 0); + + // set a retention period of 30 minutes + mBackupManagerMonitorDumpsysUtils.setTestRetentionPeriod(30 * 60 * 1000); + + assertFalse(mBackupManagerMonitorDumpsysUtils.deleteExpiredBMMEvents()); + assertTrue(mTempBMMEventsFile.length() != 0); + } + + @Test + public void isAfterRetentionPeriod_afterRetentionPeriod_returnTrue() throws + Exception { + mBackupManagerMonitorDumpsysUtils.recordSetUpTimestamp(); + + // set a retention period of 0 second + mBackupManagerMonitorDumpsysUtils.setTestRetentionPeriod(0); + + assertTrue(mBackupManagerMonitorDumpsysUtils.isAfterRetentionPeriod()); + } + + @Test + public void isAfterRetentionPeriod_beforeRetentionPeriod_returnFalse() throws + Exception { + mBackupManagerMonitorDumpsysUtils.recordSetUpTimestamp(); + + // set a retention period of 30 minutes + mBackupManagerMonitorDumpsysUtils.setTestRetentionPeriod(30 * 60 * 1000); + + assertFalse(mBackupManagerMonitorDumpsysUtils.isAfterRetentionPeriod()); + } + + @Test + public void isAfterRetentionPeriod_noSetupDate_returnFalse() throws + Exception { + assertTrue(mTempSetUpDateFile.length() == 0); + + assertFalse(mBackupManagerMonitorDumpsysUtils.isAfterRetentionPeriod()); + } + + @Test + public void isDateAfterNMillisec_date1IsAfterThanDate2_returnTrue() throws + Exception { + long timestamp1 = System.currentTimeMillis(); + long timestamp2 = timestamp1 - 1; + + assertTrue(mBackupManagerMonitorDumpsysUtils.isDateAfterNMillisec(timestamp1, timestamp2, + 0)); + } + + @Test + public void isDateAfterNMillisec_date1IsAfterNMillisecFromDate2_returnTrue() throws + Exception { + long timestamp1 = System.currentTimeMillis(); + long timestamp2 = timestamp1 + 10; + + assertTrue(mBackupManagerMonitorDumpsysUtils.isDateAfterNMillisec(timestamp1, timestamp2, + 10)); + } + + @Test + public void isDateAfterNMillisec_date1IsLessThanNMillisecFromDate2_returnFalse() throws + Exception { + long timestamp1 = System.currentTimeMillis(); + long timestamp2 = timestamp1 + 10; + + assertFalse(mBackupManagerMonitorDumpsysUtils.isDateAfterNMillisec(timestamp1, timestamp2, + 11)); + } + + @Test + public void recordSetUpTimestamp_timestampNotSetBefore_setTimestamp() throws + Exception { + assertTrue(mTempSetUpDateFile.length() == 0); + + mBackupManagerMonitorDumpsysUtils.recordSetUpTimestamp(); + + assertTrue(mTempSetUpDateFile.length() != 0); + } + + @Test + public void recordSetUpTimestamp_timestampSetBefore_doNothing() throws + Exception { + mBackupManagerMonitorDumpsysUtils.recordSetUpTimestamp(); + assertTrue(mTempSetUpDateFile.length() != 0); + String timestampBefore = mBackupManagerMonitorDumpsysUtils.getSetUpDate(); + + mBackupManagerMonitorDumpsysUtils.recordSetUpTimestamp(); + + assertTrue(mTempSetUpDateFile.length() != 0); + String timestampAfter = mBackupManagerMonitorDumpsysUtils.getSetUpDate(); + assertTrue(timestampAfter.equals(timestampBefore)); + } + + private Bundle createRestoreBMMEvent() { + Bundle event = new Bundle(); + event.putInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID, 1); + event.putInt(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY, 1); + event.putInt(BackupManagerMonitor.EXTRA_LOG_OPERATION_TYPE, + BackupAnnotations.OperationType.RESTORE); + return event; } private class TestBackupManagerMonitorDumpsysUtils extends BackupManagerMonitorDumpsysUtils { + + private long testRetentionPeriod; + private long testSizeLimit; + TestBackupManagerMonitorDumpsysUtils() { super(); + this.testRetentionPeriod = mRetentionPeriod; + this.testSizeLimit = mSizeLimit; + } + + public void setTestRetentionPeriod(long testRetentionPeriod) { + this.testRetentionPeriod = testRetentionPeriod; + } + public void setTestSizeLimit(long testSizeLimit) { + this.testSizeLimit = testSizeLimit; } @Override public File getBMMEventsFile() { - return mTempFile; + return mTempBMMEventsFile; } + + @Override + File getSetUpDateFile() { + return mTempSetUpDateFile; + } + + @Override + long getRetentionPeriodInMillisec() { + return testRetentionPeriod; + } + + @Override + long getBMMEventsFileSizeLimit(){ + return testSizeLimit; + } + + } } diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorEventSenderTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorEventSenderTest.java index 3af2932ee937f4fbac319b93b134598bd59aa664..604a68d12f5e52cd658b95401ce4930b587ac0f4 100644 --- a/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorEventSenderTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/backup/utils/BackupManagerMonitorEventSenderTest.java @@ -340,8 +340,9 @@ public class BackupManagerMonitorEventSenderTest { @Test public void putMonitoringExtraLong_bundleExists_fillsBundleCorrectly() throws Exception { Bundle bundle = new Bundle(); + long value = 123; - Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(bundle, "key", 123); + Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(bundle, "key", value); assertThat(result).isEqualTo(bundle); assertThat(result.size()).isEqualTo(1); @@ -350,7 +351,8 @@ public class BackupManagerMonitorEventSenderTest { @Test public void putMonitoringExtraLong_bundleDoesNotExist_fillsBundleCorrectly() throws Exception { - Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(null, "key", 123); + long value = 123; + Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(null, "key", value); assertThat(result).isNotNull(); assertThat(result.size()).isEqualTo(1); @@ -377,4 +379,25 @@ public class BackupManagerMonitorEventSenderTest { assertThat(result.size()).isEqualTo(1); assertThat(result.getBoolean("key")).isTrue(); } + + @Test + public void putMonitoringExtraInt_bundleExists_fillsBundleCorrectly() throws Exception { + Bundle bundle = new Bundle(); + + Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(bundle, "key", 1); + + assertThat(result).isEqualTo(bundle); + assertThat(result.size()).isEqualTo(1); + assertThat(result.getInt("key")).isEqualTo(1); + } + + @Test + public void putMonitoringExtraInt_bundleDoesNotExist_fillsBundleCorrectly() + throws Exception { + Bundle result = mBackupManagerMonitorEventSender.putMonitoringExtra(null, "key", 1); + + assertThat(result).isNotNull(); + assertThat(result.size()).isEqualTo(1); + assertThat(result.getInt("key")).isEqualTo(1); + } } diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java index b97fd4b3277b56396d47be6599add755e54f6392..eb50556821eb1b2ece9cac1b017805b622aaaaaa 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java @@ -315,7 +315,8 @@ public class PackageArchiverTest { } @Test - public void unarchiveApp_notArchived() { + public void unarchiveApp_notArchived_missingArchiveState() { + mUserState.setInstalled(false); Exception e = assertThrows( ParcelableException.class, () -> mArchiveManager.requestUnarchive(PACKAGE, CALLER_PACKAGE, @@ -326,8 +327,21 @@ public class PackageArchiverTest { } @Test - public void unarchiveApp_noInstallerFound() { + public void unarchiveApp_notArchived_stillInstalled() { mUserState.setArchiveState(createArchiveState()); + Exception e = assertThrows( + ParcelableException.class, + () -> mArchiveManager.requestUnarchive(PACKAGE, CALLER_PACKAGE, + UserHandle.CURRENT)); + assertThat(e.getCause()).isInstanceOf(PackageManager.NameNotFoundException.class); + assertThat(e.getCause()).hasMessageThat().isEqualTo( + String.format("Package %s is not currently archived.", PACKAGE)); + } + + + @Test + public void unarchiveApp_noInstallerFound() { + mUserState.setArchiveState(createArchiveState()).setInstalled(false); InstallSource otherInstallSource = InstallSource.create( CALLER_PACKAGE, diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationAttentionHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAttentionHelperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..81867df74abd83d9a418f71b2f77ba5d40fa3d41 --- /dev/null +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAttentionHelperTest.java @@ -0,0 +1,1973 @@ +/* + * Copyright (C) 2023 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.server.notification; + +import static android.app.Notification.FLAG_BUBBLE; +import static android.app.Notification.GROUP_ALERT_ALL; +import static android.app.Notification.GROUP_ALERT_CHILDREN; +import static android.app.Notification.GROUP_ALERT_SUMMARY; +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_LOW; +import static android.app.NotificationManager.IMPORTANCE_MIN; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; +import static android.media.AudioAttributes.USAGE_NOTIFICATION; +import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.mockito.ArgumentMatchers.anyFloat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.after; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.annotation.SuppressLint; +import android.app.ActivityManager; +import android.app.KeyguardManager; +import android.app.Notification; +import android.app.Notification.Builder; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.graphics.drawable.Icon; +import android.media.AudioAttributes; +import android.media.AudioManager; +import android.net.Uri; +import android.os.Handler; +import android.os.Process; +import android.os.RemoteException; +import android.os.UserHandle; +import android.os.VibrationAttributes; +import android.os.VibrationEffect; +import android.os.Vibrator; +import android.provider.Settings; +import android.service.notification.NotificationListenerService; +import android.service.notification.StatusBarNotification; +import android.test.suitebuilder.annotation.SmallTest; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.IAccessibilityManager; +import android.view.accessibility.IAccessibilityManagerClient; +import androidx.test.runner.AndroidJUnit4; +import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags; +import com.android.internal.config.sysui.TestableFlagResolver; +import com.android.internal.logging.InstanceIdSequence; +import com.android.internal.logging.InstanceIdSequenceFake; +import com.android.internal.util.IntPair; +import com.android.server.UiServiceTestCase; +import com.android.server.lights.LightsManager; +import com.android.server.lights.LogicalLight; +import com.android.server.pm.PackageManagerService; +import java.util.Objects; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatcher; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.verification.VerificationMode; + +@SmallTest +@RunWith(AndroidJUnit4.class) +@SuppressLint("GuardedBy") +public class NotificationAttentionHelperTest extends UiServiceTestCase { + + @Mock AudioManager mAudioManager; + @Mock Vibrator mVibrator; + @Mock android.media.IRingtonePlayer mRingtonePlayer; + @Mock LogicalLight mLight; + @Mock + NotificationManagerService.WorkerHandler mHandler; + @Mock + NotificationUsageStats mUsageStats; + @Mock + IAccessibilityManager mAccessibilityService; + @Mock + KeyguardManager mKeyguardManager; + NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake(); + private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake( + 1 << 30); + + private NotificationManagerService mService; + private String mPkg = "com.android.server.notification"; + private int mId = 1001; + private int mOtherId = 1002; + private String mTag = null; + private int mUid = 1000; + private int mPid = 2000; + private android.os.UserHandle mUser = UserHandle.of(ActivityManager.getCurrentUser()); + private NotificationChannel mChannel; + + private NotificationAttentionHelper mAttentionHelper; + private TestableFlagResolver mTestFlagResolver = new TestableFlagResolver(); + private AccessibilityManager mAccessibilityManager; + private static final NotificationAttentionHelper.Signals DEFAULT_SIGNALS = + new NotificationAttentionHelper.Signals(false, 0); + + private VibrateRepeatMatcher mVibrateOnceMatcher = new VibrateRepeatMatcher(-1); + private VibrateRepeatMatcher mVibrateLoopMatcher = new VibrateRepeatMatcher(0); + + private static final long[] CUSTOM_VIBRATION = new long[] { + 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, + 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, + 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 }; + private static final Uri CUSTOM_SOUND = Settings.System.DEFAULT_ALARM_ALERT_URI; + private static final AudioAttributes CUSTOM_ATTRIBUTES = new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) + .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) + .build(); + private static final int CUSTOM_LIGHT_COLOR = Color.BLACK; + private static final int CUSTOM_LIGHT_ON = 10000; + private static final int CUSTOM_LIGHT_OFF = 10000; + private static final int MAX_VIBRATION_DELAY = 1000; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + getContext().addMockSystemService(Vibrator.class, mVibrator); + + when(mAudioManager.isAudioFocusExclusive()).thenReturn(false); + when(mAudioManager.getRingtonePlayer()).thenReturn(mRingtonePlayer); + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(10); + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); + when(mAudioManager.getFocusRampTimeMs(anyInt(), any(AudioAttributes.class))).thenReturn(50); + when(mUsageStats.isAlertRateLimited(any())).thenReturn(false); + when(mVibrator.hasFrequencyControl()).thenReturn(false); + when(mKeyguardManager.isDeviceLocked(anyInt())).thenReturn(false); + + long serviceReturnValue = IntPair.of( + AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED, + AccessibilityEvent.TYPES_ALL_MASK); + when(mAccessibilityService.addClient(any(), anyInt())).thenReturn(serviceReturnValue); + mAccessibilityManager = + new AccessibilityManager(getContext(), Handler.getMain(), mAccessibilityService, 0, + true); + verify(mAccessibilityService).addClient(any(IAccessibilityManagerClient.class), anyInt()); + assertTrue(mAccessibilityManager.isEnabled()); + + // TODO (b/291907312): remove feature flag + mTestFlagResolver.setFlagOverride(NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR, true); + + mService = spy(new NotificationManagerService(getContext(), mNotificationRecordLogger, + mNotificationInstanceIdSequence)); + + initAttentionHelper(mTestFlagResolver); + + mChannel = new NotificationChannel("test", "test", IMPORTANCE_HIGH); + } + + private void initAttentionHelper(TestableFlagResolver flagResolver) { + mAttentionHelper = new NotificationAttentionHelper(getContext(), mock(LightsManager.class), + mAccessibilityManager, getContext().getPackageManager(), mUsageStats, + mService.mNotificationManagerPrivate, mock(ZenModeHelper.class), flagResolver); + mAttentionHelper.setVibratorHelper(new VibratorHelper(getContext())); + mAttentionHelper.setAudioManager(mAudioManager); + mAttentionHelper.setSystemReady(true); + mAttentionHelper.setLights(mLight); + mAttentionHelper.setScreenOn(false); + mAttentionHelper.setAccessibilityManager(mAccessibilityManager); + mAttentionHelper.setKeyguardManager(mKeyguardManager); + mAttentionHelper.setScreenOn(false); + mAttentionHelper.setInCallStateOffHook(false); + mAttentionHelper.mNotificationPulseEnabled = true; + } + + // + // Convenience functions for creating notification records + // + + private NotificationRecord getNoisyOtherNotification() { + return getNotificationRecord(mOtherId, false /* insistent */, false /* once */, + true /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBeepyNotification() { + return getNotificationRecord(mId, false /* insistent */, false /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBeepyOtherNotification() { + return getNotificationRecord(mOtherId, false /* insistent */, false /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBeepyOnceNotification() { + return getNotificationRecord(mId, false /* insistent */, true /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getQuietNotification() { + return getNotificationRecord(mId, false /* insistent */, true /* once */, + false /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getQuietOtherNotification() { + return getNotificationRecord(mOtherId, false /* insistent */, false /* once */, + false /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getQuietOnceNotification() { + return getNotificationRecord(mId, false /* insistent */, true /* once */, + false /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getInsistentBeepyNotification() { + return getNotificationRecord(mId, true /* insistent */, false /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getInsistentBeepyOnceNotification() { + return getNotificationRecord(mId, true /* insistent */, true /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getInsistentBeepyLeanbackNotification() { + return getLeanbackNotificationRecord(mId, true /* insistent */, false /* once */, + true /* noisy */, false /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBuzzyNotification() { + return getNotificationRecord(mId, false /* insistent */, false /* once */, + false /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBuzzyOtherNotification() { + return getNotificationRecord(mOtherId, false /* insistent */, false /* once */, + false /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBuzzyOnceNotification() { + return getNotificationRecord(mId, false /* insistent */, true /* once */, + false /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getInsistentBuzzyNotification() { + return getNotificationRecord(mId, true /* insistent */, false /* once */, + false /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getBuzzyBeepyNotification() { + return getNotificationRecord(mId, false /* insistent */, false /* once */, + true /* noisy */, true /* buzzy*/, false /* lights */); + } + + private NotificationRecord getLightsNotification() { + return getNotificationRecord(mId, false /* insistent */, false /* once */, + false /* noisy */, false /* buzzy*/, true /* lights */); + } + + private NotificationRecord getLightsOnceNotification() { + return getNotificationRecord(mId, false /* insistent */, true /* once */, + false /* noisy */, false /* buzzy*/, true /* lights */); + } + + private NotificationRecord getCallRecord(int id, NotificationChannel channel, boolean looping) { + final Builder builder = new Builder(getContext()) + .setContentTitle("foo") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setPriority(Notification.PRIORITY_HIGH); + Notification n = builder.build(); + if (looping) { + n.flags |= Notification.FLAG_INSISTENT; + } + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, id, mTag, mUid, + mPid, n, mUser, null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, channel); + mService.addNotification(r); + + return r; + } + + private NotificationRecord getNotificationRecord(int id, boolean insistent, boolean once, + boolean noisy, boolean buzzy, boolean lights) { + return getNotificationRecord(id, insistent, once, noisy, buzzy, lights, buzzy, noisy, + lights, null, Notification.GROUP_ALERT_ALL, false); + } + + private NotificationRecord getLeanbackNotificationRecord(int id, boolean insistent, + boolean once, + boolean noisy, boolean buzzy, boolean lights) { + return getNotificationRecord(id, insistent, once, noisy, buzzy, lights, true, true, + true, + null, Notification.GROUP_ALERT_ALL, true); + } + + private NotificationRecord getBeepyNotificationRecord(String groupKey, int groupAlertBehavior) { + return getNotificationRecord(mId, false, false, true, false, false, true, true, true, + groupKey, groupAlertBehavior, false); + } + + private NotificationRecord getLightsNotificationRecord(String groupKey, + int groupAlertBehavior) { + return getNotificationRecord(mId, false, false, false, false, true /*lights*/, true, + true, true, groupKey, groupAlertBehavior, false); + } + + private NotificationRecord getNotificationRecord(int id, + boolean insistent, boolean once, + boolean noisy, boolean buzzy, boolean lights, boolean defaultVibration, + boolean defaultSound, boolean defaultLights, String groupKey, int groupAlertBehavior, + boolean isLeanback) { + + final Builder builder = new Builder(getContext()) + .setContentTitle("foo") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setPriority(Notification.PRIORITY_HIGH) + .setOnlyAlertOnce(once); + + int defaults = 0; + if (noisy) { + if (defaultSound) { + defaults |= Notification.DEFAULT_SOUND; + mChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, + Notification.AUDIO_ATTRIBUTES_DEFAULT); + } else { + builder.setSound(CUSTOM_SOUND); + mChannel.setSound(CUSTOM_SOUND, CUSTOM_ATTRIBUTES); + } + } else { + mChannel.setSound(null, null); + } + if (buzzy) { + if (defaultVibration) { + defaults |= Notification.DEFAULT_VIBRATE; + } else { + builder.setVibrate(CUSTOM_VIBRATION); + mChannel.setVibrationPattern(CUSTOM_VIBRATION); + } + mChannel.enableVibration(true); + } else { + mChannel.setVibrationPattern(null); + mChannel.enableVibration(false); + } + + if (lights) { + if (defaultLights) { + defaults |= Notification.DEFAULT_LIGHTS; + } else { + builder.setLights(CUSTOM_LIGHT_COLOR, CUSTOM_LIGHT_ON, CUSTOM_LIGHT_OFF); + } + mChannel.enableLights(true); + } else { + mChannel.enableLights(false); + } + builder.setDefaults(defaults); + + builder.setGroup(groupKey); + builder.setGroupAlertBehavior(groupAlertBehavior); + + Notification n = builder.build(); + if (insistent) { + n.flags |= Notification.FLAG_INSISTENT; + } + + Context context = spy(getContext()); + PackageManager packageManager = spy(context.getPackageManager()); + when(context.getPackageManager()).thenReturn(packageManager); + when(packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)) + .thenReturn(isLeanback); + + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, id, mTag, mUid, + mPid, n, mUser, null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(context, sbn, mChannel); + mService.addNotification(r); + return r; + } + + // + // Convenience functions for interacting with mocks + // + + private void verifyNeverBeep() throws RemoteException { + verify(mRingtonePlayer, never()).playAsync(any(), any(), anyBoolean(), any()); + } + + private void verifyBeepUnlooped() throws RemoteException { + verify(mRingtonePlayer, times(1)).playAsync(any(), any(), eq(false), any()); + } + + private void verifyBeepLooped() throws RemoteException { + verify(mRingtonePlayer, times(1)).playAsync(any(), any(), eq(true), any()); + } + + private void verifyBeep(int times) throws RemoteException { + verify(mRingtonePlayer, times(times)).playAsync(any(), any(), anyBoolean(), any()); + } + + private void verifyNeverStopAudio() throws RemoteException { + verify(mRingtonePlayer, never()).stopAsync(); + } + + private void verifyStopAudio() throws RemoteException { + verify(mRingtonePlayer, times(1)).stopAsync(); + } + + private void verifyNeverVibrate() { + verify(mVibrator, never()).vibrate(anyInt(), anyString(), any(), anyString(), + any(VibrationAttributes.class)); + } + + private void verifyVibrate() { + verifyVibrate(/* times= */ 1); + } + + private void verifyVibrate(int times) { + verifyVibrate(mVibrateOnceMatcher, times(times)); + } + + private void verifyVibrateLooped() { + verifyVibrate(mVibrateLoopMatcher, times(1)); + } + + private void verifyDelayedVibrateLooped() { + verifyVibrate(mVibrateLoopMatcher, timeout(MAX_VIBRATION_DELAY).times(1)); + } + + private void verifyDelayedVibrate(VibrationEffect effect) { + verifyVibrate(argument -> Objects.equals(effect, argument), + timeout(MAX_VIBRATION_DELAY).times(1)); + } + + private void verifyDelayedNeverVibrate() { + verify(mVibrator, after(MAX_VIBRATION_DELAY).never()).vibrate(anyInt(), anyString(), any(), + anyString(), any(VibrationAttributes.class)); + } + + private void verifyVibrate(ArgumentMatcher<VibrationEffect> effectMatcher, + VerificationMode verification) { + ArgumentCaptor<VibrationAttributes> captor = + ArgumentCaptor.forClass(VibrationAttributes.class); + verify(mVibrator, verification).vibrate(eq(Process.SYSTEM_UID), + eq(PackageManagerService.PLATFORM_PACKAGE_NAME), argThat(effectMatcher), + anyString(), captor.capture()); + assertEquals(0, (captor.getValue().getFlags() + & VibrationAttributes.FLAG_BYPASS_INTERRUPTION_POLICY)); + } + + private void verifyStopVibrate() { + int alarmClassUsageFilter = + VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK; + verify(mVibrator, times(1)).cancel(eq(alarmClassUsageFilter)); + } + + private void verifyNeverStopVibrate() { + verify(mVibrator, never()).cancel(); + verify(mVibrator, never()).cancel(anyInt()); + } + + private void verifyNeverLights() { + verify(mLight, never()).setFlashing(anyInt(), anyInt(), anyInt(), anyInt()); + } + + private void verifyLights() { + verify(mLight, times(1)).setFlashing(anyInt(), anyInt(), anyInt(), anyInt()); + } + + // + // Tests + // + + @Test + public void testLights() throws Exception { + NotificationRecord r = getLightsNotification(); + r.setSystemImportance(NotificationManager.IMPORTANCE_DEFAULT); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyLights(); + assertTrue(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testBeep() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + verifyNeverVibrate(); + verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt()); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLockedPrivateA11yRedaction() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setPackageVisibilityOverride(NotificationManager.VISIBILITY_NO_OVERRIDE); + r.getNotification().visibility = Notification.VISIBILITY_PRIVATE; + when(mKeyguardManager.isDeviceLocked(anyInt())).thenReturn(true); + AccessibilityManager accessibilityManager = Mockito.mock(AccessibilityManager.class); + when(accessibilityManager.isEnabled()).thenReturn(true); + mAttentionHelper.setAccessibilityManager(accessibilityManager); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + ArgumentCaptor<AccessibilityEvent> eventCaptor = + ArgumentCaptor.forClass(AccessibilityEvent.class); + + verify(accessibilityManager, times(1)) + .sendAccessibilityEvent(eventCaptor.capture()); + + AccessibilityEvent event = eventCaptor.getValue(); + assertEquals(r.getNotification().publicVersion, event.getParcelableData()); + } + + @Test + public void testLockedOverridePrivateA11yRedaction() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setPackageVisibilityOverride(Notification.VISIBILITY_PRIVATE); + r.getNotification().visibility = Notification.VISIBILITY_PUBLIC; + when(mKeyguardManager.isDeviceLocked(anyInt())).thenReturn(true); + AccessibilityManager accessibilityManager = Mockito.mock(AccessibilityManager.class); + when(accessibilityManager.isEnabled()).thenReturn(true); + mAttentionHelper.setAccessibilityManager(accessibilityManager); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + ArgumentCaptor<AccessibilityEvent> eventCaptor = + ArgumentCaptor.forClass(AccessibilityEvent.class); + + verify(accessibilityManager, times(1)) + .sendAccessibilityEvent(eventCaptor.capture()); + + AccessibilityEvent event = eventCaptor.getValue(); + assertEquals(r.getNotification().publicVersion, event.getParcelableData()); + } + + @Test + public void testLockedPublicA11yNoRedaction() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setPackageVisibilityOverride(NotificationManager.VISIBILITY_NO_OVERRIDE); + r.getNotification().visibility = Notification.VISIBILITY_PUBLIC; + when(mKeyguardManager.isDeviceLocked(anyInt())).thenReturn(true); + AccessibilityManager accessibilityManager = Mockito.mock(AccessibilityManager.class); + when(accessibilityManager.isEnabled()).thenReturn(true); + mAttentionHelper.setAccessibilityManager(accessibilityManager); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + ArgumentCaptor<AccessibilityEvent> eventCaptor = + ArgumentCaptor.forClass(AccessibilityEvent.class); + + verify(accessibilityManager, times(1)) + .sendAccessibilityEvent(eventCaptor.capture()); + + AccessibilityEvent event = eventCaptor.getValue(); + assertEquals(r.getNotification(), event.getParcelableData()); + } + + @Test + public void testUnlockedPrivateA11yNoRedaction() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setPackageVisibilityOverride(NotificationManager.VISIBILITY_NO_OVERRIDE); + r.getNotification().visibility = Notification.VISIBILITY_PRIVATE; + when(mKeyguardManager.isDeviceLocked(anyInt())).thenReturn(false); + AccessibilityManager accessibilityManager = Mockito.mock(AccessibilityManager.class); + when(accessibilityManager.isEnabled()).thenReturn(true); + mAttentionHelper.setAccessibilityManager(accessibilityManager); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + ArgumentCaptor<AccessibilityEvent> eventCaptor = + ArgumentCaptor.forClass(AccessibilityEvent.class); + + verify(accessibilityManager, times(1)) + .sendAccessibilityEvent(eventCaptor.capture()); + + AccessibilityEvent event = eventCaptor.getValue(); + assertEquals(r.getNotification(), event.getParcelableData()); + } + + @Test + public void testBeepInsistently() throws Exception { + NotificationRecord r = getInsistentBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyBeepLooped(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoLeanbackBeep() throws Exception { + NotificationRecord r = getInsistentBeepyLeanbackNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoBeepForAutomotiveIfEffectsDisabled() throws Exception { + mAttentionHelper.setIsAutomotive(true); + mAttentionHelper.setNotificationEffectsEnabledForAutomotive(false); + + NotificationRecord r = getBeepyNotification(); + r.setSystemImportance(NotificationManager.IMPORTANCE_HIGH); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + } + + @Test + public void testNoBeepForImportanceDefaultInAutomotiveIfEffectsEnabled() throws Exception { + mAttentionHelper.setIsAutomotive(true); + mAttentionHelper.setNotificationEffectsEnabledForAutomotive(true); + + NotificationRecord r = getBeepyNotification(); + r.setSystemImportance(NotificationManager.IMPORTANCE_DEFAULT); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + } + + @Test + public void testBeepForImportanceHighInAutomotiveIfEffectsEnabled() throws Exception { + mAttentionHelper.setIsAutomotive(true); + mAttentionHelper.setNotificationEffectsEnabledForAutomotive(true); + + NotificationRecord r = getBeepyNotification(); + r.setSystemImportance(NotificationManager.IMPORTANCE_HIGH); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + assertTrue(r.isInterruptive()); + } + + @Test + public void testNoInterruptionForMin() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setSystemImportance(NotificationManager.IMPORTANCE_MIN); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + verifyNeverVibrate(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoInterruptionForIntercepted() throws Exception { + NotificationRecord r = getBeepyNotification(); + r.setIntercepted(true); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + verifyNeverVibrate(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testBeepTwice() throws Exception { + NotificationRecord r = getBeepyNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mRingtonePlayer); + + // update should beep + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyBeepUnlooped(); + verify(mAccessibilityService, times(2)).sendAccessibilityEvent(any(), anyInt()); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testHonorAlertOnlyOnceForBeep() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getBeepyOnceNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mRingtonePlayer); + + // update should not beep + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyNeverBeep(); + verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt()); + } + + @Test + public void testNoisyUpdateDoesNotCancelAudio() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverStopAudio(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoisyOnceUpdateDoesNotCancelAudio() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getBeepyOnceNotification(); + s.isUpdate = true; + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + + verifyNeverStopAudio(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + /** + * Tests the case where the user re-posts a {@link Notification} with looping sound where + * {@link Notification.Builder#setOnlyAlertOnce(true)} has been called. This should silence + * the sound associated with the notification. + * @throws Exception + */ + @Test + public void testNoisyOnceUpdateDoesCancelAudio() throws Exception { + NotificationRecord r = getInsistentBeepyNotification(); + NotificationRecord s = getInsistentBeepyOnceNotification(); + s.isUpdate = true; + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + + verifyStopAudio(); + } + + @Test + public void testQuietUpdateDoesNotCancelAudioFromOther() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getQuietNotification(); + s.isUpdate = true; + NotificationRecord other = getNoisyOtherNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + mAttentionHelper.buzzBeepBlinkLocked(other, DEFAULT_SIGNALS); // this takes the audio stream + Mockito.reset(mRingtonePlayer); + + // should not stop noise, since we no longer own it + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); // this no longer owns the stream + verifyNeverStopAudio(); + assertTrue(other.isInterruptive()); + assertNotEquals(-1, other.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietInterloperDoesNotCancelAudio() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord other = getQuietOtherNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mRingtonePlayer); + + // should not stop noise, since it does not own it + mAttentionHelper.buzzBeepBlinkLocked(other, DEFAULT_SIGNALS); + verifyNeverStopAudio(); + } + + @Test + public void testQuietUpdateCancelsAudio() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getQuietNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + Mockito.reset(mRingtonePlayer); + + // quiet update should stop making noise + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyStopAudio(); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietOnceUpdateCancelsAudio() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getQuietOnceNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + Mockito.reset(mRingtonePlayer); + + // stop making noise - this is a weird corner case, but quiet should override once + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyStopAudio(); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testInCallNotification() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper = spy(mAttentionHelper); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mRingtonePlayer); + + mAttentionHelper.setInCallStateOffHook(true); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verify(mAttentionHelper, times(1)).playInCallNotification(); + verifyNeverBeep(); // doesn't play normal beep + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoDemoteSoundToVibrateIfVibrateGiven() throws Exception { + NotificationRecord r = getBuzzyBeepyNotification(); + assertTrue(r.getSound() != null); + + // the phone is quiet + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyDelayedVibrate(r.getVibration()); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoDemoteSoundToVibrateIfNonNotificationStream() throws Exception { + NotificationRecord r = getBeepyNotification(); + assertTrue(r.getSound() != null); + assertNull(r.getVibration()); + + // the phone is quiet + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(1); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverVibrate(); + verifyBeepUnlooped(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testDemoteSoundToVibrate() throws Exception { + NotificationRecord r = getBeepyNotification(); + assertTrue(r.getSound() != null); + assertNull(r.getVibration()); + + // the phone is quiet + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyDelayedVibrate( + mAttentionHelper.getVibratorHelper().createFallbackVibration( + /* insistent= */ false)); + verify(mRingtonePlayer, never()).playAsync(anyObject(), anyObject(), anyBoolean(), + anyObject()); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testDemoteInsistentSoundToVibrate() throws Exception { + NotificationRecord r = getInsistentBeepyNotification(); + assertTrue(r.getSound() != null); + assertNull(r.getVibration()); + + // the phone is quiet + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0); + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyDelayedVibrateLooped(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testVibrate() throws Exception { + NotificationRecord r = getBuzzyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + verifyVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testInsistentVibrate() { + NotificationRecord r = getInsistentBuzzyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyVibrateLooped(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testVibrateTwice() { + NotificationRecord r = getBuzzyNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mVibrator); + + // update should vibrate + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testPostSilently() throws Exception { + NotificationRecord r = getBuzzyNotification(); + r.setPostSilently(true); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummarySilenceChild() throws Exception { + NotificationRecord child = getBeepyNotificationRecord("a", GROUP_ALERT_SUMMARY); + + mAttentionHelper.buzzBeepBlinkLocked(child, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(child.isInterruptive()); + assertEquals(-1, child.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummaryNoSilenceSummary() throws Exception { + NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_SUMMARY); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + // summaries are never interruptive for notification counts + assertFalse(summary.isInterruptive()); + assertNotEquals(-1, summary.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummaryNoSilenceNonGroupChild() throws Exception { + NotificationRecord nonGroup = getBeepyNotificationRecord(null, GROUP_ALERT_SUMMARY); + + mAttentionHelper.buzzBeepBlinkLocked(nonGroup, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + assertTrue(nonGroup.isInterruptive()); + assertNotEquals(-1, nonGroup.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildSilenceSummary() throws Exception { + NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_CHILDREN); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + + verifyNeverBeep(); + assertFalse(summary.isInterruptive()); + assertEquals(-1, summary.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildNoSilenceChild() throws Exception { + NotificationRecord child = getBeepyNotificationRecord("a", GROUP_ALERT_CHILDREN); + + mAttentionHelper.buzzBeepBlinkLocked(child, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + assertTrue(child.isInterruptive()); + assertNotEquals(-1, child.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildNoSilenceNonGroupSummary() throws Exception { + NotificationRecord nonGroup = getBeepyNotificationRecord(null, GROUP_ALERT_CHILDREN); + + mAttentionHelper.buzzBeepBlinkLocked(nonGroup, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + assertTrue(nonGroup.isInterruptive()); + assertNotEquals(-1, nonGroup.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertAllNoSilenceGroup() throws Exception { + NotificationRecord group = getBeepyNotificationRecord("a", GROUP_ALERT_ALL); + + mAttentionHelper.buzzBeepBlinkLocked(group, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + assertTrue(group.isInterruptive()); + assertNotEquals(-1, group.getLastAudiblyAlertedMs()); + } + + @Test + public void testHonorAlertOnlyOnceForBuzz() throws Exception { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord s = getBuzzyOnceNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mVibrator); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + + // update should not beep + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyNeverVibrate(); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoisyUpdateDoesNotCancelVibrate() throws Exception { + NotificationRecord r = getBuzzyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testNoisyOnceUpdateDoesNotCancelVibrate() throws Exception { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord s = getBuzzyOnceNotification(); + s.isUpdate = true; + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + + verifyNeverStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietUpdateDoesNotCancelVibrateFromOther() throws Exception { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord s = getQuietNotification(); + s.isUpdate = true; + NotificationRecord other = getNoisyOtherNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + // this takes the vibrate stream + mAttentionHelper.buzzBeepBlinkLocked(other, DEFAULT_SIGNALS); + Mockito.reset(mVibrator); + + // should not stop vibrate, since we no longer own it + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); // this no longer owns the stream + verifyNeverStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertTrue(other.isInterruptive()); + assertNotEquals(-1, other.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietInterloperDoesNotCancelVibrate() throws Exception { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord other = getQuietOtherNotification(); + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + Mockito.reset(mVibrator); + + // should not stop noise, since it does not own it + mAttentionHelper.buzzBeepBlinkLocked(other, DEFAULT_SIGNALS); + verifyNeverStopVibrate(); + assertFalse(other.isInterruptive()); + assertEquals(-1, other.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietUpdateCancelsVibrate() { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord s = getQuietNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyVibrate(); + + // quiet update should stop making noise + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietOnceUpdateCancelVibrate() throws Exception { + NotificationRecord r = getBuzzyNotification(); + NotificationRecord s = getQuietOnceNotification(); + s.isUpdate = true; + + // set up internal state + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyVibrate(); + + // stop making noise - this is a weird corner case, but quiet should override once + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testQuietUpdateCancelsDemotedVibrate() throws Exception { + NotificationRecord r = getBeepyNotification(); + NotificationRecord s = getQuietNotification(); + + // the phone is quiet + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0); + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyDelayedVibrate(mAttentionHelper.getVibratorHelper().createFallbackVibration(false)); + + // quiet update should stop making noise + mAttentionHelper.buzzBeepBlinkLocked(s, DEFAULT_SIGNALS); + verifyStopVibrate(); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + assertFalse(s.isInterruptive()); + assertEquals(-1, s.getLastAudiblyAlertedMs()); + } + + @Test + public void testEmptyUriSoundTreatedAsNoSound() throws Exception { + NotificationChannel channel = new NotificationChannel("test", "test", IMPORTANCE_HIGH); + channel.setSound(Uri.EMPTY, null); + final Notification n = new Builder(getContext(), "test") + .setSmallIcon(android.R.drawable.sym_def_app_icon).build(); + + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, 0, mTag, mUid, + mPid, n, mUser, null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, channel); + mService.addNotification(r); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testRepeatedSoundOverLimitMuted() throws Exception { + when(mUsageStats.isAlertRateLimited(any())).thenReturn(true); + + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testPostingSilentNotificationDoesNotAffectRateLimiting() throws Exception { + NotificationRecord r = getQuietNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verify(mUsageStats, never()).isAlertRateLimited(any()); + } + + @Test + public void testPostingGroupSuppressedDoesNotAffectRateLimiting() throws Exception { + NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_CHILDREN); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + verify(mUsageStats, never()).isAlertRateLimited(any()); + } + + @Test + public void testGroupSuppressionFailureDoesNotAffectRateLimiting() { + NotificationRecord summary = getBeepyNotificationRecord("a", GROUP_ALERT_SUMMARY); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + verify(mUsageStats, times(1)).isAlertRateLimited(any()); + } + + @Test + public void testCrossUserSoundMuted() throws Exception { + final Notification n = new Builder(getContext(), "test") + .setSmallIcon(android.R.drawable.sym_def_app_icon).build(); + + int userId = mUser.getIdentifier() + 1; + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, 0, mTag, mUid, + mPid, n, UserHandle.of(userId), null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, + new NotificationChannel("test", "test", IMPORTANCE_HIGH)); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverBeep(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testA11yMinInitialPost() throws Exception { + NotificationRecord r = getQuietNotification(); + r.setSystemImportance(IMPORTANCE_MIN); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verify(mAccessibilityService, never()).sendAccessibilityEvent(any(), anyInt()); + } + + @Test + public void testA11yQuietInitialPost() throws Exception { + NotificationRecord r = getQuietNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt()); + } + + @Test + public void testA11yQuietUpdate() throws Exception { + NotificationRecord r = getQuietNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt()); + } + + @Test + public void testA11yCrossUserEventNotSent() throws Exception { + final Notification n = new Builder(getContext(), "test") + .setSmallIcon(android.R.drawable.sym_def_app_icon).build(); + int userId = mUser.getIdentifier() + 1; + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, 0, mTag, mUid, + mPid, n, UserHandle.of(userId), null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, + new NotificationChannel("test", "test", IMPORTANCE_HIGH)); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verify(mAccessibilityService, never()).sendAccessibilityEvent(any(), anyInt()); + } + + @Test + public void testLightsScreenOn() { + mAttentionHelper.setScreenOn(true); + NotificationRecord r = getLightsNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertTrue(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsInCall() { + mAttentionHelper.setInCallStateOffHook(true); + NotificationRecord r = getLightsNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsSilentUpdate() { + NotificationRecord r = getLightsOnceNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyLights(); + assertTrue(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + + r = getLightsOnceNotification(); + r.isUpdate = true; + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + // checks that lights happened once, i.e. this new call didn't trigger them again + verifyLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsUnimportant() { + NotificationRecord r = getLightsNotification(); + r.setSystemImportance(IMPORTANCE_LOW); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsNoLights() { + NotificationRecord r = getQuietNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsNoLightOnDevice() { + mAttentionHelper.mHasLight = false; + NotificationRecord r = getLightsNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsLightsOffGlobally() { + mAttentionHelper.mNotificationPulseEnabled = false; + NotificationRecord r = getLightsNotification(); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsDndIntercepted() { + NotificationRecord r = getLightsNotification(); + r.setSuppressedVisualEffects(SUPPRESSED_EFFECT_LIGHTS); + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummaryNoLightsChild() { + NotificationRecord child = getLightsNotificationRecord("a", GROUP_ALERT_SUMMARY); + + mAttentionHelper.buzzBeepBlinkLocked(child, DEFAULT_SIGNALS); + + verifyNeverLights(); + assertFalse(child.isInterruptive()); + assertEquals(-1, child.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummaryLightsSummary() { + NotificationRecord summary = getLightsNotificationRecord("a", GROUP_ALERT_SUMMARY); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + + verifyLights(); + // summaries should never count for interruptiveness counts + assertFalse(summary.isInterruptive()); + assertEquals(-1, summary.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertSummaryLightsNonGroupChild() { + NotificationRecord nonGroup = getLightsNotificationRecord(null, GROUP_ALERT_SUMMARY); + + mAttentionHelper.buzzBeepBlinkLocked(nonGroup, DEFAULT_SIGNALS); + + verifyLights(); + assertTrue(nonGroup.isInterruptive()); + assertEquals(-1, nonGroup.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildNoLightsSummary() { + NotificationRecord summary = getLightsNotificationRecord("a", GROUP_ALERT_CHILDREN); + summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY; + + mAttentionHelper.buzzBeepBlinkLocked(summary, DEFAULT_SIGNALS); + + verifyNeverLights(); + assertFalse(summary.isInterruptive()); + assertEquals(-1, summary.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildLightsChild() { + NotificationRecord child = getLightsNotificationRecord("a", GROUP_ALERT_CHILDREN); + + mAttentionHelper.buzzBeepBlinkLocked(child, DEFAULT_SIGNALS); + + verifyLights(); + assertTrue(child.isInterruptive()); + assertEquals(-1, child.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertChildLightsNonGroupSummary() { + NotificationRecord nonGroup = getLightsNotificationRecord(null, GROUP_ALERT_CHILDREN); + + mAttentionHelper.buzzBeepBlinkLocked(nonGroup, DEFAULT_SIGNALS); + + verifyLights(); + assertTrue(nonGroup.isInterruptive()); + assertEquals(-1, nonGroup.getLastAudiblyAlertedMs()); + } + + @Test + public void testGroupAlertAllLightsGroup() { + NotificationRecord group = getLightsNotificationRecord("a", GROUP_ALERT_ALL); + + mAttentionHelper.buzzBeepBlinkLocked(group, DEFAULT_SIGNALS); + + verifyLights(); + assertTrue(group.isInterruptive()); + assertEquals(-1, group.getLastAudiblyAlertedMs()); + } + + @Test + public void testLightsCheckCurrentUser() { + final Notification n = new Builder(getContext(), "test") + .setSmallIcon(android.R.drawable.sym_def_app_icon).build(); + int userId = mUser.getIdentifier() + 10; + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, 0, mTag, mUid, + mPid, n, UserHandle.of(userId), null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, + new NotificationChannel("test", "test", IMPORTANCE_HIGH)); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + verifyNeverLights(); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testListenerHintCall() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord r = getCallRecord(1, ringtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(r, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS)); + + verifyNeverBeep(); + } + + @Test + public void testListenerHintCall_notificationSound() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS)); + + verifyBeepUnlooped(); + } + + @Test + public void testListenerHintNotification() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS)); + + verifyNeverBeep(); + } + + @Test + public void testListenerHintBoth() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord r = getCallRecord(1, ringtoneChannel, true); + NotificationRecord s = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS + | NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS)); + mAttentionHelper.buzzBeepBlinkLocked(s, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS + | NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS)); + + verifyNeverBeep(); + } + + @Test + public void testListenerHintNotification_callSound() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord r = getCallRecord(1, ringtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(r, new NotificationAttentionHelper.Signals(false, + NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS)); + + verifyBeepLooped(); + } + + @Test + public void testCannotInterruptRingtoneInsistentBeep() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + mService.addNotification(ringtoneNotification); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + + NotificationRecord interrupter = getBeepyOtherNotification(); + assertTrue(mAttentionHelper.shouldMuteNotificationLocked(interrupter, DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyBeep(1); + + assertFalse(interrupter.isInterruptive()); + assertEquals(-1, interrupter.getLastAudiblyAlertedMs()); + } + + @Test + public void testRingtoneInsistentBeep_canUpdate() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Uri.fromParts("a", "b", "c"), + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + mService.addNotification(ringtoneNotification); + assertFalse(mAttentionHelper.shouldMuteNotificationLocked(ringtoneNotification, + DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + verifyDelayedVibrateLooped(); + Mockito.reset(mVibrator); + Mockito.reset(mRingtonePlayer); + + assertFalse(mAttentionHelper.shouldMuteNotificationLocked(ringtoneNotification, + DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + + // beep wasn't reset + verifyNeverBeep(); + verifyNeverVibrate(); + verifyNeverStopAudio(); + verifyNeverStopVibrate(); + } + + @Test + public void testRingtoneInsistentBeep_clearEffectsStopsSoundAndVibration() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Uri.fromParts("a", "b", "c"), + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + mService.addNotification(ringtoneNotification); + assertFalse(mAttentionHelper.shouldMuteNotificationLocked(ringtoneNotification, + DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + verifyDelayedVibrateLooped(); + + mAttentionHelper.clearSoundLocked(); + mAttentionHelper.clearVibrateLocked(); + + verifyStopAudio(); + verifyStopVibrate(); + } + + @Test + public void testRingtoneInsistentBeep_neverVibratesWhenEffectsClearedBeforeDelay() + throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Uri.fromParts("a", "b", "c"), + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + mService.addNotification(ringtoneNotification); + assertFalse(mAttentionHelper.shouldMuteNotificationLocked(ringtoneNotification, + DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + verifyNeverVibrate(); + + mAttentionHelper.clearSoundLocked(); + mAttentionHelper.clearVibrateLocked(); + + verifyStopAudio(); + verifyDelayedNeverVibrate(); + } + + @Test + public void testCannotInterruptRingtoneInsistentBuzz() { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Uri.EMPTY, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + assertFalse(mAttentionHelper.shouldMuteNotificationLocked(ringtoneNotification, + DEFAULT_SIGNALS)); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyVibrateLooped(); + + NotificationRecord interrupter = getBuzzyOtherNotification(); + assertTrue(mAttentionHelper.shouldMuteNotificationLocked(interrupter, DEFAULT_SIGNALS)); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyVibrate(1); + + assertFalse(interrupter.isInterruptive()); + assertEquals(-1, interrupter.getLastAudiblyAlertedMs()); + } + + @Test + public void testCanInterruptRingtoneNonInsistentBeep() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, false); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepUnlooped(); + + NotificationRecord interrupter = getBeepyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyBeep(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testCanInterruptRingtoneNonInsistentBuzz() { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(null, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, false); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyVibrate(); + + NotificationRecord interrupter = getBuzzyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyVibrate(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testRingtoneInsistentBeep_doesNotBlockFutureSoundsOnceStopped() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Settings.System.DEFAULT_RINGTONE_URI, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + + mAttentionHelper.clearSoundLocked(); + + NotificationRecord interrupter = getBeepyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyBeep(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testRingtoneInsistentBuzz_doesNotBlockFutureSoundsOnceStopped() { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(null, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyVibrateLooped(); + + mAttentionHelper.clearVibrateLocked(); + + NotificationRecord interrupter = getBuzzyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyVibrate(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testCanInterruptNonRingtoneInsistentBeep() throws Exception { + NotificationChannel fakeRingtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + NotificationRecord ringtoneNotification = getCallRecord(1, fakeRingtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + verifyBeepLooped(); + + NotificationRecord interrupter = getBeepyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyBeep(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testCanInterruptNonRingtoneInsistentBuzz() { + NotificationChannel fakeRingtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + fakeRingtoneChannel.enableVibration(true); + fakeRingtoneChannel.setSound(null, + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION).build()); + NotificationRecord ringtoneNotification = getCallRecord(1, fakeRingtoneChannel, true); + + mAttentionHelper.buzzBeepBlinkLocked(ringtoneNotification, DEFAULT_SIGNALS); + + NotificationRecord interrupter = getBuzzyOtherNotification(); + mAttentionHelper.buzzBeepBlinkLocked(interrupter, DEFAULT_SIGNALS); + + verifyVibrate(2); + + assertTrue(interrupter.isInterruptive()); + } + + @Test + public void testBubbleSuppressedNotificationDoesntMakeSound() { + Notification.BubbleMetadata metadata = new Notification.BubbleMetadata.Builder( + mock(PendingIntent.class), mock(Icon.class)) + .build(); + + NotificationRecord record = getBuzzyNotification(); + metadata.setFlags(Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION); + record.getNotification().setBubbleMetadata(metadata); + record.setAllowBubble(true); + record.getNotification().flags |= FLAG_BUBBLE; + record.isUpdate = true; + record.setInterruptive(false); + + mAttentionHelper.buzzBeepBlinkLocked(record, DEFAULT_SIGNALS); + verifyNeverVibrate(); + } + + @Test + public void testOverflowBubbleSuppressedNotificationDoesntMakeSound() { + Notification.BubbleMetadata metadata = new Notification.BubbleMetadata.Builder( + mock(PendingIntent.class), mock(Icon.class)) + .build(); + + NotificationRecord record = getBuzzyNotification(); + metadata.setFlags(Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION); + record.getNotification().setBubbleMetadata(metadata); + record.setFlagBubbleRemoved(true); + record.setAllowBubble(true); + record.isUpdate = true; + record.setInterruptive(false); + + mAttentionHelper.buzzBeepBlinkLocked(record, DEFAULT_SIGNALS); + verifyNeverVibrate(); + } + + @Test + public void testBubbleUpdateMakesSound() { + Notification.BubbleMetadata metadata = new Notification.BubbleMetadata.Builder( + mock(PendingIntent.class), mock(Icon.class)) + .build(); + + NotificationRecord record = getBuzzyNotification(); + record.getNotification().setBubbleMetadata(metadata); + record.setAllowBubble(true); + record.getNotification().flags |= FLAG_BUBBLE; + record.isUpdate = true; + record.setInterruptive(true); + + mAttentionHelper.buzzBeepBlinkLocked(record, DEFAULT_SIGNALS); + verifyVibrate(1); + } + + @Test + public void testNewBubbleSuppressedNotifMakesSound() { + Notification.BubbleMetadata metadata = new Notification.BubbleMetadata.Builder( + mock(PendingIntent.class), mock(Icon.class)) + .build(); + + NotificationRecord record = getBuzzyNotification(); + metadata.setFlags(Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION); + record.getNotification().setBubbleMetadata(metadata); + record.setAllowBubble(true); + record.getNotification().flags |= FLAG_BUBBLE; + record.isUpdate = false; + record.setInterruptive(true); + + mAttentionHelper.buzzBeepBlinkLocked(record, DEFAULT_SIGNALS); + verifyVibrate(1); + } + + @Test + public void testStartFlashNotificationEvent_receiveBeepyNotification() throws Exception { + NotificationRecord r = getBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + verifyNeverVibrate(); + verify(mAccessibilityService).startFlashNotificationEvent(any(), anyInt(), + eq(r.getSbn().getPackageName())); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testStartFlashNotificationEvent_receiveBuzzyNotification() throws Exception { + NotificationRecord r = getBuzzyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + verifyVibrate(); + verify(mAccessibilityService).startFlashNotificationEvent(any(), anyInt(), + eq(r.getSbn().getPackageName())); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testStartFlashNotificationEvent_receiveBuzzyBeepyNotification() throws Exception { + NotificationRecord r = getBuzzyBeepyNotification(); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyBeepUnlooped(); + verifyDelayedVibrate(r.getVibration()); + verify(mAccessibilityService).startFlashNotificationEvent(any(), anyInt(), + eq(r.getSbn().getPackageName())); + assertTrue(r.isInterruptive()); + assertNotEquals(-1, r.getLastAudiblyAlertedMs()); + } + + @Test + public void testStartFlashNotificationEvent_receiveBuzzyBeepyNotification_ringerModeSilent() + throws Exception { + NotificationRecord r = getBuzzyBeepyNotification(); + when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); + when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0); + + mAttentionHelper.buzzBeepBlinkLocked(r, DEFAULT_SIGNALS); + + verifyNeverBeep(); + verifyNeverVibrate(); + verify(mAccessibilityService).startFlashNotificationEvent(any(), anyInt(), + eq(r.getSbn().getPackageName())); + assertFalse(r.isInterruptive()); + assertEquals(-1, r.getLastAudiblyAlertedMs()); + } + + static class VibrateRepeatMatcher implements ArgumentMatcher<VibrationEffect> { + private final int mRepeatIndex; + + VibrateRepeatMatcher(int repeatIndex) { + mRepeatIndex = repeatIndex; + } + + @Override + public boolean matches(VibrationEffect actual) { + if (actual instanceof VibrationEffect.Composed + && ((VibrationEffect.Composed) actual).getRepeatIndex() == mRepeatIndex) { + return true; + } + // All non-waveform effects are essentially one shots. + return mRepeatIndex == -1; + } + + @Override + public String toString() { + return "repeatIndex=" + mRepeatIndex; + } + } +} diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 4576e9be07ad0ae54d491e945e69a9c37de0e2c0..9543a2de1e13411762e8872a8d727ff9692e93a4 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -84,6 +84,7 @@ import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; +import static com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags.ENABLE_ATTENTION_HELPER_REFACTOR; import static com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags.FSI_FORCE_DEMOTE; import static com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags.SHOW_STICKY_HUN_FOR_DENIED_FSI; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; @@ -272,6 +273,7 @@ import com.google.common.collect.ImmutableList; import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -279,6 +281,7 @@ import org.mockito.ArgumentMatcher; import org.mockito.ArgumentMatchers; import org.mockito.InOrder; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -372,6 +375,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { private DevicePolicyManagerInternal mDevicePolicyManager; @Mock private PowerManager mPowerManager; + @Mock + private LightsManager mLightsManager; private final ArrayList<WakeLock> mAcquiredWakeLocks = new ArrayList<>(); private final TestPostNotificationTrackerFactory mPostNotificationTrackerFactory = new TestPostNotificationTrackerFactory(); @@ -503,9 +508,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { setDpmAppOppsExemptFromDismissal(false); - mService = new TestableNotificationManagerService(mContext, mNotificationRecordLogger, - mNotificationInstanceIdSequence); - // Use this testable looper. mTestableLooper = TestableLooper.get(this); // MockPackageManager - default returns ApplicationInfo with matching calling UID @@ -527,8 +529,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Object[] args = invocation.getArguments(); return (int) args[1] == mUid; }); - final LightsManager mockLightsManager = mock(LightsManager.class); - when(mockLightsManager.getLight(anyInt())).thenReturn(mock(LogicalLight.class)); + when(mLightsManager.getLight(anyInt())).thenReturn(mock(LogicalLight.class)); when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL); when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(false); when(mUgmInternal.newUriPermissionOwner(anyString())).thenReturn(mPermOwner); @@ -601,6 +602,15 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { return wl; }); + // TODO (b/291907312): remove feature flag + mTestFlagResolver.setFlagOverride(ENABLE_ATTENTION_HELPER_REFACTOR, false); + initNMS(); + } + + private void initNMS() throws Exception { + mService = new TestableNotificationManagerService(mContext, mNotificationRecordLogger, + mNotificationInstanceIdSequence); + // apps allowed as convos mService.setStringArrayResourceValue(PKG_O); @@ -617,7 +627,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mWorkerHandler = spy(mService.new WorkerHandler(mTestableLooper.getLooper())); mService.init(mWorkerHandler, mRankingHandler, mPackageManager, mPackageManagerClient, - mockLightsManager, mListeners, mAssistants, mConditionProviders, mCompanionMgr, + mLightsManager, mListeners, mAssistants, mConditionProviders, mCompanionMgr, mSnoozeHelper, mUsageStats, mPolicyFile, mActivityManager, mGroupHelper, mAm, mAtm, mAppUsageStats, mDevicePolicyManager, mUgm, mUgmInternal, mAppOpsManager, mUm, mHistoryManager, mStatsManager, @@ -628,11 +638,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // Return first true for RoleObserver main-thread check when(mMainLooper.isCurrentThread()).thenReturn(true).thenReturn(false); mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY, mMainLooper); + Mockito.reset(mHistoryManager); verify(mHistoryManager, never()).onBootPhaseAppsCanStart(); mService.onBootPhase(SystemService.PHASE_THIRD_PARTY_APPS_CAN_START, mMainLooper); verify(mHistoryManager).onBootPhaseAppsCanStart(); - mService.setAudioManager(mAudioManager); + // TODO b/291907312: remove feature flag + if (mTestFlagResolver.isEnabled(ENABLE_ATTENTION_HELPER_REFACTOR)) { + mService.mAttentionHelper.setAudioManager(mAudioManager); + } else { + mService.setAudioManager(mAudioManager); + } mStrongAuthTracker = mService.new StrongAuthTrackerFake(mContext); mService.setStrongAuthTracker(mStrongAuthTracker); @@ -1652,6 +1668,23 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertThat(call.postDurationMillisLogged).isGreaterThan(0); } + @Test + public void testEnqueueNotificationWithTag_WritesExpectedLogs_NAHRefactor() throws Exception { + // TODO b/291907312: remove feature flag + mTestFlagResolver.setFlagOverride(ENABLE_ATTENTION_HELPER_REFACTOR, true); + // Cleanup NMS before re-initializing + if (mService != null) { + try { + mService.onDestroy(); + } catch (IllegalStateException | IllegalArgumentException e) { + // can throw if a broadcast receiver was never registered + } + } + initNMS(); + + testEnqueueNotificationWithTag_WritesExpectedLogs(); + } + @Test public void testEnqueueNotificationWithTag_LogsOnMajorUpdates() throws Exception { final String tag = "testEnqueueNotificationWithTag_LogsOnMajorUpdates"; @@ -9014,6 +9047,24 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { verify(mockPlayer).stopAsync(); } + @Test + public void testOnBubbleMetadataChangedToSuppressNotification_soundStopped_NAHRefactor() + throws Exception { + // TODO b/291907312: remove feature flag + mTestFlagResolver.setFlagOverride(ENABLE_ATTENTION_HELPER_REFACTOR, true); + // Cleanup NMS before re-initializing + if (mService != null) { + try { + mService.onDestroy(); + } catch (IllegalStateException | IllegalArgumentException e) { + // can throw if a broadcast receiver was never registered + } + } + initNMS(); + + testOnBubbleMetadataChangedToSuppressNotification_soundStopped(); + } + @Test public void testGrantInlineReplyUriPermission_recordExists() throws Exception { int userId = UserManager.isHeadlessSystemUserMode() diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java index 6d46d9ccf02e40019bbc56dedfc667f2d431e2c6..ef28ffa7da8fbf5312484b023dd9cb8b0f8e1e61 100644 --- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java @@ -77,6 +77,7 @@ import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.UserHandle; import android.os.Vibrator; +import android.os.VibratorInfo; import android.service.dreams.DreamManagerInternal; import android.telecom.TelecomManager; import android.util.FeatureFlagUtils; @@ -138,6 +139,7 @@ class TestPhoneWindowManager { @Mock private TelecomManager mTelecomManager; @Mock private NotificationManager mNotificationManager; @Mock private Vibrator mVibrator; + @Mock private VibratorInfo mVibratorInfo; @Mock private PowerManager mPowerManager; @Mock private WindowManagerPolicy.WindowManagerFuncs mWindowManagerFuncsImpl; @Mock private InputMethodManagerInternal mInputMethodManagerInternal; @@ -246,6 +248,7 @@ class TestPhoneWindowManager { doReturn(mTelecomManager).when(mPhoneWindowManager).getTelecommService(); doNothing().when(mNotificationManager).silenceNotificationSound(); doReturn(mNotificationManager).when(mPhoneWindowManager).getNotificationService(); + doReturn(mVibratorInfo).when(mVibrator).getInfo(); doReturn(mVibrator).when(mContext).getSystemService(eq(Context.VIBRATOR_SERVICE)); final PowerManager.WakeLock wakeLock = mock(PowerManager.WakeLock.class); @@ -447,7 +450,7 @@ class TestPhoneWindowManager { } void overrideSearchManager(SearchManager searchManager) { - mPhoneWindowManager.mSearchManager = searchManager; + doReturn(searchManager).when(mContext).getSystemService(eq(SearchManager.class)); } void assumeResolveActivityNotNull() { diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 8ec3ac6ca3fdb142b4de236c8fb44978ef9e2d84..0494dfdfb1ec91faf037ce75bd0eee13be867424 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -489,7 +489,7 @@ public class ActivityRecordTests extends WindowTestsBase { ensureActivityConfiguration(activity); verify(mAtm.getLifecycleManager(), never()) - .scheduleTransaction(any(), any(), isA(ActivityConfigurationChangeItem.class)); + .scheduleTransaction(any(), isA(ActivityConfigurationChangeItem.class)); } @Test @@ -519,7 +519,7 @@ public class ActivityRecordTests extends WindowTestsBase { final ActivityConfigurationChangeItem expected = ActivityConfigurationChangeItem.obtain(activity.token, newConfig); verify(mAtm.getLifecycleManager()).scheduleTransaction( - eq(activity.app.getThread()), eq(activity.token), eq(expected)); + eq(activity.app.getThread()), eq(expected)); } @Test @@ -599,7 +599,7 @@ public class ActivityRecordTests extends WindowTestsBase { final ActivityConfigurationChangeItem expected = ActivityConfigurationChangeItem.obtain(activity.token, newConfig); verify(mAtm.getLifecycleManager()).scheduleTransaction(eq(activity.app.getThread()), - eq(activity.token), eq(expected)); + eq(expected)); verify(displayRotation).onSetRequestedOrientation(); } @@ -817,7 +817,7 @@ public class ActivityRecordTests extends WindowTestsBase { final ActivityConfigurationChangeItem expected = ActivityConfigurationChangeItem.obtain(activity.token, newConfig); verify(mAtm.getLifecycleManager()).scheduleTransaction( - eq(activity.app.getThread()), eq(activity.token), eq(expected)); + eq(activity.app.getThread()), eq(expected)); } finally { stack.getDisplayArea().removeChild(stack); } @@ -1787,9 +1787,10 @@ public class ActivityRecordTests extends WindowTestsBase { final ActivityRecord activity = createActivityWithTask(); final WindowProcessController wpc = activity.app; setup.accept(activity); + clearInvocations(mAtm.getLifecycleManager()); activity.getTask().removeImmediately("test"); try { - verify(mAtm.getLifecycleManager()).scheduleTransaction(any(), eq(activity.token), + verify(mAtm.getLifecycleManager()).scheduleTransaction(any(), isA(DestroyActivityItem.class)); } catch (RemoteException ignored) { } diff --git a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java index 28dd458a786c274335b4ff2142ff23aec7340316..a18dbaf39575e0006969ca4d7d298db251f4605a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java @@ -23,7 +23,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import android.app.IApplicationThread; import android.app.servertransaction.ClientTransaction; -import android.os.Binder; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -40,8 +39,7 @@ public class ClientLifecycleManagerTests { @Test public void testScheduleAndRecycleBinderClientTransaction() throws Exception { - ClientTransaction item = spy(ClientTransaction.obtain(mock(IApplicationThread.class), - new Binder())); + ClientTransaction item = spy(ClientTransaction.obtain(mock(IApplicationThread.class))); ClientLifecycleManager clientLifecycleManager = new ClientLifecycleManager(); clientLifecycleManager.scheduleTransaction(item); @@ -51,8 +49,7 @@ public class ClientLifecycleManagerTests { @Test public void testScheduleNoRecycleNonBinderClientTransaction() throws Exception { - ClientTransaction item = spy(ClientTransaction.obtain(mock(IApplicationThread.Stub.class), - new Binder())); + ClientTransaction item = spy(ClientTransaction.obtain(mock(IApplicationThread.Stub.class))); ClientLifecycleManager clientLifecycleManager = new ClientLifecycleManager(); clientLifecycleManager.scheduleTransaction(item); diff --git a/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java b/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java index 3d3531e92abe9f04a79e6a21503a367a7cc04b7e..d2eb1cc0222b7556a9e53053632b01f952dc8ea9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java @@ -31,7 +31,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; -import static com.android.server.wm.ContentRecorder.KEY_RECORD_TASK_FEATURE; import static com.google.common.truth.Truth.assertThat; @@ -51,25 +50,21 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.IBinder; import android.platform.test.annotations.Presubmit; -import android.provider.DeviceConfig; import android.view.ContentRecordingSession; import android.view.DisplayInfo; import android.view.Gravity; import android.view.SurfaceControl; -import androidx.annotation.NonNull; import androidx.test.filters.SmallTest; import com.android.server.wm.ContentRecorder.MediaProjectionManagerWrapper; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import java.util.concurrent.CountDownLatch; /** * Tests for the {@link ContentRecorder} class. @@ -93,9 +88,6 @@ public class ContentRecorderTests extends WindowTestsBase { private ContentRecorder mContentRecorder; @Mock private MediaProjectionManagerWrapper mMediaProjectionManagerWrapper; private SurfaceControl mRecordedSurface; - // Handle feature flag. - private ConfigListener mConfigListener; - private CountDownLatch mLatch; @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -133,23 +125,11 @@ public class ContentRecorderTests extends WindowTestsBase { mWaitingDisplaySession.setVirtualDisplayId(displayId); mWaitingDisplaySession.setWaitingForConsent(true); - mConfigListener = new ConfigListener(); - DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_WINDOW_MANAGER, - mContext.getMainExecutor(), mConfigListener); - mLatch = new CountDownLatch(1); - DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_RECORD_TASK_FEATURE, - "true", true); - // Skip unnecessary operations of relayout. spyOn(mWm.mWindowPlacerLocked); doNothing().when(mWm.mWindowPlacerLocked).performSurfacePlacement(anyBoolean()); } - @After - public void teardown() { - DeviceConfig.removeOnPropertiesChangedListener(mConfigListener); - } - @Test public void testIsCurrentlyRecording() { assertThat(mContentRecorder.isCurrentlyRecording()).isFalse(); @@ -183,24 +163,6 @@ public class ContentRecorderTests extends WindowTestsBase { assertThat(mContentRecorder.isCurrentlyRecording()).isFalse(); } - @Test - public void testUpdateRecording_task_featureDisabled() { - mLatch = new CountDownLatch(1); - DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_RECORD_TASK_FEATURE, - "false", false); - mContentRecorder.setContentRecordingSession(mTaskSession); - mContentRecorder.updateRecording(); - assertThat(mContentRecorder.isCurrentlyRecording()).isFalse(); - } - - @Test - public void testUpdateRecording_task_featureEnabled() { - // Feature already enabled; don't need to again. - mContentRecorder.setContentRecordingSession(mTaskSession); - mContentRecorder.updateRecording(); - assertThat(mContentRecorder.isCurrentlyRecording()).isTrue(); - } - @Test public void testUpdateRecording_task_nullToken() { ContentRecordingSession session = mTaskSession; @@ -703,13 +665,4 @@ public class ContentRecorderTests extends WindowTestsBase { anyInt()); return mirroredSurface; } - - private class ConfigListener implements DeviceConfig.OnPropertiesChangedListener { - @Override - public void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) { - if (mLatch != null && properties.getKeyset().contains(KEY_RECORD_TASK_FEATURE)) { - mLatch.countDown(); - } - } - } } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java index 1b44c01bfab53c7ada9eedfaa403bca0799e1c1d..2af67452283b4aebde6535b80d487e64a855abb8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java @@ -571,8 +571,7 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase { verify(mActivity.mLetterboxUiController, times(refreshRequested ? 1 : 0)) .setIsRefreshAfterRotationRequested(true); - final ClientTransaction transaction = ClientTransaction.obtain( - mActivity.app.getThread(), mActivity.token); + final ClientTransaction transaction = ClientTransaction.obtain(mActivity.app.getThread()); transaction.addCallback(RefreshCallbackItem.obtain(mActivity.token, cycleThroughStop ? ON_STOP : ON_PAUSE)); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(mActivity.token, diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java index d85d9b5729a06a26e6328a448f1a9bab1dbcf8f9..2d5b72b3c680d5becc3721d7ccc0c39cc6888536 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java @@ -111,7 +111,7 @@ public class WindowContextListenerControllerTests extends WindowTestsBase { return null; } final WindowContextInfoChangeItem infoChangeItem = (WindowContextInfoChangeItem) item; - infoChangeItem.execute(mHandler, null, null); + infoChangeItem.execute(mHandler, null /* pendingActions */); return null; }).when(mWpc).scheduleClientTransactionItem(any()); } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index ebe40b05162dc693493f25a108d71558e055ba1d..b89182d728ecce04171a27b81fae7e72f218cfd1 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -330,7 +330,7 @@ public class WindowProcessControllerTests extends WindowTestsBase { ArgumentCaptor.forClass(ConfigurationChangeItem.class); verify(clientManager).scheduleTransaction(eq(thread), captor.capture()); final ClientTransactionHandler client = mock(ClientTransactionHandler.class); - captor.getValue().preExecute(client, null /* token */); + captor.getValue().preExecute(client); final ArgumentCaptor<Configuration> configCaptor = ArgumentCaptor.forClass(Configuration.class); verify(client).updatePendingConfiguration(configCaptor.capture()); diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 7db32a9f1ad930438e7ab0f1703d7289a1608a68..f93c7038812958b3101e2ac63d829ba8dec5f5a8 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -85,6 +85,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -452,7 +453,9 @@ public class UsageStatsService extends SystemService implements // Read pending reported events from disk and merge them with those stored in memory final LinkedList<Event> pendingEvents = new LinkedList<>(); + Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "loadPendingEvents"); loadPendingEventsLocked(userId, pendingEvents); + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); final LinkedList<Event> eventsInMem = mReportedEvents.get(userId); if (eventsInMem != null) { pendingEvents.addAll(eventsInMem); @@ -967,6 +970,12 @@ public class UsageStatsService extends SystemService implements mHandler.obtainMessage(MSG_REPORT_EVENT, userId, 0, event).sendToTarget(); return; } + + if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { + final String traceTag = "usageStatsQueueEvent(" + userId + ") #" + + UserUsageStatsService.eventToString(event.mEventType); + Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, traceTag); + } synchronized (mLock) { LinkedList<Event> events = mReportedEvents.get(userId); if (events == null) { @@ -980,6 +989,7 @@ public class UsageStatsService extends SystemService implements mHandler.sendEmptyMessageDelayed(MSG_FLUSH_TO_DISK, FLUSH_INTERVAL); } } + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } /** @@ -1944,17 +1954,23 @@ public class UsageStatsService extends SystemService implements case MSG_FLUSH_TO_DISK: flushToDisk(); break; - case MSG_UNLOCKED_USER: + case MSG_UNLOCKED_USER: { + final int userId = msg.arg1; try { - onUserUnlocked(msg.arg1); + Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, + "usageStatsHandleUserUnlocked(" + userId + ")"); + onUserUnlocked(userId); } catch (Exception e) { - if (mUserManager.isUserUnlocked(msg.arg1)) { + if (mUserManager.isUserUnlocked(userId)) { throw e; // rethrow exception - user is unlocked } else { Slog.w(TAG, "Attempted to unlock stopped or removed user " + msg.arg1); } + } finally { + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } break; + } case MSG_REMOVE_USER: onUserRemoved(msg.arg1); break; @@ -1986,7 +2002,10 @@ public class UsageStatsService extends SystemService implements break; case MSG_HANDLE_LAUNCH_TIME_ON_USER_UNLOCK: { final int userId = msg.arg1; + Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, + "usageStatsHandleEstimatedLaunchTimesOnUser(" + userId + ")"); handleEstimatedLaunchTimesOnUserUnlock(userId); + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } break; case MSG_NOTIFY_ESTIMATED_LAUNCH_TIMES_CHANGED: { diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java index 7d2e1a4ed86a856beecdaaf20425ffed9debad12..b5d8096deac0a2f49295ce38e0e1cea20dd62a87 100644 --- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java @@ -1306,7 +1306,7 @@ class UserUsageStatsService { } } - private static String eventToString(int eventType) { + static String eventToString(int eventType) { switch (eventType) { case Event.NONE: return "NONE"; diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index faf97b57594e6be406d47efc448beadaafafe61c..de2e9527e7b8c82776219509e20d8a6e5b7ad7f7 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -18,6 +18,7 @@ package android.telephony; import static android.text.TextUtils.formatSimple; +import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -44,6 +45,7 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; +import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.util.TelephonyUtils; import com.android.telephony.Rlog; @@ -254,6 +256,11 @@ public class SubscriptionInfo implements Parcelable { */ private final boolean mIsGroupDisabled; + /** + * Whether this subscription is used for communicating with non-terrestrial networks. + */ + private final boolean mIsNtn; + /** * @hide * @@ -378,6 +385,7 @@ public class SubscriptionInfo implements Parcelable { this.mAreUiccApplicationsEnabled = areUiccApplicationsEnabled; this.mPortIndex = portIndex; this.mUsageSetting = usageSetting; + this.mIsNtn = false; } /** @@ -416,6 +424,7 @@ public class SubscriptionInfo implements Parcelable { this.mAreUiccApplicationsEnabled = builder.mAreUiccApplicationsEnabled; this.mPortIndex = builder.mPortIndex; this.mUsageSetting = builder.mUsageSetting; + this.mIsNtn = builder.mIsNtn; } /** @@ -862,6 +871,17 @@ public class SubscriptionInfo implements Parcelable { return mUsageSetting; } + /** + * Check if the subscription is exclusively for non-terrestrial networks. + * + * @return {@code true} if it is a non-terrestrial network subscription, {@code false} + * otherwise. + */ + @FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG) + public boolean isNtn() { + return mIsNtn; + } + @NonNull public static final Parcelable.Creator<SubscriptionInfo> CREATOR = new Parcelable.Creator<SubscriptionInfo>() { @@ -898,6 +918,7 @@ public class SubscriptionInfo implements Parcelable { UiccAccessRule.CREATOR)) .setUiccApplicationsEnabled(source.readBoolean()) .setUsageSetting(source.readInt()) + .setNtn(source.readBoolean()) .build(); } @@ -939,6 +960,7 @@ public class SubscriptionInfo implements Parcelable { dest.writeTypedArray(mCarrierConfigAccessRules, flags); dest.writeBoolean(mAreUiccApplicationsEnabled); dest.writeInt(mUsageSetting); + dest.writeBoolean(mIsNtn); } @Override @@ -1001,6 +1023,7 @@ public class SubscriptionInfo implements Parcelable { + " mType=" + SubscriptionManager.subscriptionTypeToString(mType) + " areUiccApplicationsEnabled=" + mAreUiccApplicationsEnabled + " usageSetting=" + SubscriptionManager.usageSettingToString(mUsageSetting) + + " ntn=" + mIsNtn + "]"; } @@ -1025,7 +1048,8 @@ public class SubscriptionInfo implements Parcelable { that.mCardString) && Arrays.equals(mNativeAccessRules, that.mNativeAccessRules) && Arrays.equals(mCarrierConfigAccessRules, that.mCarrierConfigAccessRules) && Objects.equals(mGroupUuid, that.mGroupUuid) - && mCountryIso.equals(that.mCountryIso) && mGroupOwner.equals(that.mGroupOwner); + && mCountryIso.equals(that.mCountryIso) && mGroupOwner.equals(that.mGroupOwner) + && mIsNtn == that.mIsNtn; } @Override @@ -1034,7 +1058,7 @@ public class SubscriptionInfo implements Parcelable { mDisplayNameSource, mIconTint, mNumber, mDataRoaming, mMcc, mMnc, mIsEmbedded, mCardString, mIsOpportunistic, mGroupUuid, mCountryIso, mCarrierId, mProfileClass, mType, mGroupOwner, mAreUiccApplicationsEnabled, mPortIndex, mUsageSetting, mCardId, - mIsGroupDisabled); + mIsGroupDisabled, mIsNtn); result = 31 * result + Arrays.hashCode(mEhplmns); result = 31 * result + Arrays.hashCode(mHplmns); result = 31 * result + Arrays.hashCode(mNativeAccessRules); @@ -1233,6 +1257,11 @@ public class SubscriptionInfo implements Parcelable { @UsageSetting private int mUsageSetting = SubscriptionManager.USAGE_SETTING_UNKNOWN; + /** + * {@code true} if it is a non-terrestrial network subscription, {@code false} otherwise. + */ + private boolean mIsNtn = false; + /** * Default constructor. */ @@ -1275,6 +1304,7 @@ public class SubscriptionInfo implements Parcelable { mAreUiccApplicationsEnabled = info.mAreUiccApplicationsEnabled; mPortIndex = info.mPortIndex; mUsageSetting = info.mUsageSetting; + mIsNtn = info.mIsNtn; } /** @@ -1659,6 +1689,18 @@ public class SubscriptionInfo implements Parcelable { return this; } + /** + * Set whether the subscription is exclusively used for non-terrestrial networks or not. + * + * @param isNtn {@code true} if the subscription is for NTN, {@code false} otherwise. + * @return The builder. + */ + @NonNull + public Builder setNtn(boolean isNtn) { + mIsNtn = isNtn; + return this; + } + /** * Build the {@link SubscriptionInfo}. * diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 6d9c1e6f052ea98c5dfb73cf30ab20df0c3083a5..29149b95e47141ad4c5e0ce94e7d184bd3d8810b 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -1117,6 +1117,14 @@ public class SubscriptionManager { public static final String SATELLITE_ATTACH_ENABLED_FOR_CARRIER = SimInfo.COLUMN_SATELLITE_ATTACH_ENABLED_FOR_CARRIER; + /** + * TelephonyProvider column name to identify eSIM profile of a non-terrestrial network. + * By default, it's disabled. + * <P>Type: INTEGER (int)</P> + * @hide + */ + public static final String IS_NTN = SimInfo.COLUMN_IS_NTN; + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"USAGE_SETTING_"}, diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl index 21a6b447d6a4205e123344932b980dc8dade5761..a5a23e8659d875cb46ba7a891b171e33aa3c459c 100644 --- a/telephony/java/com/android/internal/telephony/ISub.aidl +++ b/telephony/java/com/android/internal/telephony/ISub.aidl @@ -323,49 +323,49 @@ interface ISub { */ UserHandle getSubscriptionUserHandle(int subId); - /** - * Check if subscription and user are associated with each other. - * - * @param subscriptionId the subId of the subscription - * @param userHandle user handle of the user - * @return {@code true} if subscription is associated with user - * {code true} if there are no subscriptions on device - * else {@code false} if subscription is not associated with user. - * - * @throws IllegalArgumentException if subscription is invalid. - * @throws SecurityException if the caller doesn't have permissions required. - * @throws IllegalStateException if subscription service is not available. - * - * @hide - */ - boolean isSubscriptionAssociatedWithUser(int subscriptionId, in UserHandle userHandle); - - /** - * Get list of subscriptions associated with user. - * - * @param userHandle user handle of the user - * @return list of subscriptionInfo associated with the user. - * - * @throws SecurityException if the caller doesn't have permissions required. - * @throws IllegalStateException if subscription service is not available. - * - * @hide - */ - List<SubscriptionInfo> getSubscriptionInfoListAssociatedWithUser(in UserHandle userHandle); - - /** - * Called during setup wizard restore flow to attempt to restore the backed up sim-specific - * configs to device for all existing SIMs in the subscription database - * {@link Telephony.SimInfo}. Internally, it will store the backup data in an internal file. - * This file will persist on device for device's lifetime and will be used later on when a SIM - * is inserted to restore that specific SIM's settings. End result is subscription database is - * modified to match any backed up configs for the appropriate inserted SIMs. - * - * <p> - * The {@link Uri} {@link #SIM_INFO_BACKUP_AND_RESTORE_CONTENT_URI} is notified if any - * {@link Telephony.SimInfo} entry is updated as the result of this method call. - * - * @param data with the sim specific configs to be backed up. - */ - void restoreAllSimSpecificSettingsFromBackup(in byte[] data); + /** + * Check if subscription and user are associated with each other. + * + * @param subscriptionId the subId of the subscription + * @param userHandle user handle of the user + * @return {@code true} if subscription is associated with user + * {code true} if there are no subscriptions on device + * else {@code false} if subscription is not associated with user. + * + * @throws IllegalArgumentException if subscription is invalid. + * @throws SecurityException if the caller doesn't have permissions required. + * @throws IllegalStateException if subscription service is not available. + * + * @hide + */ + boolean isSubscriptionAssociatedWithUser(int subscriptionId, in UserHandle userHandle); + + /** + * Get list of subscriptions associated with user. + * + * @param userHandle user handle of the user + * @return list of subscriptionInfo associated with the user. + * + * @throws SecurityException if the caller doesn't have permissions required. + * @throws IllegalStateException if subscription service is not available. + * + * @hide + */ + List<SubscriptionInfo> getSubscriptionInfoListAssociatedWithUser(in UserHandle userHandle); + + /** + * Called during setup wizard restore flow to attempt to restore the backed up sim-specific + * configs to device for all existing SIMs in the subscription database + * {@link Telephony.SimInfo}. Internally, it will store the backup data in an internal file. + * This file will persist on device for device's lifetime and will be used later on when a SIM + * is inserted to restore that specific SIM's settings. End result is subscription database is + * modified to match any backed up configs for the appropriate inserted SIMs. + * + * <p> + * The {@link Uri} {@link #SIM_INFO_BACKUP_AND_RESTORE_CONTENT_URI} is notified if any + * {@link Telephony.SimInfo} entry is updated as the result of this method call. + * + * @param data with the sim specific configs to be backed up. + */ + void restoreAllSimSpecificSettingsFromBackup(in byte[] data); } diff --git a/tools/lint/fix/Android.bp b/tools/lint/fix/Android.bp index 43f21221ae5a006226065ae96ddd26a1a8ac42e3..ddacf57c3a3e8b8c9872e0f32640ed565b7399d2 100644 --- a/tools/lint/fix/Android.bp +++ b/tools/lint/fix/Android.bp @@ -25,6 +25,11 @@ python_binary_host { name: "lint_fix", main: "soong_lint_fix.py", srcs: ["soong_lint_fix.py"], + version: { + py3: { + embedded_launcher: true, + }, + }, } python_library_host { diff --git a/tools/lint/fix/soong_lint_fix.py b/tools/lint/fix/soong_lint_fix.py index b42f9eec99d0164b07070d40746a4ca2c55e81fe..4a2e37e51d71483521f5babc89ac80404c98126a 100644 --- a/tools/lint/fix/soong_lint_fix.py +++ b/tools/lint/fix/soong_lint_fix.py @@ -213,5 +213,5 @@ def _setup_parser(): if __name__ == "__main__": opts = SoongLintFixOptions() - opts.parse_args(sys.argv) + opts.parse_args() SoongLintFix(opts).run() diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java index bc41829f16d206cc01358cd01115d66480ef2b86..71ac94ba2ee433dba781d8f744f3bb372c9fac4a 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java @@ -334,6 +334,7 @@ public class SharedConnectivityManager { if (mServiceConnection != null) { mContext.unbindService(mServiceConnection); mServiceConnection = null; + mService = null; } }