• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 package com.googlecode.android_scripting.facade;
18 
19 import android.app.Service;
20 import android.content.SharedPreferences;
21 import android.content.SharedPreferences.Editor;
22 import android.preference.PreferenceManager;
23 
24 import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
25 import com.googlecode.android_scripting.rpc.Rpc;
26 import com.googlecode.android_scripting.rpc.RpcOptional;
27 import com.googlecode.android_scripting.rpc.RpcParameter;
28 
29 import java.io.IOException;
30 import java.util.Map;
31 
32 /**
33  * This facade allows access to the Preferences interface.
34  *
35  * <br>
36  * <b>Notes:</b> <br>
37  * <b>filename</b> - Filename indicates which preference file to refer to. If no filename is
38  * supplied (the default) then the SharedPreferences uses is the default for the SL4A application.<br>
39  * <b>prefPutValue</b> - uses "MODE_PRIVATE" when writing to preferences. Save values to the default
40  * shared preferences is explicitly disallowed.<br>
41  * <br>
42  * See <a
43  * href=http://developer.android.com/reference/java/util/prefs/Preferences.html>Preferences</a> and
44  * <a href=http://developer.android.com/guide/topics/data/data-storage.html#pref>Shared
45  * Preferences</a> in the android documentation on how preferences work.
46  *
47  */
48 
49 public class PreferencesFacade extends RpcReceiver {
50 
51   private Service mService;
52 
PreferencesFacade(FacadeManager manager)53   public PreferencesFacade(FacadeManager manager) {
54     super(manager);
55     mService = manager.getService();
56   }
57 
58   @Rpc(description = "Read a value from shared preferences")
prefGetValue( @pcParametername = "key") String key, @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename)59   public Object prefGetValue(
60       @RpcParameter(name = "key") String key,
61       @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename) {
62     SharedPreferences p = getPref(filename);
63     return p.getAll().get(key);
64   }
65 
66   @Rpc(description = "Write a value to shared preferences")
prefPutValue( @pcParametername = "key") String key, @RpcParameter(name = "value") Object value, @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename)67   public void prefPutValue(
68       @RpcParameter(name = "key") String key,
69       @RpcParameter(name = "value") Object value,
70       @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename)
71       throws IOException {
72     if (filename == null || filename.equals("")) {
73       throw new IOException("Can't write to default preferences.");
74     }
75     SharedPreferences p = getPref(filename);
76     Editor e = p.edit();
77     if (value instanceof Boolean) {
78       e.putBoolean(key, (Boolean) value);
79     } else if (value instanceof Long) {
80       e.putLong(key, (Long) value);
81     } else if (value instanceof Integer) {
82       e.putLong(key, (Integer) value);
83     } else if (value instanceof Float) {
84       e.putFloat(key, (Float) value);
85     } else if (value instanceof Double) { // TODO: Not sure if this is a good idea
86       e.putFloat(key, ((Double) value).floatValue());
87     } else {
88       e.putString(key, value.toString());
89     }
90     e.commit();
91   }
92 
93   @Rpc(description = "Get list of Shared Preference Values", returns = "Map of key,value")
prefGetAll( @pcParametername = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @pcOptional String filename)94   public Map<String, ?> prefGetAll(
95       @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename) {
96     return getPref(filename).getAll();
97   }
98 
getPref(String filename)99   private SharedPreferences getPref(String filename) {
100     if (filename == null || filename.equals("")) {
101       return PreferenceManager.getDefaultSharedPreferences(mService);
102     }
103     return mService.getSharedPreferences(filename, 0);
104 
105   }
106 
107   @Override
shutdown()108   public void shutdown() {
109 
110   }
111 }
112