blob: 1c6dd9af2dcaae0850a6a5f9304c9d35270a524f [file] [log] [blame]
/*
* Copyright (C) 2010 The Android-x86 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.
*
* Author: Yi Sun <beyounn@gmail.com>
*/
package com.android.settings.ethernet;
import java.util.List;
import com.android.settings.R;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.ethernet.EthernetManager;
import android.net.ethernet.EthernetDevInfo;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.util.Slog;
public class EthernetConfigDialog extends AlertDialog implements
DialogInterface.OnClickListener, AdapterView.OnItemSelectedListener, View.OnClickListener {
private final String TAG = "EtherenetSettings";
private static final boolean localLOGV = true;
private EthernetEnabler mEthEnabler;
private View mView;
private Spinner mDevList;
private TextView mDevs;
private RadioButton mConTypeDhcp;
private RadioButton mConTypeManual;
private EditText mIpaddr;
private EditText mDns;
private EditText mGw;
private EditText mMask;
private EthernetLayer mEthLayer;
private EthernetManager mEthManager;
private EthernetDevInfo mEthInfo;
private boolean mEnablePending;
public EthernetConfigDialog(Context context, EthernetEnabler Enabler) {
super(context);
mEthLayer = new EthernetLayer(this);
mEthEnabler = Enabler;
mEthManager=Enabler.getManager();
buildDialogContent(context);
}
public int buildDialogContent(Context context) {
this.setTitle(R.string.eth_config_title);
this.setView(mView = getLayoutInflater().inflate(R.layout.eth_configure, null));
mDevs = (TextView) mView.findViewById(R.id.eth_dev_list_text);
mDevList = (Spinner) mView.findViewById(R.id.eth_dev_spinner);
mConTypeDhcp = (RadioButton) mView.findViewById(R.id.dhcp_radio);
mConTypeManual = (RadioButton) mView.findViewById(R.id.manual_radio);
mIpaddr = (EditText)mView.findViewById(R.id.ipaddr_edit);
mMask = (EditText)mView.findViewById(R.id.netmask_edit);
mDns = (EditText)mView.findViewById(R.id.eth_dns_edit);
mGw = (EditText)mView.findViewById(R.id.eth_gw_edit);
mConTypeDhcp.setChecked(true);
mConTypeManual.setChecked(false);
mIpaddr.setEnabled(false);
mMask.setEnabled(false);
mDns.setEnabled(false);
mGw.setEnabled(false);
mConTypeManual.setOnClickListener(new RadioButton.OnClickListener() {
public void onClick(View v) {
mIpaddr.setEnabled(true);
mDns.setEnabled(true);
mGw.setEnabled(true);
mMask.setEnabled(true);
}
});
mConTypeDhcp.setOnClickListener(new RadioButton.OnClickListener() {
public void onClick(View v) {
mIpaddr.setEnabled(false);
mDns.setEnabled(false);
mGw.setEnabled(false);
mMask.setEnabled(false);
}
});
this.setInverseBackgroundForced(true);
this.setButton(BUTTON_POSITIVE, context.getText(R.string.menu_save), this);
this.setButton(BUTTON_NEGATIVE, context.getText(R.string.menu_cancel), this);
String[] Devs = mEthEnabler.getManager().getDeviceNameList();
if (Devs != null) {
if (localLOGV)
Slog.v(TAG, "found device: " + Devs[0]);
updateDevNameList(Devs);
if (mEthManager.isConfigured()) {
mEthInfo = mEthManager.getSavedConfig();
for (int i = 0 ; i < Devs.length; i++) {
if (Devs[i].equals(mEthInfo.getIfName())) {
mDevList.setSelection(i);
break;
}
}
mIpaddr.setText(mEthInfo.getIpAddress());
mGw.setText(mEthInfo.getRouteAddr());
mDns.setText(mEthInfo.getDnsAddr());
mMask.setText(mEthInfo.getNetMask());
if (mEthInfo.getConnectMode().equals(EthernetDevInfo.ETHERNET_CONN_MODE_DHCP)) {
mIpaddr.setEnabled(false);
mDns.setEnabled(false);
mGw.setEnabled(false);
mMask.setEnabled(false);
} else {
mConTypeDhcp.setChecked(false);
mConTypeManual.setChecked(true);
mIpaddr.setEnabled(true);
mDns.setEnabled(true);
mGw.setEnabled(true);
mMask.setEnabled(true);
}
}
}
return 0;
}
private void handle_saveconf() {
EthernetDevInfo info = new EthernetDevInfo();
info.setIfName(mDevList.getSelectedItem().toString());
if (localLOGV)
Slog.v(TAG, "Config device for " + mDevList.getSelectedItem().toString());
if (mConTypeDhcp.isChecked()) {
Slog.v(TAG, "Config device for DHCP ");
info.setConnectMode(EthernetDevInfo.ETHERNET_CONN_MODE_DHCP);
info.setIpAddress(null);
info.setRouteAddr(null);
info.setDnsAddr(null);
info.setNetMask(null);
} else {
Slog.v(TAG, "Config device for static " + mIpaddr.getText().toString() + mGw.getText().toString() + mDns.getText().toString() + mMask.getText().toString());
info.setConnectMode(EthernetDevInfo.ETHERNET_CONN_MODE_MANUAL);
info.setIpAddress(mIpaddr.getText().toString());
info.setRouteAddr(mGw.getText().toString());
info.setDnsAddr(mDns.getText().toString());
info.setNetMask(mMask.getText().toString());
}
mEthManager.updateDevInfo(info);
if (mEnablePending) {
mEthManager.setEnabled(true);
mEnablePending = false;
}
}
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
handle_saveconf();
break;
case BUTTON_NEGATIVE:
//Don't need to do anything
break;
default:
Slog.e(TAG,"Unknow button");
}
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
public void onNothingSelected(AdapterView<?> parent) {
}
public void onClick(View v) {
}
public void updateDevNameList(String[] DevList) {
if (DevList != null) {
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
getContext(), android.R.layout.simple_spinner_item, DevList);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
mDevList.setAdapter(adapter);
}
}
public void enableAfterConfig() {
mEnablePending = true;
}
}