Merge "[PK Setting] add keyboard review under keyboard selection page" into main

This commit is contained in:
Shaowei Shen
2023-12-14 11:42:33 +00:00
committed by Android (Google) Code Review
5 changed files with 99 additions and 5 deletions

View File

@@ -20,6 +20,13 @@
android:id="@+id/keyboard_layout_picker_container"
android:orientation="vertical">
<ImageView
android:id="@+id/keyboard_layout_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitCenter"/>
<FrameLayout
android:id="@+id/keyboard_layout_title"
android:layout_width="match_parent"

View File

@@ -479,7 +479,10 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
mDialogFragment.dismiss();
mDialogFragment = null;
}
getListView().clearOnScrollListeners();
RecyclerView view = getListView();
if (view != null) {
view.clearOnScrollListeners();
}
}
super.onDetach();
}

View File

@@ -27,6 +27,20 @@ import com.android.settings.dashboard.DashboardFragment;
public class NewKeyboardLayoutPickerContent extends DashboardFragment {
private static final String TAG = "KeyboardLayoutPicker";
private NewKeyboardLayoutPickerController mNewKeyboardLayoutPickerController;
private ControllerUpdateCallback mControllerUpdateCallback;
public interface ControllerUpdateCallback {
/**
* Called when mNewKeyBoardLayoutPickerController been initialized.
*/
void onControllerUpdated(NewKeyboardLayoutPickerController
newKeyboardLayoutPickerController);
}
public void setControllerUpdateCallback(ControllerUpdateCallback controllerUpdateCallback) {
this.mControllerUpdateCallback = controllerUpdateCallback;
}
@Override
public void onAttach(Context context) {
@@ -40,7 +54,11 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment {
getActivity().finish();
return;
}
use(NewKeyboardLayoutPickerController.class).initialize(this);
mNewKeyboardLayoutPickerController = use(NewKeyboardLayoutPickerController.class);
mNewKeyboardLayoutPickerController.initialize(this);
if (mControllerUpdateCallback != null) {
mControllerUpdateCallback.onControllerUpdated(mNewKeyboardLayoutPickerController);
}
}
@Override
@@ -56,4 +74,8 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment {
protected int getPreferenceScreenResId() {
return R.xml.new_keyboard_layout_picker_fragment;
}
public NewKeyboardLayoutPickerController getController() {
return mNewKeyboardLayoutPickerController;
}
}

View File

@@ -59,6 +59,7 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
private String mFinalSelectedLayout;
private String mLayout;
private MetricsFeatureProvider mMetricsFeatureProvider;
private KeyboardLayoutSelectedCallback mKeyboardLayoutSelectedCallback;
public NewKeyboardLayoutPickerController(Context context, String key) {
super(context, key);
@@ -100,7 +101,7 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
@Override
public void onStop() {
if (!mLayout.equals(mFinalSelectedLayout)) {
if (mLayout != null && !mLayout.equals(mFinalSelectedLayout)) {
String change = "From:" + mLayout + ", to:" + mFinalSelectedLayout;
mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_PK_LAYOUT_CHANGED, change);
@@ -121,6 +122,14 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
return AVAILABLE;
}
/**
* Registers {@link KeyboardLayoutSelectedCallback} and get updated.
*/
public void registerKeyboardSelectedCallback(KeyboardLayoutSelectedCallback
keyboardLayoutSelectedCallback) {
this.mKeyboardLayoutSelectedCallback = keyboardLayoutSelectedCallback;
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!(preference instanceof TickButtonPreference)) {
@@ -128,6 +137,9 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
}
final TickButtonPreference pref = (TickButtonPreference) preference;
if (mKeyboardLayoutSelectedCallback != null && mPreferenceMap.containsKey(preference)) {
mKeyboardLayoutSelectedCallback.onSelected(mPreferenceMap.get(preference));
}
pref.setSelected(true);
if (mPreviousSelection != null && !mPreviousSelection.equals(preference.getKey())) {
TickButtonPreference preSelectedPref = mScreen.findPreference(mPreviousSelection);
@@ -166,6 +178,9 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
pref.setTitle(layout.getLabel());
if (mLayout.equals(layout.getLabel())) {
if (mKeyboardLayoutSelectedCallback != null) {
mKeyboardLayoutSelectedCallback.onSelected(layout);
}
pref.setSelected(true);
mPreviousSelection = layout.getDescriptor();
}
@@ -200,4 +215,11 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
}
return label;
}
public interface KeyboardLayoutSelectedCallback {
/**
* Called when KeyboardLayout been selected.
*/
void onSelected(KeyboardLayout keyboardLayout);
}
}

View File

@@ -16,35 +16,75 @@
package com.android.settings.inputmethod;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
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 androidx.fragment.app.Fragment;
import com.android.settings.R;
//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 InputManager mInputManager;
private final NewKeyboardLayoutPickerController.KeyboardLayoutSelectedCallback
mKeyboardLayoutSelectedCallback =
new NewKeyboardLayoutPickerController.KeyboardLayoutSelectedCallback() {
@Override
public void onSelected(KeyboardLayout keyboardLayout) {
if (mInputManager != null && mKeyboardLayoutPreview != null) {
Drawable previewDrawable = mInputManager.getKeyboardLayoutPreview(
keyboardLayout,
DEFAULT_KEYBOARD_PREVIEW_WIDTH, DEFAULT_KEYBOARD_PREVIEW_HEIGHT);
mKeyboardLayoutPreview.setVisibility(
previewDrawable == null ? GONE : VISIBLE);
if (previewDrawable != null) {
mKeyboardLayoutPreview.setImageDrawable(previewDrawable);
}
}
}
};
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(
R.layout.keyboard_layout_picker, container, false);
mKeyboardLayoutPreview = fragmentView.findViewById(R.id.keyboard_layout_preview);
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;
}
}