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

Commit 6189f9fc authored by danielwbhuang's avatar danielwbhuang
Browse files

Use FeatureProvider to provide the firmware update category.

1. Add KeyboardSettingsFeatureProvider in FeatureFactory.
2. Use KeyboardSettingsFeatureProvider to add firmware update UI.

Bug: 270114180
Test: manual, atest KeyboardSettingsFeatureProviderImplTest
Change-Id: I62ec7aff71dd5c0d496860363f2c5b3e992503ff
parent 2e5bc645
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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 android.content.Context;

import androidx.preference.PreferenceScreen;

/**
 * Provider for Keyboard settings related features.
 */
public interface KeyboardSettingsFeatureProvider {

    /**
     * Checks whether the connected device supports firmware update.
     *
     * @return true if the connected device supports firmware update.
     */
    boolean supportsFirmwareUpdate();

    /**
     * Add firmware update preference category .
     *
     * @param context The context to initialize the application with.
     * @param screen  The {@link PreferenceScreen} to add the firmware update preference category.
     *
     * @return true if the category is added successfully.
     */
    boolean addFirmwareUpdateCategory(Context context, PreferenceScreen screen);
}
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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 android.content.Context;

import androidx.preference.PreferenceScreen;

/**
 * Provider implementation for keyboard settings related features.
 */
public class KeyboardSettingsFeatureProviderImpl implements KeyboardSettingsFeatureProvider {

    @Override
    public boolean supportsFirmwareUpdate() {
        return false;
    }

    @Override
    public boolean addFirmwareUpdateCategory(Context context, PreferenceScreen screen) {
        return false;
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.ThreadUtils;
@@ -75,6 +76,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
    private InputManager mIm;
    private InputMethodManager mImm;
    private InputDeviceIdentifier mAutoInputDeviceIdentifier;
    private KeyboardSettingsFeatureProvider mFeatureProvider;
    @NonNull
    private PreferenceCategory mKeyboardAssistanceCategory;
    @NonNull
@@ -82,6 +84,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment

    private Intent mIntentWaitingForResult;
    private boolean mIsNewKeyboardSettings;
    private boolean mSupportsFirmwareUpdate;

    static final String EXTRA_BT_ADDRESS = "extra_bt_address";
    private String mBluetoothAddress;
@@ -104,6 +107,12 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
                (SwitchPreference) mKeyboardAssistanceCategory.findPreference(
                        SHOW_VIRTUAL_KEYBOARD_SWITCH));

        FeatureFactory featureFactory = FeatureFactory.getFactory(getContext());
        mFeatureProvider = featureFactory.getKeyboardSettingsFeatureProvider();
        mSupportsFirmwareUpdate = mFeatureProvider.supportsFirmwareUpdate();
        if (mSupportsFirmwareUpdate) {
            mFeatureProvider.addFirmwareUpdateCategory(getContext(), getPreferenceScreen());
        }
        mIsNewKeyboardSettings = FeatureFlagUtils.isEnabled(
                getContext(), FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
        boolean isModifierKeySettingsEnabled = FeatureFlagUtils
@@ -247,6 +256,9 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
        }
        mKeyboardAssistanceCategory.setOrder(1);
        preferenceScreen.addPreference(mKeyboardAssistanceCategory);
        if (mSupportsFirmwareUpdate) {
            mFeatureProvider.addFirmwareUpdateCategory(getPrefContext(), preferenceScreen);
        }
        updateShowVirtualKeyboardSwitch();
    }

+6 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.panel.PanelFeatureProvider;
import com.android.settings.search.SearchFeatureProvider;
@@ -198,6 +199,11 @@ public abstract class FeatureFactory {
     */
    public abstract WifiFeatureProvider getWifiFeatureProvider();

    /**
     * Retrieves implementation for keyboard settings feature.
     */
    public abstract KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider();

    public static final class FactoryNotFoundException extends RuntimeException {
        public FactoryNotFoundException(Throwable throwable) {
            super("Unable to create factory. Did you misconfigure Proguard?", throwable);
+11 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.gestures.AssistGestureFeatureProviderImpl;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProviderImpl;
import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
import com.android.settings.inputmethod.KeyboardSettingsFeatureProviderImpl;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProviderImpl;
import com.android.settings.panel.PanelFeatureProvider;
@@ -114,6 +116,7 @@ public class FeatureFactoryImpl extends FeatureFactory {
    private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
    private AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
    private WifiFeatureProvider mWifiFeatureProvider;
    private KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;

    @Override
    public SupportFeatureProvider getSupportFeatureProvider(Context context) {
@@ -365,4 +368,12 @@ public class FeatureFactoryImpl extends FeatureFactory {
        }
        return mWifiFeatureProvider;
    }

    @Override
    public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
        if (mKeyboardSettingsFeatureProvider == null) {
            mKeyboardSettingsFeatureProvider = new KeyboardSettingsFeatureProviderImpl();
        }
        return mKeyboardSettingsFeatureProvider;
    }
}
Loading