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}