/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.googlecode.android_scripting.facade; import android.app.Service; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.PreferenceManager; import com.googlecode.android_scripting.jsonrpc.RpcReceiver; import com.googlecode.android_scripting.rpc.Rpc; import com.googlecode.android_scripting.rpc.RpcOptional; import com.googlecode.android_scripting.rpc.RpcParameter; import java.io.IOException; import java.util.Map; /** * This facade allows access to the Preferences interface. * *
* Notes:
* filename - Filename indicates which preference file to refer to. If no filename is * supplied (the default) then the SharedPreferences uses is the default for the SL4A application.
* prefPutValue - uses "MODE_PRIVATE" when writing to preferences. Save values to the default * shared preferences is explicitly disallowed.
*
* See Preferences and * Shared * Preferences in the android documentation on how preferences work. * */ public class PreferencesFacade extends RpcReceiver { private Service mService; public PreferencesFacade(FacadeManager manager) { super(manager); mService = manager.getService(); } @Rpc(description = "Read a value from shared preferences") public Object prefGetValue( @RpcParameter(name = "key") String key, @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename) { SharedPreferences p = getPref(filename); return p.getAll().get(key); } @Rpc(description = "Write a value to shared preferences") public void prefPutValue( @RpcParameter(name = "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) throws IOException { if (filename == null || filename.equals("")) { throw new IOException("Can't write to default preferences."); } SharedPreferences p = getPref(filename); Editor e = p.edit(); if (value instanceof Boolean) { e.putBoolean(key, (Boolean) value); } else if (value instanceof Long) { e.putLong(key, (Long) value); } else if (value instanceof Integer) { e.putLong(key, (Integer) value); } else if (value instanceof Float) { e.putFloat(key, (Float) value); } else if (value instanceof Double) { // TODO: Not sure if this is a good idea e.putFloat(key, ((Double) value).floatValue()); } else { e.putString(key, value.toString()); } e.commit(); } @Rpc(description = "Get list of Shared Preference Values", returns = "Map of key,value") public Map prefGetAll( @RpcParameter(name = "filename", description = "Desired preferences file. If not defined, uses the default Shared Preferences.") @RpcOptional String filename) { return getPref(filename).getAll(); } private SharedPreferences getPref(String filename) { if (filename == null || filename.equals("")) { return PreferenceManager.getDefaultSharedPreferences(mService); } return mService.getSharedPreferences(filename, 0); } @Override public void shutdown() { } }