/* * Copyright (c) 2017 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.ui; import android.content.Context; import android.support.v4.app.FragmentManager; import android.support.v7.preference.DialogPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceFragmentCompat; import android.util.AttributeSet; import de.psdev.licensesdialog.LicensesDialogFragment; import me.zhanghai.android.douya.R; public class LicensesDialogPreference extends DialogPreference { // As in PreferenceFragmentCompat, because we want to ensure that at most one dialog is showing. private static final String DIALOG_FRAGMENT_TAG = "android.support.v7.preference.PreferenceFragment.DIALOG"; /** * Users should override {@link PreferenceFragmentCompat#onDisplayPreferenceDialog(Preference)} * and check the return value of this method, only call through to super implementation if * {@code false} is returned. * * @param preferenceFragment The preference fragment * @param preference The preference, as in * {@link PreferenceFragmentCompat#onDisplayPreferenceDialog(Preference)} * @return Whether the call has been handled by this method. */ public static boolean onDisplayPreferenceDialog(PreferenceFragmentCompat preferenceFragment, Preference preference) { if (preference instanceof LicensesDialogPreference) { // getChildFragmentManager() will lead to looking for target fragment in the child // fragment manager. FragmentManager fragmentManager = preferenceFragment.getFragmentManager(); if(fragmentManager.findFragmentByTag(DIALOG_FRAGMENT_TAG) == null) { LicensesDialogFragment dialogFragment = new LicensesDialogFragment.Builder(preferenceFragment.getActivity()) .setNotices(R.raw.licenses) .setUseAppCompat(true) .build(); dialogFragment.setTargetFragment(preferenceFragment, 0); dialogFragment.show(fragmentManager, DIALOG_FRAGMENT_TAG); } return true; } return false; } public LicensesDialogPreference(Context context) { super(context); } public LicensesDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); } public LicensesDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public LicensesDialogPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } }