1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.quicksearchbox.preferences;
17
18import com.android.quicksearchbox.Corpora;
19import com.android.quicksearchbox.QsbApplication;
20import com.android.quicksearchbox.SearchSettings;
21import com.android.quicksearchbox.ShortcutRepository;
22
23import android.content.Context;
24import android.preference.Preference;
25
26import java.util.ArrayList;
27
28/**
29 * Class to handle logic behind the preferences in settings.
30 */
31public class PreferenceControllerFactory implements PreferenceController {
32
33    private final SearchSettings mSettings;
34    private final Context mContext;
35    private final ArrayList<PreferenceController> mControllers;
36
37    public PreferenceControllerFactory(SearchSettings settings, Context context) {
38        mSettings = settings;
39        mContext = context;
40        mControllers = new ArrayList<PreferenceController>();
41    }
42
43    protected Context getContext() {
44        return mContext;
45    }
46
47    public void handlePreference(Preference p) {
48        String key = p.getKey();
49        if (key == null) return;
50        if (SearchableItemsController.SEARCH_CORPORA_PREF.equals(key)) {
51            Corpora corpora = QsbApplication.get(mContext).getCorpora();
52            addController(new SearchableItemsController(mSettings, corpora, getContext()), p);
53        } else if (ClearShortcutsController.CLEAR_SHORTCUTS_PREF.equals(key)) {
54            ShortcutRepository shortcuts = QsbApplication.get(getContext()).getShortcutRepository();
55            addController(new ClearShortcutsController(shortcuts), p);
56        } else {
57            throw new UnknownPreferenceException(p);
58        }
59    }
60
61    public void onCreateComplete() {
62        for (PreferenceController controller : mControllers) {
63            controller.onCreateComplete();
64        }
65    }
66
67    public void onResume() {
68        for (PreferenceController controller : mControllers) {
69            controller.onResume();
70        }
71    }
72
73    public void onStop() {
74        for (PreferenceController controller : mControllers) {
75            controller.onStop();
76        }
77    }
78
79    public void onDestroy() {
80        for (PreferenceController controller : mControllers) {
81            controller.onDestroy();
82        }
83    }
84
85    protected void addController(PreferenceController controller, Preference forPreference) {
86        mControllers.add(controller);
87        controller.handlePreference(forPreference);
88    }
89
90    private static class UnknownPreferenceException extends RuntimeException {
91        public UnknownPreferenceException(Preference p) {
92            super("Preference key " + p.getKey() + "; class: " + p.getClass().toString());
93        }
94    }
95}
96