package com.android.settings.ethernet;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ContentResolver;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.text.TextUtils;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.Formatter;
import java.net.InetAddress;
import android.net.EthernetManager;
import android.net.StaticIpConfiguration;
import android.net.LinkAddress;
import android.net.IpConfiguration;
import android.net.IpConfiguration.IpAssignment;
import android.net.IpConfiguration.ProxySettings;
import android.net.NetworkInfo.DetailedState;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.content.Context;
import android.net.NetworkInfo;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.app.AlertDialog;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.R;
import com.android.internal.logging.MetricsLogger;
public class EthernetStaticIP extends SettingsPreferenceFragment
implements Preference.OnPreferenceChangeListener {
private static final String TAG = "EthernetStaticIP";
public static final boolean DEBUG = false;
private static void LOG(String msg) {
if ( DEBUG ) {
Log.d(TAG, msg);
}
}
/*-------------------------------------------------------*/
private static final String KEY_USE_STATIC_IP = "use_static_ip";
private static final String KEY_IP_ADDRESS = "ip_address";
private static final String KEY_GATEWAY = "gateway";
private static final String KEY_NETMASK = "netmask";
private static final String KEY_DNS1 = "dns1";
private static final String KEY_DNS2 = "dns2";
private static final String ETHERNET_USE_STATIC_IP = Settings.IS_ETHERNET_STATUC_OPEN;
private static final int MENU_ITEM_SAVE = Menu.FIRST;
private static final int MENU_ITEM_CANCEL = Menu.FIRST + 1;
private String[] mSettingNames = {
Settings.ETHERNET_STATIC_IP,
Settings.ETHERNET_STATIC_GATEWAY,
Settings.ETHERNET_STATIC_NETMASK,
Settings.ETHERNET_STATIC_DNS1,
Settings.ETHERNET_STATIC_DNS2
};
private String[] mPreferenceKeys = {
KEY_IP_ADDRESS,
KEY_GATEWAY,
KEY_NETMASK,
KEY_DNS1,
KEY_DNS2,
};
/*-------------------------------------------------------*/
private CheckBoxPreference mUseStaticIpCheckBox;
private StaticIpConfiguration mStaticIpConfiguration;
private IpConfiguration mIpConfiguration;
private EthernetManager mEthernetManager;
private boolean isOnPause = false;
private boolean chageState = false;
//============================
// Activity lifecycle
//============================
public EthernetStaticIP() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
addPreferencesFromResource(R.xml.ethernet_static_ip);
mUseStaticIpCheckBox = (CheckBoxPreference)findPreference(KEY_USE_STATIC_IP);
for ( int i = 0; i < mPreferenceKeys.length; i++ ) {
Preference preference = findPreference(mPreferenceKeys[i] );
preference.setOnPreferenceChangeListener(this);
}
setHasOptionsMenu(true);
}
@Override
public void onResume() {
super.onResume();
if(!isOnPause) {
updateIpSettingsInfo();
}
isOnPause = false;
}
@Override
protected int getMetricsCategory(){return MetricsLogger.ETHERNET_STATIC;}
@Override
public void onPause() {
isOnPause = true;
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.add(Menu.NONE, MENU_ITEM_SAVE, 0, R.string.save_satic_ethernet)
.setEnabled(true)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_SAVE:
saveIpSettingsInfo();
if(isIpDataInUiComplete())
finish();
return true;
case MENU_ITEM_CANCEL:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void updateIpSettingsInfo() {
LOG("Static IP status updateIpSettingsInfo");
ContentResolver contentResolver = getContentResolver();
mUseStaticIpCheckBox.setChecked(Settings.System.getInt(contentResolver, ETHERNET_USE_STATIC_IP, 0) != 0);
for (int i = 0; i < mSettingNames.length; i++) {
EditTextPreference preference = (EditTextPreference) findPreference(mPreferenceKeys[i]);
String settingValue = Settings.System.getString(contentResolver, mSettingNames[i]);
preference.setText(settingValue);
preference.setSummary(settingValue);
}
}
private void saveIpSettingsInfo() {
ContentResolver contentResolver = getContentResolver();
if(!chageState)
return;
if(!isIpDataInUiComplete())
{
Toast.makeText(getActivity(), R.string.eth_ip_settings_please_complete_settings, Toast.LENGTH_LONG).show();
return;
}
mIpConfiguration = new IpConfiguration();
mStaticIpConfiguration = new StaticIpConfiguration();
for (int i = 0; i < mSettingNames.length; i++) {
EditTextPreference preference = (EditTextPreference) findPreference(mPreferenceKeys[i]);
String text = preference.getText();
try {
switch (mPreferenceKeys[i]) {
case KEY_IP_ADDRESS:
mStaticIpConfiguration.ipAddress = new LinkAddress(InetAddress.getByName(text), 24);
break;
case KEY_GATEWAY:
mStaticIpConfiguration.gateway = InetAddress.getByName(text);
break;
case KEY_NETMASK:
mStaticIpConfiguration.domains = text;
break;
case KEY_DNS1:
mStaticIpConfiguration.dnsServers.add(InetAddress.getByName(text));
break;
case KEY_DNS2:
mStaticIpConfiguration.dnsServers.add(InetAddress.getByName(text));
break;
}
} catch (Exception e) {
e.printStackTrace();
}
if ( null == text || TextUtils.isEmpty(text) ) {
Settings.System.putString(contentResolver, mSettingNames[i], null);
}
else {
Settings.System.putString(contentResolver, mSe
- 1
- 2
- 3
- 4
前往页