Merge pull request #6823 from atorralba/atorralba/android-notification-models

Android: Add models for `android.app.Notification` builders
This commit is contained in:
Tony Torralba
2021-12-09 16:01:44 +01:00
committed by GitHub
16 changed files with 3252 additions and 12 deletions

View File

@@ -79,6 +79,7 @@ private module Frameworks {
private import internal.ContainerFlow
private import semmle.code.java.frameworks.android.Android
private import semmle.code.java.frameworks.android.Intent
private import semmle.code.java.frameworks.android.Notifications
private import semmle.code.java.frameworks.android.Slice
private import semmle.code.java.frameworks.android.SQLite
private import semmle.code.java.frameworks.android.XssSinks

View File

@@ -0,0 +1,58 @@
/** Provides classes and predicates related to Android notifications. */
import java
private import semmle.code.java.dataflow.DataFlow
private import semmle.code.java.dataflow.ExternalFlow
private import semmle.code.java.dataflow.FlowSteps
private class NotificationBuildersSummaryModels extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"android.app;Notification$Action;true;Action;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint",
"android.app;Notification$Action;true;getExtras;;;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value",
"android.app;Notification$Action$Builder;true;Builder;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint",
"android.app;Notification$Action$Builder;true;Builder;(Icon,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint",
"android.app;Notification$Action$Builder;true;Builder;(Action);;Argument[0];Argument[-1];taint",
"android.app;Notification$Action$Builder;true;addExtras;;;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value",
"android.app;Notification$Action$Builder;true;addExtras;;;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value",
"android.app;Notification$Action$Builder;true;build;;;Argument[-1];ReturnValue;taint",
"android.app;Notification$Action$Builder;true;build;;;SyntheticField[android.content.Intent.extras] of Argument[-1];SyntheticField[android.content.Intent.extras] of ReturnValue;value",
"android.app;Notification$Action$Builder;true;getExtras;;;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value",
"android.app;Notification$Builder;true;addAction;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint",
"android.app;Notification$Builder;true;addAction;(Action);;Argument[0];Argument[-1];taint",
"android.app;Notification$Builder;true;addExtras;;;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value",
"android.app;Notification$Builder;true;addExtras;;;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value",
"android.app;Notification$Builder;true;build;;;Argument[-1];ReturnValue;taint",
"android.app;Notification$Builder;true;build;;;SyntheticField[android.content.Intent.extras] of Argument[-1];Field[android.app.Notification.extras] of ReturnValue;value",
"android.app;Notification$Builder;true;setContentIntent;;;Argument[0];Argument[-1];taint",
"android.app;Notification$Builder;true;getExtras;;;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value",
"android.app;Notification$Builder;true;recoverBuilder;;;Argument[1];ReturnValue;taint",
"android.app;Notification$Builder;true;setActions;;;ArrayElement of Argument[0];Argument[-1];taint",
"android.app;Notification$Builder;true;setExtras;;;Argument[0];SyntheticField[android.content.Intent.extras] of Argument[-1];value",
"android.app;Notification$Builder;true;setDeleteIntent;;;Argument[0];Argument[-1];taint",
"android.app;Notification$Builder;true;setPublicVersion;;;Argument[0];Argument[-1];taint",
// Fluent models
"android.app;Notification$Action$Builder;true;" +
[
"addExtras", "addRemoteInput", "extend", "setAllowGeneratedReplies",
"setAuthenticationRequired", "setContextual", "setSemanticAction"
] + ";;;Argument[-1];ReturnValue;value",
"android.app;Notification$Builder;true;" +
[
"addAction", "addExtras", "addPerson", "extend", "setActions", "setAutoCancel",
"setBadgeIconType", "setBubbleMetadata", "setCategory", "setChannelId",
"setChronometerCountDown", "setColor", "setColorized", "setContent", "setContentInfo",
"setContentIntent", "setContentText", "setContentTitle", "setCustomBigContentView",
"setCustomHeadsUpContentView", "setDefaults", "setDeleteIntent", "setExtras", "setFlag",
"setForegroundServiceBehavior", "setFullScreenIntent", "setGroup",
"setGroupAlertBehavior", "setGroupSummary", "setLargeIcon", "setLights", "setLocalOnly",
"setLocusId", "setNumber", "setOngoing", "setOnlyAlertOnce", "setPriority",
"setProgress", "setPublicVersion", "setRemoteInputHistory", "setSettingsText",
"setShortcutId", "setShowWhen", "setSmallIcon", "setSortKey", "setSound", "setStyle",
"setSubText", "setTicker", "setTimeoutAfter", "setUsesChronometer", "setVibrate",
"setVisibility", "setWhen"
] + ";;;Argument[-1];ReturnValue;value"
]
}
}

View File

@@ -0,0 +1,702 @@
package generatedtest;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Person;
import android.app.Notification.Action;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.media.AudioAttributes;
import android.net.Uri;
import android.os.Bundle;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object getMapKeyDefault(Bundle container) {
return null;
}
Object getMapValueDefault(Bundle container) {
return container.get("key");
}
Bundle newWithMapKeyDefault(Object element) {
Bundle bundle = new Bundle();
bundle.putString((String) element, null);
return bundle;
}
Bundle newWithMapValueDefault(Object element) {
Bundle bundle = new Bundle();
bundle.putString("key", (String) element);
return bundle;
}
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "android.app;Notification$Action$Builder;true;Builder;(Action);;Argument[0];Argument[-1];taint"
Notification.Action.Builder out = null;
Notification.Action in = (Notification.Action) source();
out = new Notification.Action.Builder(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Action$Builder;true;Builder;(Icon,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint"
Notification.Action.Builder out = null;
PendingIntent in = (PendingIntent) source();
out = new Notification.Action.Builder((Icon) null, (CharSequence) null, in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Action$Builder;true;Builder;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint"
Notification.Action.Builder out = null;
PendingIntent in = (PendingIntent) source();
out = new Notification.Action.Builder(0, (CharSequence) null, in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Action$Builder;true;addExtras;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.addExtras(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;addExtras;;;MapKey of
// Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of
// Argument[-1];value"
Notification.Action.Builder out = null;
Bundle in = (Bundle) newWithMapKeyDefault(source());
out.addExtras(in);
sink(getMapKeyDefault(out.getExtras())); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;addExtras;;;MapValue of
// Argument[0];MapValue of SyntheticField[android.content.Intent.extras]
// of Argument[-1];value"
Notification.Action.Builder out = null;
Bundle in = (Bundle) newWithMapValueDefault(source());
out.addExtras(in);
sink(getMapValueDefault(out.getExtras())); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;addRemoteInput;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.addRemoteInput(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;build;;;Argument[-1];ReturnValue;taint"
Notification.Action out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.build();
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Action$Builder;true;build;;;SyntheticField[android.content.Intent.extras]
// of Argument[-1];SyntheticField[android.content.Intent.extras] of ReturnValue;value"
Notification.Action out = null;
Notification.Action.Builder builder = null;
Bundle in = (Bundle) newWithMapValueDefault(source());
builder.addExtras(in);
out = builder.build();
sink(getMapValueDefault(out.getExtras())); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;extend;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.extend(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;getExtras;;;SyntheticField[android.content.Intent.extras]
// of Argument[-1];ReturnValue;value"
Bundle out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.getExtras();
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Action$Builder;true;setAllowGeneratedReplies;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.setAllowGeneratedReplies(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;setAuthenticationRequired;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.setAuthenticationRequired(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;setContextual;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.setContextual(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action$Builder;true;setSemanticAction;;;Argument[-1];ReturnValue;value"
Notification.Action.Builder out = null;
Notification.Action.Builder in = (Notification.Action.Builder) source();
out = in.setSemanticAction(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Action;true;Action;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint"
Notification.Action out = null;
PendingIntent in = (PendingIntent) source();
out = new Notification.Action(0, null, in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;addAction;(Action);;Argument[0];Argument[-1];taint"
Notification.Builder out = null;
Notification.Action in = (Notification.Action) source();
out.addAction(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;addAction;(int,CharSequence,PendingIntent);;Argument[2];Argument[-1];taint"
Notification.Builder out = null;
PendingIntent in = (PendingIntent) source();
out.addAction(0, null, in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;addAction;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.addAction(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addAction;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.addAction(0, null, null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addExtras;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.addExtras(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addExtras;;;MapKey of Argument[0];MapKey of
// SyntheticField[android.content.Intent.extras] of Argument[-1];value"
Notification.Builder out = null;
Bundle in = (Bundle) newWithMapKeyDefault(source());
out.addExtras(in);
sink(getMapKeyDefault(out.getExtras())); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addExtras;;;MapValue of Argument[0];MapValue
// of SyntheticField[android.content.Intent.extras] of Argument[-1];value"
Notification.Builder out = null;
Bundle in = (Bundle) newWithMapValueDefault(source());
out.addExtras(in);
sink(getMapValueDefault(out.getExtras())); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addPerson;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.addPerson((String) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;addPerson;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.addPerson((Person) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;build;;;Argument[-1];ReturnValue;taint"
Notification out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.build();
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;build;;;SyntheticField[android.content.Intent.extras]
// of Argument[-1];Field[android.app.Notification.extras] of ReturnValue;value"
Notification out = null;
Notification.Builder builder = null;
Bundle in = (Bundle) newWithMapValueDefault(source());
builder.addExtras(in);
out = builder.build();
sink(getMapValueDefault(out.extras)); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;extend;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.extend(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;getExtras;;;SyntheticField[android.content.Intent.extras]
// of Argument[-1];ReturnValue;value"
Bundle out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.getExtras();
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;recoverBuilder;;;Argument[1];ReturnValue;taint"
Notification.Builder out = null;
Notification in = (Notification) source();
out = Notification.Builder.recoverBuilder(null, in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;setActions;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setActions((Notification.Action[]) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setActions;;;ArrayElement of
// Argument[0];SyntheticField[android.app.Notification.action] of
// Argument[-1];taint"
Notification.Builder out = null;
Notification.Action[] in = (Notification.Action[]) new Notification.Action[] {
(Notification.Action) source()};
out.setActions(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;setAutoCancel;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setAutoCancel(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setBadgeIconType;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setBadgeIconType(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setBubbleMetadata;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setBubbleMetadata(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setCategory;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setCategory(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setChannelId;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setChannelId(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setChronometerCountDown;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setChronometerCountDown(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setColor;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setColor(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setColorized;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setColorized(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setContent;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setContent(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setContentInfo;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setContentInfo(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setContentIntent;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setContentIntent(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setContentIntent;;;Argument[0];Argument[-1];taint"
Notification.Builder out = null;
PendingIntent in = (PendingIntent) source();
out.setContentIntent(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;setContentText;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setContentText(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setContentTitle;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setContentTitle(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setCustomBigContentView;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setCustomBigContentView(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setCustomHeadsUpContentView;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setCustomHeadsUpContentView(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setDefaults;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setDefaults(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setDeleteIntent;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setDeleteIntent(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setDeleteIntent;;;Argument[0];Argument[-1];taint"
Notification.Builder out = null;
PendingIntent in = (PendingIntent) source();
out.setDeleteIntent(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;setExtras;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setExtras(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setExtras;;;Argument[0];SyntheticField[android.content.Intent.extras]
// of Argument[-1];value"
Notification.Builder out = null;
Bundle in = (Bundle) source();
out.setExtras(in);
sink(out.getExtras()); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setFlag;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setFlag(0, false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setForegroundServiceBehavior;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setForegroundServiceBehavior(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setFullScreenIntent;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setFullScreenIntent(null, false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setGroup;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setGroup(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setGroupAlertBehavior;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setGroupAlertBehavior(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setGroupSummary;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setGroupSummary(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setLargeIcon;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setLargeIcon((Icon) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setLargeIcon;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setLargeIcon((Bitmap) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setLights;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setLights(0, 0, 0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setLocalOnly;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setLocalOnly(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setLocusId;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setLocusId(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setNumber;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setNumber(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setOngoing;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setOngoing(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setOnlyAlertOnce;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setOnlyAlertOnce(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setPriority;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setPriority(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setProgress;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setProgress(0, 0, false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setPublicVersion;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setPublicVersion(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setPublicVersion;;;Argument[0];Argument[-1];taint"
Notification.Builder out = null;
Notification in = (Notification) source();
out.setPublicVersion(in);
sink(out); // $ hasTaintFlow
}
{
// "android.app;Notification$Builder;true;setRemoteInputHistory;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setRemoteInputHistory(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSettingsText;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSettingsText(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setShortcutId;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setShortcutId(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setShowWhen;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setShowWhen(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSmallIcon;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSmallIcon(0, 0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSmallIcon;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSmallIcon(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSmallIcon;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSmallIcon((Icon) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSortKey;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSortKey(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSound;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSound(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSound;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSound((Uri) null, 0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSound;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSound((Uri) null, (AudioAttributes) null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setStyle;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setStyle(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setSubText;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setSubText(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setTicker;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setTicker(null, null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setTicker;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setTicker(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setTimeoutAfter;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setTimeoutAfter(0L);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setUsesChronometer;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setUsesChronometer(false);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setVibrate;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setVibrate(null);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setVisibility;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setVisibility(0);
sink(out); // $ hasValueFlow
}
{
// "android.app;Notification$Builder;true;setWhen;;;Argument[-1];ReturnValue;value"
Notification.Builder out = null;
Notification.Builder in = (Notification.Builder) source();
out = in.setWhen(0L);
sink(out); // $ hasValueFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0

View File

@@ -0,0 +1,13 @@
import java
import semmle.code.java.frameworks.android.Intent
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;getMapKeyDefault;(Bundle);;MapKey of Argument[0];ReturnValue;value"
]
}
}

View File

@@ -0,0 +1,21 @@
/*
* //device/java/android/android/app/INotificationManager.aidl
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* compliance with the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to writing, software distributed under the License is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.app;
interface INotificationManager {
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,215 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.app;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.NotificationManager.Importance;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.PrintWriter;
public final class NotificationChannel implements Parcelable {
public static final int[] LOCKABLE_FIELDS = new int[] {};
public NotificationChannel(String id, CharSequence name, @Importance int importance) {}
@Override
public void writeToParcel(Parcel dest, int flags) {}
public void lockFields(int field) {}
public void unlockFields(int field) {}
public void setFgServiceShown(boolean shown) {}
public void setDeleted(boolean deleted) {}
public void setImportantConversation(boolean importantConvo) {}
public void setBlockable(boolean blockable) {}
public void setName(CharSequence name) {}
public void setDescription(String description) {}
public void setId(String id) {}
public void setGroup(String groupId) {}
public void setShowBadge(boolean showBadge) {}
public void enableLights(boolean lights) {}
public void setLightColor(int argb) {}
public void enableVibration(boolean vibration) {}
public void setVibrationPattern(long[] vibrationPattern) {}
public void setImportance(@Importance int importance) {}
public void setBypassDnd(boolean bypassDnd) {}
public void setLockscreenVisibility(int lockscreenVisibility) {}
public void setAllowBubbles(boolean allowBubbles) {}
public void setAllowBubbles(int allowed) {}
public void setConversationId(@NonNull String parentChannelId, @NonNull String conversationId) {}
public String getId() {
return null;
}
public CharSequence getName() {
return null;
}
public String getDescription() {
return null;
}
public int getImportance() {
return 0;
}
public boolean canBypassDnd() {
return false;
}
public boolean isImportantConversation() {
return false;
}
public Uri getSound() {
return null;
}
public boolean shouldShowLights() {
return false;
}
public int getLightColor() {
return 0;
}
public boolean shouldVibrate() {
return false;
}
public long[] getVibrationPattern() {
return null;
}
public int getLockscreenVisibility() {
return 0;
}
public boolean canShowBadge() {
return false;
}
public String getGroup() {
return null;
}
public boolean canBubble() {
return false;
}
public int getAllowBubbles() {
return 0;
}
public @Nullable String getParentChannelId() {
return null;
}
public @Nullable String getConversationId() {
return null;
}
public boolean isDeleted() {
return false;
}
public int getUserLockedFields() {
return 0;
}
public boolean isFgServiceShown() {
return false;
}
public boolean isBlockable() {
return false;
}
public void setImportanceLockedByOEM(boolean locked) {}
public void setImportanceLockedByCriticalDeviceFunction(boolean locked) {}
public boolean isImportanceLockedByOEM() {
return false;
}
public boolean isImportanceLockedByCriticalDeviceFunction() {
return false;
}
public int getOriginalImportance() {
return 0;
}
public void setOriginalImportance(int importance) {}
public void setDemoted(boolean demoted) {}
public boolean isDemoted() {
return false;
}
public boolean hasUserSetImportance() {
return false;
}
public boolean hasUserSetSound() {
return false;
}
public int describeContents() {
return 0;
}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return 0;
}
public void dump(PrintWriter pw, String prefix, boolean redacted) {}
@Override
public String toString() {
return null;
}
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.app;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
public final class NotificationChannelGroup implements Parcelable {
public NotificationChannelGroup(String id, CharSequence name) {}
@Override
public void writeToParcel(Parcel dest, int flags) {}
public String getId() {
return null;
}
public CharSequence getName() {
return null;
}
public String getDescription() {
return null;
}
public List<NotificationChannel> getChannels() {
return null;
}
public boolean isBlocked() {
return false;
}
public void setDescription(String description) {}
public void setBlocked(boolean blocked) {}
public void addChannel(NotificationChannel channel) {}
public void setChannels(List<NotificationChannel> channels) {}
public void lockFields(int field) {}
public void unlockFields(int field) {}
public int getUserLockedFields() {
return 0;
}
public int describeContents() {
return 0;
}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public NotificationChannelGroup clone() {
return null;
}
@Override
public String toString() {
return null;
}
}

View File

@@ -0,0 +1,376 @@
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.app;
import java.util.List;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.os.UserHandle;
public class NotificationManager {
public @interface AutomaticZenRuleStatus {
}
public @interface InterruptionFilter {
}
public @interface Importance {
}
static public INotificationManager getService() {
return null;
}
public static NotificationManager from(Context context) {
return null;
}
public void notify(int id, Notification notification) {}
public void notify(String tag, int id, Notification notification) {}
public void notifyAsPackage(@NonNull String targetPackage, @Nullable String tag, int id,
@NonNull Notification notification) {}
public void notifyAsUser(String tag, int id, Notification notification, UserHandle user) {}
public void cancel(int id) {}
public void cancel(@Nullable String tag, int id) {}
public void cancelAsPackage(@NonNull String targetPackage, @Nullable String tag, int id) {}
public void cancelAsUser(String tag, int id, UserHandle user) {}
public void cancelAll() {}
public void setNotificationDelegate(@Nullable String delegate) {}
public @Nullable String getNotificationDelegate() {
return null;
}
public boolean canNotifyAsPackage(@NonNull String pkg) {
return false;
}
public void createNotificationChannelGroup(@NonNull NotificationChannelGroup group) {}
public void createNotificationChannelGroups(@NonNull List<NotificationChannelGroup> groups) {}
public void createNotificationChannel(@NonNull NotificationChannel channel) {}
public void createNotificationChannels(@NonNull List<NotificationChannel> channels) {}
public NotificationChannel getNotificationChannel(String channelId) {
return null;
}
public @Nullable NotificationChannel getNotificationChannel(@NonNull String channelId,
@NonNull String conversationId) {
return null;
}
public List<NotificationChannel> getNotificationChannels() {
return null;
}
public void deleteNotificationChannel(String channelId) {}
public NotificationChannelGroup getNotificationChannelGroup(String channelGroupId) {
return null;
}
public List<NotificationChannelGroup> getNotificationChannelGroups() {
return null;
}
public void deleteNotificationChannelGroup(String groupId) {}
public ComponentName getEffectsSuppressor() {
return null;
}
public boolean matchesCallFilter(Bundle extras) {
return false;
}
public boolean isSystemConditionProviderEnabled(String path) {
return false;
}
public void setZenMode(int mode, Uri conditionId, String reason) {}
public int getZenMode() {
return 0;
}
public @NonNull NotificationManager.Policy getConsolidatedNotificationPolicy() {
return null;
}
public int getRuleInstanceCount(ComponentName owner) {
return 0;
}
public boolean removeAutomaticZenRule(String id) {
return false;
}
public boolean removeAutomaticZenRules(String packageName) {
return false;
}
public @Importance int getImportance() {
return 0;
}
public boolean areNotificationsEnabled() {
return false;
}
public boolean areBubblesAllowed() {
return false;
}
public void silenceNotificationSound() {}
public boolean areNotificationsPaused() {
return false;
}
public boolean isNotificationPolicyAccessGranted() {
return false;
}
public boolean isNotificationListenerAccessGranted(ComponentName listener) {
return false;
}
public boolean isNotificationAssistantAccessGranted(@NonNull ComponentName assistant) {
return false;
}
public boolean shouldHideSilentStatusBarIcons() {
return false;
}
public void allowAssistantAdjustment(String capability) {}
public void disallowAssistantAdjustment(String capability) {}
public boolean isNotificationPolicyAccessGrantedForPackage(String pkg) {
return false;
}
public List<String> getEnabledNotificationListenerPackages() {
return null;
}
public Policy getNotificationPolicy() {
return null;
}
public void setNotificationPolicy(@NonNull Policy policy) {}
public void setNotificationPolicyAccessGranted(String pkg, boolean granted) {}
public void setNotificationListenerAccessGranted(ComponentName listener, boolean granted) {}
public void setNotificationListenerAccessGrantedForUser(ComponentName listener, int userId,
boolean granted) {}
public void setNotificationAssistantAccessGranted(@Nullable ComponentName assistant,
boolean granted) {}
public List<ComponentName> getEnabledNotificationListeners(int userId) {
return null;
}
public @Nullable ComponentName getAllowedNotificationAssistant() {
return null;
}
public static class Policy implements android.os.Parcelable {
public static final int[] ALL_PRIORITY_CATEGORIES = new int[] {};
public @interface PrioritySenders {
}
public @interface ConversationSenders {
}
public Policy(int priorityCategories, int priorityCallSenders, int priorityMessageSenders) {}
public Policy(int priorityCategories, int priorityCallSenders, int priorityMessageSenders,
int suppressedVisualEffects) {}
public Policy(int priorityCategories, @PrioritySenders int priorityCallSenders,
@PrioritySenders int priorityMessageSenders, int suppressedVisualEffects,
@ConversationSenders int priorityConversationSenders) {}
public Policy(int priorityCategories, int priorityCallSenders, int priorityMessageSenders,
int suppressedVisualEffects, int state, int priorityConversationSenders) {}
public Policy(Parcel source) {}
@Override
public void writeToParcel(Parcel dest, int flags) {}
public int describeContents() {
return 0;
}
@Override
public int hashCode() {
return 0;
}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public String toString() {
return null;
}
public static int getAllSuppressedVisualEffects() {
return 0;
}
public static boolean areAllVisualEffectsSuppressed(int effects) {
return false;
}
public static String suppressedEffectsToString(int effects) {
return null;
}
public static String priorityCategoriesToString(int priorityCategories) {
return null;
}
public static String prioritySendersToString(int prioritySenders) {
return null;
}
public static @NonNull String conversationSendersToString(int priorityConversationSenders) {
return null;
}
public boolean allowAlarms() {
return false;
}
public boolean allowMedia() {
return false;
}
public boolean allowSystem() {
return false;
}
public boolean allowRepeatCallers() {
return false;
}
public boolean allowCalls() {
return false;
}
public boolean allowConversations() {
return false;
}
public boolean allowMessages() {
return false;
}
public boolean allowEvents() {
return false;
}
public boolean allowReminders() {
return false;
}
public int allowCallsFrom() {
return 0;
}
public int allowMessagesFrom() {
return 0;
}
public int allowConversationsFrom() {
return 0;
}
public boolean showFullScreenIntents() {
return false;
}
public boolean showLights() {
return false;
}
public boolean showPeeking() {
return false;
}
public boolean showStatusBarIcons() {
return false;
}
public boolean showAmbient() {
return false;
}
public boolean showBadges() {
return false;
}
public boolean showInNotificationList() {
return false;
}
public Policy copy() {
return null;
}
}
public final @InterruptionFilter int getCurrentInterruptionFilter() {
return 0;
}
public final void setInterruptionFilter(@InterruptionFilter int interruptionFilter) {}
public static int zenModeToInterruptionFilter(int zen) {
return 0;
}
public static int zenModeFromInterruptionFilter(int interruptionFilter, int defValue) {
return 0;
}
}

View File

@@ -0,0 +1,111 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.app;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
public final class Person implements Parcelable {
public Builder toBuilder() {
return null;
}
public String getUri() {
return null;
}
public CharSequence getName() {
return null;
}
public Icon getIcon() {
return null;
}
public String getKey() {
return null;
}
public boolean isBot() {
return false;
}
public boolean isImportant() {
return false;
}
public String resolveToLegacyUri() {
return null;
}
public Uri getIconUri() {
return null;
}
@Override
public boolean equals(Object obj) {
return false;
}
@Override
public int hashCode() {
return 0;
}
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {}
public static class Builder {
public Builder() {}
public Person.Builder setName(@Nullable CharSequence name) {
return null;
}
public Person.Builder setIcon(@Nullable Icon icon) {
return null;
}
public Person.Builder setUri(@Nullable String uri) {
return null;
}
public Person.Builder setKey(@Nullable String key) {
return null;
}
public Person.Builder setImportant(boolean isImportant) {
return null;
}
public Person.Builder setBot(boolean isBot) {
return null;
}
public Person build() {
return null;
}
}
}

View File

@@ -2,13 +2,11 @@
package android.content.pm;
import java.util.UUID;
import android.content.Context;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Printer;
import java.util.UUID;
public class ApplicationInfo extends PackageItemInfo implements Parcelable
{

View File

@@ -2,18 +2,12 @@
package android.graphics;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorSpace;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Picture;
import java.io.OutputStream;
import java.nio.Buffer;
import android.hardware.HardwareBuffer;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.DisplayMetrics;
import java.io.OutputStream;
import java.nio.Buffer;
public class Bitmap implements Parcelable
{

View File

@@ -7,7 +7,6 @@ import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.BlendMode;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;

View File

@@ -0,0 +1,198 @@
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.media;
import android.annotation.NonNull;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Set;
public final class AudioAttributes implements Parcelable {
public final static int[] SDK_USAGES = new int[] {};
public @interface CapturePolicy {
}
public int getContentType() {
return 0;
}
public int getUsage() {
return 0;
}
public int getSystemUsage() {
return 0;
}
public int getCapturePreset() {
return 0;
}
public int getFlags() {
return 0;
}
public int getAllFlags() {
return 0;
}
public Bundle getBundle() {
return null;
}
public Set<String> getTags() {
return null;
}
public boolean areHapticChannelsMuted() {
return false;
}
public int getAllowedCapturePolicy() {
return 0;
}
public static class Builder {
public Builder() {}
public Builder(AudioAttributes aa) {}
public AudioAttributes build() {
return null;
}
public Builder setUsage(@AttributeSdkUsage int usage) {
return null;
}
public @NonNull Builder setSystemUsage(@AttributeSystemUsage int systemUsage) {
return null;
}
public Builder setContentType(@AttributeContentType int contentType) {
return null;
}
public Builder setFlags(int flags) {
return null;
}
public @NonNull Builder setAllowedCapturePolicy(@CapturePolicy int capturePolicy) {
return null;
}
public Builder replaceFlags(int flags) {
return null;
}
public Builder addBundle(@NonNull Bundle bundle) {
return null;
}
public Builder addTag(String tag) {
return null;
}
public Builder setLegacyStreamType(int streamType) {
return null;
}
public Builder setInternalLegacyStreamType(int streamType) {
return null;
}
public Builder setCapturePreset(int preset) {
return null;
}
public Builder setInternalCapturePreset(int preset) {
return null;
}
public @NonNull Builder setHapticChannelsMuted(boolean muted) {
return null;
}
public @NonNull Builder setPrivacySensitive(boolean privacySensitive) {
return null;
}
}
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String toString() {
return null;
}
public String usageToString() {
return null;
}
public static String usageToString(int usage) {
return null;
}
public String contentTypeToString() {
return null;
}
public static boolean isSystemUsage(@AttributeSystemUsage int usage) {
return false;
}
public int getVolumeControlStream() {
return 0;
}
public static int toLegacyStreamType(@NonNull AudioAttributes aa) {
return 0;
}
public static int capturePolicyToFlags(@CapturePolicy int capturePolicy, int flags) {
return 0;
}
public @interface AttributeSystemUsage {
}
public @interface AttributeSdkUsage {
}
public @interface AttributeUsage {
}
public @interface AttributeContentType {
}
}