| /* |
| * Copyright 2021 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 android.view.Display.DEFAULT_DISPLAY; |
| |
| import android.content.Intent; |
| import android.view.inputmethod.InputMethodManager; |
| |
| import androidx.annotation.IntDef; |
| |
| import com.android.quickstep.OverviewCommandHelper; |
| import com.android.quickstep.SystemUiProxy; |
| import com.android.quickstep.TouchInteractionService; |
| |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| |
| /** |
| * Controller for 3 button mode in the taskbar. |
| * Handles all the functionality of the various buttons, making/routing the right calls into |
| * launcher or sysui/system. |
| * |
| * TODO: Create callbacks to hook into UI layer since state will change for more context buttons/ |
| * assistant invocation. |
| */ |
| public class TaskbarNavButtonController { |
| @Retention(RetentionPolicy.SOURCE) |
| @IntDef(value = { |
| BUTTON_BACK, |
| BUTTON_HOME, |
| BUTTON_RECENTS, |
| BUTTON_IME_SWITCH |
| }) |
| |
| public @interface TaskbarButton {} |
| |
| static final int BUTTON_BACK = 1; |
| static final int BUTTON_HOME = BUTTON_BACK << 1; |
| static final int BUTTON_RECENTS = BUTTON_HOME << 1; |
| static final int BUTTON_IME_SWITCH = BUTTON_RECENTS << 1; |
| |
| private final TouchInteractionService mService; |
| |
| public TaskbarNavButtonController(TouchInteractionService service) { |
| mService = service; |
| } |
| |
| public void onButtonClick(@TaskbarButton int buttonType) { |
| switch (buttonType) { |
| case BUTTON_BACK: |
| executeBack(); |
| break; |
| case BUTTON_HOME: |
| navigateHome(); |
| break; |
| case BUTTON_RECENTS: |
| navigateToOverview();; |
| break; |
| case BUTTON_IME_SWITCH: |
| showIMESwitcher(); |
| break; |
| } |
| } |
| |
| private void navigateHome() { |
| mService.startActivity(new Intent(Intent.ACTION_MAIN) |
| .addCategory(Intent.CATEGORY_HOME) |
| .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); |
| } |
| |
| private void navigateToOverview() { |
| mService.getOverviewCommandHelper() |
| .addCommand(OverviewCommandHelper.TYPE_SHOW); |
| } |
| |
| private void executeBack() { |
| SystemUiProxy.INSTANCE.getNoCreate().onBackPressed(); |
| } |
| |
| private void showIMESwitcher() { |
| mService.getSystemService(InputMethodManager.class) |
| .showInputMethodPickerFromSystem(true /* showAuxiliarySubtypes */, |
| DEFAULT_DISPLAY); |
| } |
| } |