O PreferenceFragment não pode rolar para cima / baixo no XE16 (funcionou bem no XE12)

Tenho algumas preferências do usuário, principalmente caixas de seleção simples, no meu aplicativo Glass GDK. Como não consegui encontrar um paradigma de preferência específico do vidro, usei o PreferenceFragment e funcionou bem no XE12.

FYI: Quando eu o implementei, ele inicialmente parecia ruim, mas eu o aprimorei usando o seguinte estilo no AndroidManifest para minha SettingsActivity:

<style name="Theme.Preferences" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen" />

Eu não tinha opção paranão atualize para o XE16 (além de desativar a conectividade de rede). Após a atualização, ajustei o uso da API do meu aplicativo nas poucas alterações no XE16. Tudo funcionou principalmente.

A primeira coisa que notei foi que meu golpe na MainActivity da imersão não voltaria mais ao Live Card. Corrigi isso fazendo com que o manipulador onGesture do meu MainActivity retorne false para Gesture.SWIPE_DOWN.

A segunda coisa que notei é o objetivo desta pergunta: Minhas ConfiguraçõesActividade que agrupa um PreferenceFragment não me permite mais mover para cima e para baixo na lista de preferências usando o furto esquerdo e direito. Meu código está no final desta postagem. Eu adicionei um GestureDetector para ajudar a depurar esse problema depois que ele foi percebido. Posso ver o SWIPE_LEFT e SWIPE_RIGHT sendo registrados, mas não importa o que eu retorne, ou mesmo se eu remover o código do gesto, a seleção da lista de preferências nunca se move do primeiro item. O primeiro item é um CheckBoxPreference, quefaz alternar quando toco.

Eu já vi vários outros aplicativos do Google Glass que usam as Preferências do Android (PreferenceActivity ou PreferenceFragment), e todos também parecem estar quebrados.

Como implementar adequadamente as Preferências no Glass ou como fazer com que o PreferenceFragment funcione?

public class SettingsActivity //
                extends Activity //
                implements GestureDetector.BaseListener
{
    private static final String TAG             = WtcLog.TAG(SettingsActivity.class);

    public static final int     RESULT_SIGN_OUT = RESULT_FIRST_USER + 1;

    private static final String TAG_PREFERENCES = "preferences";

    private GestureDetector     mGestureDetector;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        mGestureDetector = new GestureDetector(this);
        mGestureDetector.setBaseListener(this);

        getFragmentManager() //
        .beginTransaction() //
        .replace(android.R.id.content, new FragmentSettings(), TAG_PREFERENCES) //
        .commit();
    }

    public static class FragmentSettings extends PreferenceFragment
    {
        private ApplicationGlass   mApplication;
        private WavePreferences    mPreferences;

        private PreferenceScreen   mScreenTop;
        private PreferenceCategory mCategoryDebug;

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);

            Activity activity = getActivity();
            mApplication = (ApplicationGlass) activity.getApplication();
            mPreferences = mApplication.getPreferences();

            addPreferencesFromResource(R.xml.preferences);

            mScreenTop = (PreferenceScreen) findPreference("screen_top");

            //
            // Remember Password
            //
            CheckBoxPreference prefRememberPassword = (CheckBoxPreference) findPreference("pref_remember_password");
            prefRememberPassword.setChecked(mPreferences.getRememberPassword());
            prefRememberPassword.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
            {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue)
                {
                    boolean rememberPassword = (Boolean) newValue;

                    String password = null;
                    if (rememberPassword)
                    {
                        password = mApplication.getSessionManager().getLastStartConnectInfo().getPassword();
                    }

                    mPreferences.setRememberPassword(rememberPassword);
                    mPreferences.setPassword(password);

                    return true;
                }
            });

            ...
        }
    }

    @Override
    public boolean onGenericMotionEvent(MotionEvent event)
    {
        if (mGestureDetector != null)
        {
            return mGestureDetector.onMotionEvent(event);
        }
        return false;
    }

    @Override
    public boolean onGesture(Gesture gesture)
    {
        WtcLog.debug(TAG, "onGesture(" + gesture + ")");
        switch (gesture)
        {
            case LONG_PRESS:
                WtcLog.debug(TAG, "onGesture: LONG_PRESS");
                break;
            case TAP:
                WtcLog.debug(TAG, "onGesture: TAP");
                break;
            case TWO_TAP:
                WtcLog.debug(TAG, "onGesture: TWO_TAP");
                break;
            case SWIPE_RIGHT:
                WtcLog.debug(TAG, "onGesture: SWIPE_RIGHT");
                break;
            case SWIPE_LEFT:
                WtcLog.debug(TAG, "onGesture: SWIPE_LEFT");
                break;
            case SWIPE_DOWN:
                WtcLog.debug(TAG, "onGesture: SWIPE_DOWN");
                break;
            case SWIPE_UP:
                WtcLog.debug(TAG, "onGesture: SWIPE_UP");
                break;
            case THREE_LONG_PRESS:
                WtcLog.debug(TAG, "onGesture: THREE_LONG_PRESS");
                break;
            case THREE_TAP:
                WtcLog.debug(TAG, "onGesture: THREE_TAP");
                break;
            case TWO_LONG_PRESS:
                WtcLog.debug(TAG, "onGesture: TWO_LONG_PRESS");
                break;
            case TWO_SWIPE_DOWN:
                WtcLog.debug(TAG, "onGesture: TWO_SWIPE_DOWN");
                break;
            case TWO_SWIPE_LEFT:
                WtcLog.debug(TAG, "onGesture: TWO_SWIPE_LEFT");
                break;
            case TWO_SWIPE_RIGHT:
                WtcLog.debug(TAG, "onGesture: TWO_SWIPE_RIGHT");
                break;
            case TWO_SWIPE_UP:
                WtcLog.debug(TAG, "onGesture: TWO_SWIPE_UP");
                break;
            default:
                WtcLog.error(TAG, "onGesture: unknown gesture \"" + gesture + "\"");
                break;
        }
        return false;
    }
}

questionAnswers(3)

yourAnswerToTheQuestion