package android.support.v17.preference {

  public abstract class BaseLeanbackPreferenceFragment extends android.support.v14.preference.PreferenceFragment {
    ctor public BaseLeanbackPreferenceFragment();
  }

  public class LeanbackListPreferenceDialogFragment extends android.support.v17.preference.LeanbackPreferenceDialogFragment {
    ctor public LeanbackListPreferenceDialogFragment();
    method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
    method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
    method public android.support.v7.widget.RecyclerView.Adapter onCreateAdapter();
  }

  public class LeanbackListPreferenceDialogFragment.AdapterMulti extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
    ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
    method public int getItemCount();
    method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
    method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
    method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
  }

  public class LeanbackListPreferenceDialogFragment.AdapterSingle extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
    ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
    method public int getItemCount();
    method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
    method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
    method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
  }

  public static class LeanbackListPreferenceDialogFragment.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
    ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
    method public android.view.ViewGroup getContainer();
    method public android.widget.TextView getTitleView();
    method public android.widget.Checkable getWidgetView();
    method public void onClick(android.view.View);
  }

  public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
    method public abstract void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
  }

  public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
    ctor public LeanbackPreferenceDialogFragment();
    method public android.support.v7.preference.DialogPreference getPreference();
    field public static final java.lang.String ARG_KEY = "key";
  }

  public abstract class LeanbackPreferenceFragment extends android.support.v17.preference.BaseLeanbackPreferenceFragment {
    ctor public LeanbackPreferenceFragment();
    method public void setTitle(java.lang.CharSequence);
  }

  public abstract class LeanbackSettingsFragment extends android.app.Fragment {
    ctor public LeanbackSettingsFragment();
    method public boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
    method public abstract void onPreferenceStartInitialScreen();
    method public void startImmersiveFragment(android.app.Fragment);
    method public void startPreferenceFragment(android.app.Fragment);
  }

}

