• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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  */
16 package com.android.dreams.phototable;
17 
18 import android.content.SharedPreferences;
19 
20 import java.util.Collection;
21 import java.util.HashMap;
22 import java.util.HashSet;
23 import java.util.Set;
24 
25 /**
26  * Common utilities for album settings.
27  */
28 public class AlbumSettings {
29     public static final String ALBUM_SET = "Enabled Album Set V2";
30 
31     private static HashMap<SharedPreferences, AlbumSettings> singletons;
32 
33     private final SharedPreferences mSettings;
34     private final HashSet<String> mEnabledAlbums;
35 
getAlbumSettings(SharedPreferences settings)36     public static AlbumSettings getAlbumSettings(SharedPreferences settings) {
37         if (singletons == null) {
38             singletons = new HashMap<SharedPreferences, AlbumSettings>();
39         }
40         if (!singletons.containsKey(settings)) {
41             singletons.put(settings, new AlbumSettings(settings));
42         }
43         return singletons.get(settings);
44     }
45 
readEnabledAlbums()46     public void readEnabledAlbums() {
47         synchronized (mEnabledAlbums) {
48             readEnabledAlbumsLocked();
49         }
50     }
51 
isAlbumEnabled(String albumId)52     public boolean isAlbumEnabled(String albumId) {
53         synchronized (mEnabledAlbums) {
54             boolean isEnabled = mEnabledAlbums.contains(albumId);
55             return mEnabledAlbums.contains(albumId);
56         }
57     }
58 
setAlbumEnabled(String albumId, boolean enabled)59     public void setAlbumEnabled(String albumId, boolean enabled) {
60         if (isAlbumEnabled(albumId) != enabled) {
61             synchronized (mEnabledAlbums) {
62                 readEnabledAlbumsLocked();
63                 if (enabled) {
64                     mEnabledAlbums.add(albumId);
65                 } else {
66                     mEnabledAlbums.remove(albumId);
67                 }
68                 writeEnabledAlbumsLocked();
69             }
70         }
71     }
72 
pruneObsoleteSettings(Collection<String> validAlbums)73     public void pruneObsoleteSettings(Collection<String> validAlbums) {
74         if (!validAlbums.containsAll(mEnabledAlbums)) {
75             synchronized (mEnabledAlbums) {
76                 readEnabledAlbumsLocked();
77                 mEnabledAlbums.retainAll(validAlbums);
78                 writeEnabledAlbumsLocked();
79             }
80         }
81     }
82 
isConfigured()83     public  boolean isConfigured() {
84         synchronized (mEnabledAlbums) {
85             return mEnabledAlbums.size() != 0;
86         }
87     }
88 
AlbumSettings(SharedPreferences settings)89     private AlbumSettings(SharedPreferences settings) {
90         mSettings = settings;
91         mEnabledAlbums = new HashSet<String>();
92         readEnabledAlbums();
93     }
94 
readEnabledAlbumsLocked()95     private void readEnabledAlbumsLocked() {
96         Set<String> enabledAlbums = mSettings.getStringSet(ALBUM_SET, null);
97         mEnabledAlbums.clear();
98         if (enabledAlbums != null) {
99             mEnabledAlbums.addAll(enabledAlbums);
100         }
101     }
102 
writeEnabledAlbumsLocked()103     private void writeEnabledAlbumsLocked() {
104         SharedPreferences.Editor editor = mSettings.edit();
105         // Give SharedSettings a copy, so that we are free to manipulate ours.
106         editor.putStringSet(ALBUM_SET, new HashSet<String>(mEnabledAlbums));
107         editor.commit();
108     }
109 }
110