Revert "New setting: "Small screen" to avoid ellipsizing on small screens"
[f-droid:fdroidclient.git] / src / org / fdroid / fdroid / Preferences.java
1 package org.fdroid.fdroid;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.content.Context;
9 import android.content.SharedPreferences;
10 import android.preference.PreferenceManager;
11 import android.util.Log;
12
13 /**
14  * Handles shared preferences for FDroid, looking after the names of
15  * preferences, default values and caching. Needs to be setup in the FDroidApp
16  * (using {@link Preferences#setup(android.content.Context)} before it gets
17  * accessed via the {@link org.fdroid.fdroid.Preferences#get()}
18  * singleton method.
19  */
20 public class Preferences implements SharedPreferences.OnSharedPreferenceChangeListener {
21
22     private final SharedPreferences preferences;
23
24     private Preferences(Context context) {
25         preferences = PreferenceManager.getDefaultSharedPreferences(context);
26         preferences.registerOnSharedPreferenceChangeListener(this);
27     }
28
29     public static final String PREF_UPD_INTERVAL = "updateInterval";
30     public static final String PREF_UPD_WIFI_ONLY = "updateOnWifiOnly";
31     public static final String PREF_UPD_NOTIFY = "updateNotify";
32     public static final String PREF_UPD_HISTORY = "updateHistoryDays";
33     public static final String PREF_ROOTED = "rooted";
34     public static final String PREF_INCOMP_VER = "incompatibleVersions";
35     public static final String PREF_THEME = "theme";
36     public static final String PREF_PERMISSIONS = "showPermissions";
37     public static final String PREF_COMPACT_LAYOUT = "compactlayout";
38     public static final String PREF_IGN_TOUCH = "ignoreTouchscreen";
39     public static final String PREF_CACHE_APK = "cacheDownloaded";
40     public static final String PREF_EXPERT = "expert";
41     public static final String PREF_DB_SYNC = "dbSyncMode";
42     public static final String PREF_UPD_LAST = "lastUpdateCheck";
43
44     private static final boolean DEFAULT_COMPACT_LAYOUT = false;
45
46     private boolean compactLayout = DEFAULT_COMPACT_LAYOUT;
47
48     private Map<String,Boolean> initialized = new HashMap<String,Boolean>();
49     private List<ChangeListener> compactLayoutListeners = new ArrayList<ChangeListener>();
50
51     private boolean isInitialized(String key) {
52         return initialized.containsKey(key) && initialized.get(key);
53     }
54
55     private void initialize(String key) {
56         initialized.put(key, true);
57     }
58
59     private void uninitialize(String key) {
60         initialized.put(key, false);
61     }
62
63     public boolean hasCompactLayout() {
64         if (!isInitialized(PREF_COMPACT_LAYOUT)) {
65             initialize(PREF_COMPACT_LAYOUT);
66             compactLayout = preferences.getBoolean(PREF_COMPACT_LAYOUT, DEFAULT_COMPACT_LAYOUT);
67         }
68         return compactLayout;
69     }
70
71     public void registerCompactLayoutChangeListener(ChangeListener listener) {
72         compactLayoutListeners.add(listener);
73     }
74
75     public void unregisterCompactLayoutChangeListener(ChangeListener listener) {
76         compactLayoutListeners.remove(listener);
77     }
78
79     @Override
80     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
81         Log.d("FDroid", "Invalidating preference '" + key + "'.");
82         uninitialize(key);
83
84         if (key.equals(PREF_COMPACT_LAYOUT)) {
85             for ( ChangeListener listener : compactLayoutListeners )  {
86                 listener.onPreferenceChange();
87             }
88         }
89     }
90
91     private static Preferences instance;
92
93     public static void setup(Context context) {
94         if (instance != null) {
95             String error = "Attempted to reinitialize preferences after it " +
96                     "has already been initialized in FDroidApp";
97             Log.e("FDroid", error);
98             throw new RuntimeException(error);
99         }
100         instance = new Preferences(context);
101     }
102
103     public static Preferences get() {
104         if (instance == null) {
105             String error = "Attempted to access preferences before it " +
106                     "has been initialized in FDroidApp";
107             Log.e("FDroid", error);
108             throw new RuntimeException(error);
109         }
110         return instance;
111     }
112
113     public static interface ChangeListener {
114         public void onPreferenceChange();
115     }
116
117 }