PreferenceFragment no puede desplazarse hacia arriba / abajo en XE16 (funcionó bien en XE12)

Tengo algunas preferencias de usuario, en su mayoría simples casillas de verificación, en mi aplicación Glass GDK. No pude encontrar un paradigma de preferencia específico de vidrio, así que usé PreferenceFragment y funcionó bien en XE12.

FYI: Cuando lo implementé, inicialmente se veía mal, pero lo mejoré usando el siguiente estilo en el Manifiesto de Android para mi Actividad de configuración:

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

No tenía otra opciónno actualizar a XE16 (aparte de desactivar la conectividad de red). Después de la actualización, modifiqué los usos de la API de mi aplicación para los pocos cambios XE16. Todo funcionó principalmente.

Lo primero que noté fue que al deslizar hacia abajo en MainActivity de mi inmersión ya no volvería a la Live Card. Lo arreglé haciendo que mi controlador onGesture de MainActivity devuelva falso para Gesture.SWIPE_DOWN.

La segunda cosa que noté es el propósito de esta pregunta: My SettingsActivity que envuelve un PreferenceFragment ya no me permite moverme hacia arriba y hacia abajo en la lista de preferencias usando el deslizamiento hacia la izquierda y hacia la derecha. Mi código está al final de esta publicación. Agregué un GestureDetector para ayudar a depurar este problema después de que se notó. Puedo ver que SWIPE_LEFT y SWIPE_RIGHT se registran, pero no importa lo que devuelva, o incluso si elimino el código de gesto, la selección de la lista de preferencias nunca se mueve desde el primer elemento. El primer elemento es un CheckBoxPreference, quehace alternar cuando toco.

He visto varias otras aplicaciones de Glass que usan las preferencias de Android (ya sea PreferenceActivity o PreferenceFragment), y todas ellas también parecen estar rotas.

¿Cómo implementar adecuadamente las preferencias en Glass o cómo hacer que 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;
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta