SettingsFragment.java

 1package eu.siacs.conversations.ui;
 2
 3import android.app.Dialog;
 4import android.os.Bundle;
 5import android.preference.Preference;
 6import android.preference.PreferenceFragment;
 7import android.preference.PreferenceScreen;
 8import android.view.View;
 9import android.view.ViewGroup;
10import android.view.ViewParent;
11import android.widget.FrameLayout;
12import android.widget.LinearLayout;
13
14import eu.siacs.conversations.R;
15
16public class SettingsFragment extends PreferenceFragment {
17
18	//http://stackoverflow.com/questions/16374820/action-bar-home-button-not-functional-with-nested-preferencescreen/16800527#16800527
19	private void initializeActionBar(PreferenceScreen preferenceScreen) {
20		final Dialog dialog = preferenceScreen.getDialog();
21
22		if (dialog != null) {
23			View homeBtn = dialog.findViewById(android.R.id.home);
24
25			if (homeBtn != null) {
26				View.OnClickListener dismissDialogClickListener = new View.OnClickListener() {
27					@Override
28					public void onClick(View v) {
29						dialog.dismiss();
30					}
31				};
32
33				ViewParent homeBtnContainer = homeBtn.getParent();
34
35				if (homeBtnContainer instanceof FrameLayout) {
36					ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();
37					if (containerParent instanceof LinearLayout) {
38						((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener);
39					} else {
40						((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener);
41					}
42				} else {
43					homeBtn.setOnClickListener(dismissDialogClickListener);
44				}
45			}
46		}
47	}
48
49	@Override
50	public void onCreate(Bundle savedInstanceState) {
51		super.onCreate(savedInstanceState);
52
53		// Load the preferences from an XML resource
54		addPreferencesFromResource(R.xml.preferences);
55	}
56
57	@Override
58	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
59		super.onPreferenceTreeClick(preferenceScreen, preference);
60		if (preference instanceof PreferenceScreen) {
61			initializeActionBar((PreferenceScreen) preference);
62		}
63		return false;
64	}
65}