SettingsFragment.java

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