From d41ce4980dd26623a2452c76104fbe1833c6125d Mon Sep 17 00:00:00 2001 From: Merissa Tan Date: Wed, 12 Jan 2022 19:10:38 -0800 Subject: [PATCH] Create new DesktopNavbarButtonsViewController class. This CL creates a new DesktopNavbarButtonsViewController class to allow for taskbar buttons and status icons customization on desktop environment. Recall: http://recall/clips/e008d2de-36d3-47f6-954a-5ce18bac69a5 Bug: 213964564 Bug: 196757951 Test: Switch between different system navigation modes and verify the desktop taskbar buttons stay on screen. Change-Id: Ie7a9a044fad3b60cd37d910b8eb78c8734aadfd5 --- quickstep/res/values/strings.xml | 4 ++ .../DesktopNavbarButtonsViewController.java | 65 +++++++++++++++++++ .../taskbar/NavbarButtonsViewController.java | 16 +---- .../taskbar/TaskbarActivityContext.java | 5 +- .../taskbar/TaskbarNavButtonController.java | 4 ++ 5 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml index 9604a77f12..3ee2af0bed 100644 --- a/quickstep/res/values/strings.xml +++ b/quickstep/res/values/strings.xml @@ -246,6 +246,10 @@ IME switcher Recents + + Notifications + + Quick Settings Move to top/left diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java new file mode 100644 index 0000000000..0ab3cfd547 --- /dev/null +++ b/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 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 + * + * 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.launcher3.taskbar; + +import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_NOTIFICATIONS; +import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_QUICK_SETTINGS; + +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.android.launcher3.R; + +/** + * Controller for managing buttons and status icons in taskbar in a desktop environment. + */ +public class DesktopNavbarButtonsViewController extends NavbarButtonsViewController { + + private final TaskbarActivityContext mContext; + private final FrameLayout mNavButtonsView; + private final ViewGroup mNavButtonContainer; + + private TaskbarControllers mControllers; + + public DesktopNavbarButtonsViewController(TaskbarActivityContext context, + FrameLayout navButtonsView) { + super(context, navButtonsView); + mContext = context; + mNavButtonsView = navButtonsView; + mNavButtonContainer = mNavButtonsView.findViewById(R.id.end_nav_buttons); + } + + /** + * Initializes the controller + */ + @Override + public void init(TaskbarControllers controllers) { + mControllers = controllers; + mNavButtonsView.getLayoutParams().height = mContext.getDeviceProfile().taskbarSize; + + // Quick settings and notifications buttons + addButton(R.drawable.ic_sysbar_quick_settings, BUTTON_QUICK_SETTINGS, + mNavButtonContainer, mControllers.navButtonController, + R.id.quick_settings_button); + addButton(R.drawable.ic_sysbar_notifications, BUTTON_NOTIFICATIONS, + mNavButtonContainer, mControllers.navButtonController, + R.id.notifications_button); + } + + /** Cleans up on destroy */ + @Override + public void onDestroy() { } +} diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 094bced31e..2822969b95 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -15,15 +15,11 @@ */ package com.android.launcher3.taskbar; -import static android.content.pm.PackageManager.FEATURE_PC; - import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_HOME; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_IME_SWITCH; -import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_NOTIFICATIONS; -import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_QUICK_SETTINGS; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_RECENTS; import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_KEYGUARD; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE; @@ -325,16 +321,6 @@ public class NavbarButtonsViewController { applyState(); mPropertyHolders.forEach(StatePropertyHolder::endAnimation); - // quick setting and notification buttons - if (mContext.getPackageManager().hasSystemFeature(FEATURE_PC)) { - addButton(R.drawable.ic_sysbar_quick_settings, BUTTON_QUICK_SETTINGS, - mNavButtonContainer, mControllers.navButtonController, - R.id.quick_settings_button); - addButton(R.drawable.ic_sysbar_notifications, BUTTON_NOTIFICATIONS, - mNavButtonContainer, mControllers.navButtonController, - R.id.notifications_button); - } - // Initialize things needed to move nav buttons to separate window. mSeparateWindowParent = new BaseDragLayer(mContext, null, 0) { @Override @@ -546,7 +532,7 @@ public class NavbarButtonsViewController { } } - private ImageView addButton(@DrawableRes int drawableId, @TaskbarButton int buttonType, + protected ImageView addButton(@DrawableRes int drawableId, @TaskbarButton int buttonType, ViewGroup parent, TaskbarNavButtonController navButtonController, @IdRes int id) { return addButton(drawableId, buttonType, parent, navButtonController, id, R.layout.taskbar_nav_button); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index a60d434dac..81ff26e970 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -15,6 +15,7 @@ */ package com.android.launcher3.taskbar; +import static android.content.pm.PackageManager.FEATURE_PC; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; @@ -166,7 +167,9 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mControllers = new TaskbarControllers(this, new TaskbarDragController(this), buttonController, - new NavbarButtonsViewController(this, navButtonsView), + getPackageManager().hasSystemFeature(FEATURE_PC) + ? new DesktopNavbarButtonsViewController(this, navButtonsView) : + new NavbarButtonsViewController(this, navButtonsView), new RotationButtonController(this, c.getColor(R.color.taskbar_nav_icon_light_color), c.getColor(R.color.taskbar_nav_icon_dark_color), diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java index a6019849dd..b46587acca 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java @@ -143,6 +143,10 @@ public class TaskbarNavButtonController { return R.string.taskbar_button_ime_switcher; case BUTTON_RECENTS: return R.string.taskbar_button_recents; + case BUTTON_NOTIFICATIONS: + return R.string.taskbar_button_notifications; + case BUTTON_QUICK_SETTINGS: + return R.string.taskbar_button_quick_settings; default: return 0; }