From 190810bdc01033fc1db5447ab5c521cb03b79cca Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Mon, 6 Jun 2022 22:05:30 +0800 Subject: [PATCH] =?UTF-8?q?version:2.0=20fix:=20update:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=92=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 10 ++- .../uiui/aios/activity/main/MainActivity.java | 64 +++++++++++++ .../com/uiui/aios/adapter/APPListAdapter.java | 19 +++- .../uiui/aios/fragment/AppListFragment.java | 23 +++-- .../aios/service/NotificationService.java | 89 +++++++++++++++++++ app/src/main/res/drawable/badge_bg.xml | 13 +++ app/src/main/res/layout-land/item_app.xml | 72 +++++++++++---- app/src/main/res/layout-port/item_app.xml | 72 +++++++++++---- app/src/main/res/layout/item_actions.xml | 66 ++++++++++---- 10 files changed, 366 insertions(+), 64 deletions(-) create mode 100644 app/src/main/java/com/uiui/aios/service/NotificationService.java create mode 100644 app/src/main/res/drawable/badge_bg.xml diff --git a/app/build.gradle b/app/build.gradle index dc56c6e..97bcb3c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -190,7 +190,7 @@ dependencies { implementation 'com.amap.api:location:5.1.0' //MMKV implementation 'com.tencent:mmkv-static:1.2.12' - implementation 'com.tencent.tpns:tpns:1.3.3.3-release' + implementation 'com.tencent.tpns:tpns:1.3.4.1-release' //状态栏透明 implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' //指示器 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 308c8f7..7474fcd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -144,6 +144,15 @@ + + + + + + + - @Override public void onBindViewHolder(@NonNull holder holder, int position) { final AppListInfo info = mAppListInfos.get(position); + String pkg = info.getPackageName(); holder.icon.setImageBitmap(info.getIcon()); holder.appname.setText(info.getAppName()); holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ApkUtils.openPackage(mContext, info.getPackageName()); + ApkUtils.openPackage(mContext, pkg); } }); + int size = NotificationService.getNotificationLength(pkg); + if (size == 0) { + holder.bg.setVisibility(View.GONE); + } else if (size < 99) { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText(String.valueOf(size)); + } else { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText("99+"); + } } @Override @@ -64,12 +77,14 @@ public class APPListAdapter extends RecyclerView.Adapter class holder extends RecyclerView.ViewHolder { private ImageView icon; private TextView appname; - private LinearLayout root; + private TextView bg; + private ConstraintLayout root; public holder(@NonNull View itemView) { super(itemView); icon = itemView.findViewById(R.id.iv_icon); appname = itemView.findViewById(R.id.tv_appname); + bg = itemView.findViewById(R.id.bg); root = itemView.findViewById(R.id.root); } diff --git a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java index fce5c3f..1caa0ec 100644 --- a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java +++ b/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java @@ -6,6 +6,7 @@ import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import android.util.Log; @@ -21,6 +22,7 @@ import com.uiui.aios.R; import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.bean.DesktopIcon; import com.uiui.aios.network.NetInterfaceManager; +import com.uiui.aios.service.NotificationService; import com.uiui.aios.utils.ApkUtils; import com.uiui.aios.utils.BitmapUtils; import com.uiui.aios.utils.IconUtils; @@ -115,17 +117,28 @@ public class AppListFragment extends Fragment { null); ImageView iv = view.findViewById(R.id.iv); TextView tv = view.findViewById(R.id.tv); - LinearLayout linearLayout = view.findViewById(R.id.btn_booktag); + TextView bg = view.findViewById(R.id.bg); + ConstraintLayout constraintLayout = view.findViewById(R.id.btn_booktag); DesktopIcon desktopIcon = mDesktopIcons.get(index); - if (desktopIcon != null) { - Log.e(TAG, "getView: " + desktopIcon.getPackageName()); - int i = IconUtils.appClassNameList.indexOf(desktopIcon.getPackageName()); + String pkg =desktopIcon.getPackageName(); + Log.e(TAG, "getView: " + pkg); + int i = IconUtils.appClassNameList.indexOf(pkg); if (i != -1) { String val = IconUtils.appIconList.get(i); int resID = getActivity().getResources().getIdentifier(val, "drawable", "com.uiui.aios"); + int size = NotificationService.getNotificationLength(pkg); + if (size == 0) { + bg.setVisibility(View.GONE); + } else if (size < 99) { + bg.setVisibility(View.VISIBLE); + bg.setText(String.valueOf(size)); + } else { + bg.setVisibility(View.VISIBLE); + bg.setText("99+"); + } if (resID == 0) { - Log.e(TAG, "getView: not found src : " + desktopIcon.getPackageName()); + Log.e(TAG, "getView: not found src : " + pkg); iv.setImageDrawable(desktopIcon.getIcon()); } else { iv.setImageDrawable(getActivity().getResources().getDrawable(resID)); diff --git a/app/src/main/java/com/uiui/aios/service/NotificationService.java b/app/src/main/java/com/uiui/aios/service/NotificationService.java new file mode 100644 index 0000000..d3dbea9 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/service/NotificationService.java @@ -0,0 +1,89 @@ +package com.uiui.aios.service; + +import android.service.notification.NotificationListenerService; +import android.service.notification.StatusBarNotification; +import android.util.Log; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @author TT + */ +public class NotificationService extends NotificationListenerService { + private static final String TAG = NotificationService.class.getSimpleName(); + + private static HashMap> notificationMap = new HashMap>(); + private static NotificationListener mListener; + + private void updateNotification() { + notificationMap.clear(); + StatusBarNotification[] statusBarNotifications = getActiveNotifications(); + for (StatusBarNotification sbn : statusBarNotifications) { + String pkg = sbn.getPackageName(); + Log.e(TAG, "onListenerConnected: " + pkg); + if (notificationMap.get(pkg) == null) { + notificationMap.put(pkg, new ArrayList<>()); + notificationMap.get(pkg).add(sbn); + } else { + notificationMap.get(pkg).add(sbn); + } + } + Log.e(TAG, "onListenerConnected: " + notificationMap); + } + + public static int getNotificationLength(String pkg) { + if (notificationMap.get(pkg) == null) { + return 0; + } else { + return notificationMap.get(pkg).size(); + } + } + + public static void setListener(NotificationListener listener) { + mListener = listener; + } + + public interface NotificationListener { + void onListenerConnected(); + + void onNotificationPosted(StatusBarNotification sbn); + + void onNotificationRemoved(StatusBarNotification sbn); + } + + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public void onListenerConnected() { + super.onListenerConnected(); + Log.e(TAG, "onListenerConnected: " + getActiveNotifications().length); + updateNotification(); + if (mListener != null) + mListener.onListenerConnected(); + } + + @Override + public void onNotificationPosted(StatusBarNotification sbn) { + super.onNotificationPosted(sbn); + Log.e(TAG, "onNotificationPosted: " + getActiveNotifications().length); + updateNotification(); + if (mListener != null) + mListener.onNotificationPosted(sbn); + } + + @Override + public void onNotificationRemoved(StatusBarNotification sbn) { + super.onNotificationRemoved(sbn); + Log.e(TAG, "onNotificationRemoved: " + getActiveNotifications().length); + updateNotification(); + if (mListener != null) + mListener.onNotificationRemoved(sbn); + } + + +} diff --git a/app/src/main/res/drawable/badge_bg.xml b/app/src/main/res/drawable/badge_bg.xml new file mode 100644 index 0000000..49d698d --- /dev/null +++ b/app/src/main/res/drawable/badge_bg.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/item_app.xml b/app/src/main/res/layout-land/item_app.xml index cd158b5..c1faa54 100644 --- a/app/src/main/res/layout-land/item_app.xml +++ b/app/src/main/res/layout-land/item_app.xml @@ -1,28 +1,62 @@ - - - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/item_app.xml b/app/src/main/res/layout-port/item_app.xml index b6f1f43..c1faa54 100644 --- a/app/src/main/res/layout-port/item_app.xml +++ b/app/src/main/res/layout-port/item_app.xml @@ -1,28 +1,62 @@ - - - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_actions.xml b/app/src/main/res/layout/item_actions.xml index d6a6c3f..3fdfe2a 100644 --- a/app/src/main/res/layout/item_actions.xml +++ b/app/src/main/res/layout/item_actions.xml @@ -1,25 +1,57 @@ - - + - - \ No newline at end of file + + + + + + + \ No newline at end of file