1 /* 2 * Copyright (C) 2009 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.settings.vpn; 18 19 import com.android.settings.R; 20 21 import android.content.Context; 22 import android.net.vpn.L2tpProfile; 23 import android.preference.CheckBoxPreference; 24 import android.preference.EditTextPreference; 25 import android.preference.Preference; 26 import android.preference.PreferenceGroup; 27 28 /** 29 * The class for editing {@link L2tpProfile}. 30 */ 31 class L2tpEditor extends VpnProfileEditor { 32 private CheckBoxPreference mSecret; 33 private SecretHandler mSecretHandler; 34 35 public L2tpEditor(L2tpProfile p) { 36 super(p); 37 } 38 39 @Override 40 protected void loadExtraPreferencesTo(PreferenceGroup subpanel) { 41 Context c = subpanel.getContext(); 42 subpanel.addPreference(createSecretPreference(c)); 43 subpanel.addPreference(createSecretStringPreference(c)); 44 45 L2tpProfile profile = (L2tpProfile) getProfile(); 46 } 47 48 @Override 49 public String validate() { 50 String result = super.validate(); 51 if (!mSecret.isChecked()) return result; 52 53 return ((result != null) ? result : mSecretHandler.validate()); 54 } 55 56 private Preference createSecretPreference(Context c) { 57 final L2tpProfile profile = (L2tpProfile) getProfile(); 58 CheckBoxPreference secret = mSecret = new CheckBoxPreference(c); 59 boolean enabled = profile.isSecretEnabled(); 60 setCheckBoxTitle(secret, R.string.vpn_l2tp_secret); 61 secret.setChecked(enabled); 62 setSecretSummary(secret, enabled); 63 secret.setOnPreferenceChangeListener( 64 new Preference.OnPreferenceChangeListener() { 65 public boolean onPreferenceChange( 66 Preference pref, Object newValue) { 67 boolean enabled = (Boolean) newValue; 68 profile.setSecretEnabled(enabled); 69 mSecretHandler.getPreference().setEnabled(enabled); 70 setSecretSummary(mSecret, enabled); 71 return true; 72 } 73 }); 74 return secret; 75 } 76 77 private Preference createSecretStringPreference(Context c) { 78 SecretHandler sHandler = mSecretHandler = new SecretHandler(c, 79 R.string.vpn_l2tp_secret_string_title, 80 R.string.vpn_l2tp_secret) { 81 @Override 82 protected String getSecretFromProfile() { 83 return ((L2tpProfile) getProfile()).getSecretString(); 84 } 85 86 @Override 87 protected void saveSecretToProfile(String secret) { 88 ((L2tpProfile) getProfile()).setSecretString(secret); 89 } 90 }; 91 Preference pref = sHandler.getPreference(); 92 pref.setEnabled(mSecret.isChecked()); 93 return pref; 94 } 95 96 private void setSecretSummary(CheckBoxPreference secret, boolean enabled) { 97 Context c = secret.getContext(); 98 String formatString = c.getString(enabled 99 ? R.string.vpn_is_enabled 100 : R.string.vpn_is_disabled); 101 secret.setSummary(String.format( 102 formatString, c.getString(R.string.vpn_l2tp_secret))); 103 } 104 } 105