desc:wifi 设置
parent
0a49b93b2a
commit
65d361cb77
@ -0,0 +1,33 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi配置
|
||||||
|
*/
|
||||||
|
public class WiFiConfig {
|
||||||
|
|
||||||
|
//默认超时时间
|
||||||
|
private static final long DEFAULT_TIME_OUT = 1000 * 15;
|
||||||
|
|
||||||
|
public long timeOut = DEFAULT_TIME_OUT;
|
||||||
|
|
||||||
|
private WiFiConfig() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
private WiFiConfig config;
|
||||||
|
|
||||||
|
public Builder() {
|
||||||
|
config = new WiFiConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTimeOut(long time) {
|
||||||
|
config.timeOut = time;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WiFiConfig build() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建WiFi配置状态
|
||||||
|
*/
|
||||||
|
public class WiFiCreateConfigStatusInfo {
|
||||||
|
|
||||||
|
public String SSID;
|
||||||
|
public WifiConfiguration configuration;
|
||||||
|
public boolean isSuccess;
|
||||||
|
|
||||||
|
public boolean isSuccess() {
|
||||||
|
return isSuccess && null != configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除WiFi状态
|
||||||
|
*/
|
||||||
|
public class WiFiRemoveStatusInfo {
|
||||||
|
|
||||||
|
public String SSID;
|
||||||
|
public boolean isSuccess;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.Types;
|
||||||
|
|
||||||
|
public abstract class IWiFiAction {
|
||||||
|
|
||||||
|
@Types.ActionStateType
|
||||||
|
private int actionState;
|
||||||
|
|
||||||
|
IWiFiAction() {
|
||||||
|
setState(Types.ActionStateType.WAITING);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getActionName() {
|
||||||
|
return getClass().getSimpleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getActionState() {
|
||||||
|
return actionState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(@Types.ActionStateType int state) {
|
||||||
|
this.actionState = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void end() {
|
||||||
|
this.actionState = Types.ActionStateType.END;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getActionName() + " | actionState:" + actionState;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.ConnectWiFiActionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过配置直接连接
|
||||||
|
*/
|
||||||
|
public class WiFiDirectConnectAction extends WiFiConnectAction {
|
||||||
|
|
||||||
|
public WifiConfiguration configuration;
|
||||||
|
|
||||||
|
public WiFiDirectConnectAction(@NonNull String SSID, @NonNull WifiConfiguration configuration, @Nullable ConnectWiFiActionListener listener) {
|
||||||
|
super(SSID, listener);
|
||||||
|
this.configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + " | " + SSID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁用WiFi
|
||||||
|
*/
|
||||||
|
public class WiFiDisableAction extends IWiFiAction {
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用WiFi
|
||||||
|
*/
|
||||||
|
public class WiFiEnableAction extends IWiFiAction {
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.ConnectWiFiActionListener;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiCipherType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过密码连接WiFi
|
||||||
|
*/
|
||||||
|
public class WiFiNormalConnectAction extends WiFiConnectAction {
|
||||||
|
|
||||||
|
public WiFiCipherType cipherType;
|
||||||
|
public String password;
|
||||||
|
|
||||||
|
public WiFiNormalConnectAction(@NonNull String SSID, @NonNull WiFiCipherType cipherType, @Nullable String password, @Nullable ConnectWiFiActionListener listener) {
|
||||||
|
super(SSID, listener);
|
||||||
|
|
||||||
|
this.cipherType = cipherType;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + " | " + SSID + " | " + cipherType.name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.RemoveWiFiActionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除
|
||||||
|
*/
|
||||||
|
public class WiFiRemoveAction extends IWiFiAction {
|
||||||
|
|
||||||
|
public String SSID;
|
||||||
|
public RemoveWiFiActionListener listener;
|
||||||
|
|
||||||
|
public WiFiRemoveAction(String SSID, RemoveWiFiActionListener listener) {
|
||||||
|
this.SSID = SSID;
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + " | " + SSID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.info.action;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.ScanWiFiActionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扫描WiFi
|
||||||
|
*/
|
||||||
|
public class WiFiScanAction extends IWiFiAction {
|
||||||
|
|
||||||
|
public ScanWiFiActionListener listener;
|
||||||
|
|
||||||
|
public WiFiScanAction(ScanWiFiActionListener listener) {
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.Types;
|
||||||
|
|
||||||
|
public interface ConnectWiFiActionListener extends IActionListener {
|
||||||
|
|
||||||
|
void onCreateConfig(WifiConfiguration configuration);
|
||||||
|
|
||||||
|
void onResult(@Types.ConnectResultType int type);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
public interface IActionListener {
|
||||||
|
|
||||||
|
void onStart();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.Types;
|
||||||
|
|
||||||
|
public interface RemoveWiFiActionListener extends IActionListener {
|
||||||
|
|
||||||
|
void onResult(@Types.RemoveResultType int type);
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.Types;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ScanWiFiActionListener extends IActionListener {
|
||||||
|
|
||||||
|
void onResult(@Types.ScanResultType int type, @Nullable List<WiFiScanInfo> list);
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiRemoveStatusInfo;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiConnectFailType;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiGetListType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi全局相关状态监听
|
||||||
|
*/
|
||||||
|
public interface WiFiListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始扫描WiFi
|
||||||
|
*/
|
||||||
|
void onStartScan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通知WiFi关闭
|
||||||
|
*/
|
||||||
|
void onCloseWiFi();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi数据更新
|
||||||
|
*/
|
||||||
|
void onDataChange(WiFiGetListType type, List<WiFiScanInfo> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始连接WiFi
|
||||||
|
*/
|
||||||
|
void onWiFiStartConnect(String SSID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建WiFi配置
|
||||||
|
*/
|
||||||
|
void onWiFiCreateConfig(String SSID, WifiConfiguration configuration);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi连接成功
|
||||||
|
*
|
||||||
|
* @param isInit 标识是否是初始连接成功
|
||||||
|
*/
|
||||||
|
void onWiFiConnected(String SSID, boolean isInit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi连接失败
|
||||||
|
*
|
||||||
|
* @param type 失败类型
|
||||||
|
*/
|
||||||
|
void onWiFiConnectFail(String SSID, WiFiConnectFailType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除WiFi状态
|
||||||
|
*/
|
||||||
|
void onWiFiRemoveResult(WiFiRemoveStatusInfo info);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi状态回调
|
||||||
|
*/
|
||||||
|
public interface WiFiStatusListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理扫描列表
|
||||||
|
*/
|
||||||
|
void handleScanResultsChanged(Intent intent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理WiFi状态
|
||||||
|
*/
|
||||||
|
void handleWiFiStateChanged(Intent intent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理网络状态
|
||||||
|
*/
|
||||||
|
void handleNetStateChanged(Intent intent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理WiFi状态(密码错误回调)
|
||||||
|
*/
|
||||||
|
void handleSupplicantStateChanged(Intent intent);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.action.IWiFiAction;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.action.WiFiConnectAction;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.action.WiFiScanAction;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.Types;
|
||||||
|
|
||||||
|
public interface WiFiSupportListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前执行的action
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
IWiFiAction getCurrentAction();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前了解的WiFi信息
|
||||||
|
*/
|
||||||
|
WifiInfo getConnectedWifiInfo();
|
||||||
|
|
||||||
|
void onWiFiClose();
|
||||||
|
|
||||||
|
void onWiFiListChange();
|
||||||
|
|
||||||
|
void doneScanAction(@NonNull WiFiScanAction action);
|
||||||
|
|
||||||
|
void doneConnectSuccess(@NonNull String SSID, @Types.ConnectSuccessType int type);
|
||||||
|
|
||||||
|
void doneConnectFail(@NonNull WiFiConnectAction action);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.interfaces.impl;
|
||||||
|
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiRemoveStatusInfo;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.WiFiListener;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiConnectFailType;
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiGetListType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WiFiListenerImpl implements WiFiListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartScan() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCloseWiFi() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDataChange(WiFiGetListType type, List<WiFiScanInfo> list) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiStartConnect(String SSID) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiCreateConfig(String SSID, WifiConfiguration configuration) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiConnected(String SSID, boolean isInit) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiConnectFail(String SSID, WiFiConnectFailType type) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiRemoveResult(WiFiRemoveStatusInfo info) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.receiver;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.WiFiStatusListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi状态接受
|
||||||
|
*/
|
||||||
|
public class WiFiStatusReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
private WiFiStatusListener mCallback;
|
||||||
|
|
||||||
|
public WiFiStatusReceiver(WiFiStatusListener callback) {
|
||||||
|
this.mCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
String action = intent.getAction();
|
||||||
|
|
||||||
|
if (null == mCallback || null == action || TextUtils.isEmpty(action)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case WifiManager.SCAN_RESULTS_AVAILABLE_ACTION:
|
||||||
|
mCallback.handleScanResultsChanged(intent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WifiManager.WIFI_STATE_CHANGED_ACTION:
|
||||||
|
mCallback.handleWiFiStateChanged(intent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WifiManager.NETWORK_STATE_CHANGED_ACTION:
|
||||||
|
mCallback.handleNetStateChanged(intent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
|
||||||
|
mCallback.handleSupplicantStateChanged(intent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.type;
|
||||||
|
|
||||||
|
import androidx.annotation.IntDef;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
public class Types {
|
||||||
|
|
||||||
|
@IntDef({
|
||||||
|
ScanResultType.UNKNOWN,
|
||||||
|
ScanResultType.FREQUENTLY_SCAN_ERROR,
|
||||||
|
ScanResultType.OPEN_WIFI_ERROR,
|
||||||
|
ScanResultType.SUCCESS,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface ScanResultType {
|
||||||
|
int UNKNOWN = -1;//未知错误
|
||||||
|
int FREQUENTLY_SCAN_ERROR = 0;//频繁扫描
|
||||||
|
int OPEN_WIFI_ERROR = 1;//开启WiFi失败
|
||||||
|
int SUCCESS = 2;//扫描成功
|
||||||
|
}
|
||||||
|
|
||||||
|
@IntDef({
|
||||||
|
RemoveResultType.SYSTEM_LIMIT_ERROR,
|
||||||
|
RemoveResultType.SUCCESS,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface RemoveResultType {
|
||||||
|
int SYSTEM_LIMIT_ERROR = 0;//系统限制,删除失败
|
||||||
|
int SUCCESS = 1;//删除成功
|
||||||
|
}
|
||||||
|
|
||||||
|
@IntDef({
|
||||||
|
ConnectResultType.UNKNOWN,
|
||||||
|
ConnectResultType.SYSTEM_LIMIT_ERROR,
|
||||||
|
ConnectResultType.TIMEOUT_ERROR,
|
||||||
|
ConnectResultType.PASSWORD_ERROR,
|
||||||
|
ConnectResultType.DIRECT_PASSWORD_ERROR,
|
||||||
|
ConnectResultType.SUCCESS,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface ConnectResultType {
|
||||||
|
int UNKNOWN = -1;//未知错误
|
||||||
|
int SYSTEM_LIMIT_ERROR = 0;//系统限制,删除失败
|
||||||
|
int TIMEOUT_ERROR = 1;//连接超时
|
||||||
|
int PASSWORD_ERROR = 2;//密码错误
|
||||||
|
int DIRECT_PASSWORD_ERROR = 3;//直连密码错误
|
||||||
|
int SUCCESS = 5;//连接成功
|
||||||
|
}
|
||||||
|
|
||||||
|
@IntDef({
|
||||||
|
ActionStateType.WAITING,
|
||||||
|
ActionStateType.PROCESS,
|
||||||
|
ActionStateType.END,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface ActionStateType {
|
||||||
|
int WAITING = 0;//待执行
|
||||||
|
int PROCESS = 1;//执行中
|
||||||
|
int END = 2;//执行完成
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@IntDef({
|
||||||
|
ConnectSuccessType.NOT_MATCH,
|
||||||
|
ConnectSuccessType.NORMAL,
|
||||||
|
ConnectSuccessType.SYSTEM,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface ConnectSuccessType {
|
||||||
|
int NOT_MATCH = 1;//不匹配
|
||||||
|
int NORMAL = 2;//正常处理
|
||||||
|
int SYSTEM = 3;//没有执行操作时连接成功
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi加密方式
|
||||||
|
*/
|
||||||
|
public enum WiFiCipherType {
|
||||||
|
|
||||||
|
WIFI_CIPHER_WEP,
|
||||||
|
WIFI_CIPHER_WPA,//默认都是这种
|
||||||
|
WIFI_CIPHER_NO_PASS,
|
||||||
|
WIFI_CIPHER_INVALID
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.type;
|
||||||
|
|
||||||
|
public enum WiFiConnectFailType {
|
||||||
|
|
||||||
|
PASSWORD_ERROR,//密码错误
|
||||||
|
DIRECT_PASSWORD_ERROR,//直接连接,密码错误
|
||||||
|
TIMEOUT_ERROR,//连接超时
|
||||||
|
SYSTEM_LIMIT_ERROR,//系统限制
|
||||||
|
UNKNOWN,//未知
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WiFi连接状态
|
||||||
|
*/
|
||||||
|
public enum WiFiConnectType {
|
||||||
|
|
||||||
|
DISCONNECTED(0, "未连接"),
|
||||||
|
CONNECTING(1, "连接中"),
|
||||||
|
CONNECTED(2, "已连接");
|
||||||
|
|
||||||
|
public int type;
|
||||||
|
public String state;
|
||||||
|
|
||||||
|
WiFiConnectType(int type, String state) {
|
||||||
|
this.type = type;
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取列表的类型
|
||||||
|
*/
|
||||||
|
public enum WiFiGetListType {
|
||||||
|
|
||||||
|
TYPE_SCAN,//扫描
|
||||||
|
TYPE_SORT//排序
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,123 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.ui
|
||||||
|
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.text.TextUtils
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.KeyEvent
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.view.Window
|
||||||
|
import android.view.WindowManager
|
||||||
|
import androidx.fragment.app.DialogFragment
|
||||||
|
import com.yinuo.safetywatcher.databinding.DialogInputWifiPasswordBinding
|
||||||
|
import com.yinuo.safetywatcher.watcher.utils.hideIme
|
||||||
|
import com.yinuo.safetywatcher.watcher.utils.showIme
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.WiFiModule
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.interfaces.ConnectWiFiActionListener
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wifi密码输入框
|
||||||
|
*/
|
||||||
|
class InputWiFiPasswordDialog : DialogFragment() {
|
||||||
|
private var mInfo: WiFiScanInfo? = null
|
||||||
|
private var mConnectType = 0
|
||||||
|
|
||||||
|
private var mBinding: DialogInputWifiPasswordBinding? = null
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||||
|
mBinding = DialogInputWifiPasswordBinding.inflate(inflater, container, false)
|
||||||
|
return mBinding!!.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
val bundle = arguments
|
||||||
|
if (null != bundle) {
|
||||||
|
mInfo = bundle.getParcelable("info")
|
||||||
|
mConnectType = bundle.getInt("connectType", 0)
|
||||||
|
}
|
||||||
|
if (null == mInfo) {
|
||||||
|
dismissAllowingStateLoss()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (mConnectType == 1) {
|
||||||
|
mBinding?.tvTitle?.text = "修改" + mInfo!!.scanResult.SSID
|
||||||
|
} else {
|
||||||
|
mBinding?.tvTitle?.text = mInfo!!.scanResult.SSID
|
||||||
|
}
|
||||||
|
setListener()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setListener() {
|
||||||
|
mBinding?.etPassword?.setOnKeyListener { _, keyCode, event ->
|
||||||
|
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
|
||||||
|
if (event.action == KeyEvent.ACTION_DOWN) {
|
||||||
|
mBinding?.tvCancel?.requestFocus()
|
||||||
|
}
|
||||||
|
return@setOnKeyListener true
|
||||||
|
} else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) {
|
||||||
|
if (event.action == KeyEvent.ACTION_DOWN) {
|
||||||
|
mBinding?.etPassword?.showIme()
|
||||||
|
}
|
||||||
|
return@setOnKeyListener true
|
||||||
|
}
|
||||||
|
return@setOnKeyListener false
|
||||||
|
}
|
||||||
|
mBinding?.etPassword?.setOnFocusChangeListener { v, hasFocus ->
|
||||||
|
if (!hasFocus) {
|
||||||
|
mBinding?.etPassword?.hideIme()
|
||||||
|
} else {
|
||||||
|
mBinding?.etPassword?.showIme()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mBinding?.tvCancel?.setOnClickListener {
|
||||||
|
dismissAllowingStateLoss()
|
||||||
|
}
|
||||||
|
|
||||||
|
mBinding?.tvConnect?.setOnClickListener {
|
||||||
|
val trimPass = mBinding?.etPassword?.text.toString().trim { it <= ' ' }
|
||||||
|
//连接
|
||||||
|
if (TextUtils.isEmpty(trimPass)) {
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
WiFiModule.getInstance().connectWiFi(
|
||||||
|
mInfo!!.scanResult.SSID,
|
||||||
|
mInfo!!.cipherType,
|
||||||
|
trimPass,
|
||||||
|
mConnectActionListener
|
||||||
|
)
|
||||||
|
dismissAllowingStateLoss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
val dialog = dialog
|
||||||
|
dialog?.setCanceledOnTouchOutside(true)
|
||||||
|
val window = dialog?.window
|
||||||
|
if (null != window) {
|
||||||
|
window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||||
|
val lp = window.attributes
|
||||||
|
lp.gravity = Gravity.CENTER
|
||||||
|
lp.width = 480
|
||||||
|
lp.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||||
|
window.attributes = lp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var mConnectActionListener: ConnectWiFiActionListener? = null
|
||||||
|
fun setConnectListener(actionListener: ConnectWiFiActionListener?) {
|
||||||
|
mConnectActionListener = actionListener
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.ui
|
||||||
|
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.yinuo.safetywatcher.R
|
||||||
|
import com.yinuo.safetywatcher.databinding.ItemNetworkConfigBinding
|
||||||
|
import com.yinuo.safetywatcher.watcher.base.BaseRvAdapter
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiCipherType
|
||||||
|
import com.yinuo.safetywatcher.watcher.wifi.type.WiFiConnectType
|
||||||
|
|
||||||
|
class WiFIAdapter(
|
||||||
|
private val onItemClick: ((WiFiScanInfo) -> Unit)? = null,
|
||||||
|
private val onItemLongClick: ((WiFiScanInfo) -> Unit)? = null
|
||||||
|
) :
|
||||||
|
BaseRvAdapter<WiFiScanInfo, ItemNetworkConfigBinding, WiFIAdapter.WiFiViewHolder>() {
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WiFiViewHolder {
|
||||||
|
return WiFiViewHolder(
|
||||||
|
ItemNetworkConfigBinding.inflate(
|
||||||
|
LayoutInflater.from(parent.context),
|
||||||
|
parent,
|
||||||
|
false
|
||||||
|
), onItemClick, onItemLongClick
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class WiFiViewHolder(
|
||||||
|
private val binding: ItemNetworkConfigBinding,
|
||||||
|
private val onItemClick: ((WiFiScanInfo) -> Unit)?,
|
||||||
|
private val onItemLongClick: ((WiFiScanInfo) -> Unit)?
|
||||||
|
) :
|
||||||
|
BaseViewHolder<WiFiScanInfo, ItemNetworkConfigBinding>(binding) {
|
||||||
|
|
||||||
|
override fun bindView(info: WiFiScanInfo) {
|
||||||
|
val context = binding.root.context
|
||||||
|
binding.root.setOnClickListener {
|
||||||
|
onItemClick?.invoke(info)
|
||||||
|
}
|
||||||
|
binding.root.setOnLongClickListener {
|
||||||
|
onItemLongClick?.invoke(info)
|
||||||
|
return@setOnLongClickListener true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null != info.configuration) {
|
||||||
|
if (info.connectType == WiFiConnectType.CONNECTED.type) {
|
||||||
|
binding.tvNetName.text = info.scanResult.SSID
|
||||||
|
} else {
|
||||||
|
binding.tvNetName.text = info.scanResult.SSID + "(已保存)"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
binding.tvNetName.text = info.scanResult.SSID
|
||||||
|
}
|
||||||
|
|
||||||
|
val noPass = WiFiCipherType.WIFI_CIPHER_NO_PASS == info.cipherType
|
||||||
|
if (noPass) {
|
||||||
|
binding.ivStatusLock.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
binding.ivStatusLock.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
binding.ivStatusLock.setColorFilter(Color.WHITE)
|
||||||
|
|
||||||
|
if (info.connectType == WiFiConnectType.CONNECTED.type) {
|
||||||
|
binding.ivStatusConnect.visibility = View.VISIBLE
|
||||||
|
binding.progressBar.visibility = View.GONE
|
||||||
|
} else if (info.connectType == WiFiConnectType.CONNECTING.type) {
|
||||||
|
//连接中
|
||||||
|
binding.ivStatusConnect.visibility = View.GONE
|
||||||
|
binding.progressBar.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
binding.ivStatusConnect.visibility = View.GONE
|
||||||
|
binding.progressBar.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
when (info.level) {
|
||||||
|
1 -> binding.ivStatusWifi.setImageResource(R.drawable.wifi_1)
|
||||||
|
2 -> binding.ivStatusWifi.setImageResource(R.drawable.wifi_2)
|
||||||
|
else -> binding.ivStatusWifi.setImageResource(R.drawable.wifi_3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.yinuo.safetywatcher.watcher.wifi.utils;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public final class WiFiLogUtils {
|
||||||
|
|
||||||
|
private static final String TAG = "WiFiTool-log";
|
||||||
|
|
||||||
|
private static int log_level = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置日志级别
|
||||||
|
*
|
||||||
|
* @param level 级别
|
||||||
|
*/
|
||||||
|
public static void setLogLevel(int level) {
|
||||||
|
log_level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void d(String msg) {
|
||||||
|
if (log_level < 2) {
|
||||||
|
Log.d(TAG, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void e(Throwable throwable) {
|
||||||
|
if (log_level < 7) {
|
||||||
|
Log.e(TAG, "", throwable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 471 B |
Binary file not shown.
After Width: | Height: | Size: 685 B |
Binary file not shown.
After Width: | Height: | Size: 502 B |
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<solid android:color="@color/colorTxt" />
|
||||||
|
|
||||||
|
<size android:width="2dp" />
|
||||||
|
|
||||||
|
</shape>
|
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<solid android:color="#F4F4F4" />
|
||||||
|
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
|
||||||
|
</shape>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<rotate
|
||||||
|
android:drawable="@drawable/ic_progress"
|
||||||
|
android:fromDegrees="0.0"
|
||||||
|
android:pivotX="50.0%"
|
||||||
|
android:pivotY="50.0%"
|
||||||
|
android:toDegrees="360.0" />
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/area_switch"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="@dimen/_61dp"
|
||||||
|
android:paddingEnd="@dimen/_61dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_status"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginVertical="20dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_36dp" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/wifi_switch"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="10dp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/rv_data"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/wifi_switch" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="@dimen/_480dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/warn_setting_btn_bg">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_38dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="BLACK-1" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_password"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:text="密码"
|
||||||
|
android:textColor="@color/colorTxtGray"
|
||||||
|
android:textSize="@dimen/_23dp"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tv_title" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_password"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/_68dp"
|
||||||
|
android:layout_margin="12dp"
|
||||||
|
android:background="@drawable/bg_input"
|
||||||
|
android:inputType="textPassword"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp"
|
||||||
|
android:textCursorDrawable="@drawable/bg_cursor"
|
||||||
|
android:textSize="@dimen/font_24dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusedByDefault="true"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tv_password" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/guideline"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.5" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_cancel"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/_81dp"
|
||||||
|
android:background="@drawable/cancel_btn_bg"
|
||||||
|
android:layout_marginTop="@dimen/_12dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/cancel"
|
||||||
|
android:textColor="@color/white_30"
|
||||||
|
android:textSize="@dimen/_36dp"
|
||||||
|
android:nextFocusRight="@id/tv_connect"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/guideline"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/et_password" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_connect"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/_81dp"
|
||||||
|
android:background="@drawable/confirm_btn_bg_red"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/confirm"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_36dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/tv_cancel" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/_108dp"
|
||||||
|
android:paddingStart="@dimen/_121dp"
|
||||||
|
android:paddingEnd="@dimen/_61dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_status_connect"
|
||||||
|
android:layout_width="@dimen/_32dp"
|
||||||
|
android:layout_height="@dimen/_32dp"
|
||||||
|
android:src="@drawable/ic_select_s"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
android:layout_width="@dimen/_32dp"
|
||||||
|
android:layout_height="@dimen/_32dp"
|
||||||
|
android:indeterminate="false"
|
||||||
|
android:indeterminateDrawable="@drawable/loading_img"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_net_name"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginLeft="@dimen/_12dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_36dp"
|
||||||
|
tools:text="BLACK1" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_status_wifi"
|
||||||
|
android:layout_width="@dimen/_32dp"
|
||||||
|
android:layout_height="@dimen/_32dp"
|
||||||
|
android:layout_marginLeft="@dimen/_12dp"
|
||||||
|
app:tint="@color/white"
|
||||||
|
android:src="@drawable/wifi_3" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_status_lock"
|
||||||
|
android:layout_width="@dimen/_32dp"
|
||||||
|
android:layout_height="@dimen/_32dp"
|
||||||
|
android:layout_marginLeft="@dimen/_12dp"
|
||||||
|
app:tint="@color/white"
|
||||||
|
android:src="@drawable/ic_password" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
Loading…
Reference in New Issue