Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc749159 authored by danielwbhuang's avatar danielwbhuang Committed by Daniel Huang
Browse files

Open the settings page for a specific physical keyboard

1. Check open from a notification
2. Check open from Bluetooth entry
3. If the inputDeviceIdentifier is not null, open the next page
   directly.
4. Add extra to record the class of sender for the future metrics.

Demo: http://screencast/cast/NDU4MTYxOTIzMTg4MzI2NHxiYTQ0ODE5Ny02YQ

Bug: 269212353
Test: manual, atest
[Pass] atest KeyboardSettingsPreferenceControllerTest
[Pass] atest PhysicalKeyboardPreferenceControllerTest

Change-Id: Ie874003260896bbb949806623913e70486e4731d
parent 9a40a296
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -30,8 +30,7 @@
        <Preference
            android:key="physical_keyboard_pref"
            android:title="@string/physical_keyboard_title"
            android:summary="@string/summary_placeholder"
            android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment"/>
            android:summary="@string/summary_placeholder"/>
    </PreferenceCategory>

    <PreferenceCategory
+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
        }
        use(AdvancedBluetoothDetailsHeaderController.class).init(mCachedDevice);
        use(LeAudioBluetoothDetailsHeaderController.class).init(mCachedDevice, mManager);
        use(KeyboardSettingsPreferenceController.class).init(mCachedDevice, getActivity());
        use(KeyboardSettingsPreferenceController.class).init(mCachedDevice);

        final BluetoothFeatureProvider featureProvider = FeatureFactory.getFactory(
                context).getBluetoothFeatureProvider();
+22 −14
Original line number Diff line number Diff line
@@ -16,16 +16,15 @@

package com.android.settings.inputmethod;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.util.FeatureFlagUtils;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;

import com.android.settings.Settings.PhysicalKeyboardActivity;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -34,18 +33,14 @@ import java.util.List;

public class KeyboardSettingsPreferenceController extends BasePreferenceController {

    private Context mContext;
    private CachedBluetoothDevice mCachedDevice;
    private Activity mActivity;

    public KeyboardSettingsPreferenceController(Context context, String key) {
        super(context, key);
        mContext = context;
    }

    public void init(@NonNull CachedBluetoothDevice cachedDevice, @NonNull Activity activity) {
    public void init(@NonNull CachedBluetoothDevice cachedDevice) {
        mCachedDevice = cachedDevice;
        mActivity = activity;
    }

    @Override
@@ -53,18 +48,26 @@ public class KeyboardSettingsPreferenceController extends BasePreferenceControll
        if (!getPreferenceKey().equals(preference.getKey())) {
            return false;
        }

        final Intent intent = new Intent(Settings.ACTION_HARD_KEYBOARD_SETTINGS);
        intent.setClass(mContext, PhysicalKeyboardActivity.class);
        intent.putExtra(PhysicalKeyboardFragment.EXTRA_BT_ADDRESS, mCachedDevice.getAddress());
        mActivity.startActivityForResult(intent, 0);
        List<HardKeyboardDeviceInfo> newHardKeyboards = getHardKeyboardList();
        for (HardKeyboardDeviceInfo hardKeyboardDeviceInfo : newHardKeyboards) {
            if (mCachedDevice.getAddress().equals(hardKeyboardDeviceInfo.mBluetoothAddress)) {
                Intent intent = new Intent(Settings.ACTION_HARD_KEYBOARD_SETTINGS);
                intent.putExtra(
                        NewKeyboardSettingsUtils.EXTRA_INTENT_FROM,
                        "com.android.settings.inputmethod.KeyboardSettingsPreferenceController");
                intent.putExtra(
                        Settings.EXTRA_INPUT_DEVICE_IDENTIFIER,
                        hardKeyboardDeviceInfo.mDeviceIdentifier);
                mContext.startActivity(intent);
                break;
            }
        }
        return true;
    }

    @Override
    public int getAvailabilityStatus() {
        final List<HardKeyboardDeviceInfo> newHardKeyboards =
                PhysicalKeyboardFragment.getHardKeyboards(mContext);
        List<HardKeyboardDeviceInfo> newHardKeyboards = getHardKeyboardList();
        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI)
                && !newHardKeyboards.isEmpty()) {
            for (HardKeyboardDeviceInfo hardKeyboardDeviceInfo : newHardKeyboards) {
@@ -78,4 +81,9 @@ public class KeyboardSettingsPreferenceController extends BasePreferenceControll
        }
        return CONDITIONALLY_UNAVAILABLE;
    }

    @VisibleForTesting
    List<HardKeyboardDeviceInfo> getHardKeyboardList() {
        return PhysicalKeyboardFragment.getHardKeyboards(mContext);
    }
}
+12 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.hardware.input.InputManager;
import android.hardware.input.KeyboardLayout;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
import android.view.InputDevice;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -59,10 +60,19 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment
    public void onActivityCreated(final Bundle icicle) {
        super.onActivityCreated(icicle);
        Bundle arguments = getArguments();
        final String title =
                arguments.getString(NewKeyboardSettingsUtils.EXTRA_KEYBOARD_DEVICE_NAME);
        mInputDeviceIdentifier =
                arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
        if (mInputDeviceIdentifier == null) {
            Log.e(TAG, "The inputDeviceIdentifier should not be null");
            return;
        }
        InputDevice inputDevice =
                NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier);
        if (inputDevice == null) {
            Log.e(TAG, "inputDevice is null");
            return;
        }
        final String title = inputDevice.getName();
        getActivity().setTitle(title);
        updateCheckedState();
    }
+1 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment {
                arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);
        if (identifier == null
                || NewKeyboardSettingsUtils.getInputDevice(inputManager, identifier) == null) {
            getActivity().finish();
            return;
        }
        getActivity().setTitle(title);
Loading