Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimized navigation with the three buttons #69

Closed
wants to merge 254 commits into from
Closed

Optimized navigation with the three buttons #69

wants to merge 254 commits into from

Conversation

odmfl
Copy link

@odmfl odmfl commented Dec 30, 2022

Optimized and improved the experience for the user using the 3 buttons, both in terms of usability and appearance.
Fix #62

thanks to [AndyCGYan]

minaripenguin and others added 30 commits December 27, 2022 13:27
* it is very expensive for grid types of views (considering we have qs tiles count settings), especially when animating the QS panel expansion.

Signed-off-by: str-br <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
android_os_MessageQueue_nativeDestroy leaves a cyclic reference between its Looper instance and its NativeMessageQueue instance, resulting in a memory and fd leak.

Solution: break the cyclic reference with weak pointer wp<>.

Bug: 244478726

Signed-off-by: Jintao Zhu <[email protected]>
Change-Id: Ic2a183b5cc7c05f9ade95a0602d425badd3d97b1
Signed-off-by: str-br <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
If an app with a uid of Process.SYSTEM_UID calls view.startDragAndDrop, IllegalStateException will be thrown in Session.performDrag, which makes the drag-and-drop feature unavailable in this app.
And we don't need this check either, because validateAndResolveDragMimeTypeExtras and validateDragFlags are indeed called before Binder.clearCallingIdentity.

Bug: 245626682

Change-Id: I1c27287e51a956284dae0f61bfa0cac14dd28a27
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Roxor-007 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
SystemUI may crash sometimes in monkey test due to exception.

Catch the exception to avoid the crash.

Change-Id: I548be5c6465f3c7a81c33d1cfa9b30e7269fd86d
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: Pranav Vashi <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
E DatabaseUtils: Writing exception to parcel
E DatabaseUtils: java.lang.SecurityException: No permission to access APN settings
E DatabaseUtils: at com.android.providers.telephony.TelephonyProvider.checkPermission(TelephonyProvider.java:4799)

Signed-off-by: spezi77 <[email protected]>
Change-Id: I648bcf6d3bff5672bd69e8b10782a0a1431b5f82
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
…ptions

Change-Id: I9402a9668c046f29024793d473aed90b74a008a3
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Throwing an exception crashes development settings

Change-Id: Idf76112ce98f1b3002bb68d6ed245fafdc7e1505
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
https://code.google.com/p/android/issues/detail?id=331471

not only mPackageName.equals("android") run in system_server,
but also contains the following package:
- com.android.providers.settings,
- com.android.server.telecom,
- com.android.location.fused.

when make application for these package will modify
system_server classloader which is not we want.

Test: intern stability test

Change-Id: I831f6d6ec1d63edad592b05df7c1c2493afeff10
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
11-10 17:26:32.914  2574  2574 E GmsApplication: /system/etc/sysconfig/google.xml must have <allow-in-power-save package="com.google.android.gms"/>.
11-10 17:26:32.919  2574  2574 E GmsApplication: Unable to re-add to doze whitelist
11-10 17:26:32.919  2574  2574 E GmsApplication: java.lang.SecurityException: Calling app u0a106 is not on whitelist
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Parcel.createException(Parcel.java:2071)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Parcel.readException(Parcel.java:2039)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Parcel.readException(Parcel.java:1987)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.usage.IUsageStatsManager$Stub$Proxy.whitelistAppTemporarily(IUsageStatsManager.java:995)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.usage.UsageStatsManager.whitelistAppTemporarily(UsageStatsManager.java:1036)
11-10 17:26:32.919  2574  2574 E GmsApplication: at rrc.startService(:com.google.android.gms@[email protected] (120400-271418971):5)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at dzh.a(:com.google.android.gms@[email protected] (120400-271418971):11)
11-10 17:26:32.919  2574  2574 E GmsApplication: at dzh.onReceive(:com.google.android.gms@[email protected] (120400-271418971):7)
11-10 17:26:32.919  2574  2574 E GmsApplication: at qlz.onReceive(:com.google.android.gms@[email protected] (120400-271418971):8)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:3788)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.access$1400(ActivityThread.java:219)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Handler.dispatchMessage(Handler.java:107)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Looper.loop(Looper.java:214)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.main(ActivityThread.java:7356)
11-10 17:26:32.919  2574  2574 E GmsApplication: at java.lang.reflect.Method.invoke(Native Method)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
11-10 17:26:32.919  2574  2574 E GmsApplication: Caused by: android.os.RemoteException: Remote stack trace:
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppDirectInternal(DeviceIdleController.java:2378)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppInternal(DeviceIdleController.java:2360)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppChecked(DeviceIdleController.java:2324)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController$BinderService.addPowerSaveTempWhitelistApp(DeviceIdleController.java:1561)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.usage.UsageStatsService$BinderService.whitelistAppTemporarily(UsageStatsService.java:1334)va:1987)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.usage.IUsageStatsManager$Stub$Proxy.whitelistAppTemporarily(IUsageStatsManager.java:995)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.usage.UsageStatsManager.whitelistAppTemporarily(UsageStatsManager.java:1036)
11-10 17:26:32.919  2574  2574 E GmsApplication: at rrc.startService(:com.google.android.gms@[email protected] (120400-271418971):5)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.content.ContextWrapper.startService(ContextWrapper.java:669)
11-10 17:26:32.919  2574  2574 E GmsApplication: at dzh.a(:com.google.android.gms@[email protected] (120400-271418971):11)
11-10 17:26:32.919  2574  2574 E GmsApplication: at dzh.onReceive(:com.google.android.gms@[email protected] (120400-271418971):7)
11-10 17:26:32.919  2574  2574 E GmsApplication: at qlz.onReceive(:com.google.android.gms@[email protected] (120400-271418971):8)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:3788)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.access$1400(ActivityThread.java:219)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Handler.dispatchMessage(Handler.java:107)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.os.Looper.loop(Looper.java:214)
11-10 17:26:32.919  2574  2574 E GmsApplication: at android.app.ActivityThread.main(ActivityThread.java:7356)
11-10 17:26:32.919  2574  2574 E GmsApplication: at java.lang.reflect.Method.invoke(Native Method)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
11-10 17:26:32.919  2574  2574 E GmsApplication: Caused by: android.os.RemoteException: Remote stack trace:
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppDirectInternal(DeviceIdleController.java:2378)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppInternal(DeviceIdleController.java:2360)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController.addPowerSaveTempWhitelistAppChecked(DeviceIdleController.java:2324)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.DeviceIdleController$BinderService.addPowerSaveTempWhitelistApp(DeviceIdleController.java:1561)
11-10 17:26:32.919  2574  2574 E GmsApplication: at com.android.server.usage.UsageStatsService$BinderService.whitelistAppTemporarily(UsageStatsService.java:1334)

Change-Id: I114fd5ef4ea4d72120b4fd73385f808ae2d7f3a5
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Change-Id: Id9035e9cfb02009688fbf1e0ae592caee6965d24
Signed-off-by: Pranav Vashi <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Relying on finalize method to call destroy method will result in memory
leak because there is no guarantee when or whether finalize will be
executed.

Solution: let recycle method call destroy method.

Signed-off-by: Jintao Zhu <[email protected]>
Change-Id: I1db38e8ae89f06cc2fd460a5c9b5d18d434438e3
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
When click “Video” button in camera view, the mediaRecorder will run prepare(). With the same time, screenDecoration in statusbar will run hideDotView() as an animation.

It will make “mediaRecorder run prepare()” cost more time than S load.
As in android S, the animation of hideDotView() will not run.
So suggest not to run hideDotView() as an animation, but run function directly.

Bug: 240375342
Test:Manual
1. Open camera app.
2. Let the camera pattern be Picture.
3. Click the “Video” button in camera view, let the pattern change from Picture to Video.

Change-Id: I76f310fd96a1c07c1c3739c7d671b00a9301a19f
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Bug: http://b/196856709
Test: treehugger
Change-Id: I90ccb32df5ef841a02e9b759891552291142979f
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
…CreateNativeInterface. The only difference is the former returns a sk_sp instead of a bare pointer.

Bug: skia:13087
Change-Id: I8d0931b9c1b942fa5c33bc36deaf2710a3409488
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Since the kill is asynchronously scheduled in the Handler, logically,
before scheduling, the process may be operated by the user to the
foreground or raising to an important ADJ and then be killed abnormally.

Bug: 235565625
Change-Id: Ied40d3ad22caa4d6c89055fdf85affb905d44d23
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Sometimes lmkd kills an app process, and a new thread of system_server reuses the pid of the former and kills the same app process again by some policies immediately, then system_server will die.

Bug:238734636

Change-Id: Ieb47a16eb209866691aad04cd4b518ba8162de58
Test: Monkey test
Signed-off-by: minaripenguin37 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
If a pre-created user is removed before it becomes a full user, the
ACTION_USER_REMOVED intent is never sent, so UsageStatsService is never
notified that the user's pending events should be discarded.  It will
eventually try to persist the events.  As the first step, it tries to
create /data/system_de/$userId/usagestats and the parent directory
/data/system_de/$userId if it doesn't already exist.

However, due to https://r.android.com/2078213 the SELinux policy no
longer allows system_server to create /data/system_de/$userId.  The
failure to create this directory is causing UsageStatsService to throw
an IllegalStateException which crashes system_server.

(Before the sepolicy change, system_server could create
/data/system_de/$userId, so the crash wouldn't have happened.  But
problems still might have occurred if the user ID was reused.)

The underlying user state tracking bug still needs to be fixed.  For
now, just avoid crashing system_server unnecessarily, and avoid an
SELinux denial by using mkdir() instead of mkdirs().

Test: pm create-user --pre-create-only
      pm remove-user 10
      # Wait 20 minutes and check logcat.

Bug: 234059731
Change-Id: Ic5efc19cda6b820a2c07f77b4f316d501acb9e80
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Method isServiceTokenValidLocked should be called with mNotificationLock
held, otherwise there will be race condition.

Bug: 236512598
Test: Manual
Change-Id: I7e24b5afe3d0a5233debf9da45200c2f4e1f570f
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
The ACTION_BATTERY_CHANGED Broadcast is a sticky broadcast, and
the registerReceiver method will return null when the first sticky
intent found that not matches filter.
However, the constructor of BatteryTrigger does not check whether
batteryStatus is null and uses it directly. In SystemServer,
PowerStatsService is started earlier than BatteryService.
If SystemServer is blocked for a few seconds for some reason,
then the NullPointerException will be thrown by BatteryTrigger.

Bug: N/A
Test: atest FrameworksServicesTests:PowerStatsServiceTest
Change-Id: I0e29e4a2c7e1298065d8b43c3b4b2bf2afb975e1
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
This potential NPE can cause Launcher crash. In applyAnimationUnchecked(), sources is annotated with @nullable so we need a null check before dispatching callbacks.

Bug: 248274834
Test: atest
Change-Id: I98b9b6cc9832745ed0ce6a85915dcedc63a5b9c8
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Test: manual
Change-Id: I71773b3ca49d306bb00b9e90712ee48ede5e4b24
Signed-off-by: darkphnx <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
…ng permissions and appops.

PackageManagerInternal#getPackageList can only receive the installed notify when the package added first on device, No callback is received when new user app installed. So the sync time maybe later then permisison check. It led to CTS case fail by accident in CtsAppSecurityHostTestCases.android.appsecurity.cts.ExternalStorageHostTest#testExternalStorageWrite.

Change-Id: If75e3b4ceb239fd1e2d663ceba920898b41f0f04
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Test:Immediately start a new process after killing the process.
When startProcessLocked method was called before appDiedLocked ,
the process uid was first added to mActiveUids and then removed again.
allowRestart=false means app.mSuccessor != null and so the new process
has already started so we should not call removeProcessNameLocked again.

Change-Id: If5bb2d27c51eba03403405022162f2c23f272804
Signed-off-by: tanxiaoyan <[email protected]>
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
This removes a race condition where ContentObserver is initialized
while mHandler is null which causes the ContentObserver#onChange() callback to run on a different thread and can cause an NPE.

Bug: 246843362
Test: manual
Test: atest BrightnessSynchronizerTest
Merged-In: Ib8e192c3961390ece721fa473d5c09323c30bafe
Change-Id: Ia7443efb9e8020d46b251c7f7100adbf58072345
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
When journal mode is WAL ,the default sync mode is FULL.
In Android S when journal mode is WAL,the default sync mode is NORMAL.

In the annotation of google it's said when journal mode is WAL,
the best sync mode should be NORMAL.

Incorrect sync mode cause performance drop.

Bug: 246753316
Test: run fs benchmark

Change-Id: I8110d66091cd443db9b09f6e8564f9d97f5e7297
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
MessageQueue: remove leaked on-fd-event-listener upon quitting

Signed-off-by: Jintao Zhu <[email protected]>
Change-Id: I1c0892524de1c3e66af111840c398b63facb43c9
Signed-off-by: revolwoc <[email protected]>
Signed-off-by: darkphnx <[email protected]>
Cloudflare DNS has a better privacy policy than Google Public DNS while
still supporting DNS over TLS.

Signed-off-by: darkphnx <[email protected]>
Unlike turning the screen off, turning it on is a time-critical
operation that should be done as fast as possible without a slow
animation. It's not only noticeable when using capacitive fingerprint
sensors.

Signed-off-by: darkphnx <[email protected]>
Calling Camera API needs attention to avoid RuntimeException. This change reoriganizes initCamera code.

Bug: 253940087
Test: manual and atest

Change-Id: Id46826d030c3001c71acd696f384e4b848e9bec2
Signed-off-by: minaripenguin37 <[email protected]>
Signed-off-by: darkphnx <[email protected]>
neobuddy89 and others added 24 commits December 27, 2022 13:28
Change-Id: I6e075886baa4827a7782e180a78c8f16455b53f8
Signed-off-by: Pranav Vashi <[email protected]>
Signed-off-by: PainKiller3 <[email protected]>
Signed-off-by: karthik1896 <[email protected]>
Signed-off-by: Dmitrii <[email protected]>
Avoid crashes like
E AndroidRuntime: java.lang.ClassCastException: com.android.systemui.statusbar.StatusBarBluetoothView cannot be cast to com.android.systemui.statusbar.StatusBarIconView

Change-Id: I8306205be42f1bc1ab5e7be790ccedae9f42111c
 * Stop turning on the audio hardware and playing silence.
 * Kind of annoying with certain types of Bluetooth headphones
   that don't actually play silence very well (hissssssssss).
   Not to mention power usage.

Change-Id: I6985db8710f8b0f61619ac57e8efb9e4e01cc31a
Signed-off-by: Joe Maples <[email protected]>
* it kinda looks awkard when its too close to the battery icon

Signed-off-by: minaripenguin <[email protected]>
Signed-off-by: str143 <[email protected]>
Signed-off-by: minaripenguin <[email protected]>
Example:
E AndroidRuntime: java.lang.ClassCastException: com.android.systemui.statusbar.StatusBarBluetoothView cannot be cast to com.android.systemui.statusbar.StatusBarIconView

Change-Id: I984bb7d74b4110ce43cac2b98267b55ae37f5f04
Signed-off-by: Pranav Vashi <[email protected]>
Add DeviceExtras for pre oplus devices (6 series) while we're here

Signed-off-by: AnierinB <[email protected]>
avoid get wrong intent extra when start suspended app's widget

Bug: 263768644
Change-Id: I06ba867c06429a5c58ec573458edcbf8654b7ad9
Test: Build
Signed-off-by: minaripenguin <[email protected]>
In some low end device, avoid iterating packages by checkOperation can
optimize ~100ms.

Bug:258771872
Test: manual
Change-Id: I13dc0b8c4a6a07fcf3663ddf0fe8d8c6599c9756
Signed-off-by: minaripenguin <[email protected]>
FoldStateListener is non-static inner class and keeps reference to
the outer class which is CameraManager. As CameraManager also keeps
context with mContext, memory leak could exist.

Changing FoldStateListener to static inner class, so that the class
won't keep the reference.

Bug: 242264787
Test: Manual test with memory profiling
Change-Id: I77652bd94b50eabc80041e13274b619c0da36601
* for system shapes to be effective

Signed-off-by: minaripenguin <[email protected]>
Navbar 3 buttons compact layout
more usable and better
Update home icone with md2
@odmfl
Copy link
Author

odmfl commented Feb 28, 2023

too many conflicts, however the commits that are in issue #62 are always valid

@odmfl odmfl closed this Feb 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

UI: Adjust default navbar layouts