diff options
| author | 2017-10-11 20:54:39 +0000 | |
|---|---|---|
| committer | 2017-10-11 20:54:39 +0000 | |
| commit | c1bcf2ff950c667a86a45ad482d4c3cbfa0a3482 (patch) | |
| tree | 3d24677b9c7aadc33206f0a11e18831715aab168 | |
| parent | 9ba5681aecbb06f5f4df9826cb17816aca85f982 (diff) | |
| parent | 4e733f30748fe9834bea02ae4ccbef662bc6f6f8 (diff) | |
Merge "Check target api version before crashing apps." into oc-mr1-dev
am: 4e733f3074
Change-Id: I41d02093b1a471123e4dffd90da8cacffa23e769
| -rw-r--r-- | services/core/java/com/android/server/am/ServiceRecord.java | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java index ac85e6b132bf..16995e50fdbf 100644 --- a/services/core/java/com/android/server/am/ServiceRecord.java +++ b/services/core/java/com/android/server/am/ServiceRecord.java @@ -33,6 +33,7 @@ import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Binder; +import android.os.Build; import android.os.IBinder; import android.os.RemoteException; import android.os.SystemClock; @@ -517,14 +518,27 @@ final class ServiceRecord extends Binder { } catch (PackageManager.NameNotFoundException e) { } } - if (localForegroundNoti.getSmallIcon() == null - || nm.getNotificationChannel(localPackageName, appUid, + if (nm.getNotificationChannel(localPackageName, appUid, localForegroundNoti.getChannelId()) == null) { + int targetSdkVersion = Build.VERSION_CODES.O_MR1; + try { + final ApplicationInfo applicationInfo = + ams.mContext.getPackageManager().getApplicationInfoAsUser( + appInfo.packageName, 0, userId); + targetSdkVersion = applicationInfo.targetSdkVersion; + } catch (PackageManager.NameNotFoundException e) { + } + if (targetSdkVersion >= Build.VERSION_CODES.O_MR1) { + throw new RuntimeException( + "invalid channel for service notification: " + + foregroundNoti); + } + } + if (localForegroundNoti.getSmallIcon() == null) { // Notifications whose icon is 0 are defined to not show // a notification, silently ignoring it. We don't want to // just ignore it, we want to prevent the service from // being foreground. - // Also every notification needs a channel. throw new RuntimeException("invalid service notification: " + foregroundNoti); } |