2 Star 1 Fork 0

郑传余 / LR-RK3288-Android5.1-Framework

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
modify_alarm_filter.patch 4.56 KB
一键复制 编辑 原始数据 按行查看 历史
郑传余 提交于 2020-01-27 14:25 . *
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 65a5c23..96b4762 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -70,6 +70,20 @@ import static android.app.AlarmManager.ELAPSED_REALTIME;
import com.android.internal.util.LocalLog;
+import android.os.Environment;
+import android.os.FileUtils;
+import android.util.Xml;
+import com.android.internal.util.FastXmlSerializer;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.BufferedOutputStream;
+import java.util.List;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
class AlarmManagerService extends SystemService {
// The threshold for how long an alarm can be late before we print a
// warning message. The time duration is in milliseconds.
@@ -167,6 +181,11 @@ class AlarmManagerService extends SystemService {
new HashMap<String, PriorityClass>();
int mCurrentSeq = 0;
+ //for alarm filter
+ private File rootDir;
+ private File alarmFilter;
+ private final List<String> packageList = new ArrayList<String>();
+
class WakeupEvent {
public long when;
public int uid;
@@ -622,7 +641,12 @@ class AlarmManagerService extends SystemService {
mClockReceiver.scheduleDateChangedEvent();
mInteractiveStateReceiver = new InteractiveStateReceiver();
mUninstallReceiver = new UninstallReceiver();
-
+
+ //create a xml file to list the packages that will be filterd
+ rootDir = Environment.getRootDirectory();
+ alarmFilter = new File(rootDir, "etc/alarm_filter.xml");
+ resolve(alarmFilter);
+
if (mNativeData != 0) {
AlarmThread waitThread = new AlarmThread();
waitThread.start();
@@ -633,6 +657,43 @@ class AlarmManagerService extends SystemService {
publishBinderService(Context.ALARM_SERVICE, mService);
}
+ private void resolve(File file) {
+ if (!file.exists()) {
+ Slog.d(TAG, " Failed while trying resolve alarm filter file, not exists");
+ return;
+ }
+
+ try {
+ FileInputStream stream = new FileInputStream(file);
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(stream, null);
+
+ int type;
+ do {
+ type = parser.next();
+ if (type == XmlPullParser.START_TAG) {
+ String tag = parser.getName();
+
+ if ("app".equals(tag)) {
+ String pkgName = parser.getAttributeValue(null, "package");
+ packageList.add(pkgName);
+ }
+ }
+ } while(type != XmlPullParser.END_DOCUMENT);
+ } catch (NullPointerException e) {
+ Slog.w(TAG, "Warning, failed parsing alarm_filter.xml: " + e);
+ } catch (NumberFormatException e) {
+ Slog.w(TAG, "Warning, failed parsing alarm_filter.xml: " + e);
+ } catch (XmlPullParserException e) {
+ Slog.w(TAG, "Warning, failed parsing alarm_filter.xml: " + e);
+ } catch (IOException e) {
+ Slog.w(TAG, "Warning, failed parsing alarm_filter.xml: " + e);
+ } catch (IndexOutOfBoundsException e) {
+ Slog.w(TAG, "Warning, failed parsing alarm_filter.xml: " + e);
+ }
+ }
+
+
@Override
protected void finalize() throws Throwable {
try {
@@ -693,6 +754,18 @@ class AlarmManagerService extends SystemService {
Slog.w(TAG, "set/setRepeating ignored because there is no intent");
return;
}
+
+ int alarmType = type;
+ String pkgName = operation.getTargetPackage();
+ if (packageList != null) {
+ if (packageList.contains(pkgName)) {
+ if (alarmType == 0) {
+ alarmType = 1;
+ } else if (alarmType == 2) {
+ alarmType = 3;
+ }
+ }
+ }
// Sanity check the window length. This will catch people mistakenly
// trying to pass an end-of-window timestamp rather than a duration.
@@ -741,6 +814,7 @@ class AlarmManagerService extends SystemService {
final int userId = UserHandle.getCallingUserId();
synchronized (mLock) {
+ type = alarmType;
if (DEBUG_BATCH) {
Slog.v(TAG, "set(" + operation + ") : type=" + type
+ " triggerAtTime=" + triggerAtTime + " win=" + windowLength
Java
1
https://gitee.com/whsgzcy/LR-RK3288-Android5.1-Framework.git
git@gitee.com:whsgzcy/LR-RK3288-Android5.1-Framework.git
whsgzcy
LR-RK3288-Android5.1-Framework
LR-RK3288-Android5.1-Framework
master

搜索帮助