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}