From 165765e0eb6914c2bedb574d1c02a7eb9923531b Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 12 Mar 2025 14:32:48 +0800 Subject: [PATCH] =?UTF-8?q?APPBase=E5=8E=BB=E9=99=A4=20Support=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.gradle | 21 -- appbase/build.properties | 4 +- appbase/src/main/AndroidManifest.xml | 2 +- .../winboll/studio/appbase/MainActivity.java | 15 +- .../appbase/receivers/MainReceiver.java | 11 +- appbase/src/main/res/layout/activity_main.xml | 2 +- appbase/src/main/res/values/styles.xml | 2 +- libappbase/build.gradle | 22 -- libappbase/build.properties | 4 +- .../studio/libappbase/GlobalApplication.java | 10 +- .../libappbase/GlobalCrashActivity.java | 10 +- .../libappbase/GlobalCrashReportView.java | 2 +- .../cc/winboll/studio/libappbase/LogView.java | 71 +++--- .../studio/libappbase/utils/ToastUtils.java | 33 +++ .../libappbase/views/HorizontalListView.java | 82 +++++++ .../libappbase/widgets/StatusWidget.java | 3 +- .../widgets/StatusWidgetClickListener.java | 2 +- .../src/main/res/layout/item_logtag.xml | 22 ++ .../res/layout/view_globalcrashreport.xml | 2 +- libappbase/src/main/res/layout/view_log.xml | 207 +++++++++--------- .../src/main/res/layout/view_logtag.xml | 32 --- libappbase/src/main/res/values/styles.xml | 2 +- 22 files changed, 316 insertions(+), 245 deletions(-) create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java create mode 100644 libappbase/src/main/res/layout/item_logtag.xml delete mode 100644 libappbase/src/main/res/layout/view_logtag.xml diff --git a/appbase/build.gradle b/appbase/build.gradle index cf07e1d..9c8cce2 100644 --- a/appbase/build.gradle +++ b/appbase/build.gradle @@ -46,25 +46,4 @@ android { dependencies { api project(':libappbase') api fileTree(dir: 'libs', include: ['*.jar']) - - // SSH - implementation 'com.jcraft:jsch:0.1.55' - // Html 解析 - implementation 'org.jsoup:jsoup:1.13.1' - // 二维码类库 - implementation 'com.google.zxing:core:3.4.1' - implementation 'com.journeyapps:zxing-android-embedded:3.6.0' - // 应用介绍页类库 - implementation 'io.github.medyo:android-about-page:2.0.0' - // 吐司类库 - implementation 'com.github.getActivity:ToastUtils:10.5' - // 网络连接类库 - implementation 'com.squareup.okhttp3:okhttp:4.4.1' - // Android 类库 - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.viewpager:viewpager:1.0.0' - implementation 'androidx.vectordrawable:vectordrawable:1.1.0' - implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.fragment:fragment:1.1.0' - implementation 'com.google.android.material:material:1.4.0' } diff --git a/appbase/build.properties b/appbase/build.properties index 2fdff2f..4394afe 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 09 09:15:39 HKT 2025 +#Wed Mar 12 06:31:21 GMT 2025 stageCount=6 libraryProject=libappbase baseVersion=2.1 publishVersion=2.1.5 -buildCount=0 +buildCount=47 baseBetaVersion=2.1.6 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index 4fdc630..36acd1a 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ android:name=".App" android:icon="@drawable/ic_launcher" android:label="@string/app_name" - android:theme="@style/AppTheme" + android:theme="@style/MyAppTheme" android:resizeableActivity="true"> - diff --git a/appbase/src/main/res/values/styles.xml b/appbase/src/main/res/values/styles.xml index ec1f403..f065594 100644 --- a/appbase/src/main/res/values/styles.xml +++ b/appbase/src/main/res/values/styles.xml @@ -1,6 +1,6 @@ - diff --git a/libappbase/build.gradle b/libappbase/build.gradle index 2ced735..aa9ecad 100644 --- a/libappbase/build.gradle +++ b/libappbase/build.gradle @@ -21,26 +21,4 @@ android { dependencies { api fileTree(dir: 'libs', include: ['*.jar']) - - // SSH - implementation 'com.jcraft:jsch:0.1.55' - // Html 解析 - implementation 'org.jsoup:jsoup:1.13.1' - // 二维码类库 - implementation 'com.google.zxing:core:3.4.1' - implementation 'com.journeyapps:zxing-android-embedded:3.6.0' - // 应用介绍页类库 - implementation 'io.github.medyo:android-about-page:2.0.0' - // 吐司类库 - implementation 'com.github.getActivity:ToastUtils:10.5' - // 网络连接类库 - implementation 'com.squareup.okhttp3:okhttp:4.4.1' - - // Android 类库 - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.viewpager:viewpager:1.0.0' - implementation 'androidx.vectordrawable:vectordrawable:1.1.0' - implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.fragment:fragment:1.1.0' - implementation 'com.google.android.material:material:1.4.0' } diff --git a/libappbase/build.properties b/libappbase/build.properties index 95f4ce3..4394afe 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 09 09:15:24 HKT 2025 +#Wed Mar 12 06:31:21 GMT 2025 stageCount=6 libraryProject=libappbase baseVersion=2.1 publishVersion=2.1.5 -buildCount=0 +buildCount=47 baseBetaVersion=2.1.6 diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java index 76a2f84..a5d77d1 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java @@ -6,17 +6,13 @@ package cc.winboll.studio.libappbase; * @Describe 全局应用类 */ import android.app.Application; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Handler; import android.os.Looper; -import android.view.Gravity; -import com.hjq.toast.ToastUtils; -import com.hjq.toast.style.WhiteToastStyle; +import cc.winboll.studio.libappbase.utils.ToastUtils; public class GlobalApplication extends Application { @@ -78,8 +74,8 @@ public class GlobalApplication extends Application { ToastUtils.init(this); // 设置 Toast 布局样式 //ToastUtils.setView(R.layout.toast_custom_view); - ToastUtils.setStyle(new WhiteToastStyle()); - ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); + //ToastUtils.setStyle(new WhiteToastStyle()); + //ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); } public static String getAppName(Context context) { diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java index 626149e..8163acf 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java @@ -21,11 +21,9 @@ import android.view.MenuItem; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libappbase.R; -import androidx.appcompat.app.AppCompatActivity; -public final class GlobalCrashActivity extends AppCompatActivity implements MenuItem.OnMenuItemClickListener { +public final class GlobalCrashActivity extends Activity implements MenuItem.OnMenuItemClickListener { private static final int MENUITEM_COPY = 0; private static final int MENUITEM_RESTART = 1; @@ -47,10 +45,10 @@ public final class GlobalCrashActivity extends AppCompatActivity implements Menu setContentView(R.layout.activity_globalcrash); mGlobalCrashReportView = findViewById(R.id.activityglobalcrashGlobalCrashReportView1); mGlobalCrashReportView.setReport(mLog); - setSupportActionBar(mGlobalCrashReportView.getToolbar()); + setActionBar(mGlobalCrashReportView.getToolbar()); - getSupportActionBar().setTitle(CrashHandler.TITTLE); - getSupportActionBar().setSubtitle(GlobalApplication.getAppName(getApplicationContext())); + getActionBar().setTitle(CrashHandler.TITTLE); + getActionBar().setSubtitle(GlobalApplication.getAppName(getApplicationContext())); } @Override diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashReportView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashReportView.java index e72dd74..efdfb3a 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashReportView.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashReportView.java @@ -15,8 +15,8 @@ import android.view.Menu; import android.view.MenuItem; import android.widget.LinearLayout; import android.widget.TextView; -import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libappbase.R; +import android.widget.Toolbar; public class GlobalCrashReportView extends LinearLayout { diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java index ec71977..6d04438 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java @@ -16,16 +16,15 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.R; +import cc.winboll.studio.libappbase.views.HorizontalListView; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; @@ -51,7 +50,7 @@ public class LogView extends RelativeLayout { Spinner mLogLevelSpinner; ArrayAdapter mLogLevelSpinnerAdapter; // 标签列表 - RecyclerView recyclerView; + HorizontalListView mListViewTags; public LogView(Context context) { super(context); @@ -190,11 +189,9 @@ public class LogView extends RelativeLayout { cbALLTAG.setChecked(isAllSelect); // 加载标签表 - recyclerView = findViewById(cc.winboll.studio.libappbase.R.id.viewlogRecyclerView1); - LinearLayoutManager layoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false); - recyclerView.setLayoutManager(layoutManager); - mTAGListAdapter = new TAGListAdapter(mapTAGList); - recyclerView.setAdapter(mTAGListAdapter); + mListViewTags = findViewById(cc.winboll.studio.libappbase.R.id.tags_listview); + mTAGListAdapter = new TAGListAdapter(mContext, mapTAGList); + mListViewTags.setAdapter(mTAGListAdapter); // 可以添加点击监听器来处理勾选框状态变化后的逻辑,比如获取当前勾选情况等 mTAGListAdapter.notifyDataSetChanged(); @@ -305,15 +302,32 @@ public class LogView extends RelativeLayout { } - public class TAGListAdapter extends RecyclerView.Adapter { + public class TAGListAdapter extends BaseAdapter { + private Context context; private Map mapOrigin; private List itemList; - public TAGListAdapter(Map map) { + public TAGListAdapter(Context context, Map map) { + this.context = context; mapOrigin = map; loadMap(mapOrigin); } + + @Override + public int getCount() { + return itemList.size(); + } + + @Override + public Object getItem(int p) { + return itemList.get(p); + } + + @Override + public long getItemId(int p) { + return p; + } void loadMap(Map map) { itemList = new ArrayList(); @@ -329,16 +343,20 @@ public class LogView extends RelativeLayout { loadMap(mapOrigin); super.notifyDataSetChanged(); } - - @NonNull + @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_logtag, parent, false); - return new ViewHolder(view); - } + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + convertView = LayoutInflater.from(context).inflate(R.layout.item_logtag, parent, false); + holder = new ViewHolder(); + holder.tvText = convertView.findViewById(R.id.viewlogtagTextView1); + holder.cbChecked = convertView.findViewById(R.id.viewlogtagCheckBox1); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { final TAGItemModel item = itemList.get(position); holder.tvText.setText(item.getTag()); holder.cbChecked.setChecked(item.isChecked()); @@ -349,22 +367,13 @@ public class LogView extends RelativeLayout { LogUtils.setTAGListEnable(item.getTag(), ((CheckBox)v).isChecked()); } }); + + return convertView; } - @Override - public int getItemCount() { - return itemList.size(); - } - - public class ViewHolder extends RecyclerView.ViewHolder { + public class ViewHolder { TextView tvText; CheckBox cbChecked; - - public ViewHolder(@NonNull View itemView) { - super(itemView); - tvText = itemView.findViewById(R.id.viewlogtagTextView1); - cbChecked = itemView.findViewById(R.id.viewlogtagCheckBox1); - } } } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java new file mode 100644 index 0000000..244af86 --- /dev/null +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java @@ -0,0 +1,33 @@ +package cc.winboll.studio.libappbase.utils; +import android.content.Context; +import android.widget.Toast; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/03/12 12:02:31 + */ +public class ToastUtils { + + public static final String TAG = "ToastUtils"; + + volatile static ToastUtils _ToastUtils; + Context mContext; + + ToastUtils() { + } + + synchronized static ToastUtils getInstance() { + if (_ToastUtils == null) { + _ToastUtils = new ToastUtils(); + } + return _ToastUtils; + } + + public static void init(Context context) { + getInstance().mContext = context; + } + + public static void show(String message) { + Toast.makeText(getInstance().mContext, "", Toast.LENGTH_SHORT).show(); + } +} diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java new file mode 100644 index 0000000..043c24b --- /dev/null +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java @@ -0,0 +1,82 @@ +package cc.winboll.studio.libappbase.views; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/03/12 12:29:01 + * @Describe 水平布局的 ListView + */ +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ListView; +import cc.winboll.studio.libappbase.LogUtils; + +public class HorizontalListView extends ListView { + public static final String TAG = "HorizontalListView"; + + public HorizontalListView(Context context) { + super(context); + } + + public HorizontalListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public HorizontalListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } +// @Override +// protected void onLayout(boolean changed, int l, int t, int r, int b) { +// super.onLayout(changed, l, t, r, b); +// int childCount = getChildCount(); +// int left = getPaddingLeft(); +// // 获取HorizontalListView的高度 +// int viewHeight = getMeasuredHeight() - getPaddingTop() - getPaddingBottom(); +// for (int i = 0; i < childCount; i++) { +// View child = getChildAt(i); +// int width = child.getMeasuredWidth(); +// int height = child.getMeasuredHeight(); +// // 计算子项在垂直方向上的居中偏移量 +// int verticalOffset = (viewHeight - height) / 2; +// // 设置子视图的位置,实现水平布局并垂直居中 +// child.layout(left, getPaddingTop() + verticalOffset, left + width, getPaddingTop() + verticalOffset + height); +// left += width; +// } +// } +// + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + int childCount = getChildCount(); + int left = getPaddingLeft(); + int viewHeight = getMeasuredHeight() - getPaddingTop() - getPaddingBottom(); + LogUtils.d(TAG, String.format("HorizontalListView的高度 %d", viewHeight)); + int verticalOffset = 20; + for (int i = 0; i < childCount; i++) { + View child = getChildAt(i); + // 计算每个子视图的宽度和高度 + int width = child.getMeasuredWidth(); + int height = child.getMeasuredHeight(); + //LogUtils.d(TAG, String.format("child : width %d , height %d", width, height)); + // 设置子视图的位置,实现水平布局 + + child.layout(left, verticalOffset, left + width, verticalOffset + height); + left += width; + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + //super.onMeasure(widthMeasureSpec, newHeightMeasureSpec); + int newWidthMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + //LogUtils.d(TAG, String.format("newWidthMeasureSpec %d, newHeightMeasureSpec %d", newWidthMeasureSpec, newHeightMeasureSpec)); + super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec); + +// ViewGroup.LayoutParams params = getLayoutParams(); +// params.width = getMeasuredWidth(); + } +} + diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java index 389b346..0219949 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java @@ -14,9 +14,9 @@ import android.widget.RemoteViews; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.R; import cc.winboll.studio.libappbase.utils.ServiceUtils; -import com.hjq.toast.ToastUtils; import android.content.ServiceConnection; import android.os.IBinder; +import cc.winboll.studio.libappbase.utils.ToastUtils; public class StatusWidget extends AppWidgetProvider { @@ -35,6 +35,7 @@ public class StatusWidget extends AppWidgetProvider { public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction().equals(ACTION_STATUS_UPDATE)) { + ToastUtils.show("Test"); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, StatusWidget.class)); for (int appWidgetId : appWidgetIds) { diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java index afbf9cf..19ceed3 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java @@ -9,7 +9,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import cc.winboll.studio.libappbase.LogUtils; -import com.hjq.toast.ToastUtils; +import cc.winboll.studio.libappbase.utils.ToastUtils; public class StatusWidgetClickListener extends BroadcastReceiver { diff --git a/libappbase/src/main/res/layout/item_logtag.xml b/libappbase/src/main/res/layout/item_logtag.xml new file mode 100644 index 0000000..d128d0c --- /dev/null +++ b/libappbase/src/main/res/layout/item_logtag.xml @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/libappbase/src/main/res/layout/view_globalcrashreport.xml b/libappbase/src/main/res/layout/view_globalcrashreport.xml index 405d0b4..1aff5e5 100644 --- a/libappbase/src/main/res/layout/view_globalcrashreport.xml +++ b/libappbase/src/main/res/layout/view_globalcrashreport.xml @@ -7,7 +7,7 @@ android:layout_height="match_parent" android:id="@+id/viewglobalcrashreportLinearLayout1"> - diff --git a/libappbase/src/main/res/layout/view_log.xml b/libappbase/src/main/res/layout/view_log.xml index 1b98af1..f3f312b 100644 --- a/libappbase/src/main/res/layout/view_log.xml +++ b/libappbase/src/main/res/layout/view_log.xml @@ -1,121 +1,128 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#FF000000"> - + -