/* * 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.settings.inputmethod; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.view.View.GONE; import static android.view.View.VISIBLE; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.android.settings.R; import com.android.settings.activityembedding.ActivityEmbeddingUtils; //TODO: b/316243168 - [Physical Keyboard Setting] Refactor NewKeyboardLayoutPickerFragment public class NewKeyboardLayoutPickerFragment extends Fragment { private static final int DEFAULT_KEYBOARD_PREVIEW_WIDTH = 1630; private static final int DEFAULT_KEYBOARD_PREVIEW_HEIGHT = 540; private ImageView mKeyboardLayoutPreview; private TextView mKeyboardLayoutPreviewText; private InputManager mInputManager; private final NewKeyboardLayoutPickerController.KeyboardLayoutSelectedCallback mKeyboardLayoutSelectedCallback = new NewKeyboardLayoutPickerController.KeyboardLayoutSelectedCallback() { @Override public void onSelected(@Nullable KeyboardLayout keyboardLayout) { if (mInputManager != null && mKeyboardLayoutPreview != null && mKeyboardLayoutPreviewText != null) { Drawable previewDrawable = mInputManager.getKeyboardLayoutPreview( keyboardLayout, DEFAULT_KEYBOARD_PREVIEW_WIDTH, DEFAULT_KEYBOARD_PREVIEW_HEIGHT); mKeyboardLayoutPreview.setVisibility( previewDrawable == null ? GONE : VISIBLE); mKeyboardLayoutPreviewText.setVisibility( previewDrawable == null ? GONE : VISIBLE); if (previewDrawable != null) { mKeyboardLayoutPreview.setImageDrawable(previewDrawable); } mKeyboardLayoutPreviewText.setText( keyboardLayout != null ? keyboardLayout.getLabel() : requireContext().getString( R.string.keyboard_default_layout)); } } }; private final NewKeyboardLayoutPickerContent.ControllerUpdateCallback mControllerUpdateCallback = newKeyboardLayoutPickerController -> { if (newKeyboardLayoutPickerController != null) { newKeyboardLayoutPickerController.registerKeyboardSelectedCallback( mKeyboardLayoutSelectedCallback); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mInputManager = requireContext().getSystemService(InputManager.class); ViewGroup fragmentView = (ViewGroup) inflater.inflate( getPickerLayout(getResources().getConfiguration()), container, false); mKeyboardLayoutPreview = fragmentView.findViewById(R.id.keyboard_layout_preview); mKeyboardLayoutPreviewText = fragmentView.findViewById(R.id.keyboard_layout_preview_name); getActivity().getSupportFragmentManager() .beginTransaction() .replace(R.id.keyboard_layout_title, new NewKeyboardLayoutPickerTitle()) .commit(); NewKeyboardLayoutPickerContent fragment = new NewKeyboardLayoutPickerContent(); fragment.setControllerUpdateCallback(mControllerUpdateCallback); fragment.setArguments(getArguments()); getActivity().getSupportFragmentManager() .beginTransaction() .replace(R.id.keyboard_layouts, fragment) .commit(); return fragmentView; } private int getPickerLayout(Configuration configuration) { return !ActivityEmbeddingUtils.isAlreadyEmbedded(this.getActivity()) && configuration.orientation == ORIENTATION_LANDSCAPE ? R.layout.keyboard_layout_picker_one_pane_land : R.layout.keyboard_layout_picker; } }