Skip to content

Commit

Permalink
优化FormatViewUtils工具,避免展示过多行
Browse files Browse the repository at this point in the history
  • Loading branch information
ichtj committed Sep 11, 2024
1 parent de3bf8b commit 0bf97ef
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 114 deletions.
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:sharedUserId="android.uid.system"
package="com.ichtj.basetools">
<!-- 调用摄像头 -->
<uses-permission android:name="android.permission.CAMERA" />
Expand Down
11 changes: 8 additions & 3 deletions app/src/main/java/com/ichtj/basetools/network/NetRecordAty.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,9 @@ public void onClick(DialogInterface dialog, int which) {
}
// 在这里可以处理或显示选中的项目列表
if (selectedItemsList.size() > 0) {
timerService.setPingDns(selectedItemsList.toArray(new String[0]));
timerService.replacePingDns(selectedItemsList.toArray(new String[0]));
}else{
ToastUtils.error("至少选择一个进行网络测试!");
}
}
});
Expand All @@ -140,6 +142,9 @@ public void onServiceConnected(ComponentName name, IBinder binder) {
isBound = true;
NetTimerService.NetTimerBinder myBinder = (NetTimerService.NetTimerBinder) binder;
timerService = myBinder.getService();
if (timerService!=null){
tvPingAddr.setText(Arrays.toString(timerService.getPingDns()));
}
}

@Override
Expand All @@ -161,8 +166,8 @@ protected void onDestroy() {
@Override
public void refreshNet(NetBean netBean) {
String netConnectResult = FormatViewUtils.formatColor(netBean.netConnect + "", netBean.netConnect ? R.color.green : R.color.red);
String dnsResult = FormatViewUtils.formatUnderlin(R.color.blue, Arrays.toString(netBean.pingDns));
FormatViewUtils.formatData(tvResult, "dns:" + dnsResult + ", pingResult:" + Arrays.toString(netBean.pingResult) + ", dbm:" + netBean.dbm + ", localIp:" + netBean.localIp + ", netType:" + netBean.netType + ", isNet4G:" + netBean.isNet4G + ", netConnect:" + netConnectResult);
String dnsResult = FormatViewUtils.formatUnderline (R.color.blue, Arrays.toString(netBean.pingDns));
FormatViewUtils.formatData(tvResult, "dns:" + dnsResult + ", pingResult:" + Arrays.toString(netBean.pingResult) + ", dbm:" + netBean.dbm + ", localIp:" + netBean.localIp + ", netType:" + netBean.netType + ", isNet4G:" + netBean.isNet4G + ", netConnect:" + netConnectResult,"yyyyMMddHHmmss");
tvDbm.setText("信号:" + netBean.dbm);
tvPingAddr.setText("DNS地址:" + Arrays.toString(netBean.pingDns));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void handleMessage(@NonNull Message msg) {
}
};

public void setPingDns(String[] pingDns) {
public void replacePingDns(String[] pingDns) {
this.pingDns = pingDns;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < pingDns.length; i++) {
Expand Down Expand Up @@ -90,6 +90,7 @@ public IBinder onBind(Intent intent) {
public void onCreate() {
super.onCreate();
FLteTools.init();
replacePingDns(getPingDns());
startNetCheck();
}

Expand Down Expand Up @@ -132,6 +133,8 @@ public void accept(Long aLong) throws Exception {
localIp=NetUtils.getWifiIpAddress();
}else if(netType==NetUtils.NETWORK_ETH){
localIp=NetUtils.getEthIPv4Address();
}else{
localIp=NetUtils.getLocalIp();
}
NetBean netBean = new NetBean(pingDns, dbm, localIp, netTypeName, isNet4G, pingResult, netConnect);
handler.sendMessage(handler.obtainMessage(0x10, netBean));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,20 @@
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.DrawableRes;
import androidx.core.content.ContextCompat;

import com.face_chtj.base_iotutils.callback.IDialogCallback;

public class DialogUtils {
private static volatile DialogUtils mInstance;
private AlertDialog mDialog;
Expand Down Expand Up @@ -51,26 +48,26 @@ public static EditText getEditeContent() {
}

public static void show(Context context, String title, String content) {
createDialog(context, -1, title, content, false);
createDialog(context, R.drawable.ic_dialog_tool, "", title, content, false);
}

public static void show(Context context, @DrawableRes int icon, String title, String content) {
createDialog(context, icon, title, content, false);
createDialog(context, icon, "", title, content, false);
}

public static void showEdite(Context context, String title) {
createDialog(context, -1, title, "", true);
createDialog(context, R.drawable.ic_dialog_tool, "", title, "", true);
}


public static void showEdite(Context context, String title, String etContent) {
createDialog(context, -1, title, etContent, true);
createDialog(context, R.drawable.ic_dialog_tool, "", title, etContent, true);
}


public static void showEdite(Context context, @DrawableRes int icon, String title,
String etContent) {
createDialog(context, icon, title, etContent, true);
createDialog(context, icon, "", title, etContent, true);
}


Expand All @@ -90,85 +87,87 @@ private static void reset() {
instance().mDialog = null;
}

private static void createDialog(Context context, @DrawableRes int icon, String title,
String content, final boolean isInput) {
private static void createDialog(final Context context, @DrawableRes int icon, String hint, String title,
final String content, final boolean isInput) {
if (instance().mDialog == null) {
instance().isClickBtn=false;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
instance().isClickBtn = false;
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(true);
builder.setPositiveButton(R.string.iot_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
instance().isClickBtn = true;
if (instance().iCallback != null) {
String etContent = instance().etContent != null ? instance().etContent.getText().toString() : "";
instance().iCallback.onPositiveClick(etContent);
}
}
});
builder.setNegativeButton(R.string.iot_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
instance().isClickBtn = true;
if (instance().iCallback != null) {
instance().iCallback.onNegativeClick();
}
}
});
View view = LayoutInflater.from(context).inflate(R.layout.dialog_edite, null);
instance().mDialog = builder.setView(view).create();
instance().mDialog.setCanceledOnTouchOutside(true);
instance().mDialog.setCanceledOnTouchOutside(false);
instance().mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
Log.d("onDismiss","onDismiss >>>");
Log.d("onDismiss", "onDismiss >>>");
reset();
if(!instance().isClickBtn){
if (!instance().isClickBtn) {
instance().iCallback.dismiss();
}
}
});

instance().etContent = view.findViewById(R.id.etContent);
instance().etContent.setBackground(isInput?ContextCompat.getDrawable(context,R.drawable.ic_dialogalert_bg):null);
instance().etContent.setBackground(isInput ? ContextCompat.getDrawable(context, R.drawable.ic_dialogalert_bg) : null);
instance().tvTitle = view.findViewById(R.id.tvTitle);
if(!isInput){
if (!isInput) {
instance().tvTitle.setFocusable(true);
instance().etContent.setGravity(Gravity.CENTER);
instance().etContent.setLongClickable(false);
instance().etContent.setClickable(false);
instance().etContent.setEnabled(false);
instance().mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
instance().etContent.setText(isInput?"":content);
Drawable drawableLeft = ContextCompat.getDrawable(context, icon);
instance().tvTitle.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, null, null, null);
instance().etContent.setText(isInput ? "" : content);
instance().etContent.setHint(isInput ? hint : "");
instance().tvTitle.setText(title);
instance().etContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isInput){
if(instance().isShowBoard){
if (isInput) {
if (instance().isShowBoard) {
KeyBoardUtils.openKeybord(instance().etContent);
instance().isShowBoard=false;
}else{
instance().isShowBoard = false;
} else {
KeyBoardUtils.closeKeybord(instance().etContent);
instance().isShowBoard=true;
instance().isShowBoard = true;
}
}
}
});
view.findViewById(R.id.btnOk).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
instance().isClickBtn=true;
if (instance().iCallback != null) {
String etContent = instance().etContent != null ? instance().etContent.getText().toString() : "";
instance().iCallback.onPositiveClick(etContent);
}
dismiss();
}
});
view.findViewById(R.id.btnCancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
instance().isClickBtn=true;
if (instance().iCallback != null) {
instance().iCallback.onNegativeClick();
}
dismiss();
}
});
Window window=instance().mDialog.getWindow();
window.setBackgroundDrawable(ContextCompat.getDrawable(context,android.R.color.transparent));
Window window = instance().mDialog.getWindow();
window.setBackgroundDrawable(ContextCompat.getDrawable(context, android.R.color.transparent));
WindowManager.LayoutParams params = window.getAttributes();
int[] size=DisplayUtils.getScreenSize(context);
params.width = (int) (size[0] /2);
params.height=(int)(size[1]/4);
int[] size = DisplayUtils.getScreenSize(context);
params.width = (int) (size[0] / 2);
params.height = (int) (size[1] / 4);
window.setAttributes(params);
instance().mDialog.show();
//window.setContentView(view);
if (instance().iCallback != null) {
instance().iCallback.show();
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,19 @@
import android.widget.TextView;

public class FormatViewUtils {
private static int MAXIMUM_ROW = 300;

public static void setMaximumRow(int num) {
MAXIMUM_ROW = num;
}

/**
* A movement method that interprets movement keys by scrolling the text buffer.
*
* @param textView
*/
public static void setMovementMethod(TextView textView) {
textView.setMovementMethod(ScrollingMovementMethod.getInstance());
textView.setMovementMethod (ScrollingMovementMethod.getInstance ( ));
}

/**
Expand All @@ -22,25 +28,30 @@ public static void setMovementMethod(TextView textView) {
* @param textView
*/
public static void scrollBackToTop(TextView textView) {
textView.scrollTo(0, 0);
textView.setText("");
textView.scrollTo (0, 0);
textView.setText ("");
}

/**
* show data to Activity
*
* @param htmlStr Support html tags
* @param pattern time format yyyyMMddHHmmss or ....
*/
public static void formatData(TextView textView, String htmlStr, String appendPattern) {
if (textView != null && !ObjectUtils.isEmpty(htmlStr)) {
boolean isNull = ObjectUtils.isEmpty(appendPattern);
textView.append(isNull ? "" : TimeUtils.getTodayDateHms(appendPattern) + ":");
textView.append(Html.fromHtml(htmlStr));
textView.append("\n");
Layout layout = textView.getLayout();
public static void formatData(TextView tv, String htmlStr, String pattern) {
if (tv != null && !ObjectUtils.isEmpty (htmlStr)) {
// 如果行数大于 MAXIMUM_ROW ,清空内容
if (tv.getLineCount ( ) > MAXIMUM_ROW) {
tv.setText ("");
}
boolean isNull = ObjectUtils.isEmpty (pattern);
tv.append (isNull ? "" : TimeUtils.getTodayDateHms (pattern) + ":");
tv.append (Html.fromHtml (htmlStr));
tv.append ("\n");
Layout layout = tv.getLayout ( );
if (layout != null) {
int scrollAmount = layout.getLineTop(textView.getLineCount()) - textView.getHeight();
textView.scrollTo(0, scrollAmount > 0 ? scrollAmount : 0);
int scrollAmount = layout.getLineTop (tv.getLineCount ( )) - tv.getHeight ( );
tv.scrollTo (0, scrollAmount > 0 ? scrollAmount : 0);
}
}
}
Expand All @@ -50,29 +61,29 @@ public static void formatData(TextView textView, String htmlStr, String appendPa
*
* @param htmlStr Support html tags
*/
public static void formatData(TextView textView, String htmlStr) {
formatData(textView, htmlStr, "");
public static void formatData(TextView tv, String htmlStr) {
formatData (tv, htmlStr, "");
}

public static String formatUnderlin(int color, String content) {
return "<u><font color='" + getHexColor(color) + "'>" + content + "</font></u>";
public static String formatUnderline(int color, String content) {
return "<u><font color='" + getHexColor (color) + "'>" + content + "</font></u>";
}


public static String formatColor(String content, int color) {
if (ObjectUtils.isEmpty(content)) {
if (ObjectUtils.isEmpty (content)) {
return content;
} else {
return "<font color=\"" + getHexColor(color) + "\">" + content + "</font>";
return "<font color=\"" + getHexColor (color) + "\">" + content + "</font>";
}
}

public static String getHexColor(int color) {
// 获取 Resources 对象
Resources res = BaseIotUtils.getContext().getResources();
Resources res = BaseIotUtils.getContext ( ).getResources ( );
// 通过 Resources 对象获取颜色值
int colorAccentValue = res.getColor(color);
int colorAccentValue = res.getColor (color);
// 将颜色值转换为十六进制表示的字符串
return String.format("#%06X", (0xFFFFFF & colorAccentValue));
return String.format ("#%06X", (0xFFFFFF & colorAccentValue));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ private static NotifyUtils getInstance() {
channel.setImportance(NotificationManager.IMPORTANCE_NONE);
notifyUtils.manager.createNotificationChannel(channel);
notifyUtils.builder = new Notification.Builder(BaseIotUtils.getContext(), "channel_1");
notifyUtils.setSmallIcon(R.drawable.app_img);
notifyUtils.builder.setCustomContentView(notifyUtils.contentView);
} else {
notifyUtils.builder = new Notification.Builder(BaseIotUtils.getContext());
Expand Down
Binary file modified base_iotutils/src/main/res/drawable-xxhdpi/app_img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions base_iotutils/src/main/res/drawable/ic_dialog_tool.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<vector android:height="60dp" android:viewportHeight="1024"
android:viewportWidth="1024" android:width="60dp" xmlns:android="http://schemas.android.com/apk/res/android">
<vector android:height="45dp" android:viewportHeight="1024"
android:viewportWidth="1024" android:width="45dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFD600" android:pathData="M904,588.87H299.2c-30.93,0 -56,-25.07 -56,-56V167.01c0,-30.93 25.07,-56 56,-56H904c30.93,0 56,25.07 56,56v365.87c0,30.92 -25.07,55.99 -56,55.99z"/>
<path android:fillColor="#8C9EFF" android:pathData="M780.8,588.87V346.21c0,-30.93 -25.07,-56 -56,-56H120c-30.93,0 -56,25.07 -56,56v365.87c0,30.93 25.07,56 56,56h27.88c15.46,0 28,12.54 28,28v88.88c0,21.44 23.12,34.93 41.79,24.37l243.3,-137.62c4.21,-2.38 8.95,-3.63 13.79,-3.63H724.8c30.93,0 56,-25.07 56,-56V588.87z"/>
<path android:fillColor="#FFFFFF" android:pathData="M240.4,529.14m-56,0a56,56 0,1 0,112 0,56 56,0 1,0 -112,0Z"/>
Expand Down
Loading

0 comments on commit 0bf97ef

Please sign in to comment.