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