• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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  */
17 
18 package com.android.settings.search2;
19 
20 import android.content.Context;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 import android.provider.Settings;
24 
25 import java.util.Map;
26 
27 /**
28  * Payload for inline Switch results. Mappings from integer to boolean.
29  */
30 public class InlineSwitchPayload extends InlinePayload {
31     /**
32      * Maps Inline values to UI-consumable Values.
33      * For example, if you have a switch preference whose values are stored as ints, the two valid
34      * list of mappings would be:
35      * < (0,True), (1, false) >
36      * < (1,True), (0, false) >
37      */
38     public final Map<Integer, Boolean> valueMap;
39 
InlineSwitchPayload(String newUri, @SettingsSource int settingsSource, Map<Integer, Boolean> map)40     public InlineSwitchPayload(String newUri, @SettingsSource int settingsSource,
41             Map<Integer, Boolean> map) {
42         super(newUri, PayloadType.INLINE_SWITCH, settingsSource);
43         valueMap = map;
44     }
45 
InlineSwitchPayload(Parcel in)46     private InlineSwitchPayload(Parcel in) {
47         super(in.readString() /* Uri */ , in.readInt() /* Payload Type */,
48                 in.readInt() /* Settings Source */);
49         valueMap = in.readHashMap(Integer.class.getClassLoader());
50     }
51 
52     @Override
getType()53     public int getType() {
54         return inlineType;
55     }
56 
57     @Override
describeContents()58     public int describeContents() {
59         return 0;
60     }
61 
62     @Override
writeToParcel(Parcel dest, int flags)63     public void writeToParcel(Parcel dest, int flags) {
64         dest.writeString(settingsUri);
65         dest.writeInt(inlineType);
66         dest.writeInt(settingSource);
67         dest.writeMap(valueMap);
68     }
69 
70     public static final Parcelable.Creator<InlineSwitchPayload> CREATOR =
71             new Parcelable.Creator<InlineSwitchPayload>() {
72         @Override
73         public InlineSwitchPayload createFromParcel(Parcel in) {
74             return new InlineSwitchPayload(in);
75         }
76 
77         @Override
78         public InlineSwitchPayload[] newArray(int size) {
79             return new InlineSwitchPayload[size];
80         }
81     };
82 
getSwitchValue(Context context)83     public boolean getSwitchValue(Context context) {
84         if (valueMap == null) {
85             throw new IllegalStateException("Value map is null");
86         }
87 
88         int settingsValue = -1;
89         switch(settingSource) {
90             case SettingsSource.SECURE:
91                 settingsValue = Settings.Secure.getInt(context.getContentResolver(),
92                         settingsUri, 0);
93                 break;
94             case SettingsSource.SYSTEM:
95                 settingsValue = Settings.System.getInt(context.getContentResolver(),
96                         settingsUri, 0);
97                 break;
98 
99             case SettingsSource.GLOBAL:
100                 settingsValue = Settings.Global.getInt(context.getContentResolver(),
101                         settingsUri, 0);
102                 break;
103         }
104 
105         if (settingsValue == -1) {
106             throw new IllegalStateException("Unable to find setting from uri: "
107                     + settingsUri.toString());
108         }
109 
110         for (Integer key : valueMap.keySet()) {
111             if ((key == settingsValue)) {
112                 return valueMap.get(key);
113             }
114         }
115 
116         throw new IllegalStateException("No results matched the key: " + settingsValue);
117     }
118 
setSwitchValue(Context context, boolean isChecked)119     public void setSwitchValue(Context context, boolean isChecked) {
120         if (valueMap == null) {
121             throw new IllegalStateException("Value map is null");
122         }
123         int switchValue = -1;
124 
125         for (Map.Entry<Integer, Boolean> pair : valueMap.entrySet()) {
126             if (pair.getValue() == isChecked) {
127                 switchValue = pair.getKey();
128                 break;
129             }
130         }
131 
132         if (switchValue == -1) {
133             throw new IllegalStateException("Switch value is not set");
134         }
135 
136         switch(settingSource) {
137             case SettingsSource.GLOBAL:
138                 Settings.Global.putInt(context.getContentResolver(), settingsUri, switchValue);
139                 return;
140             case SettingsSource.SECURE:
141                 Settings.Secure.putInt(context.getContentResolver(), settingsUri, switchValue);
142                 return;
143             case SettingsSource.SYSTEM:
144                 Settings.System.putInt(context.getContentResolver(), settingsUri, switchValue);
145                 return;
146             case SettingsSource.UNKNOWN:
147                 return;
148         }
149     }
150 }
151