package com.jacky.compatible.launcher.features.wifi;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import com.jacky.launcher.R;
import com.jacky.compatible.launcher.adapter.WAndB_WifilistAdapter;
import com.jacky.compatible.launcher.utils.WiFiAdmin;
import java.util.List;
public class WifiActivity extends Activity implements OnClickListener,OnItemClickListener {
private static final int WIFI_OPEN_FINISH=1;//开启完成
private static final int WIFI_FOUND_FINISH=0;//查找完成
private static final int WIFI_SCAN=2;//wifi扫描
private static final int WIFI_CLOSE=3;//关闭wifi
private static final int WIFI_INFO=4;
private static final int WIFI_STATE_INIT=5;//加载页面
private ListView wifiListView;
private WAndB_WifilistAdapter adapter;
private List<ScanResult> scanResults;
private WiFiAdmin wiFiAdmin;
private Switch wifiSwitch;
private String connectSSID ="";
private TextView wifiStateDisplay;
private ImageView arrowTop;
private Dialog connectDialog;
private int netId;//WIFI连接状态
@SuppressLint("HandlerLeak")
private final Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WIFI_FOUND_FINISH:
scanResults=wiFiAdmin.GetWifilist();
adapter.notifyDataSetChanged();
break;
case WIFI_STATE_INIT:
int wifiState=wiFiAdmin.GetWifiState();
if(wifiState==wiFiAdmin.getWifiManager().WIFI_STATE_DISABLED){ //wifi不可用啊
wifiStateDisplay.setText("WiFi 网卡未打开");
}else if(wifiState==wiFiAdmin.getWifiManager().WIFI_STATE_UNKNOWN){//wifi 状态未知
wifiStateDisplay.setText("WiFi 网卡状态未知");
}else if(wifiState==wiFiAdmin.getWifiManager().WIFI_STATE_ENABLED){//OK 可用
wifiSwitch.setChecked(true);
wiFiAdmin.StartScan();
scanResults =wiFiAdmin.GetWifilist();
handler.sendEmptyMessageDelayed(WIFI_SCAN, 1000);
if(wiFiAdmin.isWifiEnable()){
Toast.makeText(WifiActivity.this, "wifi已经打开", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(WifiActivity.this, "请 开启 wifi", Toast.LENGTH_SHORT).show();
}
}
break;
case WIFI_OPEN_FINISH:
scanResults=wiFiAdmin.GetWifilist();
adapter=new WAndB_WifilistAdapter(WifiActivity.this, scanResults);
wifiListView.setAdapter(adapter);
break;
case WIFI_SCAN:
wiFiAdmin.StartScan();
scanResults=wiFiAdmin.GetWifilist();
wifiStateDisplay.setText("正在扫描附近的WIFI...");
if(scanResults==null){
handler.sendEmptyMessageDelayed(WIFI_SCAN, 1000);
}else if(scanResults.size()==0){
handler.sendEmptyMessageDelayed(WIFI_SCAN, 1000);
SetScanResult();
}else{
wifiStateDisplay.setText("附近WiFi");
adapter=new WAndB_WifilistAdapter(WifiActivity.this, scanResults);
wifiListView.setAdapter(adapter);
}
break;
case WIFI_CLOSE:
SetScanResult();
wifiStateDisplay.setText("WIFI已关闭");
break;
case WIFI_INFO:
if(wiFiAdmin.GetSSID().endsWith("<unknown ssid>")||wiFiAdmin.GetSSID().endsWith("NULL")){
wiFiAdmin.getWifiConnectInfo();
wifiStateDisplay.setText("无WIFI连接");
handler.sendEmptyMessageDelayed(WIFI_INFO, 2500);
}else if(wiFiAdmin.GetSSID().equals("NULL")){
wiFiAdmin.getWifiConnectInfo();
wifiStateDisplay.setText("无连接,请选择合适的WiFi连接");
handler.sendEmptyMessageDelayed(WIFI_INFO, 2500);
}else{
wiFiAdmin.getWifiConnectInfo();
if(wiFiAdmin.GetIntIp().equals("")){
handler.sendEmptyMessageDelayed(WIFI_INFO, 2500);
}
wifiStateDisplay.setText("已连接到"+wiFiAdmin.GetSSID()+"若切换有线网络请连接网线");
connectDialog.dismiss();
connectSSID =wiFiAdmin.GetSSID();
Toast.makeText(WifiActivity.this, connectSSID, Toast.LENGTH_SHORT).show();
Toast.makeText(WifiActivity.this, "连接成功", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.wandb_wifipager);
if(getRequestedOrientation()!= ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
InitData();
handler.sendEmptyMessageDelayed(WIFI_STATE_INIT, 1000);
}
public void InitData(){
wiFiAdmin=new WiFiAdmin(WifiActivity.this);
connectDialog =new AlertDialog.Builder(WifiActivity.this).create();
wifiListView =(ListView)findViewById(R.id.wandb_wifi_listview);
wifiSwitch =(Switch)findViewById(R.id.wifi_switch);
arrowTop =(ImageView)findViewById(R.id.wifi_arrowtop);
wifiStateDisplay =(TextView)findViewById(R.id.wifi_statedispaly);
wifiListView.setOnItemClickListener(this);
wifiListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
if(arg2==0){
arrowTop.setVisibility(View.INVISIBLE);
}else{
arrowTop.setVisibility(View.VISIBLE);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
wifiSwitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(wifiSwitch.isChecked()){
wiFiAdmin.OpenWifi();
wiFiAdmin.StartScan();
scanResults=wiFiAdmin.GetWifilist();
handler.sendEmptyMessageDelayed(WIFI_SCAN, 1000);
Toast.makeText(WifiActivity.this, "打开 WiFi", Toast.LENGTH_SHORT).show();
}else{
wiFiAdmin.CloseWifi();
handler.sendEmptyMessage(WIFI_CLOSE);
Toast.makeText(WifiActivity.this, "关闭 WiFi", Toast.LENGTH_SHORT).show();
}
}
});
}
public void SetScanResult(){
wiFiAdmin.StartScan();
scanResults=wiFiAdmin.GetWifilist();
adapter=new WAndB_WifilistAdapter(WifiActivity.this, scanResults);
wifiListView.setAdapter(adapter);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
if(GetNowWifiSSID().equals("\""+scanResults.get(arg2).SSID+"\"")){
Toast.makeText(WifiActivity.this, "当前已连接此网络", Toast.LENGTH_SHORT).show();
}else{
final int num=arg2;
LayoutInflater layoutInflater= LayoutInflater.from(WifiActivity.this);
View view=(RelativeLayout)layoutInflater.inflate(R.layout.connect_wifi_dialog, null);
TextView wifiName=(TextView)view.findViewById(R.id.wifidialog_name);
wifiName.setText(scanResults.get(arg2).SSID);
connectDialog.show();
connectDialog.getWindow().setContentView(view);
Window dialogwWindow= connectDialog.getWindow();
WindowManager.LayoutParams params=dialogwWindow.getAttributes();
dialogwWindow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
params.x=0;
params.y=0;
params.width=750;//宽
params.height=400;//高
params.softInputMode=0;
dialogwWindow.setAttributes(params);
connectDialog.show();
Button cancel=(Button)view.findViewById(R.id.wifi_dialog_cancel);
Button connect=(Button)view.findViewById(R.id.wifi_dialog_connect);
final EditText password=(EditText)view.findViewById(R.id.wifi_dialog_password);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
connectDialog.dismiss();
}
});
connect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String wifiPassword = password.getText().toString();
netId =wiFiAdmin.AddNetwork(wiFiAdmin.CreatConfiguration(scanResults.get(num).SSID, wifiPassword, 3));
if(netId ==0){
Toast.makeText(WifiActivity.this, "无线网卡不可用", Toast.LENGTH_LONG).show();
}else if(netId ==1){
Toast.makeText(WifiActivity.this, "密码错误", Toast.LENGTH_LONG).show();
}else if(netId ==2){
Toast.makeText(WifiActivity.this, "正在连接", Toast.LENGTH_LONG).show();
connectDialog.dismiss();
}else if(netId ==-1){
Toast.makeText(WifiActivity.this, "连接失败", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(WifiActivity.this, "正在连接", Toast.LENGTH_LONG).show();
connectDialog.dismiss();
}
handler.sendEmptyMessageDelayed(WIFI_INFO, 2000);
}
});
password.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasFocus) {
// TODO Auto-generated method stub
if(hasFocus){
connectDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}else{
}
}
});
}
}
public String GetNowWifiSSID(){
WifiManager mWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = mWifi.getConnectionInfo();
return wifiInfo.getSSID();
}
}