1 /* 2 * Copyright (C) 2014 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.android.tv.settings.util; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.os.AsyncTask; 22 import android.os.IBinder; 23 import android.os.Parcel; 24 import android.os.RemoteException; 25 import android.os.ServiceManager; 26 import android.os.SystemProperties; 27 import android.util.Log; 28 29 import com.android.tv.settings.R; 30 31 public class SettingsHelper { 32 33 private static final String TAG = "SettingsHelper"; 34 private static final boolean DEBUG = false; 35 36 private final Resources mResources; 37 38 public SettingsHelper(Context context) { 39 mResources = context.getResources(); 40 } 41 42 public static void setSystemProperties(String setting, String value) { 43 SystemProperties.set(setting, value); 44 pokeSystemProperties(); 45 } 46 47 public static void setSystemProperties(String setting, boolean value) { 48 setSystemProperties(setting, Boolean.toString(value)); 49 } 50 51 public static String getSystemProperties(String setting) { 52 return SystemProperties.get(setting); 53 } 54 55 private static void pokeSystemProperties() { 56 (new SystemPropPoker()).execute(); 57 } 58 59 static class SystemPropPoker extends AsyncTask<Void, Void, Void> { 60 @Override 61 protected Void doInBackground(Void... params) { 62 String[] services; 63 try { 64 services = ServiceManager.listServices(); 65 } catch (RemoteException e) { 66 return null; 67 } 68 for (String service : services) { 69 IBinder obj = ServiceManager.checkService(service); 70 if (obj != null) { 71 Parcel data = Parcel.obtain(); 72 try { 73 obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0); 74 } catch (RemoteException e) { 75 if (DEBUG) { 76 Log.d(TAG, "SystemPropPoker", e); 77 } 78 } catch (Exception e) { 79 Log.i(TAG, "Somone wrote a bad service '" + service 80 + "' that doesn't like to be poked: " + e); 81 } 82 data.recycle(); 83 } 84 } 85 return null; 86 } 87 } 88 89 public String getStatusStringFromBoolean(boolean status) { 90 int descResId = status ? R.string.action_on_description : R.string.action_off_description; 91 return mResources.getString(descResId); 92 } 93 } 94