Merge pull request #6801 from atorralba/atorralba/android_slice_models

Android: Add `androidx.slice.builders` models
This commit is contained in:
Tony Torralba
2021-12-03 17:44:09 +01:00
committed by GitHub
32 changed files with 3566 additions and 3 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.Slice
private import semmle.code.java.frameworks.android.SQLite
private import semmle.code.java.frameworks.android.XssSinks
private import semmle.code.java.frameworks.ApacheHttp

View File

@@ -0,0 +1,95 @@
/** Provides classes and predicates related to `androidx.slice`. */
import java
private import semmle.code.java.dataflow.DataFlow
private import semmle.code.java.dataflow.FlowSteps
private import semmle.code.java.dataflow.ExternalFlow
private class SliceActionsInheritTaint extends DataFlow::SyntheticFieldContent,
TaintInheritingContent {
SliceActionsInheritTaint() { this.getField().matches("androidx.slice.Slice.action") }
}
private class SliceBuildersSummaryModels extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"androidx.slice.builders;ListBuilder;true;addAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addGridRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addInputRange;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addRange;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addRating;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;addSelection;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;setHeader;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;setSeeMoreAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;setSeeMoreRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder;true;build;;;SyntheticField[androidx.slice.Slice.action] of Argument[-1];ReturnValue;taint",
"androidx.slice.builders;ListBuilder$HeaderBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;addEndItem;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RangeBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RatingBuilder;true;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RatingBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RowBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
"androidx.slice.builders;SliceAction;true;create;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
"androidx.slice.builders;SliceAction;true;createDeeplink;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
"androidx.slice.builders;SliceAction;true;createToggle;(PendingIntent,CharSequence,boolean);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
"androidx.slice.builders;SliceAction;true;getAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[-1];ReturnValue;taint",
// Fluent models
"androidx.slice.builders;ListBuilder;true;" +
[
"addAction", "addGridRow", "addInputRange", "addRange", "addRating", "addRow",
"addSelection", "setAccentColor", "setHeader", "setHostExtras", "setIsError",
"setKeywords", "setLayoutDirection", "setSeeMoreAction", "setSeeMoreRow"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;ListBuilder$HeaderBuilder;true;" +
[
"setContentDescription", "setLayoutDirection", "setPrimaryAction", "setSubtitle",
"setSummary", "setTitle"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;" +
[
"addEndItem", "setContentDescription", "setInputAction", "setLayoutDirection", "setMax",
"setMin", "setPrimaryAction", "setSubtitle", "setThumb", "setTitle", "setTitleItem",
"setValue"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;ListBuilder$RangeBuilder;true;" +
[
"setContentDescription", "setMax", "setMode", "setPrimaryAction", "setSubtitle",
"setTitle", "setTitleItem", "setValue"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;ListBuilder$RatingBuilder;true;" +
[
"setContentDescription", "setInputAction", "setMax", "setMin", "setPrimaryAction",
"setSubtitle", "setTitle", "setTitleItem", "setValue"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;ListBuilder$RowBuilder;true;" +
[
"addEndItem", "setContentDescription", "setEndOfSection", "setLayoutDirection",
"setPrimaryAction", "setSubtitle", "setTitle", "setTitleItem"
] + ";;;Argument[-1];ReturnValue;value",
"androidx.slice.builders;SliceAction;true;" +
["setChecked", "setContentDescription", "setPriority"] +
";;;Argument[-1];ReturnValue;value"
]
}
}
private class SliceProviderSourceModels extends SourceModelCsv {
override predicate row(string row) {
row =
[
"androidx.slice;SliceProvider;true;onBindSlice;;;Parameter[0];contentprovider",
"androidx.slice;SliceProvider;true;onCreatePermissionRequest;;;Parameter[0];contentprovider",
"androidx.slice;SliceProvider;true;onMapIntentToUri;;;Parameter[0];contentprovider",
"androidx.slice;SliceProvider;true;onSlicePinned;;;Parameter[0];contentprovider",
"androidx.slice;SliceProvider;true;onSliceUnpinned;;;Parameter[0];contentprovider"
]
}
}

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.example.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name=".TestSources"
android:authority="com.example.myapp.Test"
android:exported="true" />
</application>
</manifest>

View File

@@ -0,0 +1,841 @@
package generatedtest;
import android.app.PendingIntent;
import androidx.core.graphics.drawable.IconCompat;
import androidx.remotecallback.RemoteCallback;
import androidx.slice.Slice;
import androidx.slice.builders.GridRowBuilder;
import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SelectionBuilder;
import androidx.slice.builders.SliceAction;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object newWithSlice_actionDefault(Object element) {
return null;
}
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;false;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.HeaderBuilder out = null;
SliceAction in = (SliceAction) source();
out.setPrimaryAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setContentDescription;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setLayoutDirection;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setLayoutDirection(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setPrimaryAction;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setPrimaryAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setSubtitle(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setSubtitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setSummary;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setSummary(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setSummary;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setSummary(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setTitle(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$HeaderBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.HeaderBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out = in.setTitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;false;addEndItem;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.InputRangeBuilder out = null;
SliceAction in = (SliceAction) source();
out.addEndItem(in, false);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;false;addEndItem;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.InputRangeBuilder out = null;
SliceAction in = (SliceAction) source();
out.addEndItem(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;false;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of Argument[-1];taint"
ListBuilder.InputRangeBuilder out = null;
PendingIntent in = (PendingIntent) source();
out.setInputAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;false;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.InputRangeBuilder out = null;
SliceAction in = (SliceAction) source();
out.setPrimaryAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.addEndItem(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.addEndItem(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setContentDescription;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setInputAction;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setInputAction((RemoteCallback) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setInputAction;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setInputAction((PendingIntent) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setLayoutDirection;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setLayoutDirection(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setMax;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setMax(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setMin;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setMin(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setPrimaryAction;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setPrimaryAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setSubtitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setThumb;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setThumb(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setTitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setTitleItem(null, 0, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setTitleItem(null, 0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setValue;;;Argument[-1];ReturnValue;value"
ListBuilder.InputRangeBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out = in.setValue(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;false;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RangeBuilder out = null;
SliceAction in = (SliceAction) source();
out.setPrimaryAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setContentDescription;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setMax;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setMax(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setMode;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setMode(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setPrimaryAction;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setPrimaryAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setSubtitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setTitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setTitleItem(null, 0, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setTitleItem(null, 0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RangeBuilder;true;setValue;;;Argument[-1];ReturnValue;value"
ListBuilder.RangeBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out = in.setValue(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;false;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of Argument[-1];taint"
ListBuilder.RatingBuilder out = null;
PendingIntent in = (PendingIntent) source();
out.setInputAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;false;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RatingBuilder out = null;
SliceAction in = (SliceAction) source();
out.setPrimaryAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setContentDescription;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setInputAction;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setInputAction((RemoteCallback) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setInputAction;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setInputAction((PendingIntent) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setMax;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setMax(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setMin;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setMin(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setPrimaryAction;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setPrimaryAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setSubtitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setTitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setTitleItem(null, 0, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setTitleItem(null, 0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RatingBuilder;true;setValue;;;Argument[-1];ReturnValue;value"
ListBuilder.RatingBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out = in.setValue(0.0f);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;false;addEndItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RowBuilder out = null;
SliceAction in = (SliceAction) source();
out.addEndItem(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;false;addEndItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RowBuilder out = null;
SliceAction in = (SliceAction) source();
out.addEndItem(in, false);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;false;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RowBuilder out = null;
SliceAction in = (SliceAction) source();
out.setPrimaryAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;false;setTitleItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RowBuilder out = null;
SliceAction in = (SliceAction) source();
out.setTitleItem(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;false;setTitleItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder.RowBuilder out = null;
SliceAction in = (SliceAction) source();
out.setTitleItem(in, false);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.addEndItem(null, 0, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.addEndItem(0L);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.addEndItem((SliceAction) null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.addEndItem((SliceAction) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.addEndItem((IconCompat) null, 0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setContentDescription;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setEndOfSection;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setEndOfSection(false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setLayoutDirection;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setLayoutDirection(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setPrimaryAction;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setPrimaryAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setSubtitle(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setSubtitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setSubtitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitle(null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitle;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitle(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitleItem(null, 0, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitleItem(0L);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitleItem((SliceAction) null, false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitleItem((SliceAction) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;;;Argument[-1];ReturnValue;value"
ListBuilder.RowBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out = in.setTitleItem((IconCompat) null, 0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
SliceAction in = (SliceAction) source();
out.addAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addGridRow;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
GridRowBuilder in = (GridRowBuilder) source();
out.addGridRow(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addInputRange;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.InputRangeBuilder in = (ListBuilder.InputRangeBuilder) source();
out.addInputRange(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addRange;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.RangeBuilder in = (ListBuilder.RangeBuilder) source();
out.addRange(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addRating;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.RatingBuilder in = (ListBuilder.RatingBuilder) source();
out.addRating(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addRow;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out.addRow(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;addSelection;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
SelectionBuilder in = (SelectionBuilder) source();
out.addSelection(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;setHeader;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.HeaderBuilder in = (ListBuilder.HeaderBuilder) source();
out.setHeader(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;false;setSeeMoreAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of Argument[-1];taint"
ListBuilder out = null;
PendingIntent in = (PendingIntent) source();
out.setSeeMoreAction(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addAction;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addAction(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addGridRow;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addGridRow(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addInputRange;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addInputRange(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addRange;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addRange(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addRating;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addRating(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addRow;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addRow(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;addSelection;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.addSelection(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;build;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[-1];ReturnValue;taint"
Slice out = null;
ListBuilder in = (ListBuilder) source();
out = in.build();
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setAccentColor;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setAccentColor(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setHeader;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setHeader(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setHostExtras;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setHostExtras(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setIsError;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setIsError(false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setKeywords;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setKeywords(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setLayoutDirection;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setLayoutDirection(0);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setSeeMoreAction;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setSeeMoreAction((RemoteCallback) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setSeeMoreAction;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setSeeMoreAction((PendingIntent) null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setSeeMoreRow;;;Argument[-1];ReturnValue;value"
ListBuilder out = null;
ListBuilder in = (ListBuilder) source();
out = in.setSeeMoreRow(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;ListBuilder;true;setSeeMoreRow;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[0];SyntheticField[androidx.slice.Slice.action] of
// Argument[-1];taint"
ListBuilder out = null;
ListBuilder.RowBuilder in = (ListBuilder.RowBuilder) source();
out.setSeeMoreRow(in);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;SliceAction;false;create;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of ReturnValue;taint"
SliceAction out = null;
PendingIntent in = (PendingIntent) source();
out = SliceAction.create(in, (IconCompat) null, 0, (CharSequence) null);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;SliceAction;false;createDeeplink;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of ReturnValue;taint"
SliceAction out = null;
PendingIntent in = (PendingIntent) source();
out = SliceAction.createDeeplink(in, (IconCompat) null, 0, (CharSequence) null);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;SliceAction;false;createToggle;(PendingIntent,CharSequence,boolean);;Argument[0];SyntheticField[androidx.slice.Slice.action]
// of ReturnValue;taint"
SliceAction out = null;
PendingIntent in = (PendingIntent) source();
out = SliceAction.createToggle(in, (CharSequence) null, false);
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;SliceAction;false;getAction;;;SyntheticField[androidx.slice.Slice.action]
// of Argument[-1];ReturnValue;taint"
PendingIntent out = null;
SliceAction in = (SliceAction) source();
out = in.getAction();
sink(out); // $ hasTaintFlow
}
{
// "androidx.slice.builders;SliceAction;true;setChecked;;;Argument[-1];ReturnValue;value"
SliceAction out = null;
SliceAction in = (SliceAction) source();
out = in.setChecked(false);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;SliceAction;true;setContentDescription;;;Argument[-1];ReturnValue;value"
SliceAction out = null;
SliceAction in = (SliceAction) source();
out = in.setContentDescription(null);
sink(out); // $ hasValueFlow
}
{
// "androidx.slice.builders;SliceAction;true;setPriority;;;Argument[-1];ReturnValue;value"
SliceAction out = null;
SliceAction in = (SliceAction) source();
out = in.setPriority(0);
sink(out); // $ hasValueFlow
}
}
}

View File

@@ -0,0 +1,71 @@
package com.example.app;
import java.io.FileNotFoundException;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.RemoteException;
import androidx.slice.Slice;
import androidx.slice.SliceProvider;
public class TestSources extends SliceProvider {
void sink(Object o) {}
// "androidx.slice;SliceProvider;true;onBindSlice;;;Parameter[0];contentprovider",
@Override
public Slice onBindSlice(Uri sliceUri) {
sink(sliceUri); // $hasValueFlow
return null;
}
// "androidx.slice;SliceProvider;true;onCreatePermissionRequest;;;Parameter[0];contentprovider",
@Override
public PendingIntent onCreatePermissionRequest(Uri sliceUri, String callingPackage) {
sink(sliceUri); // $hasValueFlow
sink(callingPackage); // Safe
return null;
}
// "androidx.slice;SliceProvider;true;onMapIntentToUri;;;Parameter[0];contentprovider",
@Override
public Uri onMapIntentToUri(Intent intent) {
sink(intent); // $hasValueFlow
return null;
}
// "androidx.slice;SliceProvider;true;onSlicePinned;;;Parameter[0];contentprovider",
public void onSlicePinned(Uri sliceUri) {
sink(sliceUri); // $hasValueFlow
}
// "androidx.slice;SliceProvider;true;onSliceUnpinned;;;Parameter[0];contentprovider"
public void onSliceUnpinned(Uri sliceUri) {
sink(sliceUri); // $hasValueFlow
}
// Methods needed for compilation
@Override
public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts,
CancellationSignal signal) throws RemoteException, FileNotFoundException {
return null;
}
@Override
public Bundle call(String authority, String method, String arg, Bundle extras)
throws RemoteException {
return null;
}
@Override
public boolean onCreateSliceProvider() {
return false;
}
}

View File

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

View File

@@ -0,0 +1,18 @@
import java
import TestUtilities.InlineFlowTest
import semmle.code.java.dataflow.FlowSources
class SliceValueFlowConf extends DefaultValueFlowConf {
override predicate isSource(DataFlow::Node source) {
super.isSource(source) or source instanceof RemoteFlowSource
}
}
class SliceTaintFlowConf extends DefaultTaintFlowConf {
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
super.allowImplicitRead(node, c)
or
isSink(node) and
c.(DataFlow::SyntheticFieldContent).getField() = "androidx.slice.Slice.action"
}
}

View File

@@ -0,0 +1,214 @@
/*
* Copyright (C) 2006 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.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
import android.util.AndroidException;
public final class PendingIntent implements Parcelable {
public @interface Flags {
}
public static final int FLAG_ONE_SHOT = 1 << 30;
public static final int FLAG_NO_CREATE = 1 << 29;
public static final int FLAG_CANCEL_CURRENT = 1 << 28;
public static final int FLAG_UPDATE_CURRENT = 1 << 27;
public static final int FLAG_IMMUTABLE = 1 << 26;
public static class CanceledException extends AndroidException {
public CanceledException() {}
public CanceledException(String name) {}
public CanceledException(Exception cause) {}
}
public interface OnFinished {
void onSendFinished(PendingIntent pendingIntent, Intent intent, int resultCode,
String resultData, Bundle resultExtras);
}
public interface OnMarshaledListener {
void onMarshaled(PendingIntent intent, Parcel parcel, int flags);
}
public static void setOnMarshaledListener(OnMarshaledListener listener) {}
public static PendingIntent getActivity(Context context, int requestCode, Intent intent,
@Flags int flags) {
return null;
}
public static PendingIntent getActivity(Context context, int requestCode, @NonNull Intent intent,
@Flags int flags, @Nullable Bundle options) {
return null;
}
public static PendingIntent getActivityAsUser(Context context, int requestCode,
@NonNull Intent intent, int flags, Bundle options, UserHandle user) {
return null;
}
public static PendingIntent getActivities(Context context, int requestCode,
@NonNull Intent[] intents, @Flags int flags) {
return null;
}
public static PendingIntent getActivities(Context context, int requestCode,
@NonNull Intent[] intents, @Flags int flags, @Nullable Bundle options) {
return null;
}
public static PendingIntent getActivitiesAsUser(Context context, int requestCode,
@NonNull Intent[] intents, int flags, Bundle options, UserHandle user) {
return null;
}
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent,
@Flags int flags) {
return null;
}
public static PendingIntent getBroadcastAsUser(Context context, int requestCode, Intent intent,
int flags, UserHandle userHandle) {
return null;
}
public static PendingIntent getService(Context context, int requestCode, @NonNull Intent intent,
@Flags int flags) {
return null;
}
public static PendingIntent getForegroundService(Context context, int requestCode,
@NonNull Intent intent, @Flags int flags) {
return null;
}
public void cancel() {}
public void send() throws CanceledException {}
public void send(int code) throws CanceledException {}
public void send(Context context, int code, @Nullable Intent intent) throws CanceledException {}
public void send(int code, @Nullable OnFinished onFinished, @Nullable Handler handler)
throws CanceledException {}
public void send(Context context, int code, @Nullable Intent intent,
@Nullable OnFinished onFinished, @Nullable Handler handler) throws CanceledException {}
public void send(Context context, int code, @Nullable Intent intent,
@Nullable OnFinished onFinished, @Nullable Handler handler,
@Nullable String requiredPermission) throws CanceledException {}
public void send(Context context, int code, @Nullable Intent intent,
@Nullable OnFinished onFinished, @Nullable Handler handler,
@Nullable String requiredPermission, @Nullable Bundle options) throws CanceledException {}
public int sendAndReturnResult(Context context, int code, @Nullable Intent intent,
@Nullable OnFinished onFinished, @Nullable Handler handler,
@Nullable String requiredPermission, @Nullable Bundle options) throws CanceledException {
return 0;
}
public String getTargetPackage() {
return null;
}
public String getCreatorPackage() {
return null;
}
public int getCreatorUid() {
return 0;
}
public void registerCancelListener(CancelListener cancelListener) {}
public void unregisterCancelListener(CancelListener cancelListener) {}
public UserHandle getCreatorUserHandle() {
return null;
}
public boolean isTargetedToPackage() {
return false;
}
public boolean isActivity() {
return false;
}
public boolean isForegroundService() {
return false;
}
public boolean isBroadcast() {
return false;
}
public Intent getIntent() {
return null;
}
public String getTag(String prefix) {
return null;
}
@Override
public boolean equals(Object otherObj) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String toString() {
return null;
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {}
public static void writePendingIntentOrNullToParcel(@Nullable PendingIntent sender,
@NonNull Parcel out) {}
public static PendingIntent readPendingIntentOrNullFromParcel(@NonNull Parcel in) {
return null;
}
public interface CancelListener {
void onCancelled(PendingIntent intent);
}
}

View File

@@ -2,6 +2,7 @@
package android.content;
import java.io.PrintWriter;
import android.os.Parcel;
import android.os.Parcelable;
@@ -24,11 +25,17 @@ public class ComponentName implements Cloneable, Comparable<ComponentName>, Parc
public int compareTo(ComponentName p0){ return 0; }
public int describeContents(){ return 0; }
public int hashCode(){ return 0; }
public static void appendShortString(StringBuilder sb, String packageName, String className) {}
public static ComponentName createRelative(Context p0, String p1){ return null; }
public static ComponentName createRelative(String p0, String p1){ return null; }
public static String flattenToShortString(ComponentName componentName) { return null; }
public static void printShortString(PrintWriter pw, String packageName, String className) {}
public static ComponentName readFromParcel(Parcel p0){ return null; }
public static ComponentName unflattenFromString(String p0){ return null; }
public static Parcelable.Creator<ComponentName> CREATOR = null;
public static void writeToParcel(ComponentName p0, Parcel p1){}
public void writeToParcel(Parcel p0, int p1){}
public interface WithComponentName {
ComponentName getComponentName();
}
}

View File

@@ -2,9 +2,7 @@
package android.os;
import android.os.BaseBundle;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.InputStream;
public class PersistableBundle extends BaseBundle implements Cloneable, Parcelable
{
@@ -20,4 +18,5 @@ public class PersistableBundle extends BaseBundle implements Cloneable, Parcelab
public static PersistableBundle EMPTY = null;
public void putPersistableBundle(String p0, PersistableBundle p1){}
public void writeToParcel(Parcel p0, int p1){}
public static PersistableBundle readFromStream(InputStream inputStream){ return null; }
}

View File

@@ -2,6 +2,8 @@
package android.os;
import java.io.PrintWriter;
public class UserHandle implements Parcelable
{
protected UserHandle() {}
@@ -15,4 +17,28 @@ public class UserHandle implements Parcelable
public static UserHandle readFromParcel(Parcel p0){ return null; }
public static void writeToParcel(UserHandle p0, Parcel p1){}
public void writeToParcel(Parcel p0, int p1){}
public static boolean isSameUser(int uid1, int uid2) { return false; }
public static boolean isSameApp(int uid1, int uid2) { return false; }
public static boolean isIsolated(int uid) { return false; }
public static boolean isApp(int uid) { return false; }
public static boolean isCore(int uid) { return false; }
public static int getUserId(int uid) { return 0; }
public static int getCallingUserId() { return 0; }
public static int getCallingAppId() { return 0; }
public static UserHandle of(int userId) { return null; }
public static int getUid(int userId, int appId) { return 0; }
public static int getAppId(int uid) { return 0; }
public static int getUserGid(int userId) { return 0; }
public static int getSharedAppGid(int uid) { return 0; }
public static int getSharedAppGid(int userId, int appId) { return 0; }
public static int getAppIdFromSharedAppGid(int gid) { return 0; }
public static int getCacheAppGid(int uid) { return 0; }
public static int getCacheAppGid(int userId, int appId) { return 0; }
public static void formatUid(StringBuilder sb, int uid) {}
public static String formatUid(int uid) { return null; }
public static void formatUid(PrintWriter pw, int uid) {}
public static int parseUserArg(String arg) { return 0; }
public static int myUserId() { return 0; }
public boolean isOwner() { return false; }
public boolean isSystem() { return false; }
}

View File

@@ -0,0 +1,23 @@
/*
* Copyright (C) 2015 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 androidx.annotation;
public @interface IntRange {
long from() default Long.MIN_VALUE;
long to() default Long.MAX_VALUE;
}

View File

@@ -0,0 +1,19 @@
/*
* Copyright (C) 2013 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 androidx.annotation;
public @interface Nullable {
}

View File

@@ -0,0 +1,102 @@
/*
* 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 androidx.core.graphics.drawable;
import android.content.Context;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.InputStream;
public class IconCompat {
public @interface IconType {
}
public static IconCompat createWithData(byte[] data, int offset, int length) {
return null;
}
public static IconCompat createWithContentUri(String uri) {
return null;
}
public static IconCompat createWithContentUri(Uri uri) {
return null;
}
public static IconCompat createWithAdaptiveBitmapContentUri(@NonNull String uri) {
return null;
}
public static IconCompat createWithAdaptiveBitmapContentUri(@NonNull Uri uri) {
return null;
}
public IconCompat() {}
public int getType() {
return 0;
}
public String getResPackage() {
return null;
}
public int getResId() {
return 0;
}
public Uri getUri() {
return null;
}
public Icon toIcon() {
return null;
}
public Icon toIcon(@Nullable Context context) {
return null;
}
public void checkResource(@NonNull Context context) {}
public InputStream getUriInputStream(@NonNull Context context) {
return null;
}
public Bundle toBundle() {
return null;
}
public static @Nullable IconCompat createFromBundle(@NonNull Bundle bundle) {
return null;
}
public static IconCompat createFromIcon(@NonNull Context context, @NonNull Icon icon) {
return null;
}
public static IconCompat createFromIcon(@NonNull Icon icon) {
return null;
}
public static IconCompat createFromIconOrNullIfZeroResId(@NonNull Icon icon) {
return null;
}
}

View File

@@ -0,0 +1,22 @@
/*
* Copyright 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 androidx.core.util;
public interface Consumer<T> {
void accept(T t);
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2009 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 androidx.core.util;
public class Pair<F, S> {
public Pair(F first, S second) {
}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String toString() {
return null;
}
public static <A, B> Pair<A, B> create(A a, B b) {
return null;
}
}

View File

@@ -0,0 +1,51 @@
/*
* Copyright 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 androidx.remotecallback;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
public class RemoteCallback {
public @interface RemoteCallbackType {
}
public RemoteCallback(@NonNull Context context, @RemoteCallbackType int type,
@NonNull Intent intent, @NonNull String receiverClass, @NonNull Bundle arguments) {}
public int getType() {
return 0;
}
public String getReceiverClass() {
return null;
}
public String getMethodName() {
return null;
}
public Bundle getArgumentBundle() {
return null;
}
public PendingIntent toPendingIntent() {
return null;
}
public static final RemoteCallback LOCAL = new RemoteCallback(null, -1, null, null, null);
}

View File

@@ -0,0 +1,160 @@
/*
* 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 androidx.slice;
import android.app.PendingIntent;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.IconCompat;
import java.util.List;
import java.util.Set;
public final class Slice {
public @interface SliceHint {
}
public Slice() {}
public Slice(Bundle in) {}
public Bundle toBundle() {
return null;
}
public Uri getUri() {
return null;
}
public List<SliceItem> getItems() {
return null;
}
public SliceItem[] getItemArray() {
return null;
}
public @SliceHint List<String> getHints() {
return null;
}
public @SliceHint String[] getHintArray() {
return null;
}
public boolean hasHint(@SliceHint String hint) {
return false;
}
public static class Builder {
public Builder(@NonNull Uri uri) {}
public Builder(@NonNull Slice.Builder parent) {}
public Builder addHints(@SliceHint String... hints) {
return null;
}
public Builder addHints(@SliceHint List<String> hints) {
return null;
}
public Builder addSubSlice(@NonNull Slice slice) {
return null;
}
public Builder addSubSlice(@NonNull Slice slice, String subType) {
return null;
}
public Slice.Builder addAction(@NonNull PendingIntent action, @NonNull Slice s,
@Nullable String subType) {
return null;
}
public Slice.Builder addAction(@NonNull SliceItem.ActionHandler action, @NonNull Slice s,
@Nullable String subType) {
return null;
}
public Builder addText(CharSequence text, @Nullable String subType,
@SliceHint String... hints) {
return null;
}
public Builder addText(CharSequence text, @Nullable String subType,
@SliceHint List<String> hints) {
return null;
}
public Builder addIcon(IconCompat icon, @Nullable String subType, @SliceHint String... hints) {
return null;
}
public Builder addIcon(IconCompat icon, @Nullable String subType,
@SliceHint List<String> hints) {
return null;
}
public Builder addInt(int value, @Nullable String subType, @SliceHint String... hints) {
return null;
}
public Builder addInt(int value, @Nullable String subType, @SliceHint List<String> hints) {
return null;
}
public Slice.Builder addLong(long time, @Nullable String subType, @SliceHint String... hints) {
return null;
}
public Slice.Builder addLong(long time, @Nullable String subType,
@SliceHint List<String> hints) {
return null;
}
public Slice.Builder addTimestamp(long time, @Nullable String subType,
@SliceHint String... hints) {
return null;
}
public Slice.Builder addTimestamp(long time, @Nullable String subType,
@SliceHint List<String> hints) {
return null;
}
public Slice.Builder addItem(SliceItem item) {
return null;
}
public Slice build() {
return null;
}
}
public String toString(String indent) {
return null;
}
public static void appendHints(StringBuilder sb, String[] hints) {}
public static Slice bindSlice(Context context, @NonNull Uri uri, Set<SliceSpec> supportedSpecs) {
return null;
}
}

View File

@@ -0,0 +1,137 @@
/*
* 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 androidx.slice;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.IconCompat;
import java.util.List;
public final class SliceItem {
public @interface SliceType {
}
public SliceItem(Object obj, @SliceType String format, String subType,
@Slice.SliceHint String[] hints) {}
public SliceItem(Object obj, @SliceType String format, String subType,
@Slice.SliceHint List<String> hints) {}
public SliceItem() {}
public SliceItem(PendingIntent intent, Slice slice, String format, String subType,
@Slice.SliceHint String[] hints) {}
public SliceItem(ActionHandler action, Slice slice, String format, String subType,
@Slice.SliceHint String[] hints) {}
public @NonNull @Slice.SliceHint List<String> getHints() {
return null;
}
public @NonNull @Slice.SliceHint String[] getHintArray() {
return null;
}
public void addHint(@Slice.SliceHint String hint) {}
public @SliceType String getFormat() {
return null;
}
public String getSubType() {
return null;
}
public CharSequence getText() {
return null;
}
public CharSequence getSanitizedText() {
return null;
}
public CharSequence getRedactedText() {
return null;
}
public IconCompat getIcon() {
return null;
}
public PendingIntent getAction() {
return null;
}
public void fireAction(@Nullable Context context, @Nullable Intent i)
throws PendingIntent.CanceledException {}
public boolean fireActionInternal(@Nullable Context context, @Nullable Intent i)
throws PendingIntent.CanceledException {
return false;
}
public int getInt() {
return 0;
}
public Slice getSlice() {
return null;
}
public long getLong() {
return 0;
}
public boolean hasHint(@Slice.SliceHint String hint) {
return false;
}
public SliceItem(Bundle in) {}
public Bundle toBundle() {
return null;
}
public boolean hasHints(@Slice.SliceHint String[] hints) {
return false;
}
public boolean hasAnyHints(@Slice.SliceHint String... hints) {
return false;
}
public static String typeToString(String format) {
return null;
}
@Override
public String toString() {
return null;
}
public String toString(String indent) {
return null;
}
public interface ActionHandler {
void onAction(SliceItem item, Context context, Intent intent);
}
}

View File

@@ -0,0 +1,130 @@
/*
* 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 androidx.slice;
import java.util.Collection;
import java.util.List;
import android.app.PendingIntent;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public abstract class SliceProvider extends ContentProvider {
public SliceProvider(@NonNull String... autoGrantPermissions) {}
public SliceProvider() {}
public abstract boolean onCreateSliceProvider();
@Override
public final boolean onCreate() {
return false;
}
@Override
public final String getType(@NonNull Uri uri) {
return null;
}
@Override
public Bundle call(@NonNull String method, @Nullable String arg, @Nullable Bundle extras) {
return null;
}
public PendingIntent onCreatePermissionRequest(@NonNull Uri sliceUri,
@NonNull String callingPackage) {
return null;
}
public Slice createPermissionSlice(@NonNull Uri sliceUri, @NonNull String callingPackage) {
return null;
}
public abstract Slice onBindSlice(@NonNull Uri sliceUri);
public void onSlicePinned(@NonNull Uri sliceUri) {}
public void onSliceUnpinned(@NonNull Uri sliceUri) {}
public void handleSlicePinned(@NonNull Uri sliceUri) {}
public void handleSliceUnpinned(@NonNull Uri sliceUri) {}
public Uri onMapIntentToUri(@NonNull Intent intent) {
return null;
}
public Collection<Uri> onGetSliceDescendants(@NonNull Uri uri) {
return null;
}
public List<Uri> getPinnedSlices() {
return null;
}
public void validateIncomingAuthority(@Nullable String authority) throws SecurityException {}
@Override
public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
@Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return null;
}
@Override
public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
@Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) {
return null;
}
@Override
public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
@Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder,
@Nullable CancellationSignal cancellationSignal) {
return null;
}
@Override
public final Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
@Override
public final int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
return 0;
}
@Override
public final int delete(@NonNull Uri uri, @Nullable String selection,
@Nullable String[] selectionArgs) {
return 0;
}
@Override
public final int update(@NonNull Uri uri, @Nullable ContentValues values,
@Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
@Override
public final Uri canonicalize(@NonNull Uri url) {
return null;
}
}

View File

@@ -0,0 +1,51 @@
/*
* Copyright 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 androidx.slice;
import androidx.annotation.NonNull;
public final class SliceSpec {
public SliceSpec() {}
public SliceSpec(@NonNull String type, int revision) {}
public String getType() {
return null;
}
public int getRevision() {
return 0;
}
public boolean canRender(@NonNull SliceSpec candidate) {
return false;
}
@Override
public boolean equals(Object obj) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String toString() {
return null;
}
}

View File

@@ -0,0 +1,168 @@
/*
* Copyright 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 androidx.slice.builders;
import android.app.PendingIntent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.IconCompat;
import androidx.remotecallback.RemoteCallback;
import java.util.List;
public class GridRowBuilder {
public GridRowBuilder() {
}
public GridRowBuilder addCell(@NonNull CellBuilder builder) {
return null;
}
public GridRowBuilder setSeeMoreCell(@NonNull CellBuilder builder) {
return null;
}
public GridRowBuilder setSeeMoreAction(@NonNull PendingIntent intent) {
return null;
}
public GridRowBuilder setSeeMoreAction(@NonNull RemoteCallback callback) {
return null;
}
public GridRowBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public GridRowBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public GridRowBuilder setLayoutDirection(@ListBuilder.LayoutDirection int layoutDirection) {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public List<CellBuilder> getCells() {
return null;
}
public CellBuilder getSeeMoreCell() {
return null;
}
public PendingIntent getSeeMoreIntent() {
return null;
}
public CharSequence getDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
public static class CellBuilder {
public CellBuilder() {
}
public CellBuilder addText(@NonNull CharSequence text) {
return null;
}
public CellBuilder addText(@Nullable CharSequence text, boolean isLoading) {
return null;
}
public CellBuilder addTitleText(@NonNull CharSequence text) {
return null;
}
public CellBuilder addTitleText(@Nullable CharSequence text, boolean isLoading) {
return null;
}
public CellBuilder addImage(@NonNull IconCompat image,
@ListBuilder.ImageMode int imageMode) {
return null;
}
public CellBuilder addImage(@Nullable IconCompat image,
@ListBuilder.ImageMode int imageMode, boolean isLoading) {
return null;
}
public CellBuilder addOverlayText(@NonNull CharSequence text) {
return null;
}
public CellBuilder addOverlayText(@Nullable CharSequence text, boolean isLoading) {
return null;
}
public CellBuilder setContentIntent(@NonNull PendingIntent intent) {
return null;
}
public CellBuilder setContentIntent(@NonNull RemoteCallback callback) {
return null;
}
public CellBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public CellBuilder setSliceAction(@NonNull SliceAction action) {
return null;
}
public List<Object> getObjects() {
return null;
}
public List<Integer> getTypes() {
return null;
}
public List<Boolean> getLoadings() {
return null;
}
public CharSequence getCellDescription() {
return null;
}
public PendingIntent getContentIntent() {
return null;
}
public CharSequence getTitle() {
return null;
}
public CharSequence getSubtitle() {
return null;
}
public SliceAction getSliceAction() {
return null;
}
}
}

View File

@@ -0,0 +1,701 @@
/*
* Copyright 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 androidx.slice.builders;
import android.app.PendingIntent;
import android.content.Context;
import android.net.Uri;
import android.os.PersistableBundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.IconCompat;
import androidx.remotecallback.RemoteCallback;
import androidx.slice.Slice;
import java.time.Duration;
import java.util.List;
import java.util.Set;
public class ListBuilder extends TemplateSliceBuilder {
public @interface ImageMode {
}
public @interface LayoutDirection {
}
public ListBuilder addRating(@NonNull RatingBuilder b) {
return null;
}
public ListBuilder(@NonNull Context context, @NonNull Uri uri, long ttl) {
super(null, null);
}
public ListBuilder(@NonNull Context context, @NonNull Uri uri, @Nullable Duration ttl) {
super(null, null);
}
@Override
public Slice build() {
return null;
}
public ListBuilder addRow(@NonNull RowBuilder builder) {
return null;
}
public ListBuilder addGridRow(@NonNull GridRowBuilder builder) {
return null;
}
public ListBuilder setHeader(@NonNull HeaderBuilder builder) {
return null;
}
public ListBuilder addAction(@NonNull SliceAction action) {
return null;
}
public ListBuilder setAccentColor(int color) {
return null;
}
public ListBuilder setKeywords(@NonNull final Set<String> keywords) {
return null;
}
public ListBuilder setLayoutDirection(@LayoutDirection int layoutDirection) {
return null;
}
public ListBuilder setHostExtras(@NonNull PersistableBundle extras) {
return null;
}
public ListBuilder setSeeMoreRow(@NonNull RowBuilder builder) {
return null;
}
public ListBuilder setSeeMoreAction(@NonNull PendingIntent intent) {
return null;
}
public ListBuilder setSeeMoreAction(@NonNull RemoteCallback callback) {
return null;
}
public ListBuilder setIsError(boolean isError) {
return null;
}
public androidx.slice.builders.impl.ListBuilder getImpl() {
return null;
}
public @interface RangeMode {
}
public ListBuilder addInputRange(@NonNull InputRangeBuilder b) {
return null;
}
public ListBuilder addRange(@NonNull RangeBuilder rangeBuilder) {
return null;
}
public ListBuilder addSelection(@NonNull SelectionBuilder selectionBuilder) {
return null;
}
public static class RangeBuilder {
public RangeBuilder() {}
public RangeBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode) {
return null;
}
public RangeBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode,
boolean isLoading) {
return null;
}
public RangeBuilder setMax(int max) {
return null;
}
public RangeBuilder setValue(int value) {
return null;
}
public RangeBuilder setTitle(@NonNull CharSequence title) {
return null;
}
public RangeBuilder setSubtitle(@NonNull CharSequence title) {
return null;
}
public RangeBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public RangeBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public RangeBuilder setLayoutDirection(@LayoutDirection int layoutDirection) {
return null;
}
public RangeBuilder setMode(@RangeMode int mode) {
return null;
}
public boolean isTitleItemLoading() {
return false;
}
public int getTitleImageMode() {
return 0;
}
public IconCompat getTitleIcon() {
return null;
}
public int getValue() {
return 0;
}
public int getMax() {
return 0;
}
public boolean isValueSet() {
return false;
}
public CharSequence getTitle() {
return null;
}
public CharSequence getSubtitle() {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public CharSequence getContentDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
public int getMode() {
return 0;
}
}
public static final class RatingBuilder {
public RatingBuilder() {}
public int getMin() {
return 0;
}
public RatingBuilder setMin(int min) {
return null;
}
public int getMax() {
return 0;
}
public RatingBuilder setMax(int max) {
return null;
}
public float getValue() {
return 0;
}
public RatingBuilder setValue(float value) {
return null;
}
public boolean isValueSet() {
return false;
}
public PendingIntent getAction() {
return null;
}
public CharSequence getContentDescription() {
return null;
}
public RatingBuilder setTitle(@NonNull CharSequence title) {
return null;
}
public RatingBuilder setSubtitle(@NonNull CharSequence title) {
return null;
}
public RatingBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public RatingBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode) {
return null;
}
public RatingBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode,
boolean isLoading) {
return null;
}
public RatingBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public PendingIntent getInputAction() {
return null;
}
public RatingBuilder setInputAction(@NonNull PendingIntent action) {
return null;
}
public RatingBuilder setInputAction(@NonNull RemoteCallback callback) {
return null;
}
public CharSequence getTitle() {
return null;
}
public CharSequence getSubtitle() {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public boolean isTitleItemLoading() {
return false;
}
public int getTitleImageMode() {
return 0;
}
public IconCompat getTitleIcon() {
return null;
}
}
public static class InputRangeBuilder {
public InputRangeBuilder() {}
public InputRangeBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode) {
return null;
}
public InputRangeBuilder addEndItem(@NonNull SliceAction action) {
return null;
}
public InputRangeBuilder addEndItem(@NonNull SliceAction action, boolean isLoading) {
return null;
}
public InputRangeBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode,
boolean isLoading) {
return null;
}
public InputRangeBuilder setMin(int min) {
return null;
}
public InputRangeBuilder setMax(int max) {
return null;
}
public InputRangeBuilder setValue(int value) {
return null;
}
public InputRangeBuilder setTitle(@NonNull CharSequence title) {
return null;
}
public InputRangeBuilder setSubtitle(@NonNull CharSequence title) {
return null;
}
public InputRangeBuilder setInputAction(@NonNull PendingIntent action) {
return null;
}
public InputRangeBuilder setInputAction(@NonNull RemoteCallback callback) {
return null;
}
public InputRangeBuilder setThumb(@NonNull IconCompat thumb) {
return null;
}
public InputRangeBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public InputRangeBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public InputRangeBuilder setLayoutDirection(@LayoutDirection int layoutDirection) {
return null;
}
public boolean isTitleItemLoading() {
return false;
}
public int getTitleImageMode() {
return 0;
}
public IconCompat getTitleIcon() {
return null;
}
public List<Object> getEndItems() {
return null;
}
public List<Integer> getEndTypes() {
return null;
}
public List<Boolean> getEndLoads() {
return null;
}
public int getMin() {
return 0;
}
public int getMax() {
return 0;
}
public int getValue() {
return 0;
}
public boolean isValueSet() {
return false;
}
public CharSequence getTitle() {
return null;
}
public CharSequence getSubtitle() {
return null;
}
public PendingIntent getAction() {
return null;
}
public PendingIntent getInputAction() {
return null;
}
public IconCompat getThumb() {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public CharSequence getContentDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
}
public static class RowBuilder {
public RowBuilder() {}
public RowBuilder(@NonNull final Uri uri) {}
public RowBuilder setEndOfSection(boolean isEndOfSection) {
return null;
}
public RowBuilder setTitleItem(long timeStamp) {
return null;
}
public RowBuilder setTitleItem(@NonNull IconCompat icon, @ImageMode int imageMode) {
return null;
}
public RowBuilder setTitleItem(@Nullable IconCompat icon, @ImageMode int imageMode,
boolean isLoading) {
return null;
}
public RowBuilder setTitleItem(@NonNull SliceAction action) {
return null;
}
public RowBuilder setTitleItem(@NonNull SliceAction action, boolean isLoading) {
return null;
}
public RowBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public RowBuilder setTitle(@NonNull CharSequence title) {
return null;
}
public RowBuilder setTitle(@Nullable CharSequence title, boolean isLoading) {
return null;
}
public RowBuilder setSubtitle(@NonNull CharSequence subtitle) {
return null;
}
public RowBuilder setSubtitle(@Nullable CharSequence subtitle, boolean isLoading) {
return null;
}
public RowBuilder addEndItem(long timeStamp) {
return null;
}
public RowBuilder addEndItem(@NonNull IconCompat icon, @ImageMode int imageMode) {
return null;
}
public RowBuilder addEndItem(@Nullable IconCompat icon, @ImageMode int imageMode,
boolean isLoading) {
return null;
}
public RowBuilder addEndItem(@NonNull SliceAction action) {
return null;
}
public RowBuilder addEndItem(@NonNull SliceAction action, boolean isLoading) {
return null;
}
public RowBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public RowBuilder setLayoutDirection(@LayoutDirection int layoutDirection) {
return null;
}
public Uri getUri() {
return null;
}
public boolean isEndOfSection() {
return false;
}
public boolean hasEndActionOrToggle() {
return false;
}
public boolean hasEndImage() {
return false;
}
public boolean hasDefaultToggle() {
return false;
}
public boolean hasTimestamp() {
return false;
}
public long getTimeStamp() {
return 0;
}
public boolean isTitleItemLoading() {
return false;
}
public int getTitleImageMode() {
return 0;
}
public IconCompat getTitleIcon() {
return null;
}
public SliceAction getTitleAction() {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public CharSequence getTitle() {
return null;
}
public boolean isTitleLoading() {
return false;
}
public CharSequence getSubtitle() {
return null;
}
public boolean isSubtitleLoading() {
return false;
}
public CharSequence getContentDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
public List<Object> getEndItems() {
return null;
}
public List<Integer> getEndTypes() {
return null;
}
public List<Boolean> getEndLoads() {
return null;
}
public boolean isTitleActionLoading() {
return false;
}
}
public static class HeaderBuilder {
public HeaderBuilder() {}
public HeaderBuilder(@NonNull final Uri uri) {}
public HeaderBuilder setTitle(@NonNull CharSequence title) {
return null;
}
public HeaderBuilder setTitle(@NonNull CharSequence title, boolean isLoading) {
return null;
}
public HeaderBuilder setSubtitle(@NonNull CharSequence subtitle) {
return null;
}
public HeaderBuilder setSubtitle(@NonNull CharSequence subtitle, boolean isLoading) {
return null;
}
public HeaderBuilder setSummary(@NonNull CharSequence summary) {
return null;
}
public HeaderBuilder setSummary(@NonNull CharSequence summary, boolean isLoading) {
return null;
}
public HeaderBuilder setPrimaryAction(@NonNull SliceAction action) {
return null;
}
public HeaderBuilder setContentDescription(@NonNull CharSequence description) {
return null;
}
public HeaderBuilder setLayoutDirection(@LayoutDirection int layoutDirection) {
return null;
}
public Uri getUri() {
return null;
}
public CharSequence getTitle() {
return null;
}
public boolean isTitleLoading() {
return false;
}
public CharSequence getSubtitle() {
return null;
}
public boolean isSubtitleLoading() {
return false;
}
public CharSequence getSummary() {
return null;
}
public boolean isSummaryLoading() {
return false;
}
public SliceAction getPrimaryAction() {
return null;
}
public CharSequence getContentDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
}
}

View File

@@ -0,0 +1,59 @@
/*
* Copyright 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 androidx.slice.builders;
import android.content.Context;
import android.graphics.drawable.Icon;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.IconCompat;
import androidx.core.util.Consumer;
public class MessagingSliceBuilder extends TemplateSliceBuilder {
public MessagingSliceBuilder(@NonNull Context context, @NonNull Uri uri) {
super(null, null);
}
public MessagingSliceBuilder add(MessageBuilder builder) {
return null;
}
public MessagingSliceBuilder add(Consumer<MessageBuilder> c) {
return null;
}
public static final class MessageBuilder extends TemplateSliceBuilder {
public MessageBuilder(MessagingSliceBuilder parent) {
super(null, null);
}
public MessageBuilder addSource(Icon source) {
return null;
}
public MessageBuilder addSource(IconCompat source) {
return null;
}
public MessageBuilder addText(CharSequence text) {
return null;
}
public MessageBuilder addTimestamp(long timestamp) {
return null;
}
}
}

View File

@@ -0,0 +1,92 @@
/*
* Copyright 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 androidx.slice.builders;
import android.app.PendingIntent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.remotecallback.RemoteCallback;
public class SelectionBuilder {
public SelectionBuilder() {}
public SelectionBuilder addOption(String optionKey, CharSequence optionText) {
return null;
}
public SelectionBuilder setPrimaryAction(@NonNull SliceAction primaryAction) {
return null;
}
public SelectionBuilder setInputAction(@NonNull PendingIntent inputAction) {
return null;
}
public SelectionBuilder setInputAction(@NonNull RemoteCallback inputAction) {
return null;
}
public SelectionBuilder setSelectedOption(String selectedOption) {
return null;
}
public SelectionBuilder setTitle(@Nullable CharSequence title) {
return null;
}
public SelectionBuilder setSubtitle(@Nullable CharSequence subtitle) {
return null;
}
public SelectionBuilder setContentDescription(@Nullable CharSequence contentDescription) {
return null;
}
public SelectionBuilder setLayoutDirection(
@androidx.slice.builders.ListBuilder.LayoutDirection int layoutDirection) {
return null;
}
public SliceAction getPrimaryAction() {
return null;
}
public PendingIntent getInputAction() {
return null;
}
public String getSelectedOption() {
return null;
}
public CharSequence getTitle() {
return null;
}
public CharSequence getSubtitle() {
return null;
}
public CharSequence getContentDescription() {
return null;
}
public int getLayoutDirection() {
return 0;
}
public void check() {}
}

View File

@@ -0,0 +1,188 @@
/*
* Copyright 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 androidx.slice.builders;
import android.app.PendingIntent;
import android.graphics.drawable.Icon;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.IconCompat;
import androidx.remotecallback.RemoteCallback;
import androidx.slice.Slice;
import androidx.slice.core.SliceActionImpl;
public class SliceAction implements androidx.slice.core.SliceAction {
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@NonNull CharSequence actionTitle) {}
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {}
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@NonNull CharSequence actionTitle, boolean isChecked) {}
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle) {}
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {}
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle, boolean isChecked) {}
public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
boolean isChecked) {}
public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
long dateTimeMillis, boolean isDatePicker) {}
public static SliceAction create(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {
return null;
}
public static SliceAction create(@NonNull RemoteCallback action, @NonNull IconCompat actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {
return null;
}
public static SliceAction createDatePicker(@NonNull PendingIntent action,
@NonNull CharSequence actionTitle, long dateTimeMillis) {
return null;
}
public static SliceAction createTimePicker(@NonNull PendingIntent action,
@NonNull CharSequence actionTitle, long dateTimeMillis) {
return null;
}
public static SliceAction createDeeplink(@NonNull PendingIntent action,
@NonNull IconCompat actionIcon, @ListBuilder.ImageMode int imageMode,
@NonNull CharSequence actionTitle) {
return null;
}
public static SliceAction createDeeplink(@NonNull RemoteCallback action,
@NonNull IconCompat actionIcon, @ListBuilder.ImageMode int imageMode,
@NonNull CharSequence actionTitle) {
return null;
}
public static SliceAction createToggle(@NonNull PendingIntent action,
@NonNull CharSequence actionTitle, boolean isChecked) {
return null;
}
public static SliceAction createToggle(@NonNull RemoteCallback action,
@NonNull CharSequence actionTitle, boolean isChecked) {
return null;
}
public static SliceAction createToggle(@NonNull PendingIntent action,
@NonNull IconCompat actionIcon, @NonNull CharSequence actionTitle, boolean isChecked) {
return null;
}
public static SliceAction createToggle(@NonNull RemoteCallback action,
@NonNull IconCompat actionIcon, @NonNull CharSequence actionTitle, boolean isChecked) {
return null;
}
@Override
public SliceAction setContentDescription(@NonNull CharSequence description) {
return null;
}
@Override
public SliceAction setChecked(boolean isChecked) {
return null;
}
@Override
public SliceAction setPriority(@IntRange(from = 0) int priority) {
return null;
}
@Override
public PendingIntent getAction() {
return null;
}
@Override
public IconCompat getIcon() {
return null;
}
@Override
public CharSequence getTitle() {
return null;
}
@Override
public boolean isActivity() {
return false;
}
@Override
public CharSequence getContentDescription() {
return null;
}
@Override
public int getPriority() {
return 0;
}
@Override
public boolean isToggle() {
return false;
}
@Override
public boolean isChecked() {
return false;
}
@Override
public @ListBuilder.ImageMode int getImageMode() {
return 0;
}
@Override
public boolean isDefaultToggle() {
return false;
}
public Slice buildSlice(@NonNull Slice.Builder builder) {
return null;
}
public SliceActionImpl getImpl() {
return null;
}
public void setPrimaryAction(@NonNull Slice.Builder builder) {}
@Override
public androidx.slice.core.SliceAction setKey(String key) {
return null;
}
@Override
public String getKey() {
return null;
}
}

View File

@@ -0,0 +1,30 @@
/*
* Copyright 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 androidx.slice.builders;
import android.content.Context;
import android.net.Uri;
import androidx.slice.Slice;
public abstract class TemplateSliceBuilder {
public TemplateSliceBuilder(Context context, Uri uri) {
}
public Slice build() {
return null;
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright 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 androidx.slice.builders.impl;
import android.app.PendingIntent;
import android.os.PersistableBundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.slice.builders.GridRowBuilder;
import androidx.slice.builders.ListBuilder.HeaderBuilder;
import androidx.slice.builders.ListBuilder.InputRangeBuilder;
import androidx.slice.builders.ListBuilder.RangeBuilder;
import androidx.slice.builders.ListBuilder.RatingBuilder;
import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SelectionBuilder;
import androidx.slice.builders.SliceAction;
import java.time.Duration;
import java.util.Set;
public interface ListBuilder {
void addRow(@NonNull RowBuilder impl);
void addGridRow(@NonNull GridRowBuilder impl);
void setHeader(@NonNull HeaderBuilder impl);
void addAction(@NonNull SliceAction action);
void addRating(@NonNull RatingBuilder builder);
void addInputRange(@NonNull InputRangeBuilder builder);
void addRange(@NonNull RangeBuilder builder);
void addSelection(@NonNull SelectionBuilder builder);
void setSeeMoreRow(@NonNull RowBuilder builder);
void setSeeMoreAction(@NonNull PendingIntent intent);
void setColor(int color);
void setKeywords(@NonNull Set<String> keywords);
void setTtl(long ttl);
void setTtl(@Nullable Duration ttl);
void setIsError(boolean isError);
void setLayoutDirection(int layoutDirection);
void setHostExtras(@NonNull PersistableBundle extras);
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright 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 androidx.slice.core;
import android.app.PendingIntent;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.IconCompat;
public interface SliceAction {
SliceAction setContentDescription(@NonNull CharSequence description);
SliceAction setChecked(boolean isChecked);
SliceAction setPriority(@IntRange(from = 0) int priority);
SliceAction setKey(@NonNull String key);
PendingIntent getAction();
IconCompat getIcon();
CharSequence getTitle();
CharSequence getContentDescription();
int getPriority();
String getKey();
boolean isToggle();
boolean isChecked();
boolean isActivity();
@SliceHints.ImageMode
int getImageMode();
boolean isDefaultToggle();
}

View File

@@ -0,0 +1,142 @@
/*
* Copyright 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 androidx.slice.core;
import android.app.PendingIntent;
import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
import androidx.slice.SliceItem;
public class SliceActionImpl implements SliceAction {
public SliceActionImpl(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle) {}
public SliceActionImpl(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
long dateTimeMillis, boolean isDatePicker) {}
public SliceActionImpl(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@SliceHints.ImageMode int imageMode, @NonNull CharSequence actionTitle) {}
public SliceActionImpl(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle, boolean isChecked) {}
public SliceActionImpl(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
boolean isChecked) {}
public SliceActionImpl(SliceItem slice) {}
@Override
public SliceActionImpl setContentDescription(@NonNull CharSequence description) {
return null;
}
@Override
public SliceActionImpl setChecked(boolean isChecked) {
return null;
}
@Override
public SliceActionImpl setKey(@NonNull String key) {
return null;
}
@Override
public PendingIntent getAction() {
return null;
}
public SliceItem getActionItem() {
return null;
}
@Override
public IconCompat getIcon() {
return null;
}
@Override
public CharSequence getTitle() {
return null;
}
@Override
public CharSequence getContentDescription() {
return null;
}
@Override
public int getPriority() {
return 0;
}
@Override
public String getKey() {
return null;
}
@Override
public boolean isToggle() {
return false;
}
@Override
public boolean isChecked() {
return false;
}
@Override
public @SliceHints.ImageMode int getImageMode() {
return 0;
}
@Override
public boolean isDefaultToggle() {
return false;
}
public SliceItem getSliceItem() {
return null;
}
@Override
public boolean isActivity() {
return false;
}
public Slice buildSlice(@NonNull Slice.Builder builder) {
return null;
}
public Slice buildPrimaryActionSlice(@NonNull Slice.Builder builder) {
return null;
}
public String getSubtype() {
return null;
}
public void setActivity(boolean isActivity) {}
public static int parseImageMode(@NonNull SliceItem iconItem) {
return 0;
}
@Override
public SliceAction setPriority(int priority) {
return null;
}
}

View File

@@ -0,0 +1,20 @@
/*
* Copyright 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 androidx.slice.core;
public class SliceHints {
public @interface ImageMode {
}
}