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
This commit is contained in:
Merissa Tan
2022-01-12 19:10:38 -08:00
parent e8f8cd2f53
commit d41ce4980d
5 changed files with 78 additions and 16 deletions

View File

@@ -246,6 +246,10 @@
<string name="taskbar_button_ime_switcher">IME switcher</string>
<!-- Content description for recents button [CHAR_LIMIT=16] -->
<string name="taskbar_button_recents">Recents</string>
<!-- Content description for notifications button [CHAR_LIMIT=16] -->
<string name="taskbar_button_notifications">Notifications</string>
<!-- Content description for quick settings button [CHAR_LIMIT=16] -->
<string name="taskbar_button_quick_settings">Quick Settings</string>
<!-- Label for moving drop target to the top or left side of the screen, depending on orientation (from the taskbar only). -->
<string name="move_drop_target_top_or_left">Move to top&#47;left</string>

View File

@@ -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() { }
}

View File

@@ -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<TaskbarActivityContext>(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);

View File

@@ -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),

View File

@@ -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;
}