resolve merge conflicts of 232bf85 to master
Change-Id: I5848b81288e9c26f24429cf61e564cb84a366867
diff --git a/.gitignore b/.gitignore
index a59f7e1..6c671f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,6 @@
.project
.settings/
project.properties
-local.properties
**/bin
**/gen
*.iml
diff --git a/annotations/src/android/support/annotation/HalfFloat.java b/annotations/src/android/support/annotation/HalfFloat.java
new file mode 100644
index 0000000..a01f05c
--- /dev/null
+++ b/annotations/src/android/support/annotation/HalfFloat.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * <p>Denotes that the annotated element represents a half-precision floating point
+ * value. Such values are stored in short data types and can be manipulated with
+ * the {@link android.util.Half} class. If applied to an array of short, every
+ * element in the array represents a half-precision float.</p>
+ *
+ * <p>Example:</p>
+ *
+ * <pre>{@code
+ * public abstract void setPosition(@HalfFloat short x, @HalfFloat short y, @HalfFloat short z);
+ * }</pre>
+ *
+ * @see android.util.Half
+ * @see android.util.Half#valueOf(float)
+ * @see android.util.Half#toFloat(short)
+ */
+@Retention(SOURCE)
+@Target({PARAMETER, METHOD, LOCAL_VARIABLE, FIELD})
+public @interface HalfFloat {
+}
diff --git a/api/26.0.0.txt b/api/26.0.0.txt
new file mode 100644
index 0000000..75f4a99
--- /dev/null
+++ b/api/26.0.0.txt
@@ -0,0 +1,10850 @@
+package android.support.app.recommendation {
+
+ public final class ContentRecommendation {
+ method public java.lang.String getBackgroundImageUri();
+ method public int getBadgeImageResourceId();
+ method public int getColor();
+ method public android.graphics.Bitmap getContentImage();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getContentIntent();
+ method public java.lang.String[] getContentTypes();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getDismissIntent();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getGroup();
+ method public java.lang.String getIdTag();
+ method public java.lang.String getMaturityRating();
+ method public android.app.Notification getNotificationObject(android.content.Context);
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public int getProgressMax();
+ method public int getProgressValue();
+ method public long getRunningTime();
+ method public java.lang.String getSortKey();
+ method public java.lang.String getSourceName();
+ method public int getStatus();
+ method public java.lang.String getText();
+ method public java.lang.String getTitle();
+ method public boolean hasProgressInfo();
+ method public boolean isAutoDismiss();
+ method public void setAutoDismiss(boolean);
+ method public void setGroup(java.lang.String);
+ method public void setProgress(int, int);
+ method public void setSortKey(java.lang.String);
+ method public void setStatus(int);
+ field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
+ field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
+ field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
+ field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
+ field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
+ field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
+ field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
+ field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
+ field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
+ field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
+ field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
+ field public static final int CONTENT_STATUS_READY = 0; // 0x0
+ field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
+ field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
+ field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
+ field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
+ field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
+ field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
+ field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
+ field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
+ field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
+ field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
+ field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
+ field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
+ field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
+ field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
+ field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
+ field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
+ field public static final int INTENT_TYPE_ACTIVITY = 1; // 0x1
+ field public static final int INTENT_TYPE_BROADCAST = 2; // 0x2
+ field public static final int INTENT_TYPE_SERVICE = 3; // 0x3
+ }
+
+ public static final class ContentRecommendation.Builder {
+ ctor public ContentRecommendation.Builder();
+ method public android.support.app.recommendation.ContentRecommendation build();
+ method public android.support.app.recommendation.ContentRecommendation.Builder setAutoDismiss(boolean);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBackgroundImageUri(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBadgeIcon(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setColor(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentImage(android.graphics.Bitmap);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setDismissIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGroup(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setIdTag(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setProgress(int, int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setRunningTime(long);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSortKey(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSourceName(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setStatus(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setText(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setTitle(java.lang.String);
+ }
+
+ public static abstract class ContentRecommendation.ContentMaturity implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentPricing implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentStatus implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentType implements java.lang.annotation.Annotation {
+ }
+
+ public static class ContentRecommendation.IntentData {
+ ctor public ContentRecommendation.IntentData();
+ }
+
+ public static abstract class ContentRecommendation.IntentType implements java.lang.annotation.Annotation {
+ }
+
+ public final class RecommendationExtender implements android.app.Notification.Extender {
+ ctor public RecommendationExtender();
+ ctor public RecommendationExtender(android.app.Notification);
+ method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+ method public java.lang.String[] getContentTypes();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getMaturityRating();
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public long getRunningTime();
+ method public int getStatus();
+ method public android.support.app.recommendation.RecommendationExtender setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setRunningTime(long);
+ method public android.support.app.recommendation.RecommendationExtender setStatus(int);
+ }
+
+}
+
+package android.support.customtabs {
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(java.lang.String, android.os.Bundle);
+ method public void onNavigationEvent(int, android.os.Bundle);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, java.lang.String, android.support.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, java.lang.String);
+ method public android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>, boolean);
+ method public android.support.customtabs.CustomTabsSession newSession(android.support.customtabs.CustomTabsCallback);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final java.lang.String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final java.lang.String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final java.lang.String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final java.lang.String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final java.lang.String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final java.lang.String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final java.lang.String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final java.lang.String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final java.lang.String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final java.lang.String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final java.lang.String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final java.lang.String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final java.lang.String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final java.lang.String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final java.lang.String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final java.lang.String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(android.support.customtabs.CustomTabsSession);
+ method public android.support.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public android.support.customtabs.CustomTabsIntent.Builder addMenuItem(java.lang.String, android.app.PendingIntent);
+ method public deprecated android.support.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, java.lang.String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public android.support.customtabs.CustomTabsIntent build();
+ method public android.support.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent, boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public android.support.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setToolbarColor(int);
+ }
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(android.support.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method protected abstract boolean mayLaunchUrl(android.support.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method protected abstract boolean newSession(android.support.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract boolean updateVisuals(android.support.customtabs.CustomTabsSessionToken, android.os.Bundle);
+ method protected abstract boolean warmup(long);
+ field public static final java.lang.String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final java.lang.String KEY_URL = "android.support.customtabs.otherurls.URL";
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, android.support.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method public boolean setActionButton(android.graphics.Bitmap, java.lang.String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public deprecated boolean setToolbarItem(int, android.graphics.Bitmap, java.lang.String);
+ }
+
+ public class CustomTabsSessionToken {
+ method public android.support.customtabs.CustomTabsCallback getCallback();
+ method public static android.support.customtabs.CustomTabsSessionToken getSessionTokenFromIntent(android.content.Intent);
+ }
+
+}
+
+package android.support.design.widget {
+
+ public class AppBarLayout extends android.widget.LinearLayout {
+ ctor public AppBarLayout(android.content.Context);
+ ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
+ method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method public deprecated float getTargetElevation();
+ method public final int getTotalScrollRange();
+ method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method public void setExpanded(boolean);
+ method public void setExpanded(boolean, boolean);
+ method public deprecated void setTargetElevation(float);
+ }
+
+ public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
+ ctor public AppBarLayout.Behavior();
+ ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
+ method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, float, float, boolean);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View);
+ method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
+ }
+
+ public static abstract class AppBarLayout.Behavior.DragCallback {
+ ctor public AppBarLayout.Behavior.DragCallback();
+ method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
+ }
+
+ protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
+ }
+
+ public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public AppBarLayout.LayoutParams(int, int);
+ ctor public AppBarLayout.LayoutParams(int, int, float);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
+ method public int getScrollFlags();
+ method public android.view.animation.Interpolator getScrollInterpolator();
+ method public void setScrollFlags(int);
+ method public void setScrollInterpolator(android.view.animation.Interpolator);
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
+ field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
+ field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
+ field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
+ }
+
+ public static abstract interface AppBarLayout.OnOffsetChangedListener {
+ method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
+ }
+
+ public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
+ ctor public AppBarLayout.ScrollingViewBehavior();
+ ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
+ }
+
+ public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
+ ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
+ method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public void dismiss();
+ method public android.content.Context getContext();
+ method public int getDuration();
+ method public android.view.View getView();
+ method public boolean isShown();
+ method public boolean isShownOrQueued();
+ method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public deprecated B setCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public B setDuration(int);
+ method public void show();
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static abstract class BaseTransientBottomBar.BaseCallback<B> {
+ ctor public BaseTransientBottomBar.BaseCallback();
+ method public void onDismissed(B, int);
+ method public void onShown(B);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public static abstract interface BaseTransientBottomBar.ContentViewCallback {
+ method public abstract void animateContentIn(int, int);
+ method public abstract void animateContentOut(int, int);
+ }
+
+ public class BottomNavigationView extends android.widget.FrameLayout {
+ ctor public BottomNavigationView(android.content.Context);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public int getItemBackgroundResource();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public int getMaxItemCount();
+ method public android.view.Menu getMenu();
+ method public void inflateMenu(int);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
+ }
+
+ public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public BottomSheetBehavior();
+ ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
+ method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
+ method public final int getPeekHeight();
+ method public boolean getSkipCollapsed();
+ method public final int getState();
+ method public boolean isHideable();
+ method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
+ method public void setHideable(boolean);
+ method public final void setPeekHeight(int);
+ method public void setSkipCollapsed(boolean);
+ method public final void setState(int);
+ field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
+ field public static final int STATE_COLLAPSED = 4; // 0x4
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_EXPANDED = 3; // 0x3
+ field public static final int STATE_HIDDEN = 5; // 0x5
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class BottomSheetBehavior.BottomSheetCallback {
+ ctor public BottomSheetBehavior.BottomSheetCallback();
+ method public abstract void onSlide(android.view.View, float);
+ method public abstract void onStateChanged(android.view.View, int);
+ }
+
+ protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
+ }
+
+ public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public BottomSheetDialog(android.content.Context);
+ ctor public BottomSheetDialog(android.content.Context, int);
+ ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ }
+
+ public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
+ ctor public BottomSheetDialogFragment();
+ }
+
+ public class CollapsingToolbarLayout extends android.widget.FrameLayout {
+ ctor public CollapsingToolbarLayout(android.content.Context);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
+ method public int getCollapsedTitleGravity();
+ method public android.graphics.Typeface getCollapsedTitleTypeface();
+ method public android.graphics.drawable.Drawable getContentScrim();
+ method public int getExpandedTitleGravity();
+ method public int getExpandedTitleMarginBottom();
+ method public int getExpandedTitleMarginEnd();
+ method public int getExpandedTitleMarginStart();
+ method public int getExpandedTitleMarginTop();
+ method public android.graphics.Typeface getExpandedTitleTypeface();
+ method public long getScrimAnimationDuration();
+ method public int getScrimVisibleHeightTrigger();
+ method public android.graphics.drawable.Drawable getStatusBarScrim();
+ method public java.lang.CharSequence getTitle();
+ method public boolean isTitleEnabled();
+ method public void setCollapsedTitleGravity(int);
+ method public void setCollapsedTitleTextAppearance(int);
+ method public void setCollapsedTitleTextColor(int);
+ method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
+ method public void setCollapsedTitleTypeface(android.graphics.Typeface);
+ method public void setContentScrim(android.graphics.drawable.Drawable);
+ method public void setContentScrimColor(int);
+ method public void setContentScrimResource(int);
+ method public void setExpandedTitleColor(int);
+ method public void setExpandedTitleGravity(int);
+ method public void setExpandedTitleMargin(int, int, int, int);
+ method public void setExpandedTitleMarginBottom(int);
+ method public void setExpandedTitleMarginEnd(int);
+ method public void setExpandedTitleMarginStart(int);
+ method public void setExpandedTitleMarginTop(int);
+ method public void setExpandedTitleTextAppearance(int);
+ method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
+ method public void setExpandedTitleTypeface(android.graphics.Typeface);
+ method public void setScrimAnimationDuration(long);
+ method public void setScrimVisibleHeightTrigger(int);
+ method public void setScrimsShown(boolean);
+ method public void setScrimsShown(boolean, boolean);
+ method public void setStatusBarScrim(android.graphics.drawable.Drawable);
+ method public void setStatusBarScrimColor(int);
+ method public void setStatusBarScrimResource(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleEnabled(boolean);
+ }
+
+ public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ method public int getCollapseMode();
+ method public float getParallaxMultiplier();
+ method public void setCollapseMode(int);
+ method public void setParallaxMultiplier(float);
+ field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
+ field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
+ field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
+ }
+
+ public class CoordinatorLayout extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingParent {
+ ctor public CoordinatorLayout(android.content.Context);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void dispatchDependentViewsChanged(android.view.View);
+ method public boolean doViewsOverlap(android.view.View, android.view.View);
+ method public java.util.List<android.view.View> getDependencies(android.view.View);
+ method public java.util.List<android.view.View> getDependents(android.view.View);
+ method public android.graphics.drawable.Drawable getStatusBarBackground();
+ method public boolean isPointInChildBounds(android.view.View, int, int);
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onLayoutChild(android.view.View, int);
+ method public void onMeasureChild(android.view.View, int, int, int, int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackgroundColor(int);
+ method public void setStatusBarBackgroundResource(int);
+ }
+
+ public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
+ ctor public CoordinatorLayout.Behavior();
+ ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
+ method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
+ method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
+ method public static java.lang.Object getTag(android.view.View);
+ method public deprecated boolean isDirty(android.support.design.widget.CoordinatorLayout, V);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
+ method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDetachedFromLayoutParams();
+ method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
+ method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public static void setTag(android.view.View, java.lang.Object);
+ }
+
+ public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
+ }
+
+ public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public CoordinatorLayout.LayoutParams(int, int);
+ ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getAnchorId();
+ method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
+ method public void setAnchorId(int);
+ method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
+ field public int anchorGravity;
+ field public int dodgeInsetEdges;
+ field public int gravity;
+ field public int insetEdge;
+ field public int keyline;
+ }
+
+ protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
+ }
+
+ public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
+ ctor public FloatingActionButton(android.content.Context);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
+ method public float getCompatElevation();
+ method public android.graphics.drawable.Drawable getContentBackground();
+ method public boolean getContentRect(android.graphics.Rect);
+ method public int getRippleColor();
+ method public int getSize();
+ method public boolean getUseCompatPadding();
+ method public void hide();
+ method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ method public void setCompatElevation(float);
+ method public void setRippleColor(int);
+ method public void setSize(int);
+ method public void setUseCompatPadding(boolean);
+ method public void show();
+ method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ field public static final int SIZE_AUTO = -1; // 0xffffffff
+ field public static final int SIZE_MINI = 1; // 0x1
+ field public static final int SIZE_NORMAL = 0; // 0x0
+ }
+
+ public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public FloatingActionButton.Behavior();
+ ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
+ method public boolean isAutoHideEnabled();
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
+ method public void setAutoHideEnabled(boolean);
+ }
+
+ public static abstract class FloatingActionButton.OnVisibilityChangedListener {
+ ctor public FloatingActionButton.OnVisibilityChangedListener();
+ method public void onHidden(android.support.design.widget.FloatingActionButton);
+ method public void onShown(android.support.design.widget.FloatingActionButton);
+ }
+
+ abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderBehavior();
+ ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
+ }
+
+ abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderScrollingViewBehavior();
+ ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public final int getOverlayTop();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
+ method public final void setOverlayTop(int);
+ }
+
+ public class NavigationView extends android.widget.FrameLayout {
+ ctor public NavigationView(android.content.Context);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public void addHeaderView(android.view.View);
+ method public int getHeaderCount();
+ method public android.view.View getHeaderView(int);
+ method public android.graphics.drawable.Drawable getItemBackground();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public android.view.Menu getMenu();
+ method public android.view.View inflateHeaderView(int);
+ method public void inflateMenu(int);
+ method public void removeHeaderView(android.view.View);
+ method public void setCheckedItem(int);
+ method public void setItemBackground(android.graphics.drawable.Drawable);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextAppearance(int);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
+ }
+
+ public static abstract interface NavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public NavigationView.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
+ field public android.os.Bundle menuState;
+ }
+
+ public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
+ method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
+ method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
+ method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
+ method public android.support.design.widget.Snackbar setActionTextColor(int);
+ method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
+ method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
+ method public android.support.design.widget.Snackbar setText(int);
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
+ ctor public Snackbar.Callback();
+ method public void onDismissed(android.support.design.widget.Snackbar, int);
+ method public void onShown(android.support.design.widget.Snackbar);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public SwipeDismissBehavior();
+ method public boolean canSwipeDismissView(android.view.View);
+ method public int getDragState();
+ method public void setDragDismissDistance(float);
+ method public void setEndAlphaSwipeDistance(float);
+ method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
+ method public void setSensitivity(float);
+ method public void setStartAlphaSwipeDistance(float);
+ method public void setSwipeDirection(int);
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
+ field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
+ }
+
+ public static abstract interface SwipeDismissBehavior.OnDismissListener {
+ method public abstract void onDismiss(android.view.View);
+ method public abstract void onDragStateChanged(int);
+ }
+
+ public final class TabItem extends android.view.View {
+ ctor public TabItem(android.content.Context);
+ ctor public TabItem(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class TabLayout extends android.widget.HorizontalScrollView {
+ ctor public TabLayout(android.content.Context);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void addTab(android.support.design.widget.TabLayout.Tab);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
+ method public void clearOnTabSelectedListeners();
+ method public int getSelectedTabPosition();
+ method public android.support.design.widget.TabLayout.Tab getTabAt(int);
+ method public int getTabCount();
+ method public int getTabGravity();
+ method public int getTabMode();
+ method public android.content.res.ColorStateList getTabTextColors();
+ method public android.support.design.widget.TabLayout.Tab newTab();
+ method public void removeAllTabs();
+ method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void removeTab(android.support.design.widget.TabLayout.Tab);
+ method public void removeTabAt(int);
+ method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void setScrollPosition(int, float, boolean);
+ method public void setSelectedTabIndicatorColor(int);
+ method public void setSelectedTabIndicatorHeight(int);
+ method public void setTabGravity(int);
+ method public void setTabMode(int);
+ method public void setTabTextColors(android.content.res.ColorStateList);
+ method public void setTabTextColors(int, int);
+ method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
+ field public static final int GRAVITY_CENTER = 1; // 0x1
+ field public static final int GRAVITY_FILL = 0; // 0x0
+ field public static final int MODE_FIXED = 1; // 0x1
+ field public static final int MODE_SCROLLABLE = 0; // 0x0
+ }
+
+ public static abstract interface TabLayout.OnTabSelectedListener {
+ method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public static final class TabLayout.Tab {
+ method public java.lang.CharSequence getContentDescription();
+ method public android.view.View getCustomView();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public int getPosition();
+ method public java.lang.Object getTag();
+ method public java.lang.CharSequence getText();
+ method public boolean isSelected();
+ method public void select();
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(int);
+ method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
+ method public android.support.design.widget.TabLayout.Tab setIcon(int);
+ method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
+ method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+ public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
+ ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
+ method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
+ ctor public TextInputEditText(android.content.Context);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class TextInputLayout extends android.widget.LinearLayout {
+ ctor public TextInputLayout(android.content.Context);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
+ method public int getCounterMaxLength();
+ method public android.widget.EditText getEditText();
+ method public java.lang.CharSequence getError();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
+ method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
+ method public android.graphics.Typeface getTypeface();
+ method public boolean isCounterEnabled();
+ method public boolean isErrorEnabled();
+ method public boolean isHintAnimationEnabled();
+ method public boolean isHintEnabled();
+ method public boolean isPasswordVisibilityToggleEnabled();
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void setCounterEnabled(boolean);
+ method public void setCounterMaxLength(int);
+ method public void setError(java.lang.CharSequence);
+ method public void setErrorEnabled(boolean);
+ method public void setErrorTextAppearance(int);
+ method public void setHint(java.lang.CharSequence);
+ method public void setHintAnimationEnabled(boolean);
+ method public void setHintEnabled(boolean);
+ method public void setHintTextAppearance(int);
+ method public void setPasswordVisibilityToggleContentDescription(int);
+ method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
+ method public void setPasswordVisibilityToggleDrawable(int);
+ method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
+ method public void setPasswordVisibilityToggleEnabled(boolean);
+ method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
+ method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTypeface(android.graphics.Typeface);
+ }
+
+ class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public ViewOffsetBehavior();
+ ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
+ method public int getLeftAndRightOffset();
+ method public int getTopAndBottomOffset();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean setLeftAndRightOffset(int);
+ method public boolean setTopAndBottomOffset(int);
+ }
+
+ class VisibilityAwareImageButton extends android.widget.ImageButton {
+ ctor public VisibilityAwareImageButton(android.content.Context);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
+package android.support.graphics.drawable {
+
+ public class AnimatedVectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon {
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat create(android.content.Context, int);
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public boolean isRunning();
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void start();
+ method public void stop();
+ }
+
+ abstract class VectorDrawableCommon extends android.graphics.drawable.Drawable {
+ }
+
+ public class VectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon {
+ method public static android.support.graphics.drawable.VectorDrawableCompat create(android.content.res.Resources, int, android.content.res.Resources.Theme);
+ method public static android.support.graphics.drawable.VectorDrawableCompat createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ }
+
+}
+
+package android.support.media {
+
+ public class ExifInterface {
+ ctor public ExifInterface(java.lang.String) throws java.io.IOException;
+ ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
+ method public double getAltitude(double);
+ method public java.lang.String getAttribute(java.lang.String);
+ method public double getAttributeDouble(java.lang.String, double);
+ method public int getAttributeInt(java.lang.String, int);
+ method public boolean getLatLong(float[]);
+ method public byte[] getThumbnail();
+ method public android.graphics.Bitmap getThumbnailBitmap();
+ method public byte[] getThumbnailBytes();
+ method public long[] getThumbnailRange();
+ method public boolean hasThumbnail();
+ method public boolean isThumbnailCompressed();
+ method public void saveAttributes() throws java.io.IOException;
+ method public void setAttribute(java.lang.String, java.lang.String);
+ field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+ field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+ field public static final int ORIENTATION_NORMAL = 1; // 0x1
+ field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+ field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+ field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+ field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+ field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+ field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+ field public static final java.lang.String TAG_APERTURE_VALUE = "ApertureValue";
+ field public static final java.lang.String TAG_ARTIST = "Artist";
+ field public static final java.lang.String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+ field public static final java.lang.String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+ field public static final java.lang.String TAG_CFA_PATTERN = "CFAPattern";
+ field public static final java.lang.String TAG_COLOR_SPACE = "ColorSpace";
+ field public static final java.lang.String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+ field public static final java.lang.String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+ field public static final java.lang.String TAG_COMPRESSION = "Compression";
+ field public static final java.lang.String TAG_CONTRAST = "Contrast";
+ field public static final java.lang.String TAG_COPYRIGHT = "Copyright";
+ field public static final java.lang.String TAG_CUSTOM_RENDERED = "CustomRendered";
+ field public static final java.lang.String TAG_DATETIME = "DateTime";
+ field public static final java.lang.String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+ field public static final java.lang.String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+ field public static final java.lang.String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+ field public static final java.lang.String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+ field public static final java.lang.String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+ field public static final java.lang.String TAG_DNG_VERSION = "DNGVersion";
+ field public static final java.lang.String TAG_EXIF_VERSION = "ExifVersion";
+ field public static final java.lang.String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+ field public static final java.lang.String TAG_EXPOSURE_INDEX = "ExposureIndex";
+ field public static final java.lang.String TAG_EXPOSURE_MODE = "ExposureMode";
+ field public static final java.lang.String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+ field public static final java.lang.String TAG_EXPOSURE_TIME = "ExposureTime";
+ field public static final java.lang.String TAG_FILE_SOURCE = "FileSource";
+ field public static final java.lang.String TAG_FLASH = "Flash";
+ field public static final java.lang.String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+ field public static final java.lang.String TAG_FLASH_ENERGY = "FlashEnergy";
+ field public static final java.lang.String TAG_FOCAL_LENGTH = "FocalLength";
+ field public static final java.lang.String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+ field public static final java.lang.String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+ field public static final java.lang.String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+ field public static final java.lang.String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+ field public static final java.lang.String TAG_F_NUMBER = "FNumber";
+ field public static final java.lang.String TAG_GAIN_CONTROL = "GainControl";
+ field public static final java.lang.String TAG_GPS_ALTITUDE = "GPSAltitude";
+ field public static final java.lang.String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+ field public static final java.lang.String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+ field public static final java.lang.String TAG_GPS_DATESTAMP = "GPSDateStamp";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+ field public static final java.lang.String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+ field public static final java.lang.String TAG_GPS_DOP = "GPSDOP";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+ field public static final java.lang.String TAG_GPS_LATITUDE = "GPSLatitude";
+ field public static final java.lang.String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+ field public static final java.lang.String TAG_GPS_LONGITUDE = "GPSLongitude";
+ field public static final java.lang.String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+ field public static final java.lang.String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+ field public static final java.lang.String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+ field public static final java.lang.String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+ field public static final java.lang.String TAG_GPS_SATELLITES = "GPSSatellites";
+ field public static final java.lang.String TAG_GPS_SPEED = "GPSSpeed";
+ field public static final java.lang.String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+ field public static final java.lang.String TAG_GPS_STATUS = "GPSStatus";
+ field public static final java.lang.String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+ field public static final java.lang.String TAG_GPS_TRACK = "GPSTrack";
+ field public static final java.lang.String TAG_GPS_TRACK_REF = "GPSTrackRef";
+ field public static final java.lang.String TAG_GPS_VERSION_ID = "GPSVersionID";
+ field public static final java.lang.String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+ field public static final java.lang.String TAG_IMAGE_LENGTH = "ImageLength";
+ field public static final java.lang.String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+ field public static final java.lang.String TAG_IMAGE_WIDTH = "ImageWidth";
+ field public static final java.lang.String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+ field public static final java.lang.String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+ field public static final java.lang.String TAG_LIGHT_SOURCE = "LightSource";
+ field public static final java.lang.String TAG_MAKE = "Make";
+ field public static final java.lang.String TAG_MAKER_NOTE = "MakerNote";
+ field public static final java.lang.String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+ field public static final java.lang.String TAG_METERING_MODE = "MeteringMode";
+ field public static final java.lang.String TAG_MODEL = "Model";
+ field public static final java.lang.String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+ field public static final java.lang.String TAG_OECF = "OECF";
+ field public static final java.lang.String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+ field public static final java.lang.String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+ field public static final java.lang.String TAG_ORIENTATION = "Orientation";
+ field public static final java.lang.String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+ field public static final java.lang.String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+ field public static final java.lang.String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+ field public static final java.lang.String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+ field public static final java.lang.String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+ field public static final java.lang.String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+ field public static final java.lang.String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+ field public static final java.lang.String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+ field public static final java.lang.String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+ field public static final java.lang.String TAG_RW2_ISO = "ISO";
+ field public static final java.lang.String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+ field public static final java.lang.String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+ field public static final java.lang.String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+ field public static final java.lang.String TAG_SATURATION = "Saturation";
+ field public static final java.lang.String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+ field public static final java.lang.String TAG_SCENE_TYPE = "SceneType";
+ field public static final java.lang.String TAG_SENSING_METHOD = "SensingMethod";
+ field public static final java.lang.String TAG_SHARPNESS = "Sharpness";
+ field public static final java.lang.String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+ field public static final java.lang.String TAG_SOFTWARE = "Software";
+ field public static final java.lang.String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+ field public static final java.lang.String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+ field public static final java.lang.String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+ field public static final java.lang.String TAG_STRIP_OFFSETS = "StripOffsets";
+ field public static final java.lang.String TAG_SUBFILE_TYPE = "SubfileType";
+ field public static final java.lang.String TAG_SUBJECT_AREA = "SubjectArea";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+ field public static final java.lang.String TAG_SUBJECT_LOCATION = "SubjectLocation";
+ field public static final java.lang.String TAG_SUBSEC_TIME = "SubSecTime";
+ field public static final java.lang.String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+ field public static final java.lang.String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+ field public static final java.lang.String TAG_TRANSFER_FUNCTION = "TransferFunction";
+ field public static final java.lang.String TAG_USER_COMMENT = "UserComment";
+ field public static final java.lang.String TAG_WHITE_BALANCE = "WhiteBalance";
+ field public static final java.lang.String TAG_WHITE_POINT = "WhitePoint";
+ field public static final java.lang.String TAG_X_RESOLUTION = "XResolution";
+ field public static final java.lang.String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+ field public static final java.lang.String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+ field public static final java.lang.String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+ field public static final java.lang.String TAG_Y_RESOLUTION = "YResolution";
+ field public static final int WHITEBALANCE_AUTO = 0; // 0x0
+ field public static final int WHITEBALANCE_MANUAL = 1; // 0x1
+ }
+
+}
+
+package android.support.percent {
+
+ public class PercentFrameLayout extends android.widget.FrameLayout {
+ ctor public PercentFrameLayout(android.content.Context);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public static class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentFrameLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout.LayoutParams(int, int);
+ ctor public PercentFrameLayout.LayoutParams(int, int, int);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.support.percent.PercentFrameLayout.LayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public class PercentLayoutHelper {
+ ctor public PercentLayoutHelper(android.view.ViewGroup);
+ method public void adjustChildren(int, int);
+ method public static void fetchWidthAndHeight(android.view.ViewGroup.LayoutParams, android.content.res.TypedArray, int, int);
+ method public static android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo(android.content.Context, android.util.AttributeSet);
+ method public boolean handleMeasuredStateTooSmall();
+ method public void restoreOriginalParams();
+ }
+
+ public static class PercentLayoutHelper.PercentLayoutInfo {
+ ctor public PercentLayoutHelper.PercentLayoutInfo();
+ method public void fillLayoutParams(android.view.ViewGroup.LayoutParams, int, int);
+ method public deprecated void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void fillMarginLayoutParams(android.view.View, android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void restoreLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public float aspectRatio;
+ field public float bottomMarginPercent;
+ field public float endMarginPercent;
+ field public float heightPercent;
+ field public float leftMarginPercent;
+ field public float rightMarginPercent;
+ field public float startMarginPercent;
+ field public float topMarginPercent;
+ field public float widthPercent;
+ }
+
+ public static abstract interface PercentLayoutHelper.PercentLayoutParams {
+ method public abstract android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public class PercentRelativeLayout extends android.widget.RelativeLayout {
+ ctor public PercentRelativeLayout(android.content.Context);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public static class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentRelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout.LayoutParams(int, int);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+}
+
+package android.support.transition {
+
+ public class AutoTransition extends android.support.transition.TransitionSet {
+ ctor public AutoTransition();
+ }
+
+ public class ChangeBounds extends android.support.transition.Transition {
+ ctor public ChangeBounds();
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public void setResizeClip(boolean);
+ }
+
+ public class Fade extends android.support.transition.Visibility {
+ ctor public Fade(int);
+ ctor public Fade();
+ field public static final int IN = 1; // 0x1
+ field public static final int OUT = 2; // 0x2
+ }
+
+ public class Scene {
+ ctor public Scene(android.view.ViewGroup);
+ ctor public Scene(android.view.ViewGroup, android.view.View);
+ method public void enter();
+ method public void exit();
+ method public static android.support.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+ method public android.view.ViewGroup getSceneRoot();
+ method public void setEnterAction(java.lang.Runnable);
+ method public void setExitAction(java.lang.Runnable);
+ }
+
+ public abstract class Transition {
+ ctor public Transition();
+ method public android.support.transition.Transition addListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition addTarget(android.view.View);
+ method public android.support.transition.Transition addTarget(int);
+ method public abstract void captureEndValues(android.support.transition.TransitionValues);
+ method public abstract void captureStartValues(android.support.transition.TransitionValues);
+ method public android.animation.Animator createAnimator(android.view.ViewGroup, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.support.transition.Transition excludeChildren(android.view.View, boolean);
+ method public android.support.transition.Transition excludeChildren(int, boolean);
+ method public android.support.transition.Transition excludeChildren(java.lang.Class, boolean);
+ method public android.support.transition.Transition excludeTarget(android.view.View, boolean);
+ method public android.support.transition.Transition excludeTarget(int, boolean);
+ method public android.support.transition.Transition excludeTarget(java.lang.Class, boolean);
+ method public long getDuration();
+ method public android.animation.TimeInterpolator getInterpolator();
+ method public java.lang.String getName();
+ method public long getStartDelay();
+ method public java.util.List<java.lang.Integer> getTargetIds();
+ method public java.util.List<android.view.View> getTargets();
+ method public java.lang.String[] getTransitionProperties();
+ method public android.support.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+ method public android.support.transition.Transition removeListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition removeTarget(android.view.View);
+ method public android.support.transition.Transition removeTarget(int);
+ method public android.support.transition.Transition setDuration(long);
+ method public android.support.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+ method public android.support.transition.Transition setStartDelay(long);
+ }
+
+ public static abstract interface Transition.TransitionListener {
+ method public abstract void onTransitionCancel(android.support.transition.Transition);
+ method public abstract void onTransitionEnd(android.support.transition.Transition);
+ method public abstract void onTransitionPause(android.support.transition.Transition);
+ method public abstract void onTransitionResume(android.support.transition.Transition);
+ method public abstract void onTransitionStart(android.support.transition.Transition);
+ }
+
+ public class TransitionManager {
+ ctor public TransitionManager();
+ method public static void beginDelayedTransition(android.view.ViewGroup);
+ method public static void beginDelayedTransition(android.view.ViewGroup, android.support.transition.Transition);
+ method public static void go(android.support.transition.Scene);
+ method public static void go(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Scene, android.support.transition.Transition);
+ method public void transitionTo(android.support.transition.Scene);
+ }
+
+ public class TransitionSet extends android.support.transition.Transition {
+ ctor public TransitionSet();
+ method public android.support.transition.TransitionSet addTransition(android.support.transition.Transition);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public int getOrdering();
+ method public android.support.transition.TransitionSet removeTransition(android.support.transition.Transition);
+ method public android.support.transition.TransitionSet setOrdering(int);
+ field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+ field public static final int ORDERING_TOGETHER = 0; // 0x0
+ }
+
+ public class TransitionValues {
+ ctor public TransitionValues();
+ field public final java.util.Map<java.lang.String, java.lang.Object> values;
+ field public android.view.View view;
+ }
+
+ public abstract class Visibility extends android.support.transition.Transition {
+ ctor public Visibility();
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public boolean isVisible(android.support.transition.TransitionValues);
+ method public android.animation.Animator onAppear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ method public android.animation.Animator onDisappear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ }
+
+}
+
+package android.support.v13.app {
+
+ public class ActivityCompat extends android.support.v4.app.ActivityCompat {
+ ctor protected ActivityCompat();
+ method public static android.support.v13.view.DragAndDropPermissionsCompat requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ }
+
+ public class FragmentCompat {
+ ctor public FragmentCompat();
+ method public static void requestPermissions(android.app.Fragment, java.lang.String[], int);
+ method public static void setMenuVisibility(android.app.Fragment, boolean);
+ method public static void setUserVisibleHint(android.app.Fragment, boolean);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Fragment, java.lang.String);
+ }
+
+ public static abstract interface FragmentCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public void setup(android.content.Context, android.app.FragmentManager);
+ method public void setup(android.content.Context, android.app.FragmentManager, int);
+ }
+
+}
+
+package android.support.v13.view {
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, android.support.v13.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static abstract interface DragStartHelper.OnDragStartListener {
+ method public abstract boolean onDragStart(android.view.View, android.support.v13.view.DragStartHelper);
+ }
+
+ public class ViewCompat extends android.support.v4.view.ViewCompat {
+ method public static void cancelDragAndDrop(android.view.View);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ }
+
+}
+
+package android.support.v13.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor public EditorInfoCompat();
+ method public static java.lang.String[] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, java.lang.String[]);
+ }
+
+ public final class InputConnectionCompat {
+ ctor public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static int INPUT_CONTENT_GRANT_READ_URI_PERMISSION;
+ }
+
+ public static abstract interface InputConnectionCompat.OnCommitContentListener {
+ method public abstract boolean onCommitContent(android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public java.lang.Object unwrap();
+ method public static android.support.v13.view.inputmethod.InputContentInfoCompat wrap(java.lang.Object);
+ }
+
+}
+
+package android.support.v14.preference {
+
+ public class EditTextPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public EditTextPreferenceDialogFragment();
+ method public static android.support.v14.preference.EditTextPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public ListPreferenceDialogFragment();
+ method public static android.support.v14.preference.ListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreference extends android.support.v7.preference.DialogPreference {
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public MultiSelectListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence[] getEntryValues();
+ method protected boolean[] getSelectedItems();
+ method public java.util.Set<java.lang.String> getValues();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValues(java.util.Set<java.lang.String>);
+ }
+
+ public class MultiSelectListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public MultiSelectListPreferenceDialogFragment();
+ method public static android.support.v14.preference.MultiSelectListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragment extends android.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragment();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public class SwitchPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreference(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+}
+
+package android.support.v17.leanback.app {
+
+ public final class BackgroundManager {
+ method public void attach(android.view.Window);
+ method public void attachToView(android.view.View);
+ method public void clearDrawable();
+ method public final int getColor();
+ method public deprecated android.graphics.drawable.Drawable getDefaultDimLayer();
+ method public deprecated android.graphics.drawable.Drawable getDimLayer();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public static android.support.v17.leanback.app.BackgroundManager getInstance(android.app.Activity);
+ method public boolean isAttached();
+ method public boolean isAutoReleaseOnStop();
+ method public void release();
+ method public void setAutoReleaseOnStop(boolean);
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColor(int);
+ method public deprecated void setDimLayer(android.graphics.drawable.Drawable);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setThemeDrawableResourceId(int);
+ }
+
+ abstract class BaseRowFragment extends android.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ abstract class BaseRowSupportFragment extends android.support.v4.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public class BrandedFragment extends android.app.Fragment {
+ ctor public BrandedFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrandedSupportFragment extends android.support.v4.app.Fragment {
+ ctor public BrandedSupportFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrowseFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public BrowseFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method protected java.lang.Object createEntranceTransition();
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public android.support.v17.leanback.app.HeadersFragment getHeadersFragment();
+ method public int getHeadersState();
+ method public android.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseFragment.BrowseTransitionListener {
+ ctor public BrowseFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseFragment.FragmentFactory<T extends android.app.Fragment> {
+ ctor public BrowseFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseFragment.FragmentFactory {
+ ctor public BrowseFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseFragment.MainFragmentAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseFragment.MainFragmentAdapterRegistry();
+ method public android.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseFragment.FragmentFactory);
+ }
+
+ public static class BrowseFragment.MainFragmentRowsAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class BrowseSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public BrowseSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method protected java.lang.Object createEntranceTransition();
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public int getHeadersState();
+ method public android.support.v17.leanback.app.HeadersSupportFragment getHeadersSupportFragment();
+ method public android.support.v4.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseSupportFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseSupportFragment.BrowseTransitionListener {
+ ctor public BrowseSupportFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseSupportFragment.FragmentFactory<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseSupportFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseSupportFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory {
+ ctor public BrowseSupportFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsSupportFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseSupportFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseSupportFragment.MainFragmentAdapterRegistry();
+ method public android.support.v4.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentRowsAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class DetailsFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public DetailsFragment();
+ method protected java.lang.Object createEntranceTransition();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class DetailsSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public DetailsSupportFragment();
+ method protected java.lang.Object createEntranceTransition();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class ErrorFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public ErrorFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class ErrorSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public ErrorSupportFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class GuidedStepFragment extends android.app.Fragment {
+ ctor public GuidedStepFragment();
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment);
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public static int addAsRoot(android.app.Activity, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepFragment getCurrentGuidedStepFragment(android.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class GuidedStepSupportFragment extends android.support.v4.app.Fragment {
+ ctor public GuidedStepSupportFragment();
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public static int addAsRoot(android.support.v4.app.FragmentActivity, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepSupportFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(android.support.v4.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.support.v4.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepSupportFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class HeadersFragment extends android.support.v17.leanback.app.BaseRowFragment {
+ ctor public HeadersFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public class HeadersSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment {
+ ctor public HeadersSupportFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public abstract deprecated class MediaControllerGlue extends android.support.v17.leanback.app.PlaybackControlGlue {
+ ctor public MediaControllerGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[]);
+ ctor public MediaControllerGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[], int[]);
+ method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+ method public void detach();
+ method public int getCurrentPosition();
+ method public int getCurrentSpeedId();
+ method public android.graphics.drawable.Drawable getMediaArt();
+ method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public int getMediaDuration();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public long getSupportedActions();
+ method public boolean hasValidMedia();
+ method public boolean isMediaPlaying();
+ }
+
+ public abstract class OnboardingFragment extends android.app.Fragment {
+ ctor public OnboardingFragment();
+ method protected final int getCurrentPageIndex();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ }
+
+ public abstract class OnboardingSupportFragment extends android.support.v4.app.Fragment {
+ ctor public OnboardingSupportFragment();
+ method protected final int getCurrentPageIndex();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ }
+
+ public abstract deprecated class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+ ctor public PlaybackControlGlue(android.content.Context, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+ ctor public PlaybackControlGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[], int[]);
+ method public android.support.v17.leanback.widget.PlaybackControlsRowPresenter createControlsRowAndPresenter();
+ method protected android.support.v17.leanback.widget.SparseArrayObjectAdapter createPrimaryActionsAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment getFragment();
+ method public deprecated android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final void next();
+ method protected void onRowChanged(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public final void pause();
+ method protected deprecated void pausePlayback();
+ method public final void play(int);
+ method public final void previous();
+ method public deprecated void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method protected deprecated void skipToNext();
+ method protected deprecated void skipToPrevious();
+ method protected deprecated void startPlayback(int);
+ }
+
+ public static abstract deprecated interface PlaybackControlGlue.InputEventHandler {
+ method public abstract boolean handleInputEvent(android.view.InputEvent);
+ }
+
+ public abstract deprecated class PlaybackControlSupportGlue extends android.support.v17.leanback.app.PlaybackControlGlue {
+ ctor public PlaybackControlSupportGlue(android.content.Context, int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, int[], int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlaySupportFragment, int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlaySupportFragment, int[], int[]);
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public class PlaybackFragment extends android.app.Fragment {
+ ctor public PlaybackFragment();
+ method public void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost {
+ ctor public PlaybackFragmentGlueHost(android.support.v17.leanback.app.PlaybackFragment);
+ }
+
+ public deprecated class PlaybackOverlayFragment extends android.support.v17.leanback.app.DetailsFragment {
+ ctor public PlaybackOverlayFragment();
+ method public void fadeOut();
+ method public int getBackgroundType();
+ method public final android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler getEventHandler();
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final deprecated android.support.v17.leanback.app.PlaybackOverlayFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public final void setEventHandler(android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final deprecated void setInputEventHandler(android.support.v17.leanback.app.PlaybackOverlayFragment.InputEventHandler);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public static abstract deprecated interface PlaybackOverlayFragment.InputEventHandler implements android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler {
+ }
+
+ public static class PlaybackOverlayFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlayFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public deprecated class PlaybackOverlaySupportFragment extends android.support.v17.leanback.app.DetailsSupportFragment {
+ ctor public PlaybackOverlaySupportFragment();
+ method public void fadeOut();
+ method public int getBackgroundType();
+ method public final android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler getEventHandler();
+ method public android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final deprecated android.support.v17.leanback.app.PlaybackOverlaySupportFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public final void setEventHandler(android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final deprecated void setInputEventHandler(android.support.v17.leanback.app.PlaybackOverlaySupportFragment.InputEventHandler);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public static abstract deprecated interface PlaybackOverlaySupportFragment.InputEventHandler implements android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler {
+ }
+
+ public static class PlaybackOverlaySupportFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlaySupportFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public class PlaybackSupportFragment extends android.support.v4.app.Fragment {
+ ctor public PlaybackSupportFragment();
+ method public void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackSupportFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost {
+ ctor public PlaybackSupportFragmentGlueHost(android.support.v17.leanback.app.PlaybackSupportFragment);
+ }
+
+ public final class ProgressBarManager {
+ ctor public ProgressBarManager();
+ method public void disableProgressBar();
+ method public void enableProgressBar();
+ method public long getInitialDelay();
+ method public void hide();
+ method public void setInitialDelay(long);
+ method public void setProgressBarView(android.view.View);
+ method public void setRootView(android.view.ViewGroup);
+ method public void show();
+ }
+
+ public class RowsFragment extends android.support.v17.leanback.app.BaseRowFragment implements android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter {
+ ctor public RowsFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public static class RowsFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter {
+ ctor public RowsFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public class RowsSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment implements android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsSupportFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsSupportFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter {
+ ctor public RowsSupportFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public static class RowsSupportFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter {
+ ctor public RowsSupportFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public class SearchFragment extends android.app.Fragment {
+ ctor public SearchFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchFragment.SearchResultProvider);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class SearchSupportFragment extends android.support.v4.app.Fragment {
+ ctor public SearchSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchSupportFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchSupportFragment.SearchResultProvider);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchSupportFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class VerticalGridFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public VerticalGridFragment();
+ method protected java.lang.Object createEntranceTransition();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+ public class VerticalGridSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public VerticalGridSupportFragment();
+ method protected java.lang.Object createEntranceTransition();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+}
+
+package android.support.v17.leanback.database {
+
+ public abstract class CursorMapper {
+ ctor public CursorMapper();
+ method protected abstract java.lang.Object bind(android.database.Cursor);
+ method protected abstract void bindColumns(android.database.Cursor);
+ method public java.lang.Object convert(android.database.Cursor);
+ }
+
+}
+
+package android.support.v17.leanback.graphics {
+
+ public final class ColorFilterCache {
+ method public static android.support.v17.leanback.graphics.ColorFilterCache getColorFilterCache(int);
+ method public android.graphics.ColorFilter getFilterForLevel(float);
+ }
+
+ public final class ColorFilterDimmer {
+ method public void applyFilterToView(android.view.View);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer create(android.support.v17.leanback.graphics.ColorFilterCache, float, float);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer createDefault(android.content.Context);
+ method public android.graphics.ColorFilter getColorFilter();
+ method public android.graphics.Paint getPaint();
+ method public void setActiveLevel(float);
+ }
+
+ public final class ColorOverlayDimmer {
+ method public int applyToColor(int);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createColorOverlayDimmer(int, float, float);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createDefault(android.content.Context);
+ method public void drawColorOverlay(android.graphics.Canvas, android.view.View, boolean);
+ method public int getAlpha();
+ method public float getAlphaFloat();
+ method public android.graphics.Paint getPaint();
+ method public boolean needsDraw();
+ method public void setActiveLevel(float);
+ }
+
+}
+
+package android.support.v17.leanback.media {
+
+ public abstract class MediaControllerGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+ ctor public MediaControllerGlue(android.content.Context, int[], int[]);
+ method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+ method public void detach();
+ method public int getCurrentPosition();
+ method public int getCurrentSpeedId();
+ method public android.graphics.drawable.Drawable getMediaArt();
+ method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public int getMediaDuration();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public long getSupportedActions();
+ method public boolean hasValidMedia();
+ method public boolean isMediaPlaying();
+ }
+
+ public abstract class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+ ctor public PlaybackControlGlue(android.content.Context, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+ method public void enableProgressUpdating(boolean);
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public android.support.v17.leanback.widget.PlaybackControlsRowPresenter getControlsRowPresenter();
+ method public abstract int getCurrentPosition();
+ method public abstract int getCurrentSpeedId();
+ method public int[] getFastForwardSpeeds();
+ method public abstract android.graphics.drawable.Drawable getMediaArt();
+ method public abstract int getMediaDuration();
+ method public abstract java.lang.CharSequence getMediaSubtitle();
+ method public abstract java.lang.CharSequence getMediaTitle();
+ method public int[] getRewindSpeeds();
+ method public abstract long getSupportedActions();
+ method public int getUpdatePeriod();
+ method public abstract boolean hasValidMedia();
+ method public boolean isFadingEnabled();
+ method public abstract boolean isMediaPlaying();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected void onCreateControlsRowAndPresenter();
+ method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.SparseArrayObjectAdapter);
+ method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onMetadataChanged();
+ method protected void onStateChanged();
+ method public void play(int);
+ method public final void play();
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public void setControlsRowPresenter(android.support.v17.leanback.widget.PlaybackControlsRowPresenter);
+ method public void setFadingEnabled(boolean);
+ method public void updateProgress();
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public abstract class PlaybackGlue {
+ ctor public PlaybackGlue(android.content.Context);
+ method public android.content.Context getContext();
+ method public android.support.v17.leanback.media.PlaybackGlueHost getHost();
+ method public boolean isReadyForPlayback();
+ method public void next();
+ method protected void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method protected void onDetachedFromHost();
+ method protected void onHostPause();
+ method protected void onHostResume();
+ method protected void onHostStart();
+ method protected void onHostStop();
+ method public void pause();
+ method public void play();
+ method public void previous();
+ method public final void setHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method public void setPlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ }
+
+ public static abstract class PlaybackGlue.PlayerCallback {
+ ctor public PlaybackGlue.PlayerCallback();
+ method public abstract void onReadyForPlayback();
+ }
+
+ public abstract class PlaybackGlueHost {
+ ctor public PlaybackGlueHost();
+ method public void fadeOut();
+ method public void notifyPlaybackRowChanged();
+ method public void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ }
+
+ public static abstract class PlaybackGlueHost.HostCallback {
+ ctor public PlaybackGlueHost.HostCallback();
+ method public void onHostPause();
+ method public void onHostResume();
+ method public void onHostStart();
+ method public void onHostStop();
+ }
+
+ public abstract interface SurfaceHolderGlueHost {
+ method public abstract void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+}
+
+package android.support.v17.leanback.system {
+
+ public class Settings {
+ method public boolean getBoolean(java.lang.String);
+ method public static android.support.v17.leanback.system.Settings getInstance(android.content.Context);
+ method public void setBoolean(java.lang.String, boolean);
+ field public static final java.lang.String PREFER_STATIC_SHADOWS = "PREFER_STATIC_SHADOWS";
+ }
+
+}
+
+package android.support.v17.leanback.widget {
+
+ public abstract class AbstractDetailsDescriptionPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public AbstractDetailsDescriptionPresenter();
+ method protected abstract void onBindDescription(android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public static class AbstractDetailsDescriptionPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public AbstractDetailsDescriptionPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getBody();
+ method public android.widget.TextView getSubtitle();
+ method public android.widget.TextView getTitle();
+ }
+
+ public abstract class AbstractMediaItemPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaItemPresenter();
+ ctor public AbstractMediaItemPresenter(int);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter getActionPresenter();
+ method protected int getMediaPlayState(java.lang.Object);
+ method public int getThemeId();
+ method public boolean hasMediaRowSeparator();
+ method protected abstract void onBindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder, java.lang.Object);
+ method public void onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onBindRowActions(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onUnbindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void setActionPresenter(android.support.v17.leanback.widget.Presenter);
+ method public void setBackgroundColor(int);
+ method public void setHasMediaRowSeparator(boolean);
+ method public void setThemeId(int);
+ field public static final int PLAY_STATE_INITIAL = 0; // 0x0
+ field public static final int PLAY_STATE_PAUSED = 1; // 0x1
+ field public static final int PLAY_STATE_PLAYING = 2; // 0x2
+ }
+
+ public static class AbstractMediaItemPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaItemPresenter.ViewHolder(android.view.View);
+ method public android.view.ViewGroup getMediaItemActionsContainer();
+ method public android.view.View getMediaItemDetailsView();
+ method public android.widget.TextView getMediaItemDurationView();
+ method public android.widget.TextView getMediaItemNameView();
+ method public android.widget.TextView getMediaItemNumberView();
+ method public android.widget.ViewFlipper getMediaItemNumberViewFlipper();
+ method public android.view.View getMediaItemPausedView();
+ method public android.view.View getMediaItemPlayingView();
+ method public android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getMediaItemRowActions();
+ method public android.view.View getMediaItemRowSeparator();
+ method public android.view.View getSelectorView();
+ method public void notifyActionChanged(android.support.v17.leanback.widget.MultiActionsProvider.MultiAction);
+ method public void notifyDetailsChanged();
+ method public void notifyPlayStateChanged();
+ method public void onBindRowActions();
+ method public void setSelectedMediaItemNumberView(int);
+ }
+
+ public abstract class AbstractMediaListHeaderPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context, int);
+ ctor public AbstractMediaListHeaderPresenter();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected abstract void onBindMediaListHeaderViewHolder(android.support.v17.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder, java.lang.Object);
+ method public void setBackgroundColor(int);
+ }
+
+ public static class AbstractMediaListHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaListHeaderPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getHeaderView();
+ }
+
+ public class Action {
+ ctor public Action(long);
+ ctor public Action(long, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence, android.graphics.drawable.Drawable);
+ method public final void addKeyCode(int);
+ method public final android.graphics.drawable.Drawable getIcon();
+ method public final long getId();
+ method public final java.lang.CharSequence getLabel1();
+ method public final java.lang.CharSequence getLabel2();
+ method public final void removeKeyCode(int);
+ method public final boolean respondsToKeyCode(int);
+ method public final void setIcon(android.graphics.drawable.Drawable);
+ method public final void setId(long);
+ method public final void setLabel1(java.lang.CharSequence);
+ method public final void setLabel2(java.lang.CharSequence);
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ }
+
+ public class ArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter();
+ method public void add(java.lang.Object);
+ method public void add(int, java.lang.Object);
+ method public void addAll(int, java.util.Collection);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public boolean remove(java.lang.Object);
+ method public int removeItems(int, int);
+ method public void replace(int, java.lang.Object);
+ method public int size();
+ method public <E> java.util.List<E> unmodifiableList();
+ }
+
+ public class BaseCardView extends android.widget.FrameLayout {
+ ctor public BaseCardView(android.content.Context);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet, int);
+ method public int getCardType();
+ method public deprecated int getExtraVisibility();
+ method public int getInfoVisibility();
+ method public boolean isSelectedAnimationDelayed();
+ method public void setCardType(int);
+ method public deprecated void setExtraVisibility(int);
+ method public void setInfoVisibility(int);
+ method public void setSelectedAnimationDelayed(boolean);
+ field public static final int CARD_REGION_VISIBLE_ACTIVATED = 1; // 0x1
+ field public static final int CARD_REGION_VISIBLE_ALWAYS = 0; // 0x0
+ field public static final int CARD_REGION_VISIBLE_SELECTED = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_OVER = 1; // 0x1
+ field public static final int CARD_TYPE_INFO_UNDER = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_UNDER_WITH_EXTRA = 3; // 0x3
+ field public static final int CARD_TYPE_MAIN_ONLY = 0; // 0x0
+ }
+
+ public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BaseCardView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView.LayoutParams(int, int);
+ ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BaseCardView.LayoutParams(android.support.v17.leanback.widget.BaseCardView.LayoutParams);
+ field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
+ field public static final int VIEW_TYPE_INFO = 1; // 0x1
+ field public static final int VIEW_TYPE_MAIN = 0; // 0x0
+ field public int viewType;
+ }
+
+ public abstract interface BaseOnItemViewClickedListener<T> {
+ method public abstract void onItemClicked(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public abstract interface BaseOnItemViewSelectedListener<T> {
+ method public abstract void onItemSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public class BrowseFrameLayout extends android.widget.FrameLayout {
+ ctor public BrowseFrameLayout(android.content.Context);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener getOnChildFocusListener();
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public void setOnChildFocusListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener);
+ method public void setOnDispatchKeyListener(android.view.View.OnKeyListener);
+ method public void setOnFocusSearchListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnChildFocusListener {
+ method public abstract void onRequestChildFocus(android.view.View, android.view.View);
+ method public abstract boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnFocusSearchListener {
+ method public abstract android.view.View onFocusSearch(android.view.View, int);
+ }
+
+ public final class ClassPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ClassPresenterSelector();
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenter(java.lang.Class<?>, android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenterSelector(java.lang.Class<?>, android.support.v17.leanback.widget.PresenterSelector);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class ControlButtonPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ControlButtonPresenterSelector();
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter getPrimaryPresenter();
+ method public android.support.v17.leanback.widget.Presenter getSecondaryPresenter();
+ }
+
+ public class CursorObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public CursorObjectAdapter();
+ method public void changeCursor(android.database.Cursor);
+ method public void close();
+ method public java.lang.Object get(int);
+ method public final android.database.Cursor getCursor();
+ method public final android.support.v17.leanback.database.CursorMapper getMapper();
+ method protected final void invalidateCache(int);
+ method protected final void invalidateCache(int, int);
+ method public boolean isClosed();
+ method protected void onCursorChanged();
+ method protected void onMapperChanged();
+ method public final void setMapper(android.support.v17.leanback.database.CursorMapper);
+ method public int size();
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ }
+
+ public class DetailsOverviewLogoPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DetailsOverviewLogoPresenter();
+ method public boolean isBoundToImage(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.view.View onCreateView(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setContext(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ }
+
+ public static class DetailsOverviewLogoPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public DetailsOverviewLogoPresenter.ViewHolder(android.view.View);
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter getParentPresenter();
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder();
+ method public boolean isSizeFromDrawableIntrinsic();
+ method public void setSizeFromDrawableIntrinsic(boolean);
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter mParentPresenter;
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;
+ }
+
+ public class DetailsOverviewRow extends android.support.v17.leanback.widget.Row {
+ ctor public DetailsOverviewRow(java.lang.Object);
+ method public final deprecated void addAction(android.support.v17.leanback.widget.Action);
+ method public final deprecated void addAction(int, android.support.v17.leanback.widget.Action);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public final deprecated java.util.List<android.support.v17.leanback.widget.Action> getActions();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getActionsAdapter();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public boolean isImageScaleUpAllowed();
+ method public final deprecated boolean removeAction(android.support.v17.leanback.widget.Action);
+ method public final void setActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setImageScaleUpAllowed(boolean);
+ method public final void setItem(java.lang.Object);
+ }
+
+ public static class DetailsOverviewRow.Listener {
+ ctor public DetailsOverviewRow.Listener();
+ method public void onActionsAdapterChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onImageDrawableChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onItemChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ }
+
+ public deprecated class DetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public DetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public boolean isStyleLarge();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setStyleLarge(boolean);
+ }
+
+ public final class DetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public DetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDetailsDescriptionViewHolder;
+ }
+
+ public class DividerPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DividerPresenter();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public class DividerRow extends android.support.v17.leanback.widget.Row {
+ ctor public DividerRow();
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public abstract interface FacetProvider {
+ method public abstract java.lang.Object getFacet(java.lang.Class<?>);
+ }
+
+ public abstract interface FacetProviderAdapter {
+ method public abstract android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ }
+
+ public abstract interface FocusHighlight {
+ field public static final int ZOOM_FACTOR_LARGE = 3; // 0x3
+ field public static final int ZOOM_FACTOR_MEDIUM = 2; // 0x2
+ field public static final int ZOOM_FACTOR_NONE = 0; // 0x0
+ field public static final int ZOOM_FACTOR_SMALL = 1; // 0x1
+ field public static final int ZOOM_FACTOR_XSMALL = 4; // 0x4
+ }
+
+ public class FocusHighlightHelper {
+ ctor public FocusHighlightHelper();
+ method public static void setupBrowseItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, int, boolean);
+ method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView);
+ }
+
+ public abstract interface FragmentAnimationProvider {
+ method public abstract void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public abstract void onImeDisappearing(java.util.List<android.animation.Animator>);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public final int getActionsBackgroundColor();
+ method public final int getAlignmentMode();
+ method public final int getBackgroundColor();
+ method public final int getInitialState();
+ method protected int getLayoutResourceId();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public final boolean isParticipatingEntranceTransition();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public final void notifyOnBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ method protected void onLayoutLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onLayoutOverviewFrame(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onStateChanged(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ method public final void setActionsBackgroundColor(int);
+ method public final void setAlignmentMode(int);
+ method public final void setBackgroundColor(int);
+ method public final void setInitialState(int);
+ method public final void setListener(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setParticipatingEntranceTransition(boolean);
+ method public final void setState(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ field public static final int ALIGN_MODE_MIDDLE = 1; // 0x1
+ field public static final int ALIGN_MODE_START = 0; // 0x0
+ field public static final int STATE_FULL = 1; // 0x1
+ field public static final int STATE_HALF = 0; // 0x0
+ field public static final int STATE_SMALL = 2; // 0x2
+ field protected int mInitialState;
+ }
+
+ public static abstract class FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.Listener();
+ method public void onBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.DetailsOverviewRow.Listener createRowListener();
+ method public final android.view.ViewGroup getActionsRow();
+ method public final android.view.ViewGroup getDetailsDescriptionFrame();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDetailsDescriptionViewHolder();
+ method public final android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder();
+ method public final android.view.ViewGroup getOverviewView();
+ method public final int getState();
+ field protected final android.support.v17.leanback.widget.DetailsOverviewRow.Listener mRowListener;
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener extends android.support.v17.leanback.widget.DetailsOverviewRow.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener();
+ }
+
+ public class FullWidthDetailsOverviewSharedElementHelper extends android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewSharedElementHelper();
+ method public boolean getAutoStartSharedElementTransition();
+ method public void setAutoStartSharedElementTransition(boolean);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public void startPostponedEnterTransition();
+ }
+
+ public class GuidanceStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidanceStylist();
+ method public android.widget.TextView getBreadcrumbView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.support.v17.leanback.widget.GuidanceStylist.Guidance);
+ method public void onDestroyView();
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideLayoutId();
+ }
+
+ public static class GuidanceStylist.Guidance {
+ ctor public GuidanceStylist.Guidance(java.lang.String, java.lang.String, java.lang.String, android.graphics.drawable.Drawable);
+ method public java.lang.String getBreadcrumb();
+ method public java.lang.String getDescription();
+ method public android.graphics.drawable.Drawable getIconDrawable();
+ method public java.lang.String getTitle();
+ }
+
+ public class GuidedAction extends android.support.v17.leanback.widget.Action {
+ ctor protected GuidedAction();
+ method public int getCheckSetId();
+ method public java.lang.CharSequence getDescription();
+ method public int getDescriptionEditInputType();
+ method public int getDescriptionInputType();
+ method public java.lang.CharSequence getEditDescription();
+ method public int getEditInputType();
+ method public java.lang.CharSequence getEditTitle();
+ method public int getInputType();
+ method public android.content.Intent getIntent();
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getSubActions();
+ method public java.lang.CharSequence getTitle();
+ method public boolean hasEditableActivatorView();
+ method public boolean hasMultilineDescription();
+ method public boolean hasNext();
+ method public boolean hasSubActions();
+ method public boolean hasTextEditable();
+ method public boolean infoOnly();
+ method public final boolean isAutoSaveRestoreEnabled();
+ method public boolean isChecked();
+ method public boolean isDescriptionEditable();
+ method public boolean isEditTitleUsed();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public void onRestoreInstanceState(android.os.Bundle, java.lang.String);
+ method public void onSaveInstanceState(android.os.Bundle, java.lang.String);
+ method public void setChecked(boolean);
+ method public void setDescription(java.lang.CharSequence);
+ method public void setEditDescription(java.lang.CharSequence);
+ method public void setEditTitle(java.lang.CharSequence);
+ method public void setEnabled(boolean);
+ method public void setFocusable(boolean);
+ method public void setIntent(android.content.Intent);
+ method public void setSubActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setTitle(java.lang.CharSequence);
+ field public static final long ACTION_ID_CANCEL = -5L; // 0xfffffffffffffffbL
+ field public static final long ACTION_ID_CONTINUE = -7L; // 0xfffffffffffffff9L
+ field public static final long ACTION_ID_CURRENT = -3L; // 0xfffffffffffffffdL
+ field public static final long ACTION_ID_FINISH = -6L; // 0xfffffffffffffffaL
+ field public static final long ACTION_ID_NEXT = -2L; // 0xfffffffffffffffeL
+ field public static final long ACTION_ID_NO = -9L; // 0xfffffffffffffff7L
+ field public static final long ACTION_ID_OK = -4L; // 0xfffffffffffffffcL
+ field public static final long ACTION_ID_YES = -8L; // 0xfffffffffffffff8L
+ field public static final int CHECKBOX_CHECK_SET_ID = -1; // 0xffffffff
+ field public static final int DEFAULT_CHECK_SET_ID = 1; // 0x1
+ field public static final int NO_CHECK_SET = 0; // 0x0
+ }
+
+ public static class GuidedAction.Builder extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public deprecated GuidedAction.Builder();
+ ctor public GuidedAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedAction build();
+ }
+
+ public static abstract class GuidedAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedAction.BuilderBase> {
+ ctor public GuidedAction.BuilderBase(android.content.Context);
+ method protected final void applyValues(android.support.v17.leanback.widget.GuidedAction);
+ method public B autoSaveRestoreEnabled(boolean);
+ method public B checkSetId(int);
+ method public B checked(boolean);
+ method public B clickAction(long);
+ method public B description(java.lang.CharSequence);
+ method public B description(int);
+ method public B descriptionEditInputType(int);
+ method public B descriptionEditable(boolean);
+ method public B descriptionInputType(int);
+ method public B editDescription(java.lang.CharSequence);
+ method public B editDescription(int);
+ method public B editInputType(int);
+ method public B editTitle(java.lang.CharSequence);
+ method public B editTitle(int);
+ method public B editable(boolean);
+ method public B enabled(boolean);
+ method public B focusable(boolean);
+ method public android.content.Context getContext();
+ method public B hasEditableActivatorView(boolean);
+ method public B hasNext(boolean);
+ method public B icon(android.graphics.drawable.Drawable);
+ method public B icon(int);
+ method public deprecated B iconResourceId(int, android.content.Context);
+ method public B id(long);
+ method public B infoOnly(boolean);
+ method public B inputType(int);
+ method public B intent(android.content.Intent);
+ method public B multilineDescription(boolean);
+ method public B subActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public B title(java.lang.CharSequence);
+ method public B title(int);
+ }
+
+ public class GuidedActionEditText extends android.widget.EditText implements android.support.v17.leanback.widget.ImeKeyMonitor {
+ ctor public GuidedActionEditText(android.content.Context);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public class GuidedActionsStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidedActionsStylist();
+ method public void collapseAction(boolean);
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public android.support.v17.leanback.widget.VerticalGridView getActionsGridView();
+ method public android.support.v17.leanback.widget.GuidedAction getExpandedAction();
+ method public int getItemViewType(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.VerticalGridView getSubActionsGridView();
+ method public final boolean isBackKeyToCollapseActivatorView();
+ method public final boolean isBackKeyToCollapseSubActions();
+ method public boolean isButtonActions();
+ method public boolean isExpandTransitionSupported();
+ method public boolean isExpanded();
+ method public boolean isInExpandTransition();
+ method public boolean isSubActionsExpanded();
+ method public void onAnimateItemChecked(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemFocused(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressed(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressedCancelled(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void onBindActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindCheckMarkView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindChevronView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDestroyView();
+ method protected deprecated void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method protected void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean, boolean);
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideItemLayoutId();
+ method public int onProvideItemLayoutId(int);
+ method public int onProvideLayoutId();
+ method public boolean onUpdateActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onUpdateExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void setAsButtonActions();
+ method public final void setBackKeyToCollapseActivatorView(boolean);
+ method public final void setBackKeyToCollapseSubActions(boolean);
+ method public deprecated void setEditingMode(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public deprecated void setExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method protected void setupImeOptions(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void startExpandedTransition(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ field public static final int VIEW_TYPE_DATE_PICKER = 1; // 0x1
+ field public static final int VIEW_TYPE_DEFAULT = 0; // 0x0
+ }
+
+ public static class GuidedActionsStylist.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View);
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View, boolean);
+ method public android.support.v17.leanback.widget.GuidedAction getAction();
+ method public android.widget.ImageView getCheckmarkView();
+ method public android.widget.ImageView getChevronView();
+ method public android.view.View getContentView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.EditText getEditableDescriptionView();
+ method public android.widget.EditText getEditableTitleView();
+ method public android.view.View getEditingView();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public boolean isInEditing();
+ method public boolean isInEditingActivatorView();
+ method public boolean isInEditingDescription();
+ method public boolean isInEditingText();
+ method public boolean isInEditingTitle();
+ method public boolean isSubAction();
+ }
+
+ public class GuidedDatePickerAction extends android.support.v17.leanback.widget.GuidedAction {
+ ctor public GuidedDatePickerAction();
+ method public long getDate();
+ method public java.lang.String getDatePickerFormat();
+ method public long getMaxDate();
+ method public long getMinDate();
+ method public void setDate(long);
+ }
+
+ public static final class GuidedDatePickerAction.Builder extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase {
+ ctor public GuidedDatePickerAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedDatePickerAction build();
+ }
+
+ public static abstract class GuidedDatePickerAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase> extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public GuidedDatePickerAction.BuilderBase(android.content.Context);
+ method protected final void applyDatePickerValues(android.support.v17.leanback.widget.GuidedDatePickerAction);
+ method public B date(long);
+ method public B datePickerFormat(java.lang.String);
+ method public B maxDate(long);
+ method public B minDate(long);
+ }
+
+ public class HeaderItem {
+ ctor public HeaderItem(long, java.lang.String);
+ ctor public HeaderItem(java.lang.String);
+ method public java.lang.CharSequence getContentDescription();
+ method public java.lang.CharSequence getDescription();
+ method public final long getId();
+ method public final java.lang.String getName();
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setDescription(java.lang.CharSequence);
+ }
+
+ public class HorizontalGridView extends android.support.v7.widget.RecyclerView {
+ ctor public HorizontalGridView(android.content.Context);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet, int);
+ method public final boolean getFadingLeftEdge();
+ method public final int getFadingLeftEdgeLength();
+ method public final int getFadingLeftEdgeOffset();
+ method public final boolean getFadingRightEdge();
+ method public final int getFadingRightEdgeLength();
+ method public final int getFadingRightEdgeOffset();
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public final void setFadingLeftEdge(boolean);
+ method public final void setFadingLeftEdgeLength(int);
+ method public final void setFadingLeftEdgeOffset(int);
+ method public final void setFadingRightEdge(boolean);
+ method public final void setFadingRightEdgeLength(int);
+ method public final void setFadingRightEdgeOffset(int);
+ method public void setNumRows(int);
+ method public void setRowHeight(int);
+ }
+
+ public final class HorizontalHoverCardSwitcher extends android.support.v17.leanback.widget.PresenterSwitcher {
+ ctor public HorizontalHoverCardSwitcher();
+ method protected void insertView(android.view.View);
+ method public void select(android.support.v17.leanback.widget.HorizontalGridView, android.view.View, java.lang.Object);
+ }
+
+ public class ImageCardView extends android.support.v17.leanback.widget.BaseCardView {
+ ctor public deprecated ImageCardView(android.content.Context, int);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet, int);
+ ctor public ImageCardView(android.content.Context);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet);
+ method public android.graphics.drawable.Drawable getBadgeImage();
+ method public java.lang.CharSequence getContentText();
+ method public android.graphics.drawable.Drawable getInfoAreaBackground();
+ method public android.graphics.drawable.Drawable getMainImage();
+ method public final android.widget.ImageView getMainImageView();
+ method public java.lang.CharSequence getTitleText();
+ method public void setBadgeImage(android.graphics.drawable.Drawable);
+ method public void setContentText(java.lang.CharSequence);
+ method public void setInfoAreaBackground(android.graphics.drawable.Drawable);
+ method public void setInfoAreaBackgroundColor(int);
+ method public void setMainImage(android.graphics.drawable.Drawable);
+ method public void setMainImage(android.graphics.drawable.Drawable, boolean);
+ method public void setMainImageAdjustViewBounds(boolean);
+ method public void setMainImageDimensions(int, int);
+ method public void setMainImageScaleType(android.widget.ImageView.ScaleType);
+ method public void setTitleText(java.lang.CharSequence);
+ field public static final int CARD_TYPE_FLAG_CONTENT = 2; // 0x2
+ field public static final int CARD_TYPE_FLAG_ICON_LEFT = 8; // 0x8
+ field public static final int CARD_TYPE_FLAG_ICON_RIGHT = 4; // 0x4
+ field public static final int CARD_TYPE_FLAG_IMAGE_ONLY = 0; // 0x0
+ field public static final int CARD_TYPE_FLAG_TITLE = 1; // 0x1
+ }
+
+ public abstract interface ImeKeyMonitor {
+ method public abstract void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public static abstract interface ImeKeyMonitor.ImeKeyListener {
+ method public abstract boolean onKeyPreIme(android.widget.EditText, int, android.view.KeyEvent);
+ }
+
+ public final class ItemAlignmentFacet {
+ ctor public ItemAlignmentFacet();
+ method public android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[] getAlignmentDefs();
+ method public boolean isMultiAlignment();
+ method public void setAlignmentDefs(android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[]);
+ field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ }
+
+ public static class ItemAlignmentFacet.ItemAlignmentDef {
+ ctor public ItemAlignmentFacet.ItemAlignmentDef();
+ method public final int getItemAlignmentFocusViewId();
+ method public final int getItemAlignmentOffset();
+ method public final float getItemAlignmentOffsetPercent();
+ method public final int getItemAlignmentViewId();
+ method public boolean isAlignedToTextViewBaseLine();
+ method public final boolean isItemAlignmentOffsetWithPadding();
+ method public final void setAlignedToTextViewBaseline(boolean);
+ method public final void setItemAlignmentFocusViewId(int);
+ method public final void setItemAlignmentOffset(int);
+ method public final void setItemAlignmentOffsetPercent(float);
+ method public final void setItemAlignmentOffsetWithPadding(boolean);
+ method public final void setItemAlignmentViewId(int);
+ }
+
+ public class ItemBridgeAdapter extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.leanback.widget.FacetProviderAdapter {
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter, android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ItemBridgeAdapter();
+ method public void clear();
+ method public android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ method public int getItemCount();
+ method public java.util.ArrayList<android.support.v17.leanback.widget.Presenter> getPresenterMapper();
+ method public android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper getWrapper();
+ method protected void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method protected void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method protected void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final android.support.v7.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method protected void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAdapterListener(android.support.v17.leanback.widget.ItemBridgeAdapter.AdapterListener);
+ method public void setPresenterMapper(java.util.ArrayList<android.support.v17.leanback.widget.Presenter>);
+ method public void setWrapper(android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper);
+ }
+
+ public static class ItemBridgeAdapter.AdapterListener {
+ ctor public ItemBridgeAdapter.AdapterListener();
+ method public void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method public void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ }
+
+ public class ItemBridgeAdapter.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ method public final java.lang.Object getExtraObject();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.Presenter getPresenter();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getViewHolder();
+ method public void setExtraObject(java.lang.Object);
+ }
+
+ public static abstract class ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapter.Wrapper();
+ method public abstract android.view.View createWrapper(android.view.View);
+ method public abstract void wrap(android.view.View, android.view.View);
+ }
+
+ public class ItemBridgeAdapterShadowOverlayWrapper extends android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapterShadowOverlayWrapper(android.support.v17.leanback.widget.ShadowOverlayHelper);
+ method public android.view.View createWrapper(android.view.View);
+ method public void wrap(android.view.View, android.view.View);
+ }
+
+ public class ListRow extends android.support.v17.leanback.widget.Row {
+ ctor public ListRow(android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(long, android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public java.lang.CharSequence getContentDescription();
+ method public void setContentDescription(java.lang.CharSequence);
+ }
+
+ public final class ListRowHoverCardView extends android.widget.LinearLayout {
+ ctor public ListRowHoverCardView(android.content.Context);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet, int);
+ method public final java.lang.CharSequence getDescription();
+ method public final java.lang.CharSequence getTitle();
+ method public final void setDescription(java.lang.CharSequence);
+ method public final void setTitle(java.lang.CharSequence);
+ }
+
+ public class ListRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public ListRowPresenter();
+ ctor public ListRowPresenter(int);
+ ctor public ListRowPresenter(int, boolean);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public int getExpandedRowHeight();
+ method public final int getFocusZoomFactor();
+ method public final android.support.v17.leanback.widget.PresenterSelector getHoverCardPresenterSelector();
+ method public int getRecycledPoolSize(android.support.v17.leanback.widget.Presenter);
+ method public int getRowHeight();
+ method public final boolean getShadowEnabled();
+ method public final deprecated int getZoomFactor();
+ method public final boolean isFocusDimmerUsed();
+ method public final boolean isKeepChildForeground();
+ method public boolean isUsingDefaultListSelectEffect();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void setExpandedRowHeight(int);
+ method public final void setHoverCardPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumRows(int);
+ method public void setRecycledPoolSize(android.support.v17.leanback.widget.Presenter, int);
+ method public void setRowHeight(int);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class ListRowPresenter.SelectItemViewHolderTask extends android.support.v17.leanback.widget.Presenter.ViewHolderTask {
+ ctor public ListRowPresenter.SelectItemViewHolderTask(int);
+ method public int getItemPosition();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolderTask getItemTask();
+ method public boolean isSmoothScroll();
+ method public void setItemPosition(int);
+ method public void setItemTask(android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSmoothScroll(boolean);
+ }
+
+ public static class ListRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public ListRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.HorizontalGridView, android.support.v17.leanback.widget.ListRowPresenter);
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getItemViewHolder(int);
+ method public final android.support.v17.leanback.widget.ListRowPresenter getListRowPresenter();
+ method public int getSelectedPosition();
+ }
+
+ public final class ListRowView extends android.widget.LinearLayout {
+ ctor public ListRowView(android.content.Context);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ }
+
+ public abstract interface MultiActionsProvider {
+ method public abstract android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getActions();
+ }
+
+ public static class MultiActionsProvider.MultiAction {
+ ctor public MultiActionsProvider.MultiAction(long);
+ method public android.graphics.drawable.Drawable getCurrentDrawable();
+ method public android.graphics.drawable.Drawable[] getDrawables();
+ method public long getId();
+ method public int getIndex();
+ method public void incrementIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ }
+
+ public abstract class ObjectAdapter {
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ObjectAdapter();
+ method public abstract java.lang.Object get(int);
+ method public long getId(int);
+ method public final android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public final boolean hasStableIds();
+ method public boolean isImmediateNotifySupported();
+ method protected final void notifyChanged();
+ method public final void notifyItemRangeChanged(int, int);
+ method protected final void notifyItemRangeInserted(int, int);
+ method protected final void notifyItemRangeRemoved(int, int);
+ method protected void onHasStableIdsChanged();
+ method protected void onPresenterSelectorChanged();
+ method public final void registerObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ method public final void setHasStableIds(boolean);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public abstract int size();
+ method public final void unregisterAllObservers();
+ method public final void unregisterObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ field public static final int NO_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class ObjectAdapter.DataObserver {
+ ctor public ObjectAdapter.DataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public abstract interface OnActionClickedListener {
+ method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+ }
+
+ public abstract interface OnChildLaidOutListener {
+ method public abstract void onChildLaidOut(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract deprecated interface OnChildSelectedListener {
+ method public abstract void onChildSelected(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract class OnChildViewHolderSelectedListener {
+ ctor public OnChildViewHolderSelectedListener();
+ method public void onChildViewHolderSelected(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ method public void onChildViewHolderSelectedAndPositioned(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ }
+
+ public abstract interface OnItemViewClickedListener implements android.support.v17.leanback.widget.BaseOnItemViewClickedListener {
+ }
+
+ public abstract interface OnItemViewSelectedListener implements android.support.v17.leanback.widget.BaseOnItemViewSelectedListener {
+ }
+
+ public class PageRow extends android.support.v17.leanback.widget.Row {
+ ctor public PageRow(android.support.v17.leanback.widget.HeaderItem);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public class PlaybackControlsRow extends android.support.v17.leanback.widget.Row {
+ ctor public PlaybackControlsRow(java.lang.Object);
+ ctor public PlaybackControlsRow();
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(android.support.v17.leanback.widget.ObjectAdapter, int);
+ method public int getBufferedProgress();
+ method public long getBufferedProgressLong();
+ method public int getCurrentTime();
+ method public long getCurrentTimeLong();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getPrimaryActionsAdapter();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getSecondaryActionsAdapter();
+ method public int getTotalTime();
+ method public long getTotalTimeLong();
+ method public void setBufferedProgress(int);
+ method public void setBufferedProgressLong(long);
+ method public void setCurrentTime(int);
+ method public void setCurrentTimeLong(long);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public final void setPrimaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setSecondaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setTotalTime(int);
+ method public void setTotalTimeLong(long);
+ }
+
+ public static class PlaybackControlsRow.ClosedCaptioningAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context);
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context, int);
+ field public static int OFF;
+ field public static int ON;
+ }
+
+ public static class PlaybackControlsRow.FastForwardAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context);
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.HighQualityAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context);
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context, int);
+ field public static int OFF;
+ field public static int ON;
+ }
+
+ public static class PlaybackControlsRow.MoreActions extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MoreActions(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.MultiAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MultiAction(int);
+ method public int getActionCount();
+ method public android.graphics.drawable.Drawable getDrawable(int);
+ method public int getIndex();
+ method public java.lang.String getLabel(int);
+ method public java.lang.String getSecondaryLabel(int);
+ method public void nextIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ method public void setLabels(java.lang.String[]);
+ method public void setSecondaryLabels(java.lang.String[]);
+ }
+
+ public static class PlaybackControlsRow.PictureInPictureAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.PictureInPictureAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.PlayPauseAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.PlayPauseAction(android.content.Context);
+ field public static int PAUSE;
+ field public static int PLAY;
+ }
+
+ public static class PlaybackControlsRow.RepeatAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int, int);
+ field public static int ALL;
+ field public static int NONE;
+ field public static int ONE;
+ }
+
+ public static class PlaybackControlsRow.RewindAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context);
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.ShuffleAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context);
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context, int);
+ field public static int OFF;
+ field public static int ON;
+ }
+
+ public static class PlaybackControlsRow.SkipNextAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipNextAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.SkipPreviousAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipPreviousAction(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.ThumbsAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ThumbsAction(int, android.content.Context, int, int);
+ field public static int OUTLINE;
+ field public static int SOLID;
+ }
+
+ public static class PlaybackControlsRow.ThumbsDownAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsDownAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.ThumbsUpAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsUpAction(android.content.Context);
+ }
+
+ public class PlaybackControlsRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+ ctor public PlaybackControlsRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public PlaybackControlsRowPresenter();
+ method public boolean areSecondaryActionsHidden();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public int getProgressColor();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setProgressColor(int);
+ method public void setSecondaryActionsHidden(boolean);
+ method public void showBottomSpace(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder, boolean);
+ method public void showPrimaryActions(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder);
+ }
+
+ public class PlaybackControlsRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder {
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDescriptionViewHolder;
+ }
+
+ public abstract class PlaybackRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public PlaybackRowPresenter();
+ method public void onReappear(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ }
+
+ public static class PlaybackRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public PlaybackRowPresenter.ViewHolder(android.view.View);
+ }
+
+ public abstract class Presenter implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter();
+ method protected static void cancelAnimationsRecursive(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public abstract void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public abstract android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public abstract void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ method public void setOnClickListener(android.support.v17.leanback.widget.Presenter.ViewHolder, android.view.View.OnClickListener);
+ }
+
+ public static class Presenter.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter.ViewHolder(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ field public final android.view.View view;
+ }
+
+ public static abstract class Presenter.ViewHolderTask {
+ ctor public Presenter.ViewHolderTask();
+ method public void run(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public abstract class PresenterSelector {
+ ctor public PresenterSelector();
+ method public abstract android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter[] getPresenters();
+ }
+
+ public abstract class PresenterSwitcher {
+ ctor public PresenterSwitcher();
+ method public void clear();
+ method public final android.view.ViewGroup getParentViewGroup();
+ method public void init(android.view.ViewGroup, android.support.v17.leanback.widget.PresenterSelector);
+ method protected abstract void insertView(android.view.View);
+ method protected void onViewSelected(android.view.View);
+ method public void select(java.lang.Object);
+ method protected void showView(android.view.View, boolean);
+ method public void unselect();
+ }
+
+ public class Row {
+ ctor public Row(long, android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row(android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row();
+ method public final android.support.v17.leanback.widget.HeaderItem getHeaderItem();
+ method public final long getId();
+ method public boolean isRenderedAsRowView();
+ method public final void setHeaderItem(android.support.v17.leanback.widget.HeaderItem);
+ method public final void setId(long);
+ }
+
+ public class RowHeaderPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowHeaderPresenter();
+ method protected static float getFontDescent(android.widget.TextView, android.graphics.Paint);
+ method public int getSpaceUnderBaseline(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public boolean isNullItemVisibilityGone();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setNullItemVisibilityGone(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, float);
+ }
+
+ public static class RowHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowHeaderPresenter.ViewHolder(android.view.View);
+ method public final float getSelectLevel();
+ }
+
+ public final class RowHeaderView extends android.widget.TextView {
+ ctor public RowHeaderView(android.content.Context);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public abstract class RowPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowPresenter();
+ method protected abstract android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected void dispatchItemSelectedListener(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public void freeze(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter getHeaderPresenter();
+ method public final android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final boolean getSelectEffectEnabled();
+ method public final float getSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final int getSyncActivatePolicy();
+ method protected void initializeRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected boolean isClippingChildren();
+ method public boolean isUsingDefaultSelectEffect();
+ method protected void onBindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onRowViewAttachedToWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewDetachedFromWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewExpanded(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onRowViewSelected(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onUnbindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method public final void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final void setHeaderPresenter(android.support.v17.leanback.widget.RowHeaderPresenter);
+ method public final void setRowViewExpanded(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setRowViewSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setSelectEffectEnabled(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder, float);
+ method public final void setSyncActivatePolicy(int);
+ field public static final int SYNC_ACTIVATED_CUSTOM = 0; // 0x0
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED = 1; // 0x1
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED = 3; // 0x3
+ field public static final int SYNC_ACTIVATED_TO_SELECTED = 2; // 0x2
+ }
+
+ public static class RowPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowPresenter.ViewHolder(android.view.View);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder getHeaderViewHolder();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.view.View.OnKeyListener getOnKeyListener();
+ method public final android.support.v17.leanback.widget.Row getRow();
+ method public final java.lang.Object getRowObject();
+ method public final float getSelectLevel();
+ method public java.lang.Object getSelectedItem();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getSelectedItemViewHolder();
+ method public final boolean isExpanded();
+ method public final boolean isSelected();
+ method public final void setActivated(boolean);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setOnKeyListener(android.view.View.OnKeyListener);
+ method public final void syncActivatedStatus(android.view.View);
+ field protected final android.support.v17.leanback.graphics.ColorOverlayDimmer mColorDimmer;
+ }
+
+ public class SearchBar extends android.widget.RelativeLayout {
+ ctor public SearchBar(android.content.Context);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet, int);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.String getTitle();
+ method public boolean isRecognizing();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setPermissionListener(android.support.v17.leanback.widget.SearchBar.SearchBarPermissionListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchBarListener(android.support.v17.leanback.widget.SearchBar.SearchBarListener);
+ method public void setSearchQuery(java.lang.String);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setSpeechRecognizer(android.speech.SpeechRecognizer);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ method public void stopRecognition();
+ }
+
+ public static abstract interface SearchBar.SearchBarListener {
+ method public abstract void onKeyboardDismiss(java.lang.String);
+ method public abstract void onSearchQueryChange(java.lang.String);
+ method public abstract void onSearchQuerySubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchBar.SearchBarPermissionListener {
+ method public abstract void requestAudioPermission();
+ }
+
+ public class SearchEditText extends android.support.v17.leanback.widget.StreamingTextView {
+ ctor public SearchEditText(android.content.Context);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setOnKeyboardDismissListener(android.support.v17.leanback.widget.SearchEditText.OnKeyboardDismissListener);
+ }
+
+ public static abstract interface SearchEditText.OnKeyboardDismissListener {
+ method public abstract void onKeyboardDismiss();
+ }
+
+ public class SearchOrbView extends android.widget.FrameLayout implements android.view.View.OnClickListener {
+ ctor public SearchOrbView(android.content.Context);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableOrbColorAnimation(boolean);
+ method public int getOrbColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getOrbColors();
+ method public android.graphics.drawable.Drawable getOrbIcon();
+ method public void onClick(android.view.View);
+ method public void setOnOrbClickedListener(android.view.View.OnClickListener);
+ method public void setOrbColor(int);
+ method public deprecated void setOrbColor(int, int);
+ method public void setOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setOrbIcon(android.graphics.drawable.Drawable);
+ }
+
+ public static class SearchOrbView.Colors {
+ ctor public SearchOrbView.Colors(int);
+ ctor public SearchOrbView.Colors(int, int);
+ ctor public SearchOrbView.Colors(int, int, int);
+ method public static int getBrightColor(int);
+ field public int brightColor;
+ field public int color;
+ field public int iconColor;
+ }
+
+ public class SectionRow extends android.support.v17.leanback.widget.Row {
+ ctor public SectionRow(android.support.v17.leanback.widget.HeaderItem);
+ ctor public SectionRow(long, java.lang.String);
+ ctor public SectionRow(java.lang.String);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public class ShadowOverlayContainer extends android.widget.FrameLayout {
+ ctor public ShadowOverlayContainer(android.content.Context);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet, int);
+ method public int getShadowType();
+ method public android.view.View getWrappedView();
+ method public deprecated void initialize(boolean, boolean);
+ method public deprecated void initialize(boolean, boolean, boolean);
+ method public static void prepareParentForShadow(android.view.ViewGroup);
+ method public void setOverlayColor(int);
+ method public void setShadowFocusLevel(float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsShadow();
+ method public void useDynamicShadow();
+ method public void useDynamicShadow(float, float);
+ method public void useStaticShadow();
+ method public void wrap(android.view.View);
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public final class ShadowOverlayHelper {
+ method public android.support.v17.leanback.widget.ShadowOverlayContainer createShadowOverlayContainer(android.content.Context);
+ method public int getShadowType();
+ method public boolean needsOverlay();
+ method public boolean needsRoundedCorner();
+ method public boolean needsWrapper();
+ method public void onViewCreated(android.view.View);
+ method public void prepareParentForShadow(android.view.ViewGroup);
+ method public static void setNoneWrapperOverlayColor(android.view.View, int);
+ method public static void setNoneWrapperShadowFocusLevel(android.view.View, float);
+ method public void setOverlayColor(android.view.View, int);
+ method public void setShadowFocusLevel(android.view.View, float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsForeground();
+ method public static boolean supportsRoundedCorner();
+ method public static boolean supportsShadow();
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public static final class ShadowOverlayHelper.Builder {
+ ctor public ShadowOverlayHelper.Builder();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper build(android.content.Context);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder keepForegroundDrawable(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsOverlay(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsRoundedCorner(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsShadow(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder options(android.support.v17.leanback.widget.ShadowOverlayHelper.Options);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder preferZOrder(boolean);
+ }
+
+ public static final class ShadowOverlayHelper.Options {
+ ctor public ShadowOverlayHelper.Options();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options dynamicShadowZ(float, float);
+ method public final float getDynamicShadowFocusedZ();
+ method public final float getDynamicShadowUnfocusedZ();
+ method public final int getRoundedCornerRadius();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options roundedCornerRadius(int);
+ field public static final android.support.v17.leanback.widget.ShadowOverlayHelper.Options DEFAULT;
+ }
+
+ public final class SinglePresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public SinglePresenterSelector(android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class SparseArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public SparseArrayObjectAdapter();
+ method public void clear(int);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public int indexOf(int);
+ method public java.lang.Object lookup(int);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public void set(int, java.lang.Object);
+ method public int size();
+ }
+
+ public class SpeechOrbView extends android.support.v17.leanback.widget.SearchOrbView {
+ ctor public SpeechOrbView(android.content.Context);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void setListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setNotListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSoundLevel(int);
+ method public void showListening();
+ method public void showNotListening();
+ }
+
+ public abstract interface SpeechRecognitionCallback {
+ method public abstract void recognizeSpeech();
+ }
+
+ class StreamingTextView extends android.widget.EditText {
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet);
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet, int);
+ method public static boolean isLayoutRtl(android.view.View);
+ method public void reset();
+ method public void setFinalRecognizedText(java.lang.CharSequence);
+ method public void updateRecognizedText(java.lang.String, java.lang.String);
+ method public void updateRecognizedText(java.lang.String, java.util.List<java.lang.Float>);
+ }
+
+ public class TitleHelper {
+ ctor public TitleHelper(android.view.ViewGroup, android.view.View);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public android.view.ViewGroup getSceneRoot();
+ method public android.view.View getTitleView();
+ method public void showTitle(boolean);
+ }
+
+ public class TitleView extends android.widget.FrameLayout implements android.support.v17.leanback.widget.TitleViewAdapter.Provider {
+ ctor public TitleView(android.content.Context);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableAnimation(boolean);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ }
+
+ public abstract class TitleViewAdapter {
+ ctor public TitleViewAdapter();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public abstract android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public void setAnimationEnabled(boolean);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ field public static final int BRANDING_VIEW_VISIBLE = 2; // 0x2
+ field public static final int FULL_VIEW_VISIBLE = 6; // 0x6
+ field public static final int SEARCH_VIEW_VISIBLE = 4; // 0x4
+ }
+
+ public static abstract interface TitleViewAdapter.Provider {
+ method public abstract android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ }
+
+ public class VerticalGridPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public VerticalGridPresenter();
+ ctor public VerticalGridPresenter(int);
+ ctor public VerticalGridPresenter(int, boolean);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder createGridViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public final int getFocusZoomFactor();
+ method public final boolean getKeepChildForeground();
+ method public int getNumberOfColumns();
+ method public final android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public final boolean getShadowEnabled();
+ method protected void initializeGridViewHolder(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder);
+ method public final boolean isFocusDimmerUsed();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder, boolean);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumberOfColumns(int);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class VerticalGridPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public VerticalGridPresenter.ViewHolder(android.support.v17.leanback.widget.VerticalGridView);
+ method public android.support.v17.leanback.widget.VerticalGridView getGridView();
+ }
+
+ public class VerticalGridView extends android.support.v7.widget.RecyclerView {
+ ctor public VerticalGridView(android.content.Context);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet, int);
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public void setColumnWidth(int);
+ method public void setNumColumns(int);
+ }
+
+ public abstract interface ViewHolderTask {
+ method public abstract void run(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+}
+
+package android.support.v17.leanback.widget.picker {
+
+ public class Picker extends android.widget.FrameLayout {
+ ctor public Picker(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public float getActivatedVisibleItemCount();
+ method public android.support.v17.leanback.widget.picker.PickerColumn getColumnAt(int);
+ method public int getColumnsCount();
+ method protected int getPickerItemHeightPixels();
+ method public final int getPickerItemLayoutId();
+ method public final int getPickerItemTextViewId();
+ method public int getSelectedColumn();
+ method public final java.lang.CharSequence getSeparator();
+ method public float getVisibleItemCount();
+ method public void onColumnValueChanged(int, int);
+ method public void removeOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public void setActivatedVisibleItemCount(float);
+ method public void setColumnAt(int, android.support.v17.leanback.widget.picker.PickerColumn);
+ method public void setColumnValue(int, int, boolean);
+ method public void setColumns(java.util.List<android.support.v17.leanback.widget.picker.PickerColumn>);
+ method public final void setPickerItemTextViewId(int);
+ method public void setSelectedColumn(int);
+ method public final void setSeparator(java.lang.CharSequence);
+ method public void setVisibleItemCount(float);
+ }
+
+ public static abstract interface Picker.PickerValueListener {
+ method public abstract void onValueChanged(android.support.v17.leanback.widget.picker.Picker, int);
+ }
+
+ public class PickerColumn {
+ ctor public PickerColumn();
+ method public int getCount();
+ method public int getCurrentValue();
+ method public java.lang.CharSequence getLabelFor(int);
+ method public java.lang.String getLabelFormat();
+ method public int getMaxValue();
+ method public int getMinValue();
+ method public java.lang.CharSequence[] getStaticLabels();
+ method public void setCurrentValue(int);
+ method public void setLabelFormat(java.lang.String);
+ method public void setMaxValue(int);
+ method public void setMinValue(int);
+ method public void setStaticLabels(java.lang.CharSequence[]);
+ }
+
+}
+
+package android.support.v17.preference {
+
+ public abstract class BaseLeanbackPreferenceFragment extends android.support.v14.preference.PreferenceFragment {
+ ctor public BaseLeanbackPreferenceFragment();
+ }
+
+ public class LeanbackListPreferenceDialogFragment extends android.support.v17.preference.LeanbackPreferenceDialogFragment {
+ ctor public LeanbackListPreferenceDialogFragment();
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
+ method public android.support.v7.widget.RecyclerView.Adapter onCreateAdapter();
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterMulti extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterSingle extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public static class LeanbackListPreferenceDialogFragment.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
+ method public android.view.ViewGroup getContainer();
+ method public android.widget.TextView getTitleView();
+ method public android.widget.Checkable getWidgetView();
+ method public void onClick(android.view.View);
+ }
+
+ public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ method public abstract void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
+ ctor public LeanbackPreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ field public static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class LeanbackPreferenceFragment extends android.support.v17.preference.BaseLeanbackPreferenceFragment {
+ ctor public LeanbackPreferenceFragment();
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public abstract class LeanbackSettingsFragment extends android.app.Fragment implements android.support.v14.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback android.support.v14.preference.PreferenceFragment.OnPreferenceStartFragmentCallback android.support.v14.preference.PreferenceFragment.OnPreferenceStartScreenCallback {
+ ctor public LeanbackSettingsFragment();
+ method public boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ method public abstract void onPreferenceStartInitialScreen();
+ method public void startImmersiveFragment(android.app.Fragment);
+ method public void startPreferenceFragment(android.app.Fragment);
+ }
+
+}
+
+package android.support.v4.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static java.lang.String capabilityToString(int);
+ method public static java.lang.String feedbackTypeToString(int);
+ method public static java.lang.String flagToString(int);
+ method public static boolean getCanRetrieveWindowContent(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static deprecated java.lang.String getDescription(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String getId(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static android.content.pm.ResolveInfo getResolveInfo(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String getSettingsActivityName(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package android.support.v4.app {
+
+ public deprecated class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, boolean, int, int, int);
+ method public boolean isDrawerIndicatorEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void syncState();
+ }
+
+ public static abstract interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v4.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+ public class ActivityCompat extends android.support.v4.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri getReferrer(android.app.Activity);
+ method public static boolean invalidateOptionsMenu(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static void setExitSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static abstract interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect getLaunchBounds();
+ method public static android.support.v4.app.ActivityOptionsCompat makeBasic();
+ method public static android.support.v4.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.support.v4.util.Pair<android.view.View, java.lang.String>...);
+ method public static android.support.v4.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static android.support.v4.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public android.support.v4.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect);
+ method public android.os.Bundle toBundle();
+ method public void update(android.support.v4.app.ActivityOptionsCompat);
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public class AppLaunchChecker {
+ ctor public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
+ method public static int noteProxyOp(android.content.Context, java.lang.String, java.lang.String);
+ method public static java.lang.String permissionToOp(java.lang.String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder getBinder(android.os.Bundle, java.lang.String);
+ method public static void putBinder(android.os.Bundle, java.lang.String, android.os.IBinder);
+ }
+
+ public class DialogFragment extends android.support.v4.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+ ctor public DialogFragment();
+ method public void dismiss();
+ method public void dismissAllowingStateLoss();
+ method public android.app.Dialog getDialog();
+ method public boolean getShowsDialog();
+ method public int getTheme();
+ method public boolean isCancelable();
+ method public void onCancel(android.content.DialogInterface);
+ method public android.app.Dialog onCreateDialog(android.os.Bundle);
+ method public void onDismiss(android.content.DialogInterface);
+ method public void setCancelable(boolean);
+ method public void setShowsDialog(boolean);
+ method public void setStyle(int, int);
+ method public void show(android.support.v4.app.FragmentManager, java.lang.String);
+ method public int show(android.support.v4.app.FragmentTransaction, java.lang.String);
+ field public static final int STYLE_NORMAL = 0; // 0x0
+ field public static final int STYLE_NO_FRAME = 2; // 0x2
+ field public static final int STYLE_NO_INPUT = 3; // 0x3
+ field public static final int STYLE_NO_TITLE = 1; // 0x1
+ }
+
+ public class Fragment implements android.content.ComponentCallbacks android.view.View.OnCreateContextMenuListener {
+ ctor public Fragment();
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean equals(java.lang.Object);
+ method public final android.support.v4.app.FragmentActivity getActivity();
+ method public boolean getAllowEnterTransitionOverlap();
+ method public boolean getAllowReturnTransitionOverlap();
+ method public final android.os.Bundle getArguments();
+ method public final android.support.v4.app.FragmentManager getChildFragmentManager();
+ method public android.content.Context getContext();
+ method public java.lang.Object getEnterTransition();
+ method public java.lang.Object getExitTransition();
+ method public final android.support.v4.app.FragmentManager getFragmentManager();
+ method public final java.lang.Object getHost();
+ method public final int getId();
+ method public android.support.v4.app.LoaderManager getLoaderManager();
+ method public final android.support.v4.app.Fragment getParentFragment();
+ method public java.lang.Object getReenterTransition();
+ method public final android.content.res.Resources getResources();
+ method public final boolean getRetainInstance();
+ method public java.lang.Object getReturnTransition();
+ method public java.lang.Object getSharedElementEnterTransition();
+ method public java.lang.Object getSharedElementReturnTransition();
+ method public final java.lang.String getString(int);
+ method public final java.lang.String getString(int, java.lang.Object...);
+ method public final java.lang.String getTag();
+ method public final android.support.v4.app.Fragment getTargetFragment();
+ method public final int getTargetRequestCode();
+ method public final java.lang.CharSequence getText(int);
+ method public boolean getUserVisibleHint();
+ method public android.view.View getView();
+ method public final int hashCode();
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String);
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+ method public final boolean isAdded();
+ method public final boolean isDetached();
+ method public final boolean isHidden();
+ method public final boolean isInLayout();
+ method public final boolean isRemoving();
+ method public final boolean isResumed();
+ method public final boolean isVisible();
+ method public void onActivityCreated(android.os.Bundle);
+ method public void onActivityResult(int, int, android.content.Intent);
+ method public void onAttach(android.content.Context);
+ method public deprecated void onAttach(android.app.Activity);
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public boolean onContextItemSelected(android.view.MenuItem);
+ method public void onCreate(android.os.Bundle);
+ method public android.view.animation.Animation onCreateAnimation(int, boolean, int);
+ method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+ method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDestroy();
+ method public void onDestroyOptionsMenu();
+ method public void onDestroyView();
+ method public void onDetach();
+ method public void onHiddenChanged(boolean);
+ method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+ method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+ method public void onLowMemory();
+ method public void onMultiWindowModeChanged(boolean);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void onOptionsMenuClosed(android.view.Menu);
+ method public void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
+ method public void onPrepareOptionsMenu(android.view.Menu);
+ method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ method public void onResume();
+ method public void onSaveInstanceState(android.os.Bundle);
+ method public void onStart();
+ method public void onStop();
+ method public void onViewCreated(android.view.View, android.os.Bundle);
+ method public void onViewStateRestored(android.os.Bundle);
+ method public void postponeEnterTransition();
+ method public void registerForContextMenu(android.view.View);
+ method public final void requestPermissions(java.lang.String[], int);
+ method public void setAllowEnterTransitionOverlap(boolean);
+ method public void setAllowReturnTransitionOverlap(boolean);
+ method public void setArguments(android.os.Bundle);
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setEnterTransition(java.lang.Object);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitTransition(java.lang.Object);
+ method public void setHasOptionsMenu(boolean);
+ method public void setInitialSavedState(android.support.v4.app.Fragment.SavedState);
+ method public void setMenuVisibility(boolean);
+ method public void setReenterTransition(java.lang.Object);
+ method public void setRetainInstance(boolean);
+ method public void setReturnTransition(java.lang.Object);
+ method public void setSharedElementEnterTransition(java.lang.Object);
+ method public void setSharedElementReturnTransition(java.lang.Object);
+ method public void setTargetFragment(android.support.v4.app.Fragment, int);
+ method public void setUserVisibleHint(boolean);
+ method public boolean shouldShowRequestPermissionRationale(java.lang.String);
+ method public void startActivity(android.content.Intent);
+ method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public void startActivityForResult(android.content.Intent, int);
+ method public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startPostponedEnterTransition();
+ method public void unregisterForContextMenu(android.view.View);
+ }
+
+ public static class Fragment.InstantiationException extends java.lang.RuntimeException {
+ ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
+ }
+
+ public static class Fragment.SavedState implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.app.Fragment.SavedState> CREATOR;
+ }
+
+ public class FragmentActivity extends android.app.Activity implements android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback {
+ ctor public FragmentActivity();
+ method public java.lang.Object getLastCustomNonConfigurationInstance();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method protected void onResumeFragments();
+ method public java.lang.Object onRetainCustomNonConfigurationInstance();
+ method public final java.lang.Object onRetainNonConfigurationInstance();
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void supportFinishAfterTransition();
+ method public void supportInvalidateOptionsMenu();
+ method public void supportPostponeEnterTransition();
+ method public void supportStartPostponedEnterTransition();
+ method public final void validateRequestPermissionsRequestCode(int);
+ }
+
+ public abstract class FragmentContainer {
+ ctor public FragmentContainer();
+ method public abstract android.view.View onFindViewById(int);
+ method public abstract boolean onHasView();
+ }
+
+ public class FragmentController {
+ method public void attachHost(android.support.v4.app.Fragment);
+ method public static final android.support.v4.app.FragmentController createController(android.support.v4.app.FragmentHostCallback<?>);
+ method public void dispatchActivityCreated();
+ method public void dispatchConfigurationChanged(android.content.res.Configuration);
+ method public boolean dispatchContextItemSelected(android.view.MenuItem);
+ method public void dispatchCreate();
+ method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public void dispatchDestroy();
+ method public void dispatchDestroyView();
+ method public void dispatchLowMemory();
+ method public void dispatchMultiWindowModeChanged(boolean);
+ method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+ method public void dispatchOptionsMenuClosed(android.view.Menu);
+ method public void dispatchPause();
+ method public void dispatchPictureInPictureModeChanged(boolean);
+ method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+ method public void dispatchReallyStop();
+ method public void dispatchResume();
+ method public void dispatchStart();
+ method public void dispatchStop();
+ method public void doLoaderDestroy();
+ method public void doLoaderRetain();
+ method public void doLoaderStart();
+ method public void doLoaderStop(boolean);
+ method public void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public boolean execPendingActions();
+ method public android.support.v4.app.Fragment findFragmentByWho(java.lang.String);
+ method public java.util.List<android.support.v4.app.Fragment> getActiveFragments(java.util.List<android.support.v4.app.Fragment>);
+ method public int getActiveFragmentsCount();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void noteStateNotSaved();
+ method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public void reportLoaderStart();
+ method public deprecated void restoreAllState(android.os.Parcelable, java.util.List<android.support.v4.app.Fragment>);
+ method public void restoreAllState(android.os.Parcelable, android.support.v4.app.FragmentManagerNonConfig);
+ method public void restoreLoaderNonConfig(android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager>);
+ method public android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager> retainLoaderNonConfig();
+ method public android.support.v4.app.FragmentManagerNonConfig retainNestedNonConfig();
+ method public deprecated java.util.List<android.support.v4.app.Fragment> retainNonConfig();
+ method public android.os.Parcelable saveAllState();
+ }
+
+ public abstract class FragmentHostCallback<E> extends android.support.v4.app.FragmentContainer {
+ ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+ method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public android.view.View onFindViewById(int);
+ method public abstract E onGetHost();
+ method public android.view.LayoutInflater onGetLayoutInflater();
+ method public int onGetWindowAnimations();
+ method public boolean onHasView();
+ method public boolean onHasWindowAnimations();
+ method public void onRequestPermissionsFromFragment(android.support.v4.app.Fragment, java.lang.String[], int);
+ method public boolean onShouldSaveFragmentState(android.support.v4.app.Fragment);
+ method public boolean onShouldShowRequestPermissionRationale(java.lang.String);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void onStartIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void onSupportInvalidateOptionsMenu();
+ }
+
+ public abstract class FragmentManager {
+ ctor public FragmentManager();
+ method public abstract void addOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.FragmentTransaction beginTransaction();
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract boolean executePendingTransactions();
+ method public abstract android.support.v4.app.Fragment findFragmentById(int);
+ method public abstract android.support.v4.app.Fragment findFragmentByTag(java.lang.String);
+ method public abstract android.support.v4.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+ method public abstract int getBackStackEntryCount();
+ method public abstract android.support.v4.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+ method public abstract boolean isDestroyed();
+ method public abstract void popBackStack();
+ method public abstract void popBackStack(java.lang.String, int);
+ method public abstract void popBackStack(int, int);
+ method public abstract boolean popBackStackImmediate();
+ method public abstract boolean popBackStackImmediate(java.lang.String, int);
+ method public abstract boolean popBackStackImmediate(int, int);
+ method public abstract void putFragment(android.os.Bundle, java.lang.String, android.support.v4.app.Fragment);
+ method public abstract void registerFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+ method public abstract void removeOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.Fragment.SavedState saveFragmentInstanceState(android.support.v4.app.Fragment);
+ method public abstract void unregisterFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks);
+ field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+ }
+
+ public static abstract interface FragmentManager.BackStackEntry {
+ method public abstract java.lang.CharSequence getBreadCrumbShortTitle();
+ method public abstract int getBreadCrumbShortTitleRes();
+ method public abstract java.lang.CharSequence getBreadCrumbTitle();
+ method public abstract int getBreadCrumbTitleRes();
+ method public abstract int getId();
+ method public abstract java.lang.String getName();
+ }
+
+ public static abstract class FragmentManager.FragmentLifecycleCallbacks {
+ ctor public FragmentManager.FragmentLifecycleCallbacks();
+ method public void onFragmentActivityCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentDetached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPaused(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPreAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentResumed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentSaveInstanceState(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentStarted(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentStopped(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentViewCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.view.View, android.os.Bundle);
+ method public void onFragmentViewDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ }
+
+ public static abstract interface FragmentManager.OnBackStackChangedListener {
+ method public abstract void onBackStackChanged();
+ }
+
+ public class FragmentManagerNonConfig {
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager);
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager, int);
+ }
+
+ public abstract class FragmentTransaction {
+ ctor public FragmentTransaction();
+ method public abstract android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addToBackStack(java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction attach(android.support.v4.app.Fragment);
+ method public abstract int commit();
+ method public abstract int commitAllowingStateLoss();
+ method public abstract void commitNow();
+ method public abstract void commitNowAllowingStateLoss();
+ method public abstract android.support.v4.app.FragmentTransaction detach(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction disallowAddToBackStack();
+ method public abstract android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment);
+ method public abstract boolean isAddToBackStackAllowed();
+ method public abstract boolean isEmpty();
+ method public abstract android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction setAllowOptimization(boolean);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int, int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setTransition(int);
+ method public abstract android.support.v4.app.FragmentTransaction setTransitionStyle(int);
+ method public abstract android.support.v4.app.FragmentTransaction show(android.support.v4.app.Fragment);
+ field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+ field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+ field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+ field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+ field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+ field public static final int TRANSIT_NONE = 0; // 0x0
+ field public static final int TRANSIT_UNSET = -1; // 0xffffffff
+ }
+
+ public class ListFragment extends android.support.v4.app.Fragment {
+ ctor public ListFragment();
+ method public android.widget.ListAdapter getListAdapter();
+ method public android.widget.ListView getListView();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+ method public void setEmptyText(java.lang.CharSequence);
+ method public void setListAdapter(android.widget.ListAdapter);
+ method public void setListShown(boolean);
+ method public void setListShownNoAnimation(boolean);
+ method public void setSelection(int);
+ }
+
+ public abstract class LoaderManager {
+ ctor public LoaderManager();
+ method public abstract void destroyLoader(int);
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract <D> android.support.v4.content.Loader<D> getLoader(int);
+ method public boolean hasRunningLoaders();
+ method public abstract <D> android.support.v4.content.Loader<D> initLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ method public abstract <D> android.support.v4.content.Loader<D> restartLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ }
+
+ public static abstract interface LoaderManager.LoaderCallbacks<D> {
+ method public abstract android.support.v4.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+ method public abstract void onLoadFinished(android.support.v4.content.Loader<D>, D);
+ method public abstract void onLoaderReset(android.support.v4.content.Loader<D>);
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, java.lang.Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static java.lang.String getParentActivityName(android.app.Activity);
+ method public static java.lang.String getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final java.lang.String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public class NotificationCompat {
+ ctor public NotificationCompat();
+ method public static android.support.v4.app.NotificationCompat.Action getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static java.lang.String getCategory(android.app.Notification);
+ method public static android.os.Bundle getExtras(android.app.Notification);
+ method public static java.lang.String getGroup(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static java.lang.String getSortKey(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final java.lang.String CATEGORY_ALARM = "alarm";
+ field public static final java.lang.String CATEGORY_CALL = "call";
+ field public static final java.lang.String CATEGORY_EMAIL = "email";
+ field public static final java.lang.String CATEGORY_ERROR = "err";
+ field public static final java.lang.String CATEGORY_EVENT = "event";
+ field public static final java.lang.String CATEGORY_MESSAGE = "msg";
+ field public static final java.lang.String CATEGORY_PROGRESS = "progress";
+ field public static final java.lang.String CATEGORY_PROMO = "promo";
+ field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final java.lang.String CATEGORY_REMINDER = "reminder";
+ field public static final java.lang.String CATEGORY_SERVICE = "service";
+ field public static final java.lang.String CATEGORY_SOCIAL = "social";
+ field public static final java.lang.String CATEGORY_STATUS = "status";
+ field public static final java.lang.String CATEGORY_SYSTEM = "sys";
+ field public static final java.lang.String CATEGORY_TRANSPORT = "transport";
+ field public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final java.lang.String EXTRA_MESSAGES = "android.messages";
+ field public static final java.lang.String EXTRA_PEOPLE = "android.people";
+ field public static final java.lang.String EXTRA_PICTURE = "android.picture";
+ field public static final java.lang.String EXTRA_PROGRESS = "android.progress";
+ field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final java.lang.String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
+ field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
+ field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
+ field public static final java.lang.String EXTRA_TEXT = "android.text";
+ field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final java.lang.String EXTRA_TITLE = "android.title";
+ field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.app.PendingIntent getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public android.support.v4.app.RemoteInput[] getRemoteInputs();
+ method public java.lang.CharSequence getTitle();
+ field public android.app.PendingIntent actionIntent;
+ field public int icon;
+ field public java.lang.CharSequence title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
+ ctor public NotificationCompat.Action.Builder(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addRemoteInput(android.support.v4.app.RemoteInput);
+ method public android.support.v4.app.NotificationCompat.Action build();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Extender);
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ }
+
+ public static abstract interface NotificationCompat.Action.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements android.support.v4.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ method public java.lang.CharSequence getCancelLabel();
+ method public java.lang.CharSequence getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method public java.lang.CharSequence getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle bigText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder addPerson(java.lang.String);
+ method public android.app.Notification build();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Extender);
+ method public android.os.Bundle getExtras();
+ method public deprecated android.app.Notification getNotification();
+ method protected static java.lang.CharSequence limitCharSequenceLength(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setCategory(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setColor(int);
+ method public android.support.v4.app.NotificationCompat.Builder setContent(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setContentInfo(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setContentText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setDefaults(int);
+ method public android.support.v4.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setGroup(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.Builder setLights(int, int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setNumber(int);
+ method public android.support.v4.app.NotificationCompat.Builder setOngoing(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPriority(int);
+ method public android.support.v4.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPublicVersion(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder setRemoteInputHistory(java.lang.CharSequence[]);
+ method public android.support.v4.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setSortKey(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri, int);
+ method public android.support.v4.app.NotificationCompat.Builder setStyle(android.support.v4.app.NotificationCompat.Style);
+ method public android.support.v4.app.NotificationCompat.Builder setSubText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setVibrate(long[]);
+ method public android.support.v4.app.NotificationCompat.Builder setVisibility(int);
+ method public android.support.v4.app.NotificationCompat.Builder setWhen(long);
+ field public java.util.ArrayList<java.lang.String> mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public int getColor();
+ method public android.graphics.Bitmap getLargeIcon();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation getUnreadConversation();
+ method public android.support.v4.app.NotificationCompat.CarExtender setColor(int);
+ method public android.support.v4.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.CarExtender setUnreadConversation(android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public java.lang.String[] getMessages();
+ method public java.lang.String getParticipant();
+ method public java.lang.String[] getParticipants();
+ method public android.app.PendingIntent getReadPendingIntent();
+ method public android.support.v4.app.RemoteInput getRemoteInput();
+ method public android.app.PendingIntent getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent, android.support.v4.app.RemoteInput);
+ }
+
+ public static abstract interface NotificationCompat.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static class NotificationCompat.InboxStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.InboxStyle addLine(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MessagingStyle(java.lang.CharSequence);
+ method public void addCompatExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(android.support.v4.app.NotificationCompat.MessagingStyle.Message);
+ method public static android.support.v4.app.NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(android.app.Notification);
+ method public java.lang.CharSequence getConversationTitle();
+ method public java.util.List<android.support.v4.app.NotificationCompat.MessagingStyle.Message> getMessages();
+ method public java.lang.CharSequence getUserDisplayName();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public java.lang.String getDataMimeType();
+ method public android.net.Uri getDataUri();
+ method public java.lang.CharSequence getSender();
+ method public java.lang.CharSequence getText();
+ method public long getTimestamp();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle.Message setData(java.lang.String, android.net.Uri);
+ }
+
+ public static abstract class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification build();
+ method public void setBuilder(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addActions(java.util.List<android.support.v4.app.NotificationCompat.Action>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearActions();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearPages();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public java.util.List<android.support.v4.app.NotificationCompat.Action> getActions();
+ method public android.graphics.Bitmap getBackground();
+ method public java.lang.String getBridgeTag();
+ method public int getContentAction();
+ method public int getContentIcon();
+ method public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method public int getCustomContentHeight();
+ method public int getCustomSizePreset();
+ method public java.lang.String getDismissalId();
+ method public android.app.PendingIntent getDisplayIntent();
+ method public int getGravity();
+ method public boolean getHintAmbientBigPicture();
+ method public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method public boolean getHintHideIcon();
+ method public int getHintScreenTimeout();
+ method public boolean getHintShowBackgroundOnly();
+ method public java.util.List<android.app.Notification> getPages();
+ method public boolean getStartScrollBottom();
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBridgeTag(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentAction(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDismissalId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field public static final int SIZE_DEFAULT = 0; // 0x0
+ field public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field public static final int SIZE_LARGE = 4; // 0x4
+ field public static final int SIZE_MEDIUM = 3; // 0x3
+ field public static final int SIZE_SMALL = 2; // 0x2
+ field public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final java.lang.String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final java.lang.String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final java.lang.String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final java.lang.String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final java.lang.String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(java.lang.String, int, java.lang.String);
+ method public abstract void cancelAll(java.lang.String);
+ method public abstract void notify(java.lang.String, int, java.lang.String, android.app.Notification);
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(java.lang.String, int);
+ method public void cancelAll();
+ method public static android.support.v4.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public void notify(int, android.app.Notification);
+ method public void notify(java.lang.String, int, android.app.Notification);
+ field public static final java.lang.String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final java.lang.String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public final class RemoteInput extends android.support.v4.app.RemoteInputCompatBase.RemoteInput {
+ method public static void addResultsToIntent(android.support.v4.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.lang.CharSequence[] getChoices();
+ method public android.os.Bundle getExtras();
+ method public java.lang.CharSequence getLabel();
+ method public java.lang.String getResultKey();
+ method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+ field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(java.lang.String);
+ method public android.support.v4.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public android.support.v4.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]);
+ method public android.support.v4.app.RemoteInput.Builder setLabel(java.lang.CharSequence);
+ }
+
+ class RemoteInputCompatBase {
+ }
+
+ public static abstract class RemoteInputCompatBase.RemoteInput {
+ ctor public RemoteInputCompatBase.RemoteInput();
+ method protected abstract boolean getAllowFreeFormInput();
+ method protected abstract java.lang.CharSequence[] getChoices();
+ method protected abstract android.os.Bundle getExtras();
+ method protected abstract java.lang.CharSequence getLabel();
+ method protected abstract java.lang.String getResultKey();
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, int, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName getCallingActivity(android.app.Activity);
+ method public static java.lang.String getCallingPackage(android.app.Activity);
+ field public static final java.lang.String EXTRA_CALLING_ACTIVITY = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final java.lang.String EXTRA_CALLING_PACKAGE = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static android.support.v4.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(int);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setHtmlText(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setStream(android.net.Uri);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setSubject(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setText(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setType(java.lang.String);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static android.support.v4.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName getCallingActivity();
+ method public android.graphics.drawable.Drawable getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable getCallingApplicationIcon();
+ method public java.lang.CharSequence getCallingApplicationLabel();
+ method public java.lang.String getCallingPackage();
+ method public java.lang.String[] getEmailBcc();
+ method public java.lang.String[] getEmailCc();
+ method public java.lang.String[] getEmailTo();
+ method public java.lang.String getHtmlText();
+ method public android.net.Uri getStream();
+ method public android.net.Uri getStream(int);
+ method public int getStreamCount();
+ method public java.lang.String getSubject();
+ method public java.lang.CharSequence getText();
+ method public java.lang.String getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+ method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+ method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String, android.view.View>);
+ method public void onRejectSharedElements(java.util.List<android.view.View>);
+ method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener);
+ }
+
+ public static abstract interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public abstract void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable {
+ method public android.support.v4.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(java.lang.Class<?>);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static android.support.v4.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent editIntentAt(int);
+ method public static deprecated android.support.v4.app.TaskStackBuilder from(android.content.Context);
+ method public deprecated android.content.Intent getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent[] getIntents();
+ method public android.app.PendingIntent getPendingIntent(int, int);
+ method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+ method public deprecated java.util.Iterator<android.content.Intent> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle);
+ }
+
+ public static abstract interface TaskStackBuilder.SupportParentable {
+ method public abstract android.content.Intent getSupportParentActivityIntent();
+ }
+
+}
+
+package android.support.v4.content {
+
+ public abstract class AsyncTaskLoader<D> extends android.support.v4.content.Loader {
+ ctor public AsyncTaskLoader(android.content.Context);
+ method public void cancelLoadInBackground();
+ method public boolean isLoadInBackgroundCanceled();
+ method public abstract D loadInBackground();
+ method public void onCanceled(D);
+ method protected D onLoadInBackground();
+ method public void setUpdateThrottle(long);
+ }
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.support.v4.os.CancellationSignal);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ method public static android.content.Context createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method public static final int getColor(android.content.Context, int);
+ method public static final android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static java.io.File getDataDir(android.content.Context);
+ method public static final android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ method public static java.io.File[] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File[] getExternalFilesDirs(android.content.Context, java.lang.String);
+ method public static final java.io.File getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File[] getObbDirs(android.content.Context);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+ }
+
+ public class CursorLoader extends android.support.v4.content.AsyncTaskLoader {
+ ctor public CursorLoader(android.content.Context);
+ ctor public CursorLoader(android.content.Context, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public void deliverResult(android.database.Cursor);
+ method public java.lang.String[] getProjection();
+ method public java.lang.String getSelection();
+ method public java.lang.String[] getSelectionArgs();
+ method public java.lang.String getSortOrder();
+ method public android.net.Uri getUri();
+ method public android.database.Cursor loadInBackground();
+ method public void onCanceled(android.database.Cursor);
+ method public void setProjection(java.lang.String[]);
+ method public void setSelection(java.lang.String);
+ method public void setSelectionArgs(java.lang.String[]);
+ method public void setSortOrder(java.lang.String);
+ method public void setUri(android.net.Uri);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+ method public java.lang.String getType(android.net.Uri);
+ method public static android.net.Uri getUriForFile(android.content.Context, java.lang.String, java.io.File);
+ method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent makeMainActivity(android.content.ComponentName);
+ method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+ method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+ field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+ field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+ field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+ field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
+ field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+ field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+ }
+
+ public class Loader<D> {
+ ctor public Loader(android.content.Context);
+ method public void abandon();
+ method public boolean cancelLoad();
+ method public void commitContentChanged();
+ method public java.lang.String dataToString(D);
+ method public void deliverCancellation();
+ method public void deliverResult(D);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public void forceLoad();
+ method public android.content.Context getContext();
+ method public int getId();
+ method public boolean isAbandoned();
+ method public boolean isReset();
+ method public boolean isStarted();
+ method protected void onAbandon();
+ method protected boolean onCancelLoad();
+ method public void onContentChanged();
+ method protected void onForceLoad();
+ method protected void onReset();
+ method protected void onStartLoading();
+ method protected void onStopLoading();
+ method public void registerListener(int, android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void registerOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ method public void reset();
+ method public void rollbackContentChanged();
+ method public final void startLoading();
+ method public void stopLoading();
+ method public boolean takeContentChanged();
+ method public void unregisterListener(android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void unregisterOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ }
+
+ public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+ ctor public Loader.ForceLoadContentObserver();
+ }
+
+ public static abstract interface Loader.OnLoadCanceledListener<D> {
+ method public abstract void onLoadCanceled(android.support.v4.content.Loader<D>);
+ }
+
+ public static abstract interface Loader.OnLoadCompleteListener<D> {
+ method public abstract void onLoadComplete(android.support.v4.content.Loader<D>, D);
+ }
+
+ public final class LocalBroadcastManager {
+ method public static android.support.v4.content.LocalBroadcastManager getInstance(android.content.Context);
+ method public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+ method public boolean sendBroadcast(android.content.Intent);
+ method public void sendBroadcastSync(android.content.Intent);
+ method public void unregisterReceiver(android.content.BroadcastReceiver);
+ }
+
+ public final class ParallelExecutorCompat {
+ method public static java.util.concurrent.Executor getParallelExecutor();
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, java.lang.String);
+ method public static int checkCallingPermission(android.content.Context, java.lang.String, java.lang.String);
+ method public static int checkPermission(android.content.Context, java.lang.String, int, int, java.lang.String);
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ public static abstract class PermissionChecker.PermissionResult implements java.lang.annotation.Annotation {
+ }
+
+ public final class SharedPreferencesCompat {
+ }
+
+ public static final class SharedPreferencesCompat.EditorCompat {
+ method public void apply(android.content.SharedPreferences.Editor);
+ method public static android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+ }
+
+ public abstract class WakefulBroadcastReceiver extends android.content.BroadcastReceiver {
+ ctor public WakefulBroadcastReceiver();
+ method public static boolean completeWakefulIntent(android.content.Intent);
+ method public static android.content.ComponentName startWakefulService(android.content.Context, android.content.Intent);
+ }
+
+}
+
+package android.support.v4.content.pm {
+
+ public final class ActivityInfoCompat {
+ field public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+}
+
+package android.support.v4.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ method public static int getScreenHeightDp(android.content.res.Resources);
+ method public static int getScreenWidthDp(android.content.res.Resources);
+ method public static int getSmallestScreenWidthDp(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method public static int getColor(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList getColorStateList(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ }
+
+}
+
+package android.support.v4.database {
+
+ public final class DatabaseUtilsCompat {
+ method public static java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
+ method public static java.lang.String concatenateWhere(java.lang.String, java.lang.String);
+ }
+
+}
+
+package android.support.v4.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public final class ColorUtils {
+ method public static int HSLToColor(float[]);
+ method public static int LABToColor(double, double, double);
+ method public static void LABToXYZ(double, double, double, double[]);
+ method public static void RGBToHSL(int, int, int, float[]);
+ method public static void RGBToLAB(int, int, int, double[]);
+ method public static void RGBToXYZ(int, int, int, double[]);
+ method public static int XYZToColor(double, double, double);
+ method public static void XYZToLAB(double, double, double, double[]);
+ method public static int blendARGB(int, int, float);
+ method public static void blendHSL(float[], float[], float, float[]);
+ method public static void blendLAB(double[], double[], double, double[]);
+ method public static double calculateContrast(int, int);
+ method public static double calculateLuminance(int);
+ method public static int calculateMinimumAlpha(int, int, float);
+ method public static void colorToHSL(int, float[]);
+ method public static void colorToLAB(int, double[]);
+ method public static void colorToXYZ(int, double[]);
+ method public static int compositeColors(int, int);
+ method public static double distanceEuclidean(double[], double[]);
+ method public static int setAlphaComponent(int, int);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setCornerRadius(float);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.lang.String);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package android.support.v4.hardware.display {
+
+ public abstract class DisplayManagerCompat {
+ method public abstract android.view.Display getDisplay(int);
+ method public abstract android.view.Display[] getDisplays();
+ method public abstract android.view.Display[] getDisplays(java.lang.String);
+ method public static android.support.v4.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package android.support.v4.hardware.fingerprint {
+
+ public final class FingerprintManagerCompat {
+ method public void authenticate(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject, int, android.support.v4.os.CancellationSignal, android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler);
+ method public static android.support.v4.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method public boolean hasEnrolledFingerprints();
+ method public boolean isHardwareDetected();
+ }
+
+ public static abstract class FingerprintManagerCompat.AuthenticationCallback {
+ ctor public FingerprintManagerCompat.AuthenticationCallback();
+ method public void onAuthenticationError(int, java.lang.CharSequence);
+ method public void onAuthenticationFailed();
+ method public void onAuthenticationHelp(int, java.lang.CharSequence);
+ method public void onAuthenticationSucceeded(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult);
+ }
+
+ public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor public FingerprintManagerCompat.AuthenticationResult(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject);
+ method public android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject getCryptoObject();
+ }
+
+ public static class FingerprintManagerCompat.CryptoObject {
+ ctor public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method public javax.crypto.Cipher getCipher();
+ method public javax.crypto.Mac getMac();
+ method public java.security.Signature getSignature();
+ }
+
+}
+
+package android.support.v4.math {
+
+ public class MathUtils {
+ ctor public MathUtils();
+ method public static float clamp(float, int, int);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ }
+
+}
+
+package android.support.v4.media {
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context, android.content.ComponentName, android.support.v4.media.MediaBrowserCompat.ConnectionCallback, android.os.Bundle);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle getExtras();
+ method public void getItem(java.lang.String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method public java.lang.String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void subscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(java.lang.String);
+ method public void unsubscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final java.lang.String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final java.lang.String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public static abstract class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(java.lang.String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem fromMediaItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem> fromMediaItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public java.lang.String getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem> CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public static abstract class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>, android.os.Bundle);
+ method public void onError(java.lang.String);
+ method public void onError(java.lang.String, android.os.Bundle);
+ }
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final android.os.Bundle getBrowserRootHints();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public void notifyChildrenChanged(java.lang.String);
+ method public void notifyChildrenChanged(java.lang.String, android.os.Bundle);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
+ method public abstract void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+ method public void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>, android.os.Bundle);
+ method public void onLoadItem(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token);
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(java.lang.String, android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getRootId();
+ field public static final java.lang.String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final java.lang.String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field public static final java.lang.String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendResult(T);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat fromMediaDescription(java.lang.Object);
+ method public java.lang.CharSequence getDescription();
+ method public android.os.Bundle getExtras();
+ method public android.graphics.Bitmap getIconBitmap();
+ method public android.net.Uri getIconUri();
+ method public java.lang.Object getMediaDescription();
+ method public java.lang.String getMediaId();
+ method public android.net.Uri getMediaUri();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat> CREATOR;
+ field public static final java.lang.String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setDescription(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconBitmap(android.graphics.Bitmap);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaId(java.lang.String);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setSubtitle(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setTitle(java.lang.CharSequence);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(java.lang.String);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat fromMediaMetadata(java.lang.Object);
+ method public android.graphics.Bitmap getBitmap(java.lang.String);
+ method public android.os.Bundle getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getLong(java.lang.String);
+ method public java.lang.Object getMediaMetadata();
+ method public android.support.v4.media.RatingCompat getRating(java.lang.String);
+ method public java.lang.String getString(java.lang.String);
+ method public java.lang.CharSequence getText(java.lang.String);
+ method public java.util.Set<java.lang.String> keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat> CREATOR;
+ field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final java.lang.String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat);
+ method public android.support.v4.media.MediaMetadataCompat build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder putBitmap(java.lang.String, android.graphics.Bitmap);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putLong(java.lang.String, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putRating(java.lang.String, android.support.v4.media.RatingCompat);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putString(java.lang.String, java.lang.String);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putText(java.lang.String, java.lang.CharSequence);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat fromRating(java.lang.Object);
+ method public float getPercentRating();
+ method public java.lang.Object getRating();
+ method public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat newStarRating(int, float);
+ method public static android.support.v4.media.RatingCompat newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat newUnratedRating(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat> CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+ public abstract class TransportController {
+ ctor public TransportController();
+ method public abstract int getBufferPercentage();
+ method public abstract long getCurrentPosition();
+ method public abstract long getDuration();
+ method public abstract int getTransportControlFlags();
+ method public abstract boolean isPlaying();
+ method public abstract void pausePlaying();
+ method public abstract void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public abstract void seekTo(long);
+ method public abstract void startPlaying();
+ method public abstract void stopPlaying();
+ method public abstract void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ }
+
+ public class TransportMediator extends android.support.v4.media.TransportController {
+ ctor public TransportMediator(android.app.Activity, android.support.v4.media.TransportPerformer);
+ ctor public TransportMediator(android.view.View, android.support.v4.media.TransportPerformer);
+ method public void destroy();
+ method public boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public int getBufferPercentage();
+ method public long getCurrentPosition();
+ method public long getDuration();
+ method public java.lang.Object getRemoteControlClient();
+ method public int getTransportControlFlags();
+ method public boolean isPlaying();
+ method public void pausePlaying();
+ method public void refreshState();
+ method public void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public void seekTo(long);
+ method public void startPlaying();
+ method public void stopPlaying();
+ method public void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ field public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+ field public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+ field public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+ field public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+ field public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+ field public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+ field public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+ field public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+ field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
+ field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e
+ field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
+ }
+
+ public abstract class TransportPerformer {
+ ctor public TransportPerformer();
+ method public void onAudioFocusChange(int);
+ method public int onGetBufferPercentage();
+ method public abstract long onGetCurrentPosition();
+ method public abstract long onGetDuration();
+ method public int onGetTransportControlFlags();
+ method public abstract boolean onIsPlaying();
+ method public boolean onMediaButtonDown(int, android.view.KeyEvent);
+ method public boolean onMediaButtonUp(int, android.view.KeyEvent);
+ method public abstract void onPause();
+ method public abstract void onSeekTo(long);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ }
+
+ public class TransportStateListener {
+ ctor public TransportStateListener();
+ method public void onPlayingChanged(android.support.v4.media.TransportController);
+ method public void onTransportControlsChanged(android.support.v4.media.TransportController);
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method public final int getVolumeControl();
+ method public java.lang.Object getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(android.support.v4.media.VolumeProviderCompat.Callback);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public static abstract class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(android.support.v4.media.VolumeProviderCompat);
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, long);
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long);
+ method public static android.view.KeyEvent handleIntent(android.support.v4.media.session.MediaSessionCompat, android.content.Intent);
+ method public void onReceive(android.content.Context, android.content.Intent);
+ }
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
+ method public android.os.Bundle getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat getMediaController(android.app.Activity);
+ method public java.lang.Object getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat getMetadata();
+ method public java.lang.String getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> getQueue();
+ method public java.lang.CharSequence getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent getSessionActivity();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+ method public boolean isShuffleModeEnabled();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
+ method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public static abstract class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo);
+ method public void onExtrasChanged(android.os.Bundle);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void onQueueTitleChanged(java.lang.CharSequence);
+ method public void onRepeatModeChanged(int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(java.lang.String, android.os.Bundle);
+ method public void onShuffleModeChanged(boolean);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public static abstract class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void playFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void playFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction, android.os.Bundle);
+ method public abstract void sendCustomAction(java.lang.String, android.os.Bundle);
+ method public abstract void setRating(android.support.v4.media.RatingCompat);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleModeEnabled(boolean);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String);
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String, android.content.ComponentName, android.app.PendingIntent);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public static android.support.v4.media.session.MediaSessionCompat fromMediaSession(android.content.Context, java.lang.Object);
+ method public android.support.v4.media.session.MediaControllerCompat getController();
+ method public java.lang.Object getMediaSession();
+ method public java.lang.Object getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isActive();
+ method public static deprecated android.support.v4.media.session.MediaSessionCompat obtain(android.content.Context, java.lang.Object);
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public void sendSessionEvent(java.lang.String, android.os.Bundle);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback, android.os.Handler);
+ method public void setExtras(android.os.Bundle);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(android.support.v4.media.VolumeProviderCompat);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void setQueueTitle(java.lang.CharSequence);
+ method public void setRatingType(int);
+ method public void setRepeatMode(int);
+ method public void setSessionActivity(android.app.PendingIntent);
+ method public void setShuffleModeEnabled(boolean);
+ field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ }
+
+ public static abstract class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public void onCustomAction(java.lang.String, android.os.Bundle);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPlayFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetRating(android.support.v4.media.RatingCompat);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleModeEnabled(boolean);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static abstract interface MediaSessionCompat.OnActiveChangeListener {
+ method public abstract void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem fromQueueItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> fromQueueItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getQueueId();
+ method public java.lang.Object getQueueItem();
+ method public static deprecated android.support.v4.media.session.MediaSessionCompat.QueueItem obtain(java.lang.Object);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem> CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token fromToken(java.lang.Object);
+ method public java.lang.Object getToken();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token> CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo> CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat fromPlaybackState(java.lang.Object);
+ method public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction> getCustomActions();
+ method public java.lang.CharSequence getErrorMessage();
+ method public android.os.Bundle getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public java.lang.Object getPlaybackState();
+ method public long getPosition();
+ method public int getState();
+ method public static int toKeyCode(long);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat> CREATOR;
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(java.lang.String, java.lang.String, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction);
+ method public android.support.v4.media.session.PlaybackStateCompat build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActions(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setBufferedPosition(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(java.lang.CharSequence);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction fromCustomAction(java.lang.Object);
+ method public java.lang.String getAction();
+ method public java.lang.Object getCustomAction();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public java.lang.CharSequence getName();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction> CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(java.lang.String, java.lang.CharSequence, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder setExtras(android.os.Bundle);
+ }
+
+}
+
+package android.support.v4.net {
+
+ public final class ConnectivityManagerCompat {
+ method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class TrafficStatsCompat {
+ method public static void clearThreadStatsTag();
+ method public static int getThreadStatsTag();
+ method public static void incrementOperationCount(int);
+ method public static void incrementOperationCount(int, int);
+ method public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
+ }
+
+}
+
+package android.support.v4.os {
+
+ public final class AsyncTaskCompat {
+ method public static <Params, Progress, Result> android.os.AsyncTask<Params, Progress, Result> executeParallel(android.os.AsyncTask<Params, Progress, Result>, Params...);
+ }
+
+ public class BuildCompat {
+ method public static boolean isAtLeastN();
+ method public static boolean isAtLeastNMR1();
+ method public static boolean isAtLeastO();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public java.lang.Object getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(android.support.v4.os.CancellationSignal.OnCancelListener);
+ method public void throwIfCanceled();
+ }
+
+ public static abstract interface CancellationSignal.OnCancelListener {
+ method public abstract void onCancel();
+ }
+
+ public final class EnvironmentCompat {
+ method public static java.lang.String getStorageState(java.io.File);
+ field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(java.lang.String);
+ }
+
+ public final class ParcelableCompat {
+ method public static <T> android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+ }
+
+ public abstract interface ParcelableCompatCreatorCallbacks<T> {
+ method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+ method public abstract T[] newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginSection(java.lang.String);
+ method public static void endSection();
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package android.support.v4.print {
+
+ public final class PrintHelper {
+ ctor public PrintHelper(android.content.Context);
+ method public int getColorMode();
+ method public int getOrientation();
+ method public int getScaleMode();
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap);
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap, android.support.v4.print.PrintHelper.OnPrintFinishCallback);
+ method public void printBitmap(java.lang.String, android.net.Uri) throws java.io.FileNotFoundException;
+ method public void printBitmap(java.lang.String, android.net.Uri, android.support.v4.print.PrintHelper.OnPrintFinishCallback) throws java.io.FileNotFoundException;
+ method public void setColorMode(int);
+ method public void setOrientation(int);
+ method public void setScaleMode(int);
+ method public static boolean systemSupportsPrint();
+ field public static final int COLOR_MODE_COLOR = 2; // 0x2
+ field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+ field public static final int ORIENTATION_LANDSCAPE = 1; // 0x1
+ field public static final int ORIENTATION_PORTRAIT = 2; // 0x2
+ field public static final int SCALE_MODE_FILL = 2; // 0x2
+ field public static final int SCALE_MODE_FIT = 1; // 0x1
+ }
+
+ public static abstract interface PrintHelper.OnPrintFinishCallback {
+ method public abstract void onFinish();
+ }
+
+}
+
+package android.support.v4.provider {
+
+ public abstract class DocumentFile {
+ method public abstract boolean canRead();
+ method public abstract boolean canWrite();
+ method public abstract android.support.v4.provider.DocumentFile createDirectory(java.lang.String);
+ method public abstract android.support.v4.provider.DocumentFile createFile(java.lang.String, java.lang.String);
+ method public abstract boolean delete();
+ method public abstract boolean exists();
+ method public android.support.v4.provider.DocumentFile findFile(java.lang.String);
+ method public static android.support.v4.provider.DocumentFile fromFile(java.io.File);
+ method public static android.support.v4.provider.DocumentFile fromSingleUri(android.content.Context, android.net.Uri);
+ method public static android.support.v4.provider.DocumentFile fromTreeUri(android.content.Context, android.net.Uri);
+ method public abstract java.lang.String getName();
+ method public android.support.v4.provider.DocumentFile getParentFile();
+ method public abstract java.lang.String getType();
+ method public abstract android.net.Uri getUri();
+ method public abstract boolean isDirectory();
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
+ method public abstract boolean isFile();
+ method public abstract boolean isVirtual();
+ method public abstract long lastModified();
+ method public abstract long length();
+ method public abstract android.support.v4.provider.DocumentFile[] listFiles();
+ method public abstract boolean renameTo(java.lang.String);
+ }
+
+}
+
+package android.support.v4.text {
+
+ public final class BidiFormatter {
+ method public static android.support.v4.text.BidiFormatter getInstance();
+ method public static android.support.v4.text.BidiFormatter getInstance(boolean);
+ method public static android.support.v4.text.BidiFormatter getInstance(java.util.Locale);
+ method public boolean getStereoReset();
+ method public boolean isRtl(java.lang.String);
+ method public boolean isRtl(java.lang.CharSequence);
+ method public boolean isRtlContext();
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.String unicodeWrap(java.lang.String, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale);
+ method public android.support.v4.text.BidiFormatter build();
+ method public android.support.v4.text.BidiFormatter.Builder setTextDirectionHeuristic(android.support.v4.text.TextDirectionHeuristicCompat);
+ method public android.support.v4.text.BidiFormatter.Builder stereoReset(boolean);
+ }
+
+ public final class ICUCompat {
+ method public static java.lang.String maximizeAndGetScript(java.util.Locale);
+ }
+
+ public abstract interface TextDirectionHeuristicCompat {
+ method public abstract boolean isRtl(char[], int, int);
+ method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat ANYRTL_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LOCALE;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale);
+ method public static java.lang.String htmlEncode(java.lang.String);
+ field public static final java.util.Locale ROOT;
+ }
+
+}
+
+package android.support.v4.text.util {
+
+ public final class LinkifyCompat {
+ method public static final boolean addLinks(android.text.Spannable, int);
+ method public static final boolean addLinks(android.widget.TextView, int);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ }
+
+ public static abstract class LinkifyCompat.LinkifyMask implements java.lang.annotation.Annotation {
+ }
+
+}
+
+package android.support.v4.util {
+
+ public class ArrayMap<K, V> extends android.support.v4.util.SimpleArrayMap implements java.util.Map {
+ ctor public ArrayMap();
+ ctor public ArrayMap(int);
+ ctor public ArrayMap(android.support.v4.util.SimpleArrayMap);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public java.util.Set<K> keySet();
+ method public void putAll(java.util.Map<? extends K, ? extends V>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public java.util.Collection<V> values();
+ }
+
+ public final class ArraySet<E> implements java.util.Collection java.util.Set {
+ ctor public ArraySet();
+ ctor public ArraySet(int);
+ ctor public ArraySet(android.support.v4.util.ArraySet<E>);
+ method public boolean add(E);
+ method public void addAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean addAll(java.util.Collection<? extends E>);
+ method public void clear();
+ method public boolean contains(java.lang.Object);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public void ensureCapacity(int);
+ method public int indexOf(java.lang.Object);
+ method public boolean isEmpty();
+ method public java.util.Iterator<E> iterator();
+ method public boolean remove(java.lang.Object);
+ method public boolean removeAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public E removeAt(int);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public int size();
+ method public java.lang.Object[] toArray();
+ method public <T> T[] toArray(T[]);
+ method public E valueAt(int);
+ }
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream);
+ method public void finishWrite(java.io.FileOutputStream);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public final class CircularArray<E> {
+ ctor public CircularArray();
+ ctor public CircularArray(int);
+ method public void addFirst(E);
+ method public void addLast(E);
+ method public void clear();
+ method public E get(int);
+ method public E getFirst();
+ method public E getLast();
+ method public boolean isEmpty();
+ method public E popFirst();
+ method public E popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public final class CircularIntArray {
+ ctor public CircularIntArray();
+ ctor public CircularIntArray(int);
+ method public void addFirst(int);
+ method public void addLast(int);
+ method public void clear();
+ method public int get(int);
+ method public int getFirst();
+ method public int getLast();
+ method public boolean isEmpty();
+ method public int popFirst();
+ method public int popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public class LongSparseArray<E> {
+ ctor public LongSparseArray();
+ ctor public LongSparseArray(int);
+ method public void append(long, E);
+ method public void clear();
+ method public android.support.v4.util.LongSparseArray<E> clone();
+ method public void delete(long);
+ method public E get(long);
+ method public E get(long, E);
+ method public int indexOfKey(long);
+ method public int indexOfValue(E);
+ method public long keyAt(int);
+ method public void put(long, E);
+ method public void remove(long);
+ method public void removeAt(int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+ public class LruCache<K, V> {
+ ctor public LruCache(int);
+ method protected V create(K);
+ method public final synchronized int createCount();
+ method protected void entryRemoved(boolean, K, V, V);
+ method public final void evictAll();
+ method public final synchronized int evictionCount();
+ method public final V get(K);
+ method public final synchronized int hitCount();
+ method public final synchronized int maxSize();
+ method public final synchronized int missCount();
+ method public final V put(K, V);
+ method public final synchronized int putCount();
+ method public final V remove(K);
+ method public void resize(int);
+ method public final synchronized int size();
+ method protected int sizeOf(K, V);
+ method public final synchronized java.util.Map<K, V> snapshot();
+ method public final synchronized java.lang.String toString();
+ method public void trimToSize(int);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F, S);
+ method public static <A, B> android.support.v4.util.Pair<A, B> create(A, B);
+ field public final F first;
+ field public final S second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static abstract interface Pools.Pool<T> {
+ method public abstract T acquire();
+ method public abstract boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements android.support.v4.util.Pools.Pool {
+ ctor public Pools.SimplePool(int);
+ method public T acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends android.support.v4.util.Pools.SimplePool {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public class SimpleArrayMap<K, V> {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(int);
+ ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap);
+ method public void clear();
+ method public boolean containsKey(java.lang.Object);
+ method public boolean containsValue(java.lang.Object);
+ method public void ensureCapacity(int);
+ method public V get(java.lang.Object);
+ method public int indexOfKey(java.lang.Object);
+ method public boolean isEmpty();
+ method public K keyAt(int);
+ method public V put(K, V);
+ method public void putAll(android.support.v4.util.SimpleArrayMap<? extends K, ? extends V>);
+ method public V remove(java.lang.Object);
+ method public V removeAt(int);
+ method public V setValueAt(int, V);
+ method public int size();
+ method public V valueAt(int);
+ }
+
+ public class SparseArrayCompat<E> {
+ ctor public SparseArrayCompat();
+ ctor public SparseArrayCompat(int);
+ method public void append(int, E);
+ method public void clear();
+ method public android.support.v4.util.SparseArrayCompat<E> clone();
+ method public void delete(int);
+ method public E get(int);
+ method public E get(int, E);
+ method public int indexOfKey(int);
+ method public int indexOfValue(E);
+ method public int keyAt(int);
+ method public void put(int, E);
+ method public void remove(int);
+ method public void removeAt(int);
+ method public void removeAtRange(int, int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+}
+
+package android.support.v4.view {
+
+ public abstract class AbsSavedState implements android.os.Parcelable {
+ ctor protected AbsSavedState(android.os.Parcelable);
+ ctor protected AbsSavedState(android.os.Parcel);
+ ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader);
+ method public int describeContents();
+ method public final android.os.Parcelable getSuperState();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.AbsSavedState> CREATOR;
+ field public static final android.support.v4.view.AbsSavedState EMPTY_STATE;
+ }
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(android.support.v4.view.ActionProvider.VisibilityListener);
+ }
+
+ public static abstract interface ActionProvider.VisibilityListener {
+ method public abstract void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class AsyncLayoutInflater {
+ ctor public AsyncLayoutInflater(android.content.Context);
+ method public void inflate(int, android.view.ViewGroup, android.support.v4.view.AsyncLayoutInflater.OnInflateFinishedListener);
+ }
+
+ public static abstract interface AsyncLayoutInflater.OnInflateFinishedListener {
+ method public abstract void onInflateFinished(android.view.View, int, android.view.ViewGroup);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class KeyEventCompat {
+ method public static deprecated boolean dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object);
+ method public static deprecated java.lang.Object getKeyDispatcherState(android.view.View);
+ method public static boolean hasModifiers(android.view.KeyEvent, int);
+ method public static boolean hasNoModifiers(android.view.KeyEvent);
+ method public static boolean isCtrlPressed(android.view.KeyEvent);
+ method public static deprecated boolean isTracking(android.view.KeyEvent);
+ method public static boolean metaStateHasModifiers(int, int);
+ method public static boolean metaStateHasNoModifiers(int);
+ method public static int normalizeMetaState(int);
+ method public static deprecated void startTracking(android.view.KeyEvent);
+ }
+
+ public final class LayoutInflaterCompat {
+ method public static android.support.v4.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
+ method public static void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+ }
+
+ public abstract interface LayoutInflaterFactory {
+ method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ }
+
+ public final class MenuItemCompat {
+ method public static boolean collapseActionView(android.view.MenuItem);
+ method public static boolean expandActionView(android.view.MenuItem);
+ method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+ method public static android.view.View getActionView(android.view.MenuItem);
+ method public static boolean isActionViewExpanded(android.view.MenuItem);
+ method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+ method public static android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+ method public static android.view.MenuItem setActionView(android.view.MenuItem, int);
+ method public static android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+ method public static void setShowAsAction(android.view.MenuItem, int);
+ field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ public static abstract interface MenuItemCompat.OnActionExpandListener {
+ method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+ method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+ }
+
+ public final class MotionEventCompat {
+ method public static deprecated int findPointerIndex(android.view.MotionEvent, int);
+ method public static int getActionIndex(android.view.MotionEvent);
+ method public static int getActionMasked(android.view.MotionEvent);
+ method public static float getAxisValue(android.view.MotionEvent, int);
+ method public static float getAxisValue(android.view.MotionEvent, int, int);
+ method public static int getButtonState(android.view.MotionEvent);
+ method public static deprecated int getPointerCount(android.view.MotionEvent);
+ method public static deprecated int getPointerId(android.view.MotionEvent, int);
+ method public static deprecated int getSource(android.view.MotionEvent);
+ method public static deprecated float getX(android.view.MotionEvent, int);
+ method public static deprecated float getY(android.view.MotionEvent, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field public static final int ACTION_MASK = 255; // 0xff
+ field public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field public static final int ACTION_POINTER_UP = 6; // 0x6
+ field public static final int ACTION_SCROLL = 8; // 0x8
+ field public static final int AXIS_BRAKE = 23; // 0x17
+ field public static final int AXIS_DISTANCE = 24; // 0x18
+ field public static final int AXIS_GAS = 22; // 0x16
+ field public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field public static final int AXIS_HAT_X = 15; // 0xf
+ field public static final int AXIS_HAT_Y = 16; // 0x10
+ field public static final int AXIS_HSCROLL = 10; // 0xa
+ field public static final int AXIS_LTRIGGER = 17; // 0x11
+ field public static final int AXIS_ORIENTATION = 8; // 0x8
+ field public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field public static final int AXIS_RTRIGGER = 18; // 0x12
+ field public static final int AXIS_RUDDER = 20; // 0x14
+ field public static final int AXIS_RX = 12; // 0xc
+ field public static final int AXIS_RY = 13; // 0xd
+ field public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SIZE = 3; // 0x3
+ field public static final int AXIS_THROTTLE = 19; // 0x13
+ field public static final int AXIS_TILT = 25; // 0x19
+ field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field public static final int AXIS_VSCROLL = 9; // 0x9
+ field public static final int AXIS_WHEEL = 21; // 0x15
+ field public static final int AXIS_X = 0; // 0x0
+ field public static final int AXIS_Y = 1; // 0x1
+ field public static final int AXIS_Z = 11; // 0xb
+ field public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public abstract interface NestedScrollingChild {
+ method public abstract boolean dispatchNestedFling(float, float, boolean);
+ method public abstract boolean dispatchNestedPreFling(float, float);
+ method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public abstract boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public abstract boolean hasNestedScrollingParent();
+ method public abstract boolean isNestedScrollingEnabled();
+ method public abstract void setNestedScrollingEnabled(boolean);
+ method public abstract boolean startNestedScroll(int);
+ method public abstract void stopNestedScroll();
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public void stopNestedScroll();
+ }
+
+ public abstract interface NestedScrollingParent {
+ method public abstract int getNestedScrollAxes();
+ method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
+ method public abstract boolean onNestedPreFling(android.view.View, float, float);
+ method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public abstract void onNestedScroll(android.view.View, int, int, int, int);
+ method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public abstract void onStopNestedScroll(android.view.View);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public abstract interface OnApplyWindowInsetsListener {
+ method public abstract android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ }
+
+ public abstract class PagerAdapter {
+ ctor public PagerAdapter();
+ method public void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void destroyItem(android.view.View, int, java.lang.Object);
+ method public void finishUpdate(android.view.ViewGroup);
+ method public deprecated void finishUpdate(android.view.View);
+ method public abstract int getCount();
+ method public int getItemPosition(java.lang.Object);
+ method public java.lang.CharSequence getPageTitle(int);
+ method public float getPageWidth(int);
+ method public java.lang.Object instantiateItem(android.view.ViewGroup, int);
+ method public deprecated java.lang.Object instantiateItem(android.view.View, int);
+ method public abstract boolean isViewFromObject(android.view.View, java.lang.Object);
+ method public void notifyDataSetChanged();
+ method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+ method public android.os.Parcelable saveState();
+ method public void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void setPrimaryItem(android.view.View, int, java.lang.Object);
+ method public void startUpdate(android.view.ViewGroup);
+ method public deprecated void startUpdate(android.view.View);
+ method public void unregisterDataSetObserver(android.database.DataSetObserver);
+ field public static final int POSITION_NONE = -2; // 0xfffffffe
+ field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
+ }
+
+ public class PagerTabStrip extends android.support.v4.view.PagerTitleStrip {
+ ctor public PagerTabStrip(android.content.Context);
+ ctor public PagerTabStrip(android.content.Context, android.util.AttributeSet);
+ method public boolean getDrawFullUnderline();
+ method public int getTabIndicatorColor();
+ method public void setDrawFullUnderline(boolean);
+ method public void setTabIndicatorColor(int);
+ method public void setTabIndicatorColorResource(int);
+ }
+
+ public class PagerTitleStrip extends android.view.ViewGroup {
+ ctor public PagerTitleStrip(android.content.Context);
+ ctor public PagerTitleStrip(android.content.Context, android.util.AttributeSet);
+ method public int getTextSpacing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setGravity(int);
+ method public void setNonPrimaryAlpha(float);
+ method public void setTextColor(int);
+ method public void setTextSize(int, float);
+ method public void setTextSpacing(int);
+ }
+
+ public final class PointerIconCompat {
+ method public static android.support.v4.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method public static android.support.v4.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static android.support.v4.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method public static boolean isQuickScaleEnabled(java.lang.Object);
+ method public static void setQuickScaleEnabled(java.lang.Object, boolean);
+ }
+
+ public abstract interface ScrollingView {
+ method public abstract int computeHorizontalScrollExtent();
+ method public abstract int computeHorizontalScrollOffset();
+ method public abstract int computeHorizontalScrollRange();
+ method public abstract int computeVerticalScrollExtent();
+ method public abstract int computeVerticalScrollOffset();
+ method public abstract int computeVerticalScrollRange();
+ }
+
+ public abstract interface TintableBackgroundView {
+ method public abstract android.content.res.ColorStateList getSupportBackgroundTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+ method public abstract void setSupportBackgroundTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class VelocityTrackerCompat {
+ method public static float getXVelocity(android.view.VelocityTracker, int);
+ method public static float getYVelocity(android.view.VelocityTracker, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method public static boolean canScrollHorizontally(android.view.View, int);
+ method public static boolean canScrollVertically(android.view.View, int);
+ method public static int combineMeasuredStates(int, int);
+ method public static android.support.v4.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public static float getAlpha(android.view.View);
+ method public static android.content.res.ColorStateList getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect getClipBounds(android.view.View);
+ method public static android.view.Display getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method public static int getLayerType(android.view.View);
+ method public static int getLayoutDirection(android.view.View);
+ method public static android.graphics.Matrix getMatrix(android.view.View);
+ method public static int getMeasuredHeightAndState(android.view.View);
+ method public static int getMeasuredState(android.view.View);
+ method public static int getMeasuredWidthAndState(android.view.View);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static deprecated int getOverScrollMode(android.view.View);
+ method public static int getPaddingEnd(android.view.View);
+ method public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent getParentForAccessibility(android.view.View);
+ method public static float getPivotX(android.view.View);
+ method public static float getPivotY(android.view.View);
+ method public static float getRotation(android.view.View);
+ method public static float getRotationX(android.view.View);
+ method public static float getRotationY(android.view.View);
+ method public static float getScaleX(android.view.View);
+ method public static float getScaleY(android.view.View);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.lang.String getTransitionName(android.view.View);
+ method public static float getTranslationX(android.view.View);
+ method public static float getTranslationY(android.view.View);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method public static float getX(android.view.View);
+ method public static float getY(android.view.View);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method public static deprecated boolean isOpaque(android.view.View);
+ method public static boolean isPaddingRelative(android.view.View);
+ method public static void jumpDrawablesToCurrentState(android.view.View);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public static void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, java.lang.Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, java.lang.Runnable, long);
+ method public static void requestApplyInsets(android.view.View);
+ method public static int resolveSizeAndState(int, int, int);
+ method public static void setAccessibilityDelegate(android.view.View, android.support.v4.view.AccessibilityDelegateCompat);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method public static void setActivated(android.view.View, boolean);
+ method public static void setAlpha(android.view.View, float);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode);
+ method public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect);
+ method public static void setElevation(android.view.View, float);
+ method public static void setFitsSystemWindows(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setLabelFor(android.view.View, int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+ method public static void setLayerType(android.view.View, int, android.graphics.Paint);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+ method public static deprecated void setOverScrollMode(android.view.View, int);
+ method public static void setPaddingRelative(android.view.View, int, int, int, int);
+ method public static void setPivotX(android.view.View, float);
+ method public static void setPivotY(android.view.View, float);
+ method public static void setPointerIcon(android.view.View, android.support.v4.view.PointerIconCompat);
+ method public static void setRotation(android.view.View, float);
+ method public static void setRotationX(android.view.View, float);
+ method public static void setRotationY(android.view.View, float);
+ method public static void setSaveFromParentEnabled(android.view.View, boolean);
+ method public static void setScaleX(android.view.View, float);
+ method public static void setScaleY(android.view.View, float);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method public static void setTransitionName(android.view.View, java.lang.String);
+ method public static void setTranslationX(android.view.View, float);
+ method public static void setTranslationY(android.view.View, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static void setX(android.view.View, float);
+ method public static void setY(android.view.View, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static void stopNestedScroll(android.view.View);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field public static final deprecated int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field public static final deprecated int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field public static final deprecated int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+ method public static boolean hasPermanentMenuKey(android.view.ViewConfiguration);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method public static void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public class ViewPager extends android.view.ViewGroup {
+ ctor public ViewPager(android.content.Context);
+ ctor public ViewPager(android.content.Context, android.util.AttributeSet);
+ method public void addOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public boolean arrowScroll(int);
+ method public boolean beginFakeDrag();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public void clearOnPageChangeListeners();
+ method public void endFakeDrag();
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fakeDragBy(float);
+ method public android.support.v4.view.PagerAdapter getAdapter();
+ method public int getCurrentItem();
+ method public int getOffscreenPageLimit();
+ method public int getPageMargin();
+ method public boolean isFakeDragging();
+ method protected void onLayout(boolean, int, int, int, int);
+ method protected void onPageScrolled(int, float, int);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void removeOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void removeOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setAdapter(android.support.v4.view.PagerAdapter);
+ method public void setCurrentItem(int);
+ method public void setCurrentItem(int, boolean);
+ method public void setOffscreenPageLimit(int);
+ method public deprecated void setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setPageMargin(int);
+ method public void setPageMarginDrawable(android.graphics.drawable.Drawable);
+ method public void setPageMarginDrawable(int);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer, int);
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewPager.DecorView implements java.lang.annotation.Annotation {
+ }
+
+ public static class ViewPager.LayoutParams extends android.view.ViewGroup.LayoutParams {
+ ctor public ViewPager.LayoutParams();
+ ctor public ViewPager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public int gravity;
+ field public boolean isDecor;
+ }
+
+ public static abstract interface ViewPager.OnAdapterChangeListener {
+ method public abstract void onAdapterChanged(android.support.v4.view.ViewPager, android.support.v4.view.PagerAdapter, android.support.v4.view.PagerAdapter);
+ }
+
+ public static abstract interface ViewPager.OnPageChangeListener {
+ method public abstract void onPageScrollStateChanged(int);
+ method public abstract void onPageScrolled(int, float, int);
+ method public abstract void onPageSelected(int);
+ }
+
+ public static abstract interface ViewPager.PageTransformer {
+ method public abstract void transformPage(android.view.View, float);
+ }
+
+ public static class ViewPager.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public ViewPager.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.ViewPager.SavedState> CREATOR;
+ }
+
+ public static class ViewPager.SimpleOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public ViewPager.SimpleOnPageChangeListener();
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alpha(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public long getStartDelay();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotation(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setListener(android.support.v4.view.ViewPropertyAnimatorListener);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setUpdateListener(android.support.v4.view.ViewPropertyAnimatorUpdateListener);
+ method public void start();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withEndAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withLayer();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withStartAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat x(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat xBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat y(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat yBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat z(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public abstract interface ViewPropertyAnimatorListener {
+ method public abstract void onAnimationCancel(android.view.View);
+ method public abstract void onAnimationEnd(android.view.View);
+ method public abstract void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements android.support.v4.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public abstract interface ViewPropertyAnimatorUpdateListener {
+ method public abstract void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(android.support.v4.view.WindowInsetsCompat);
+ method public android.support.v4.view.WindowInsetsCompat consumeStableInsets();
+ method public android.support.v4.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ }
+
+}
+
+package android.support.v4.view.accessibility {
+
+ public final class AccessibilityEventCompat {
+ method public static void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+ method public int getAction(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+ method public static int getRecordCount(android.view.accessibility.AccessibilityEvent);
+ method public void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+ method public void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+ method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+ method public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+ method public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ public static abstract interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method public abstract void onAccessibilityStateChanged(boolean);
+ }
+
+ public static abstract deprecated class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static abstract interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public abstract void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor public AccessibilityNodeInfoCompat(java.lang.Object);
+ method public void addAction(int);
+ method public void addAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public void addChild(android.view.View);
+ method public void addChild(android.view.View, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(java.lang.String);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat focusSearch(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList();
+ method public int getActions();
+ method public void getBoundsInParent(android.graphics.Rect);
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getChild(int);
+ method public int getChildCount();
+ method public java.lang.CharSequence getClassName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
+ method public java.lang.CharSequence getContentDescription();
+ method public int getDrawingOrder();
+ method public java.lang.CharSequence getError();
+ method public android.os.Bundle getExtras();
+ method public java.lang.Object getInfo();
+ method public int getInputType();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabelFor();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public java.lang.CharSequence getPackageName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat getRangeInfo();
+ method public java.lang.CharSequence getRoleDescription();
+ method public java.lang.CharSequence getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalAfter();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalBefore();
+ method public java.lang.String getViewIdResourceName();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isVisibleToUser();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public boolean removeChild(android.view.View);
+ method public boolean removeChild(android.view.View, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setBoundsInParent(android.graphics.Rect);
+ method public void setBoundsInScreen(android.graphics.Rect);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(java.lang.Object);
+ method public void setCollectionItemInfo(java.lang.Object);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(java.lang.CharSequence);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View);
+ method public void setLabelFor(android.view.View, int);
+ method public void setLabeledBy(android.view.View);
+ method public void setLabeledBy(android.view.View, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(java.lang.CharSequence);
+ method public void setParent(android.view.View);
+ method public void setParent(android.view.View, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat);
+ method public void setRoleDescription(java.lang.CharSequence);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setSource(android.view.View);
+ method public void setSource(android.view.View, int);
+ method public void setText(java.lang.CharSequence);
+ method public void setTextSelection(int, int);
+ method public void setTraversalAfter(android.view.View);
+ method public void setTraversalAfter(android.view.View, int);
+ method public void setTraversalBefore(android.view.View);
+ method public void setTraversalBefore(android.view.View, int);
+ method public void setViewIdResourceName(java.lang.String);
+ method public void setVisibleToUser(boolean);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final java.lang.String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, java.lang.CharSequence);
+ method public int getId();
+ method public java.lang.CharSequence getLabel();
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COLLAPSE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CONTEXT_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COPY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CUT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DISMISS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_EXPAND;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_LONG_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PASTE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_BACKWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_DOWN;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_FORWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_LEFT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_RIGHT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_TO_POSITION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_UP;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SELECT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_PROGRESS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_TEXT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_ON_SCREEN;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method public boolean isHeading();
+ method public boolean isSelected();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean, boolean);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(java.lang.Object);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String, int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public java.lang.Object getProvider();
+ method public boolean performAction(int, int, android.os.Bundle);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+ method public int getAddedCount();
+ method public java.lang.CharSequence getBeforeText();
+ method public java.lang.CharSequence getClassName();
+ method public java.lang.CharSequence getContentDescription();
+ method public int getCurrentItemIndex();
+ method public int getFromIndex();
+ method public deprecated java.lang.Object getImpl();
+ method public int getItemCount();
+ method public int getMaxScrollX();
+ method public int getMaxScrollY();
+ method public android.os.Parcelable getParcelableData();
+ method public int getRemovedCount();
+ method public int getScrollX();
+ method public int getScrollY();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+ method public java.util.List<java.lang.CharSequence> getText();
+ method public int getToIndex();
+ method public int getWindowId();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public boolean isFullScreen();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+ method public void recycle();
+ method public void setAddedCount(int);
+ method public void setBeforeText(java.lang.CharSequence);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setCurrentItemIndex(int);
+ method public void setEnabled(boolean);
+ method public void setFromIndex(int);
+ method public void setFullScreen(boolean);
+ method public void setItemCount(int);
+ method public void setMaxScrollX(int);
+ method public void setMaxScrollY(int);
+ method public void setParcelableData(android.os.Parcelable);
+ method public void setPassword(boolean);
+ method public void setRemovedCount(int);
+ method public void setScrollX(int);
+ method public void setScrollY(int);
+ method public void setScrollable(boolean);
+ method public void setSource(android.view.View);
+ method public void setSource(android.view.View, int);
+ method public void setToIndex(int);
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getRoot();
+ method public java.lang.CharSequence getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityWindowInfoCompat);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package android.support.v4.view.animation {
+
+ public class FastOutLinearInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutLinearInInterpolator();
+ }
+
+ public class FastOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutSlowInInterpolator();
+ }
+
+ public class LinearOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public LinearOutSlowInInterpolator();
+ }
+
+ abstract class LookupTableInterpolator implements android.view.animation.Interpolator {
+ ctor public LookupTableInterpolator(float[]);
+ method public float getInterpolation(float);
+ }
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package android.support.v4.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ method public abstract void scrollTargetBy(int, int);
+ method public android.support.v4.widget.AutoScrollHelper setActivationDelay(int);
+ method public android.support.v4.widget.AutoScrollHelper setEdgeType(int);
+ method public android.support.v4.widget.AutoScrollHelper setEnabled(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setExclusive(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRampDownDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRampUpDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public abstract class CursorAdapter extends android.widget.BaseAdapter {
+ ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+ method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursor(android.database.Cursor);
+ method public java.lang.CharSequence convertToString(android.database.Cursor);
+ method public int getCount();
+ method public android.database.Cursor getCursor();
+ method public android.widget.Filter getFilter();
+ method public android.widget.FilterQueryProvider getFilterQueryProvider();
+ method public java.lang.Object getItem(int);
+ method public long getItemId(int);
+ method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+ method protected deprecated void init(android.content.Context, android.database.Cursor, boolean);
+ method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method protected void onContentChanged();
+ method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence);
+ method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1
+ field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+ }
+
+ public class DrawerLayout extends android.view.ViewGroup {
+ ctor public DrawerLayout(android.content.Context);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void closeDrawer(android.view.View);
+ method public void closeDrawer(android.view.View, boolean);
+ method public void closeDrawer(int);
+ method public void closeDrawer(int, boolean);
+ method public void closeDrawers();
+ method public float getDrawerElevation();
+ method public int getDrawerLockMode(int);
+ method public int getDrawerLockMode(android.view.View);
+ method public java.lang.CharSequence getDrawerTitle(int);
+ method public android.graphics.drawable.Drawable getStatusBarBackgroundDrawable();
+ method public boolean isDrawerOpen(android.view.View);
+ method public boolean isDrawerOpen(int);
+ method public boolean isDrawerVisible(android.view.View);
+ method public boolean isDrawerVisible(int);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void openDrawer(android.view.View);
+ method public void openDrawer(android.view.View, boolean);
+ method public void openDrawer(int);
+ method public void openDrawer(int, boolean);
+ method public void removeDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerElevation(float);
+ method public deprecated void setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerLockMode(int);
+ method public void setDrawerLockMode(int, int);
+ method public void setDrawerLockMode(int, android.view.View);
+ method public void setDrawerShadow(android.graphics.drawable.Drawable, int);
+ method public void setDrawerShadow(int, int);
+ method public void setDrawerTitle(int, java.lang.CharSequence);
+ method public void setScrimColor(int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackground(int);
+ method public void setStatusBarBackgroundColor(int);
+ field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
+ field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
+ field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
+ field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract interface DrawerLayout.DrawerListener {
+ method public abstract void onDrawerClosed(android.view.View);
+ method public abstract void onDrawerOpened(android.view.View);
+ method public abstract void onDrawerSlide(android.view.View, float);
+ method public abstract void onDrawerStateChanged(int);
+ }
+
+ public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout.LayoutParams(int, int);
+ ctor public DrawerLayout.LayoutParams(int, int, int);
+ ctor public DrawerLayout.LayoutParams(android.support.v4.widget.DrawerLayout.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public int gravity;
+ }
+
+ protected static class DrawerLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public DrawerLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public DrawerLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.widget.DrawerLayout.SavedState> CREATOR;
+ }
+
+ public static abstract class DrawerLayout.SimpleDrawerListener implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public DrawerLayout.SimpleDrawerListener();
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ }
+
+ public final class EdgeEffectCompat {
+ ctor public EdgeEffectCompat(android.content.Context);
+ method public boolean draw(android.graphics.Canvas);
+ method public void finish();
+ method public boolean isFinished();
+ method public boolean onAbsorb(int);
+ method public deprecated boolean onPull(float);
+ method public boolean onPull(float, float);
+ method public boolean onRelease();
+ method public void setSize(int, int);
+ }
+
+ public abstract class ExploreByTouchHelper extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public ExploreByTouchHelper(android.view.View);
+ method public final boolean clearKeyboardFocusForVirtualView(int);
+ method public final boolean dispatchHoverEvent(android.view.MotionEvent);
+ method public final boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public final int getAccessibilityFocusedVirtualViewId();
+ method public deprecated int getFocusedVirtualView();
+ method public final int getKeyboardFocusedVirtualViewId();
+ method protected abstract int getVirtualViewAt(float, float);
+ method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer>);
+ method public final void invalidateRoot();
+ method public final void invalidateVirtualView(int);
+ method public final void invalidateVirtualView(int, int);
+ method public final void onFocusChanged(boolean, int, android.graphics.Rect);
+ method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle);
+ method protected void onPopulateEventForHost(android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateNodeForHost(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected abstract void onPopulateNodeForVirtualView(int, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected void onVirtualViewKeyboardFocusChanged(int, boolean);
+ method public final boolean requestKeyboardFocusForVirtualView(int);
+ method public final boolean sendEventForVirtualView(int, int);
+ field public static final int HOST_ID = -1; // 0xffffffff
+ field public static final int INVALID_ID = -2147483648; // 0x80000000
+ }
+
+ public final class ListPopupWindowCompat {
+ method public static android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends android.support.v4.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements android.support.v4.view.NestedScrollingChild android.support.v4.view.NestedScrollingParent android.support.v4.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet, int);
+ method public boolean arrowScroll(int);
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(android.support.v4.widget.NestedScrollView.OnScrollChangeListener);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ }
+
+ public static abstract interface NestedScrollView.OnScrollChangeListener {
+ method public abstract void onScrollChange(android.support.v4.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ public abstract class ResourceCursorAdapter extends android.support.v4.widget.CursorAdapter {
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+ ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+ method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public void setDropDownViewResource(int);
+ method public void setViewResource(int);
+ }
+
+ public final class ScrollerCompat {
+ method public void abortAnimation();
+ method public boolean computeScrollOffset();
+ method public static android.support.v4.widget.ScrollerCompat create(android.content.Context);
+ method public static android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+ method public void fling(int, int, int, int, int, int, int, int);
+ method public void fling(int, int, int, int, int, int, int, int, int, int);
+ method public float getCurrVelocity();
+ method public int getCurrX();
+ method public int getCurrY();
+ method public int getFinalX();
+ method public int getFinalY();
+ method public boolean isFinished();
+ method public boolean isOverScrolled();
+ method public void notifyHorizontalEdgeReached(int, int, int);
+ method public void notifyVerticalEdgeReached(int, int, int);
+ method public boolean springBack(int, int, int, int, int, int);
+ method public void startScroll(int, int, int, int);
+ method public void startScroll(int, int, int, int, int);
+ }
+
+ public final class SearchViewCompat {
+ method public static java.lang.CharSequence getQuery(android.view.View);
+ method public static boolean isIconified(android.view.View);
+ method public static boolean isQueryRefinementEnabled(android.view.View);
+ method public static boolean isSubmitButtonEnabled(android.view.View);
+ method public static android.view.View newSearchView(android.content.Context);
+ method public static void setIconified(android.view.View, boolean);
+ method public static void setImeOptions(android.view.View, int);
+ method public static void setInputType(android.view.View, int);
+ method public static void setMaxWidth(android.view.View, int);
+ method public static void setOnCloseListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener);
+ method public static void setOnQueryTextListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener);
+ method public static void setQuery(android.view.View, java.lang.CharSequence, boolean);
+ method public static void setQueryHint(android.view.View, java.lang.CharSequence);
+ method public static void setQueryRefinementEnabled(android.view.View, boolean);
+ method public static void setSearchableInfo(android.view.View, android.content.ComponentName);
+ method public static void setSubmitButtonEnabled(android.view.View, boolean);
+ }
+
+ public static abstract interface SearchViewCompat.OnCloseListener {
+ method public abstract boolean onClose();
+ }
+
+ public static abstract deprecated class SearchViewCompat.OnCloseListenerCompat implements android.support.v4.widget.SearchViewCompat.OnCloseListener {
+ ctor public SearchViewCompat.OnCloseListenerCompat();
+ method public boolean onClose();
+ }
+
+ public static abstract interface SearchViewCompat.OnQueryTextListener {
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public static abstract deprecated class SearchViewCompat.OnQueryTextListenerCompat implements android.support.v4.widget.SearchViewCompat.OnQueryTextListener {
+ ctor public SearchViewCompat.OnQueryTextListenerCompat();
+ method public boolean onQueryTextChange(java.lang.String);
+ method public boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class SimpleCursorAdapter extends android.support.v4.widget.ResourceCursorAdapter {
+ ctor public deprecated SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[]);
+ ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[], int);
+ method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursorAndColumns(android.database.Cursor, java.lang.String[], int[]);
+ method public android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+ method public int getStringConversionColumn();
+ method public android.support.v4.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+ method public void setCursorToStringConverter(android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter);
+ method public void setStringConversionColumn(int);
+ method public void setViewBinder(android.support.v4.widget.SimpleCursorAdapter.ViewBinder);
+ method public void setViewImage(android.widget.ImageView, java.lang.String);
+ method public void setViewText(android.widget.TextView, java.lang.String);
+ }
+
+ public static abstract interface SimpleCursorAdapter.CursorToStringConverter {
+ method public abstract java.lang.CharSequence convertToString(android.database.Cursor);
+ }
+
+ public static abstract interface SimpleCursorAdapter.ViewBinder {
+ method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int);
+ }
+
+ public class SlidingPaneLayout extends android.view.ViewGroup {
+ ctor public SlidingPaneLayout(android.content.Context);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public deprecated boolean canSlide();
+ method public boolean closePane();
+ method public int getCoveredFadeColor();
+ method public int getParallaxDistance();
+ method public int getSliderFadeColor();
+ method public boolean isOpen();
+ method public boolean isSlideable();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public boolean openPane();
+ method public void setCoveredFadeColor(int);
+ method public void setPanelSlideListener(android.support.v4.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void setParallaxDistance(int);
+ method public deprecated void setShadowDrawable(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableLeft(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableRight(android.graphics.drawable.Drawable);
+ method public deprecated void setShadowResource(int);
+ method public void setShadowResourceLeft(int);
+ method public void setShadowResourceRight(int);
+ method public void setSliderFadeColor(int);
+ method public deprecated void smoothSlideClosed();
+ method public deprecated void smoothSlideOpen();
+ }
+
+ public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public SlidingPaneLayout.LayoutParams();
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.support.v4.widget.SlidingPaneLayout.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public float weight;
+ }
+
+ public static abstract interface SlidingPaneLayout.PanelSlideListener {
+ method public abstract void onPanelClosed(android.view.View);
+ method public abstract void onPanelOpened(android.view.View);
+ method public abstract void onPanelSlide(android.view.View, float);
+ }
+
+ public static class SlidingPaneLayout.SimplePanelSlideListener implements android.support.v4.widget.SlidingPaneLayout.PanelSlideListener {
+ ctor public SlidingPaneLayout.SimplePanelSlideListener();
+ method public void onPanelClosed(android.view.View);
+ method public void onPanelOpened(android.view.View);
+ method public void onPanelSlide(android.view.View, float);
+ }
+
+ public class Space extends android.view.View {
+ ctor public Space(android.content.Context, android.util.AttributeSet, int);
+ ctor public Space(android.content.Context, android.util.AttributeSet);
+ ctor public Space(android.content.Context);
+ }
+
+ public class SwipeRefreshLayout extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingChild android.support.v4.view.NestedScrollingParent {
+ ctor public SwipeRefreshLayout(android.content.Context);
+ ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet);
+ method public boolean canChildScrollUp();
+ method public int getProgressCircleDiameter();
+ method public int getProgressViewEndOffset();
+ method public int getProgressViewStartOffset();
+ method public boolean isRefreshing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onMeasure(int, int);
+ method public deprecated void setColorScheme(int...);
+ method public void setColorSchemeColors(int...);
+ method public void setColorSchemeResources(int...);
+ method public void setDistanceToTriggerSync(int);
+ method public void setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback);
+ method public void setOnRefreshListener(android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener);
+ method public deprecated void setProgressBackgroundColor(int);
+ method public void setProgressBackgroundColorSchemeColor(int);
+ method public void setProgressBackgroundColorSchemeResource(int);
+ method public void setProgressViewEndTarget(boolean, int);
+ method public void setProgressViewOffset(boolean, int, int);
+ method public void setRefreshing(boolean);
+ method public void setSize(int);
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int LARGE = 0; // 0x0
+ field protected int mFrom;
+ field protected int mOriginalOffsetTop;
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnChildScrollUpCallback {
+ method public abstract boolean canChildScrollUp(android.support.v4.widget.SwipeRefreshLayout, android.view.View);
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnRefreshListener {
+ method public abstract void onRefresh();
+ }
+
+ public final class TextViewCompat {
+ method public static android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, int, int, int, int);
+ method public static void setTextAppearance(android.widget.TextView, int);
+ }
+
+ public abstract interface TintableCompoundButton {
+ method public abstract android.content.res.ColorStateList getSupportButtonTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+ method public abstract void setSupportButtonTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public class ViewDragHelper {
+ method public void abort();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int, int);
+ method public void cancel();
+ method public void captureChildView(android.view.View, int);
+ method public boolean checkTouchSlop(int);
+ method public boolean checkTouchSlop(int, int);
+ method public boolean continueSettling(boolean);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, android.support.v4.widget.ViewDragHelper.Callback);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, float, android.support.v4.widget.ViewDragHelper.Callback);
+ method public android.view.View findTopChildUnder(int, int);
+ method public void flingCapturedView(int, int, int, int);
+ method public int getActivePointerId();
+ method public android.view.View getCapturedView();
+ method public int getEdgeSize();
+ method public float getMinVelocity();
+ method public int getTouchSlop();
+ method public int getViewDragState();
+ method public boolean isCapturedViewUnder(int, int);
+ method public boolean isEdgeTouched(int);
+ method public boolean isEdgeTouched(int, int);
+ method public boolean isPointerDown(int);
+ method public boolean isViewUnder(android.view.View, int, int);
+ method public void processTouchEvent(android.view.MotionEvent);
+ method public void setEdgeTrackingEnabled(int);
+ method public void setMinVelocity(float);
+ method public boolean settleCapturedViewAt(int, int);
+ method public boolean shouldInterceptTouchEvent(android.view.MotionEvent);
+ method public boolean smoothSlideViewTo(android.view.View, int, int);
+ field public static final int DIRECTION_ALL = 3; // 0x3
+ field public static final int DIRECTION_HORIZONTAL = 1; // 0x1
+ field public static final int DIRECTION_VERTICAL = 2; // 0x2
+ field public static final int EDGE_ALL = 15; // 0xf
+ field public static final int EDGE_BOTTOM = 8; // 0x8
+ field public static final int EDGE_LEFT = 1; // 0x1
+ field public static final int EDGE_RIGHT = 2; // 0x2
+ field public static final int EDGE_TOP = 4; // 0x4
+ field public static final int INVALID_POINTER = -1; // 0xffffffff
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewDragHelper.Callback {
+ ctor public ViewDragHelper.Callback();
+ method public int clampViewPositionHorizontal(android.view.View, int, int);
+ method public int clampViewPositionVertical(android.view.View, int, int);
+ method public int getOrderedChildIndex(int);
+ method public int getViewHorizontalDragRange(android.view.View);
+ method public int getViewVerticalDragRange(android.view.View);
+ method public void onEdgeDragStarted(int, int);
+ method public boolean onEdgeLock(int);
+ method public void onEdgeTouched(int, int);
+ method public void onViewCaptured(android.view.View, int);
+ method public void onViewDragStateChanged(int);
+ method public void onViewPositionChanged(android.view.View, int, int, int, int);
+ method public void onViewReleased(android.view.View, float, float);
+ method public abstract boolean tryCaptureView(android.view.View, int);
+ }
+
+}
+
+package android.support.v7.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, boolean);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int, boolean);
+ method public abstract android.view.View getCustomView();
+ method public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method public abstract deprecated int getNavigationItemCount();
+ method public abstract deprecated int getNavigationMode();
+ method public abstract deprecated int getSelectedNavigationIndex();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getSelectedTab();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getTabAt(int);
+ method public abstract deprecated int getTabCount();
+ method public android.content.Context getThemedContext();
+ method public abstract java.lang.CharSequence getTitle();
+ method public abstract void hide();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab newTab();
+ method public abstract deprecated void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void removeTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void removeTabAt(int);
+ method public abstract deprecated void selectTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setCustomView(android.view.View, android.support.v7.app.ActionBar.LayoutParams);
+ method public abstract void setCustomView(int);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(int);
+ method public abstract void setDisplayOptions(int, int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(java.lang.CharSequence);
+ method public void setHomeActionContentDescription(int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.support.v7.app.ActionBar.OnNavigationListener);
+ method public abstract void setLogo(int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setNavigationMode(int);
+ method public abstract deprecated void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public abstract void show();
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ field public int gravity;
+ }
+
+ public static abstract interface ActionBar.OnMenuVisibilityListener {
+ method public abstract void onMenuVisibilityChanged(boolean);
+ }
+
+ public static abstract deprecated interface ActionBar.OnNavigationListener {
+ method public abstract boolean onNavigationItemSelected(int, long);
+ }
+
+ public static abstract deprecated class ActionBar.Tab {
+ ctor public ActionBar.Tab();
+ method public abstract java.lang.CharSequence getContentDescription();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.graphics.drawable.Drawable getIcon();
+ method public abstract int getPosition();
+ method public abstract java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getText();
+ method public abstract void select();
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(android.view.View);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setTabListener(android.support.v7.app.ActionBar.TabListener);
+ method public abstract android.support.v7.app.ActionBar.Tab setTag(java.lang.Object);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static abstract deprecated interface ActionBar.TabListener {
+ method public abstract void onTabReselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabSelected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabUnselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ }
+
+ public deprecated class ActionBarActivity extends android.support.v7.app.AppCompatActivity {
+ ctor public ActionBarActivity();
+ }
+
+ public class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, android.support.v7.widget.Toolbar, int, int);
+ method public android.support.v7.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener);
+ method public void syncState();
+ }
+
+ public static abstract interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.content.Context getActionBarThemedContext();
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract boolean isNavigationVisible();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends android.support.v7.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.widget.Button getButton(int);
+ method public android.widget.ListView getListView();
+ method public void setButton(int, java.lang.CharSequence, android.os.Message);
+ method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public void setCustomTitle(android.view.View);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIconAttribute(int);
+ method public void setMessage(java.lang.CharSequence);
+ method public void setView(android.view.View);
+ method public void setView(android.view.View, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, int);
+ method public android.support.v7.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public android.support.v7.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setCancelable(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String);
+ method public android.support.v7.app.AlertDialog.Builder setCustomTitle(android.view.View);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(int);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+ method public android.support.v7.app.AlertDialog.Builder setIconAttribute(int);
+ method public deprecated android.support.v7.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(int);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(int);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setView(int);
+ method public android.support.v7.app.AlertDialog.Builder setView(android.view.View);
+ method public android.support.v7.app.AlertDialog show();
+ }
+
+ public class AppCompatActivity extends android.support.v4.app.FragmentActivity implements android.support.v7.app.ActionBarDrawerToggle.DelegateProvider android.support.v7.app.AppCompatCallback android.support.v4.app.TaskStackBuilder.SupportParentable {
+ ctor public AppCompatActivity();
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public android.content.Intent getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method public void onPrepareSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public deprecated void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public deprecated void setSupportProgress(int);
+ method public deprecated void setSupportProgressBarIndeterminate(boolean);
+ method public deprecated void setSupportProgressBarIndeterminateVisibility(boolean);
+ method public deprecated void setSupportProgressBarVisibility(boolean);
+ method public android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public abstract interface AppCompatCallback {
+ method public abstract void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public abstract void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public abstract android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public abstract boolean applyDayNight();
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Activity, android.support.v7.app.AppCompatCallback);
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Dialog, android.support.v7.app.AppCompatCallback);
+ method public abstract android.view.View createView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public abstract android.view.View findViewById(int);
+ method public static int getDefaultNightMode();
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract android.support.v7.app.ActionBar getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration);
+ method public abstract void onCreate(android.os.Bundle);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View);
+ method public abstract void setContentView(int);
+ method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public static void setDefaultNightMode(int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method public abstract void setLocalNightMode(int);
+ method public abstract void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ public class AppCompatDialog extends android.app.Dialog implements android.support.v7.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ }
+
+ public class MediaRouteActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public MediaRouteActionProvider(android.content.Context);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.app.MediaRouteButton getMediaRouteButton();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.view.View onCreateActionView();
+ method public android.support.v7.app.MediaRouteButton onCreateMediaRouteButton();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteButton extends android.view.View {
+ ctor public MediaRouteButton(android.content.Context);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ method public boolean showDialog();
+ }
+
+ public class MediaRouteChooserDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public MediaRouteChooserDialog(android.content.Context);
+ ctor public MediaRouteChooserDialog(android.content.Context, int);
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public boolean onFilterRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onFilterRoutes(java.util.List<android.support.v7.media.MediaRouter.RouteInfo>);
+ method public void refreshRoutes();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteChooserDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteChooserDialogFragment();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.app.MediaRouteChooserDialog onCreateChooserDialog(android.content.Context, android.os.Bundle);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteControllerDialog extends android.support.v7.app.AlertDialog {
+ ctor public MediaRouteControllerDialog(android.content.Context);
+ ctor public MediaRouteControllerDialog(android.content.Context, int);
+ method public android.view.View getMediaControlView();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSession();
+ method public android.support.v7.media.MediaRouter.RouteInfo getRoute();
+ method public boolean isVolumeControlEnabled();
+ method public android.view.View onCreateMediaControlView(android.os.Bundle);
+ method public void setVolumeControlEnabled(boolean);
+ }
+
+ public class MediaRouteControllerDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteControllerDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialog onCreateControllerDialog(android.content.Context, android.os.Bundle);
+ }
+
+ public class MediaRouteDialogFactory {
+ ctor public MediaRouteDialogFactory();
+ method public static android.support.v7.app.MediaRouteDialogFactory getDefault();
+ method public android.support.v7.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
+ }
+
+ public class MediaRouteDiscoveryFragment extends android.support.v4.app.Fragment {
+ ctor public MediaRouteDiscoveryFragment();
+ method public android.support.v7.media.MediaRouter getMediaRouter();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.media.MediaRouter.Callback onCreateCallback();
+ method public int onPrepareCallbackFlags();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class NotificationCompat extends android.support.v4.app.NotificationCompat {
+ ctor public NotificationCompat();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token getMediaSession(android.app.Notification);
+ }
+
+ public static class NotificationCompat.Builder extends android.support.v4.app.NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends android.support.v7.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+ }
+
+}
+
+package android.support.v7.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ }
+
+}
+
+package android.support.v7.graphics {
+
+ public final class Palette {
+ method public static android.support.v7.graphics.Palette.Builder from(android.graphics.Bitmap);
+ method public static android.support.v7.graphics.Palette from(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap, int);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, int, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public int getColorForTarget(android.support.v7.graphics.Target, int);
+ method public int getDarkMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkMutedSwatch();
+ method public int getDarkVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkVibrantSwatch();
+ method public int getDominantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDominantSwatch();
+ method public int getLightMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightMutedSwatch();
+ method public int getLightVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightVibrantSwatch();
+ method public int getMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getMutedSwatch();
+ method public android.support.v7.graphics.Palette.Swatch getSwatchForTarget(android.support.v7.graphics.Target);
+ method public java.util.List<android.support.v7.graphics.Palette.Swatch> getSwatches();
+ method public java.util.List<android.support.v7.graphics.Target> getTargets();
+ method public int getVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getVibrantSwatch();
+ }
+
+ public static final class Palette.Builder {
+ ctor public Palette.Builder(android.graphics.Bitmap);
+ ctor public Palette.Builder(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public android.support.v7.graphics.Palette.Builder addFilter(android.support.v7.graphics.Palette.Filter);
+ method public android.support.v7.graphics.Palette.Builder addTarget(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Palette.Builder clearFilters();
+ method public android.support.v7.graphics.Palette.Builder clearRegion();
+ method public android.support.v7.graphics.Palette.Builder clearTargets();
+ method public android.support.v7.graphics.Palette generate();
+ method public android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generate(android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public android.support.v7.graphics.Palette.Builder maximumColorCount(int);
+ method public android.support.v7.graphics.Palette.Builder resizeBitmapArea(int);
+ method public deprecated android.support.v7.graphics.Palette.Builder resizeBitmapSize(int);
+ method public android.support.v7.graphics.Palette.Builder setRegion(int, int, int, int);
+ }
+
+ public static abstract interface Palette.Filter {
+ method public abstract boolean isAllowed(int, float[]);
+ }
+
+ public static abstract interface Palette.PaletteAsyncListener {
+ method public abstract void onGenerated(android.support.v7.graphics.Palette);
+ }
+
+ public static final class Palette.Swatch {
+ ctor public Palette.Swatch(int, int);
+ method public int getBodyTextColor();
+ method public float[] getHsl();
+ method public int getPopulation();
+ method public int getRgb();
+ method public int getTitleTextColor();
+ }
+
+ public final class Target {
+ method public float getLightnessWeight();
+ method public float getMaximumLightness();
+ method public float getMaximumSaturation();
+ method public float getMinimumLightness();
+ method public float getMinimumSaturation();
+ method public float getPopulationWeight();
+ method public float getSaturationWeight();
+ method public float getTargetLightness();
+ method public float getTargetSaturation();
+ method public boolean isExclusive();
+ field public static final android.support.v7.graphics.Target DARK_MUTED;
+ field public static final android.support.v7.graphics.Target DARK_VIBRANT;
+ field public static final android.support.v7.graphics.Target LIGHT_MUTED;
+ field public static final android.support.v7.graphics.Target LIGHT_VIBRANT;
+ field public static final android.support.v7.graphics.Target MUTED;
+ field public static final android.support.v7.graphics.Target VIBRANT;
+ }
+
+ public static final class Target.Builder {
+ ctor public Target.Builder();
+ ctor public Target.Builder(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Target build();
+ method public android.support.v7.graphics.Target.Builder setExclusive(boolean);
+ method public android.support.v7.graphics.Target.Builder setLightnessWeight(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setPopulationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setSaturationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setTargetLightness(float);
+ method public android.support.v7.graphics.Target.Builder setTargetSaturation(float);
+ }
+
+}
+
+package android.support.v7.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context);
+ method public void draw(android.graphics.Canvas);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method public int getColor();
+ method public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDirection(int);
+ method public void setGapSize(float);
+ method public void setProgress(float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+}
+
+package android.support.v7.media {
+
+ public final class MediaControlIntent {
+ field public static final java.lang.String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
+ field public static final java.lang.String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
+ field public static final java.lang.String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
+ field public static final java.lang.String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
+ field public static final java.lang.String ACTION_PAUSE = "android.media.intent.action.PAUSE";
+ field public static final java.lang.String ACTION_PLAY = "android.media.intent.action.PLAY";
+ field public static final java.lang.String ACTION_REMOVE = "android.media.intent.action.REMOVE";
+ field public static final java.lang.String ACTION_RESUME = "android.media.intent.action.RESUME";
+ field public static final java.lang.String ACTION_SEEK = "android.media.intent.action.SEEK";
+ field public static final java.lang.String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
+ field public static final java.lang.String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
+ field public static final java.lang.String ACTION_STOP = "android.media.intent.action.STOP";
+ field public static final java.lang.String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ field public static final java.lang.String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+ field public static final java.lang.String CATEGORY_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
+ field public static final int ERROR_INVALID_ITEM_ID = 3; // 0x3
+ field public static final int ERROR_INVALID_SESSION_ID = 2; // 0x2
+ field public static final int ERROR_UNKNOWN = 0; // 0x0
+ field public static final int ERROR_UNSUPPORTED_OPERATION = 1; // 0x1
+ field public static final java.lang.String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
+ field public static final java.lang.String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
+ field public static final java.lang.String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
+ field public static final java.lang.String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
+ field public static final java.lang.String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
+ field public static final java.lang.String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
+ field public static final java.lang.String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
+ field public static final java.lang.String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
+ field public static final java.lang.String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
+ field public static final java.lang.String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
+ field public static final java.lang.String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
+ field public static final java.lang.String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
+ }
+
+ public final class MediaItemMetadata {
+ field public static final java.lang.String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
+ field public static final java.lang.String KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
+ field public static final java.lang.String KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public final class MediaItemStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaItemStatus fromBundle(android.os.Bundle);
+ method public long getContentDuration();
+ method public long getContentPosition();
+ method public android.os.Bundle getExtras();
+ method public int getPlaybackState();
+ method public long getTimestamp();
+ field public static final java.lang.String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
+ field public static final java.lang.String EXTRA_HTTP_STATUS_CODE = "android.media.status.extra.HTTP_STATUS_CODE";
+ field public static final int PLAYBACK_STATE_BUFFERING = 3; // 0x3
+ field public static final int PLAYBACK_STATE_CANCELED = 5; // 0x5
+ field public static final int PLAYBACK_STATE_ERROR = 7; // 0x7
+ field public static final int PLAYBACK_STATE_FINISHED = 4; // 0x4
+ field public static final int PLAYBACK_STATE_INVALIDATED = 6; // 0x6
+ field public static final int PLAYBACK_STATE_PAUSED = 2; // 0x2
+ field public static final int PLAYBACK_STATE_PENDING = 0; // 0x0
+ field public static final int PLAYBACK_STATE_PLAYING = 1; // 0x1
+ }
+
+ public static final class MediaItemStatus.Builder {
+ ctor public MediaItemStatus.Builder(int);
+ ctor public MediaItemStatus.Builder(android.support.v7.media.MediaItemStatus);
+ method public android.support.v7.media.MediaItemStatus build();
+ method public android.support.v7.media.MediaItemStatus.Builder setContentDuration(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setContentPosition(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaItemStatus.Builder setPlaybackState(int);
+ method public android.support.v7.media.MediaItemStatus.Builder setTimestamp(long);
+ }
+
+ public final class MediaRouteDescriptor {
+ method public android.os.Bundle asBundle();
+ method public boolean canDisconnectAndKeepPlaying();
+ method public static android.support.v7.media.MediaRouteDescriptor fromBundle(android.os.Bundle);
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public int getPresentationDisplayId();
+ method public android.content.IntentSender getSettingsActivity();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public deprecated boolean isConnecting();
+ method public boolean isEnabled();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteDescriptor.Builder {
+ ctor public MediaRouteDescriptor.Builder(java.lang.String, java.lang.String);
+ ctor public MediaRouteDescriptor.Builder(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter>);
+ method public android.support.v7.media.MediaRouteDescriptor build();
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setCanDisconnect(boolean);
+ method public deprecated android.support.v7.media.MediaRouteDescriptor.Builder setConnecting(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setConnectionState(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDescription(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDeviceType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setEnabled(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setIconUri(android.net.Uri);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setId(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setName(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackStream(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPresentationDisplayId(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setSettingsActivity(android.content.IntentSender);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolume(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeHandling(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeMax(int);
+ }
+
+ public final class MediaRouteDiscoveryRequest {
+ ctor public MediaRouteDiscoveryRequest(android.support.v7.media.MediaRouteSelector, boolean);
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteDiscoveryRequest fromBundle(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteSelector getSelector();
+ method public boolean isActiveScan();
+ method public boolean isValid();
+ }
+
+ public abstract class MediaRouteProvider {
+ ctor public MediaRouteProvider(android.content.Context);
+ method public final android.content.Context getContext();
+ method public final android.support.v7.media.MediaRouteProviderDescriptor getDescriptor();
+ method public final android.support.v7.media.MediaRouteDiscoveryRequest getDiscoveryRequest();
+ method public final android.os.Handler getHandler();
+ method public final android.support.v7.media.MediaRouteProvider.ProviderMetadata getMetadata();
+ method public android.support.v7.media.MediaRouteProvider.RouteController onCreateRouteController(java.lang.String);
+ method public void onDiscoveryRequestChanged(android.support.v7.media.MediaRouteDiscoveryRequest);
+ method public final void setCallback(android.support.v7.media.MediaRouteProvider.Callback);
+ method public final void setDescriptor(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public final void setDiscoveryRequest(android.support.v7.media.MediaRouteDiscoveryRequest);
+ }
+
+ public static abstract class MediaRouteProvider.Callback {
+ ctor public MediaRouteProvider.Callback();
+ method public void onDescriptorChanged(android.support.v7.media.MediaRouteProvider, android.support.v7.media.MediaRouteProviderDescriptor);
+ }
+
+ public static final class MediaRouteProvider.ProviderMetadata {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ }
+
+ public static abstract class MediaRouteProvider.RouteController {
+ ctor public MediaRouteProvider.RouteController();
+ method public boolean onControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public void onRelease();
+ method public void onSelect();
+ method public void onSetVolume(int);
+ method public void onUnselect();
+ method public void onUnselect(int);
+ method public void onUpdateVolume(int);
+ }
+
+ public final class MediaRouteProviderDescriptor {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteProviderDescriptor fromBundle(android.os.Bundle);
+ method public java.util.List<android.support.v7.media.MediaRouteDescriptor> getRoutes();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteProviderDescriptor.Builder {
+ ctor public MediaRouteProviderDescriptor.Builder();
+ ctor public MediaRouteProviderDescriptor.Builder(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoute(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoutes(java.util.Collection<android.support.v7.media.MediaRouteDescriptor>);
+ method public android.support.v7.media.MediaRouteProviderDescriptor build();
+ }
+
+ public abstract class MediaRouteProviderService extends android.app.Service {
+ ctor public MediaRouteProviderService();
+ method public android.support.v7.media.MediaRouteProvider getMediaRouteProvider();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract android.support.v7.media.MediaRouteProvider onCreateMediaRouteProvider();
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
+ }
+
+ public final class MediaRouteSelector {
+ method public android.os.Bundle asBundle();
+ method public boolean contains(android.support.v7.media.MediaRouteSelector);
+ method public static android.support.v7.media.MediaRouteSelector fromBundle(android.os.Bundle);
+ method public java.util.List<java.lang.String> getControlCategories();
+ method public boolean hasControlCategory(java.lang.String);
+ method public boolean isEmpty();
+ method public boolean isValid();
+ method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>);
+ field public static final android.support.v7.media.MediaRouteSelector EMPTY;
+ }
+
+ public static final class MediaRouteSelector.Builder {
+ ctor public MediaRouteSelector.Builder();
+ ctor public MediaRouteSelector.Builder(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategory(java.lang.String);
+ method public android.support.v7.media.MediaRouteSelector.Builder addSelector(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector build();
+ }
+
+ public final class MediaRouter {
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback);
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback, int);
+ method public void addProvider(android.support.v7.media.MediaRouteProvider);
+ method public void addRemoteControlClient(java.lang.Object);
+ method public android.support.v7.media.MediaRouter.RouteInfo getBluetoothRoute();
+ method public android.support.v7.media.MediaRouter.RouteInfo getDefaultRoute();
+ method public static android.support.v7.media.MediaRouter getInstance(android.content.Context);
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSessionToken();
+ method public java.util.List<android.support.v7.media.MediaRouter.ProviderInfo> getProviders();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ method public android.support.v7.media.MediaRouter.RouteInfo getSelectedRoute();
+ method public boolean isRouteAvailable(android.support.v7.media.MediaRouteSelector, int);
+ method public void removeCallback(android.support.v7.media.MediaRouter.Callback);
+ method public void removeProvider(android.support.v7.media.MediaRouteProvider);
+ method public void removeRemoteControlClient(java.lang.Object);
+ method public void selectRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void setMediaSession(java.lang.Object);
+ method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat);
+ method public void unselect(int);
+ method public android.support.v7.media.MediaRouter.RouteInfo updateSelectedRoute(android.support.v7.media.MediaRouteSelector);
+ field public static final int AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE = 1; // 0x1
+ field public static final int AVAILABILITY_FLAG_REQUIRE_MATCH = 2; // 0x2
+ field public static final int CALLBACK_FLAG_FORCE_DISCOVERY = 8; // 0x8
+ field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+ field public static final int CALLBACK_FLAG_REQUEST_DISCOVERY = 4; // 0x4
+ field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+ field public static final int UNSELECT_REASON_DISCONNECTED = 1; // 0x1
+ field public static final int UNSELECT_REASON_ROUTE_CHANGED = 3; // 0x3
+ field public static final int UNSELECT_REASON_STOPPED = 2; // 0x2
+ field public static final int UNSELECT_REASON_UNKNOWN = 0; // 0x0
+ }
+
+ public static abstract class MediaRouter.Callback {
+ ctor public MediaRouter.Callback();
+ method public void onProviderAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onRouteAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRoutePresentationDisplayChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteSelected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo, int);
+ method public void onRouteVolumeChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ }
+
+ public static abstract class MediaRouter.ControlRequestCallback {
+ ctor public MediaRouter.ControlRequestCallback();
+ method public void onError(java.lang.String, android.os.Bundle);
+ method public void onResult(android.os.Bundle);
+ }
+
+ public static final class MediaRouter.ProviderInfo {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ method public android.support.v7.media.MediaRouteProvider getProviderInstance();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ }
+
+ public static class MediaRouter.RouteInfo {
+ method public boolean canDisconnect();
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public android.view.Display getPresentationDisplay();
+ method public android.support.v7.media.MediaRouter.ProviderInfo getProvider();
+ method public android.content.IntentSender getSettingsIntent();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public boolean isBluetooth();
+ method public boolean isConnecting();
+ method public boolean isDefault();
+ method public boolean isDeviceSpeaker();
+ method public boolean isEnabled();
+ method public boolean isSelected();
+ method public boolean matchesSelector(android.support.v7.media.MediaRouteSelector);
+ method public void requestSetVolume(int);
+ method public void requestUpdateVolume(int);
+ method public void select();
+ method public void sendControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public boolean supportsControlAction(java.lang.String, java.lang.String);
+ method public boolean supportsControlCategory(java.lang.String);
+ method public boolean supportsControlRequest(android.content.Intent);
+ field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+ field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+ field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+ field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+ field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+ field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+ }
+
+ public final class MediaSessionStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaSessionStatus fromBundle(android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public int getSessionState();
+ method public long getTimestamp();
+ method public boolean isQueuePaused();
+ field public static final int SESSION_STATE_ACTIVE = 0; // 0x0
+ field public static final int SESSION_STATE_ENDED = 1; // 0x1
+ field public static final int SESSION_STATE_INVALIDATED = 2; // 0x2
+ }
+
+ public static final class MediaSessionStatus.Builder {
+ ctor public MediaSessionStatus.Builder(int);
+ ctor public MediaSessionStatus.Builder(android.support.v7.media.MediaSessionStatus);
+ method public android.support.v7.media.MediaSessionStatus build();
+ method public android.support.v7.media.MediaSessionStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaSessionStatus.Builder setQueuePaused(boolean);
+ method public android.support.v7.media.MediaSessionStatus.Builder setSessionState(int);
+ method public android.support.v7.media.MediaSessionStatus.Builder setTimestamp(long);
+ }
+
+ public class RemotePlaybackClient {
+ ctor public RemotePlaybackClient(android.content.Context, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void endSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void enqueue(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public java.lang.String getSessionId();
+ method public void getSessionStatus(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void getStatus(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public boolean hasSession();
+ method public boolean isMessagingSupported();
+ method public boolean isQueuingSupported();
+ method public boolean isRemotePlaybackSupported();
+ method public boolean isSessionManagementSupported();
+ method public void pause(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void play(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void release();
+ method public void remove(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void resume(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void seek(java.lang.String, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void sendMessage(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void setOnMessageReceivedListener(android.support.v7.media.RemotePlaybackClient.OnMessageReceivedListener);
+ method public void setSessionId(java.lang.String);
+ method public void setStatusCallback(android.support.v7.media.RemotePlaybackClient.StatusCallback);
+ method public void startSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void stop(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ }
+
+ public static abstract class RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ActionCallback();
+ method public void onError(java.lang.String, int, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.ItemActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ItemActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ }
+
+ public static abstract interface RemotePlaybackClient.OnMessageReceivedListener {
+ method public abstract void onMessageReceived(java.lang.String, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.SessionActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.SessionActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+ public static abstract class RemotePlaybackClient.StatusCallback {
+ ctor public RemotePlaybackClient.StatusCallback();
+ method public void onItemStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ method public void onSessionChanged(java.lang.String);
+ method public void onSessionStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+}
+
+package android.support.v7.preference {
+
+ public class CheckBoxPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+ ctor public CheckBoxPreference(android.content.Context);
+ }
+
+ public abstract class DialogPreference extends android.support.v7.preference.Preference {
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DialogPreference(android.content.Context);
+ method public android.graphics.drawable.Drawable getDialogIcon();
+ method public int getDialogLayoutResource();
+ method public java.lang.CharSequence getDialogMessage();
+ method public java.lang.CharSequence getDialogTitle();
+ method public java.lang.CharSequence getNegativeButtonText();
+ method public java.lang.CharSequence getPositiveButtonText();
+ method public void setDialogIcon(android.graphics.drawable.Drawable);
+ method public void setDialogIcon(int);
+ method public void setDialogLayoutResource(int);
+ method public void setDialogMessage(java.lang.CharSequence);
+ method public void setDialogMessage(int);
+ method public void setDialogTitle(java.lang.CharSequence);
+ method public void setDialogTitle(int);
+ method public void setNegativeButtonText(java.lang.CharSequence);
+ method public void setNegativeButtonText(int);
+ method public void setPositiveButtonText(java.lang.CharSequence);
+ method public void setPositiveButtonText(int);
+ }
+
+ public static abstract interface DialogPreference.TargetFragment {
+ method public abstract android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ }
+
+ public class DropDownPreference extends android.support.v7.preference.ListPreference {
+ ctor public DropDownPreference(android.content.Context);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.ArrayAdapter createAdapter();
+ }
+
+ public class EditTextPreference extends android.support.v7.preference.DialogPreference {
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
+ ctor public EditTextPreference(android.content.Context);
+ method public java.lang.String getText();
+ method public void setText(java.lang.String);
+ }
+
+ public class EditTextPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public EditTextPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.EditTextPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreference extends android.support.v7.preference.DialogPreference {
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public ListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence getEntry();
+ method public java.lang.CharSequence[] getEntryValues();
+ method public java.lang.String getValue();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValue(java.lang.String);
+ method public void setValueIndex(int);
+ }
+
+ public class ListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public ListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.ListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public MultiSelectListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class Preference implements java.lang.Comparable {
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet);
+ ctor public Preference(android.content.Context);
+ method public boolean callChangeListener(java.lang.Object);
+ method public int compareTo(android.support.v7.preference.Preference);
+ method protected android.support.v7.preference.Preference findPreferenceInHierarchy(java.lang.String);
+ method public android.content.Context getContext();
+ method public java.lang.String getDependency();
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getFragment();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public android.content.Intent getIntent();
+ method public java.lang.String getKey();
+ method public final int getLayoutResource();
+ method public android.support.v7.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+ method public android.support.v7.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+ method public int getOrder();
+ method protected boolean getPersistedBoolean(boolean);
+ method protected float getPersistedFloat(float);
+ method protected int getPersistedInt(int);
+ method protected long getPersistedLong(long);
+ method protected java.lang.String getPersistedString(java.lang.String);
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public boolean getShouldDisableView();
+ method public java.lang.CharSequence getSummary();
+ method public java.lang.CharSequence getTitle();
+ method public final int getWidgetLayoutResource();
+ method public boolean hasKey();
+ method public boolean isEnabled();
+ method public boolean isPersistent();
+ method public boolean isSelectable();
+ method public final boolean isVisible();
+ method protected void notifyChanged();
+ method public void notifyDependencyChange(boolean);
+ method protected void notifyHierarchyChanged();
+ method public void onAttached();
+ method protected void onAttachedToHierarchy(android.support.v7.preference.PreferenceManager);
+ method public void onBindViewHolder(android.support.v7.preference.PreferenceViewHolder);
+ method protected void onClick();
+ method public void onDependencyChanged(android.support.v7.preference.Preference, boolean);
+ method public void onDetached();
+ method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onParentChanged(android.support.v7.preference.Preference, boolean);
+ method protected void onPrepareForRemoval();
+ method protected void onRestoreInstanceState(android.os.Parcelable);
+ method protected android.os.Parcelable onSaveInstanceState();
+ method protected void onSetInitialValue(boolean, java.lang.Object);
+ method public android.os.Bundle peekExtras();
+ method protected boolean persistBoolean(boolean);
+ method protected boolean persistFloat(float);
+ method protected boolean persistInt(int);
+ method protected boolean persistLong(long);
+ method protected boolean persistString(java.lang.String);
+ method public void restoreHierarchyState(android.os.Bundle);
+ method public void saveHierarchyState(android.os.Bundle);
+ method public void setDefaultValue(java.lang.Object);
+ method public void setDependency(java.lang.String);
+ method public void setEnabled(boolean);
+ method public void setFragment(java.lang.String);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIcon(int);
+ method public void setIntent(android.content.Intent);
+ method public void setKey(java.lang.String);
+ method public void setLayoutResource(int);
+ method public void setOnPreferenceChangeListener(android.support.v7.preference.Preference.OnPreferenceChangeListener);
+ method public void setOnPreferenceClickListener(android.support.v7.preference.Preference.OnPreferenceClickListener);
+ method public void setOrder(int);
+ method public void setPersistent(boolean);
+ method public void setSelectable(boolean);
+ method public void setShouldDisableView(boolean);
+ method public void setSummary(java.lang.CharSequence);
+ method public void setSummary(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitle(int);
+ method public void setViewId(int);
+ method public final void setVisible(boolean);
+ method public void setWidgetLayoutResource(int);
+ method public boolean shouldDisableDependents();
+ method protected boolean shouldPersist();
+ field public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+ }
+
+ public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+ ctor public Preference.BaseSavedState(android.os.Parcel);
+ ctor public Preference.BaseSavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.preference.Preference.BaseSavedState> CREATOR;
+ }
+
+ public static abstract interface Preference.OnPreferenceChangeListener {
+ method public abstract boolean onPreferenceChange(android.support.v7.preference.Preference, java.lang.Object);
+ }
+
+ public static abstract interface Preference.OnPreferenceClickListener {
+ method public abstract boolean onPreferenceClick(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceCategory extends android.support.v7.preference.PreferenceGroup {
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+ ctor public PreferenceCategory(android.content.Context);
+ }
+
+ public abstract class PreferenceDialogFragmentCompat extends android.support.v4.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragmentCompat();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragmentCompat extends android.support.v4.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragmentCompat();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public abstract class PreferenceGroup extends android.support.v7.preference.Preference {
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+ method public void addItemFromInflater(android.support.v7.preference.Preference);
+ method public boolean addPreference(android.support.v7.preference.Preference);
+ method protected void dispatchRestoreInstanceState(android.os.Bundle);
+ method protected void dispatchSaveInstanceState(android.os.Bundle);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.support.v7.preference.Preference getPreference(int);
+ method public int getPreferenceCount();
+ method protected boolean isOnSameScreenAsChildren();
+ method public boolean isOrderingAsAdded();
+ method protected boolean onPrepareAddPreference(android.support.v7.preference.Preference);
+ method public void removeAll();
+ method public boolean removePreference(android.support.v7.preference.Preference);
+ method public void setOrderingAsAdded(boolean);
+ }
+
+ public static abstract interface PreferenceGroup.PreferencePositionCallback {
+ method public abstract int getPreferenceAdapterPosition(java.lang.String);
+ method public abstract int getPreferenceAdapterPosition(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceManager {
+ method public android.support.v7.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.content.Context getContext();
+ method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener();
+ method public android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener getOnNavigateToScreenListener();
+ method public android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener getOnPreferenceTreeClickListener();
+ method public android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback getPreferenceComparisonCallback();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public int getSharedPreferencesMode();
+ method public java.lang.String getSharedPreferencesName();
+ method public boolean isStorageDefault();
+ method public boolean isStorageDeviceProtected();
+ method public static void setDefaultValues(android.content.Context, int, boolean);
+ method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean);
+ method public void setOnDisplayPreferenceDialogListener(android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener);
+ method public void setOnNavigateToScreenListener(android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener);
+ method public void setOnPreferenceTreeClickListener(android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener);
+ method public void setPreferenceComparisonCallback(android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback);
+ method public boolean setPreferences(android.support.v7.preference.PreferenceScreen);
+ method public void setSharedPreferencesMode(int);
+ method public void setSharedPreferencesName(java.lang.String);
+ method public void setStorageDefault();
+ method public void setStorageDeviceProtected();
+ method public void showDialog(android.support.v7.preference.Preference);
+ field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+ }
+
+ public static abstract interface PreferenceManager.OnDisplayPreferenceDialogListener {
+ method public abstract void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceManager.OnNavigateToScreenListener {
+ method public abstract void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ }
+
+ public static abstract interface PreferenceManager.OnPreferenceTreeClickListener {
+ method public abstract boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ }
+
+ public static abstract class PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.PreferenceComparisonCallback();
+ method public abstract boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public abstract boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public static class PreferenceManager.SimplePreferenceComparisonCallback extends android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.SimplePreferenceComparisonCallback();
+ method public boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public final class PreferenceScreen extends android.support.v7.preference.PreferenceGroup {
+ method public void setShouldUseGeneratedIds(boolean);
+ method public boolean shouldUseGeneratedIds();
+ }
+
+ public class PreferenceViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder {
+ method public android.view.View findViewById(int);
+ method public boolean isDividerAllowedAbove();
+ method public boolean isDividerAllowedBelow();
+ method public void setDividerAllowedAbove(boolean);
+ method public void setDividerAllowedBelow(boolean);
+ }
+
+ public class SeekBarPreference extends android.support.v7.preference.Preference {
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SeekBarPreference(android.content.Context);
+ method public int getMax();
+ method public int getMin();
+ method public final int getSeekBarIncrement();
+ method public int getValue();
+ method public boolean isAdjustable();
+ method public void setAdjustable(boolean);
+ method public final void setMax(int);
+ method public void setMin(int);
+ method public final void setSeekBarIncrement(int);
+ method public void setValue(int);
+ }
+
+ public class SwitchPreferenceCompat extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreferenceCompat(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+ public abstract class TwoStatePreference extends android.support.v7.preference.Preference {
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+ ctor public TwoStatePreference(android.content.Context);
+ method public boolean getDisableDependentsState();
+ method public java.lang.CharSequence getSummaryOff();
+ method public java.lang.CharSequence getSummaryOn();
+ method public boolean isChecked();
+ method public void setChecked(boolean);
+ method public void setDisableDependentsState(boolean);
+ method public void setSummaryOff(java.lang.CharSequence);
+ method public void setSummaryOff(int);
+ method public void setSummaryOn(java.lang.CharSequence);
+ method public void setSummaryOn(int);
+ method protected void syncSummaryView(android.support.v7.preference.PreferenceViewHolder);
+ field protected boolean mChecked;
+ }
+
+}
+
+package android.support.v7.util {
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(java.lang.Class<T>, int, android.support.v7.util.AsyncListUtil.DataCallback<T>, android.support.v7.util.AsyncListUtil.ViewCallback);
+ method public T getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public static abstract class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method public abstract void fillData(T[], int, int);
+ method public int getMaxCachedTiles();
+ method public void recycleData(T[], int);
+ method public abstract int refreshData();
+ }
+
+ public static abstract class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method public void extendRangeInto(int[], int[], int);
+ method public abstract void getItemRangeInto(int[]);
+ method public abstract void onDataRefresh();
+ method public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements android.support.v7.util.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(android.support.v7.util.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, java.lang.Object);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class DiffUtil {
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback);
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback, boolean);
+ }
+
+ public static abstract class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public java.lang.Object getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public void dispatchUpdatesTo(android.support.v7.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(android.support.v7.util.ListUpdateCallback);
+ }
+
+ public abstract interface ListUpdateCallback {
+ method public abstract void onChanged(int, int, java.lang.Object);
+ method public abstract void onInserted(int, int);
+ method public abstract void onMoved(int, int);
+ method public abstract void onRemoved(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>);
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>, int);
+ method public int add(T);
+ method public void addAll(T[], boolean);
+ method public void addAll(T...);
+ method public void addAll(java.util.Collection<T>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T);
+ method public T removeItemAt(int);
+ method public int size();
+ method public void updateItemAt(int, T);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedList.BatchedCallback(android.support.v7.util.SortedList.Callback<T2>);
+ method public boolean areContentsTheSame(T2, T2);
+ method public boolean areItemsTheSame(T2, T2);
+ method public int compare(T2, T2);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public static abstract class SortedList.Callback<T2> implements java.util.Comparator android.support.v7.util.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2, T2);
+ method public abstract boolean areItemsTheSame(T2, T2);
+ method public abstract int compare(T2, T2);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, java.lang.Object);
+ }
+
+}
+
+package android.support.v7.view {
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.view.Menu getMenu();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public void setTag(java.lang.Object);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static abstract interface ActionMode.Callback {
+ method public abstract boolean onActionItemClicked(android.support.v7.view.ActionMode, android.view.MenuItem);
+ method public abstract boolean onCreateActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ method public abstract void onDestroyActionMode(android.support.v7.view.ActionMode);
+ method public abstract boolean onPrepareActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ }
+
+ public abstract interface CollapsibleActionView {
+ method public abstract void onActionViewCollapsed();
+ method public abstract void onActionViewExpanded();
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class ActionMenuView extends android.support.v7.widget.LinearLayoutCompat {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+ method public void dismissPopupMenus();
+ method public android.view.Menu getMenu();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public boolean hideOverflowMenu();
+ method public boolean isOverflowMenuShowing();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDetachedFromWindow();
+ method public void setOnMenuItemClickListener(android.support.v7.widget.ActionMenuView.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class ActionMenuView.LayoutParams extends android.support.v7.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(android.support.v7.widget.ActionMenuView.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static abstract interface ActionMenuView.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatButton extends android.widget.Button implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet, int);
+ method public void setSupportAllCaps(boolean);
+ }
+
+ public class AppCompatCheckBox extends android.widget.CheckBox implements android.support.v4.widget.TintableCompoundButton {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatCheckedTextView extends android.widget.CheckedTextView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatEditText extends android.widget.EditText implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatImageButton extends android.widget.ImageButton implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatImageView extends android.widget.ImageView implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatRadioButton extends android.widget.RadioButton implements android.support.v4.widget.TintableCompoundButton {
+ ctor public AppCompatRadioButton(android.content.Context);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSpinner extends android.widget.Spinner implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+ }
+
+ public class AppCompatTextView extends android.widget.TextView implements android.support.v4.view.TintableBackgroundView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class CardView extends android.widget.FrameLayout {
+ ctor public CardView(android.content.Context);
+ ctor public CardView(android.content.Context, android.util.AttributeSet);
+ ctor public CardView(android.content.Context, android.util.AttributeSet, int);
+ method public android.content.res.ColorStateList getCardBackgroundColor();
+ method public float getCardElevation();
+ method public int getContentPaddingBottom();
+ method public int getContentPaddingLeft();
+ method public int getContentPaddingRight();
+ method public int getContentPaddingTop();
+ method public float getMaxCardElevation();
+ method public boolean getPreventCornerOverlap();
+ method public float getRadius();
+ method public boolean getUseCompatPadding();
+ method public void setCardBackgroundColor(int);
+ method public void setCardBackgroundColor(android.content.res.ColorStateList);
+ method public void setCardElevation(float);
+ method public void setContentPadding(int, int, int, int);
+ method public void setMaxCardElevation(float);
+ method public void setPreventCornerOverlap(boolean);
+ method public void setRadius(float);
+ method public void setUseCompatPadding(boolean);
+ }
+
+ public class DefaultItemAnimator extends android.support.v7.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DividerItemDecoration extends android.support.v7.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context, int);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayout extends android.view.ViewGroup {
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayout(android.content.Context);
+ method public int getAlignmentMode();
+ method public int getColumnCount();
+ method public int getOrientation();
+ method public android.util.Printer getPrinter();
+ method public int getRowCount();
+ method public boolean getUseDefaultMargins();
+ method public boolean isColumnOrderPreserved();
+ method public boolean isRowOrderPreserved();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setAlignmentMode(int);
+ method public void setColumnCount(int);
+ method public void setColumnOrderPreserved(boolean);
+ method public void setOrientation(int);
+ method public void setPrinter(android.util.Printer);
+ method public void setRowCount(int);
+ method public void setRowOrderPreserved(boolean);
+ method public void setUseDefaultMargins(boolean);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int);
+ field public static final int ALIGN_BOUNDS = 0; // 0x0
+ field public static final int ALIGN_MARGINS = 1; // 0x1
+ field public static final android.support.v7.widget.GridLayout.Alignment BASELINE;
+ field public static final android.support.v7.widget.GridLayout.Alignment BOTTOM;
+ field public static final android.support.v7.widget.GridLayout.Alignment CENTER;
+ field public static final android.support.v7.widget.GridLayout.Alignment END;
+ field public static final android.support.v7.widget.GridLayout.Alignment FILL;
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final android.support.v7.widget.GridLayout.Alignment LEFT;
+ field public static final android.support.v7.widget.GridLayout.Alignment RIGHT;
+ field public static final android.support.v7.widget.GridLayout.Alignment START;
+ field public static final android.support.v7.widget.GridLayout.Alignment TOP;
+ field public static final int UNDEFINED = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class GridLayout.Alignment {
+ }
+
+ public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.Spec, android.support.v7.widget.GridLayout.Spec);
+ ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ method public void setGravity(int);
+ field public android.support.v7.widget.GridLayout.Spec columnSpec;
+ field public android.support.v7.widget.GridLayout.Spec rowSpec;
+ }
+
+ public static class GridLayout.Spec {
+ method public android.support.v7.widget.GridLayout.Alignment getAbsoluteAlignment(boolean);
+ }
+
+ public class GridLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public GridLayoutManager(android.content.Context, int);
+ ctor public GridLayoutManager(android.content.Context, int, int, boolean);
+ method public int getSpanCount();
+ method public android.support.v7.widget.GridLayoutManager.SpanSizeLookup getSpanSizeLookup();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(android.support.v7.widget.GridLayoutManager.SpanSizeLookup);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends android.support.v7.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet, int);
+ method public int getBaselineAlignedChildIndex();
+ method public android.graphics.drawable.Drawable getDividerDrawable();
+ method public int getDividerPadding();
+ method public int getGravity();
+ method public int getOrientation();
+ method public int getShowDividers();
+ method public float getWeightSum();
+ method public boolean isBaselineAligned();
+ method public boolean isMeasureWithLargestChildEnabled();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable);
+ method public void setDividerPadding(int);
+ method public void setGravity(int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(int);
+ method public void setShowDividers(int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.support.v7.widget.LinearLayoutCompat.LayoutParams);
+ field public int gravity;
+ field public float weight;
+ }
+
+ public class LinearLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.helper.ItemTouchHelper.ViewDropHandler android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context);
+ ctor public LinearLayoutManager(android.content.Context, int, boolean);
+ ctor public LinearLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method protected int getExtraLayoutSpace(android.support.v7.widget.RecyclerView.State);
+ method public int getInitialItemPrefetchCount();
+ method public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends android.support.v7.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View, int);
+ method public int calculateDyToMakeVisible(android.view.View, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void updateActionForInterimTarget(android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator mLinearInterpolator;
+ field protected android.graphics.PointF mTargetVector;
+ }
+
+ public class LinearSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public class ListPopupWindow {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+ method public void dismiss();
+ method public android.view.View getAnchorView();
+ method public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable getBackground();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView getListView();
+ method public int getPromptPosition();
+ method public java.lang.Object getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter);
+ method public void setAnchorView(android.view.View);
+ method public void setAnimationStyle(int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setContentWidth(int);
+ method public void setDropDownGravity(int);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ public abstract class OrientationHelper {
+ method public static android.support.v7.widget.OrientationHelper createHorizontalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public static android.support.v7.widget.OrientationHelper createOrientationHelper(android.support.v7.widget.RecyclerView.LayoutManager, int);
+ method public static android.support.v7.widget.OrientationHelper createVerticalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int getDecoratedEnd(android.view.View);
+ method public abstract int getDecoratedMeasurement(android.view.View);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View);
+ method public abstract int getDecoratedStart(android.view.View);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View);
+ method public abstract int getTransformedStartWithDecoration(android.view.View);
+ method public abstract void offsetChild(android.view.View, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final android.support.v7.widget.RecyclerView.LayoutManager mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(int);
+ method public void setGravity(int);
+ method public void setOnDismissListener(android.support.v7.widget.PopupMenu.OnDismissListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.PopupMenu.OnMenuItemClickListener);
+ method public void show();
+ }
+
+ public static abstract interface PopupMenu.OnDismissListener {
+ method public abstract void onDismiss(android.support.v7.widget.PopupMenu);
+ }
+
+ public static abstract interface PopupMenu.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingChild android.support.v4.view.ScrollingView {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean drawChild(android.graphics.Canvas, android.view.View, long);
+ method public android.view.View findChildViewUnder(float, float);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findContainingViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForAdapterPosition(int);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForItemId(long);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForLayoutPosition(int);
+ method public deprecated android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public android.support.v7.widget.RecyclerView.Adapter getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method public deprecated int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder getChildViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public android.support.v7.widget.RecyclerView.OnFlingListener getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public android.support.v7.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method public boolean isLayoutFrozen();
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(int, int);
+ method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+ method public void setAdapter(android.support.v7.widget.RecyclerView.Adapter);
+ method public void setChildDrawingOrderCallback(android.support.v7.widget.RecyclerView.ChildDrawingOrderCallback);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(android.support.v7.widget.RecyclerView.ItemAnimator);
+ method public void setItemViewCacheSize(int);
+ method public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public void setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener);
+ method public deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool);
+ method public void setRecyclerListener(android.support.v7.widget.RecyclerView.RecyclerListener);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(android.support.v7.widget.RecyclerView.ViewCacheExtension);
+ method public void smoothScrollBy(int, int);
+ method public void smoothScrollBy(int, int, android.view.animation.Interpolator);
+ method public void smoothScrollToPosition(int);
+ method public void stopScroll();
+ method public void swapAdapter(android.support.v7.widget.RecyclerView.Adapter, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class RecyclerView.Adapter<VH extends android.support.v7.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, java.lang.Object);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(android.support.v7.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public static abstract class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, java.lang.Object);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public static abstract interface RecyclerView.ChildDrawingOrderCallback {
+ method public abstract int onGetChildDrawingOrder(int, int);
+ }
+
+ public static abstract class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
+ method public final void dispatchAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List<java.lang.Object>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ public static abstract class RecyclerView.ItemAnimator.AdapterChanges implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public abstract void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public int bottom;
+ field public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public static abstract class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method public deprecated void getItemOffsets(android.graphics.Rect, int, android.support.v7.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ }
+
+ public static abstract class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View);
+ method public void addDisappearingView(android.view.View, int);
+ method public void addView(android.view.View);
+ method public void addView(android.view.View, int);
+ method public void assertInLayoutOrScroll(java.lang.String);
+ method public void assertNotInLayoutOrScroll(java.lang.String);
+ method public void attachView(android.view.View, int, android.support.v7.widget.RecyclerView.LayoutParams);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public void collectInitialPrefetchPositions(int, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public int computeHorizontalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.view.View findViewByPosition(int);
+ method public abstract android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.content.Context, android.util.AttributeSet);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View getChildAt(int);
+ method public int getChildCount();
+ method public static deprecated int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View getFocusedChild();
+ method public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method public int getMinimumHeight();
+ method public int getMinimumWidth();
+ method public int getPaddingBottom();
+ method public int getPaddingEnd();
+ method public int getPaddingLeft();
+ method public int getPaddingRight();
+ method public int getPaddingStart();
+ method public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static android.support.v7.widget.RecyclerView.LayoutManager.Properties getProperties(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onAdapterChanged(android.support.v7.widget.RecyclerView.Adapter, android.support.v7.widget.RecyclerView.Adapter);
+ method public boolean onAddFocusables(android.support.v7.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
+ method public void onAttachedToWindow(android.support.v7.widget.RecyclerView);
+ method public deprecated void onDetachedFromWindow(android.support.v7.widget.RecyclerView);
+ method public void onDetachedFromWindow(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.Recycler);
+ method public android.view.View onFocusSearchFailed(android.view.View, int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsChanged(android.support.v7.widget.RecyclerView);
+ method public void onItemsMoved(android.support.v7.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int, java.lang.Object);
+ method public void onLayoutChildren(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onLayoutCompleted(android.support.v7.widget.RecyclerView.State);
+ method public void onMeasure(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, int);
+ method public deprecated boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.view.View, android.view.View);
+ method public boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, android.view.View, android.view.View);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, android.os.Bundle);
+ method public boolean performAccessibilityActionForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, int, android.os.Bundle);
+ method public void postOnAnimation(java.lang.Runnable);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(java.lang.Runnable);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, int);
+ method public void startSmoothScroll(android.support.v7.widget.RecyclerView.SmoothScroller);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static abstract interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public abstract void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public RecyclerView.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method public deprecated int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static abstract interface RecyclerView.OnChildAttachStateChangeListener {
+ method public abstract void onChildViewAttachedToWindow(android.view.View);
+ method public abstract void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public static abstract class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static abstract interface RecyclerView.OnItemTouchListener {
+ method public abstract boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public abstract void onRequestDisallowInterceptTouchEvent(boolean);
+ method public abstract void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(android.support.v7.widget.RecyclerView, int);
+ method public void onScrolled(android.support.v7.widget.RecyclerView, int, int);
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public android.support.v7.widget.RecyclerView.ViewHolder getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<android.support.v7.widget.RecyclerView.ViewHolder> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static abstract interface RecyclerView.RecyclerListener {
+ method public abstract void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements android.support.v7.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.view.View findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getTargetPosition();
+ method public deprecated void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View);
+ method protected abstract void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int, android.view.animation.Interpolator);
+ method public int getDuration();
+ method public int getDx();
+ method public int getDy();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(int);
+ method public void setDy(int);
+ method public void setInterpolator(android.view.animation.Interpolator);
+ method public void update(int, int, int, android.view.animation.Interpolator);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static abstract interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public abstract android.graphics.PointF computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T get(int);
+ method public int getItemCount();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, java.lang.Object);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public static abstract class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View getViewForPositionAndType(android.support.v7.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public static abstract class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method public final deprecated int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(android.support.v7.widget.RecyclerView);
+ method public android.support.v4.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public class SearchView extends android.support.v7.widget.LinearLayoutCompat implements android.support.v7.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+ method public int getImeOptions();
+ method public int getInputType();
+ method public int getMaxWidth();
+ method public java.lang.CharSequence getQuery();
+ method public java.lang.CharSequence getQueryHint();
+ method public android.support.v4.widget.CursorAdapter getSuggestionsAdapter();
+ method public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(android.support.v7.widget.SearchView.OnCloseListener);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+ method public void setOnQueryTextListener(android.support.v7.widget.SearchView.OnQueryTextListener);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener);
+ method public void setOnSuggestionListener(android.support.v7.widget.SearchView.OnSuggestionListener);
+ method public void setQuery(java.lang.CharSequence, boolean);
+ method public void setQueryHint(java.lang.CharSequence);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(android.support.v4.widget.CursorAdapter);
+ }
+
+ public static abstract interface SearchView.OnCloseListener {
+ method public abstract boolean onClose();
+ }
+
+ public static abstract interface SearchView.OnQueryTextListener {
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchView.OnSuggestionListener {
+ method public abstract boolean onSuggestionClick(int);
+ method public abstract boolean onSuggestionSelect(int);
+ }
+
+ public class ShareActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context);
+ method public android.view.View onCreateActionView();
+ method public void setOnShareTargetSelectedListener(android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener);
+ method public void setShareHistoryFileName(java.lang.String);
+ method public void setShareIntent(android.content.Intent);
+ field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public abstract boolean onShareTargetSelected(android.support.v7.widget.ShareActionProvider, android.content.Intent);
+ }
+
+ public abstract class SimpleItemAnimator extends android.support.v7.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends android.support.v7.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView) throws java.lang.IllegalStateException;
+ method public abstract int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[] calculateScrollDistance(int, int);
+ method protected android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int[] findFirstCompletelyVisibleItemPositions(int[]);
+ method public int[] findFirstVisibleItemPositions(int[]);
+ method public int[] findLastCompletelyVisibleItemPositions(int[]);
+ method public int[] findLastVisibleItemPositions(int[]);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field public static final deprecated int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet, int);
+ method public boolean getShowText();
+ method public boolean getSplitTrack();
+ method public int getSwitchMinWidth();
+ method public int getSwitchPadding();
+ method public java.lang.CharSequence getTextOff();
+ method public java.lang.CharSequence getTextOn();
+ method public android.graphics.drawable.Drawable getThumbDrawable();
+ method public int getThumbTextPadding();
+ method public android.content.res.ColorStateList getThumbTintList();
+ method public android.graphics.PorterDuff.Mode getThumbTintMode();
+ method public android.graphics.drawable.Drawable getTrackDrawable();
+ method public android.content.res.ColorStateList getTrackTintList();
+ method public android.graphics.PorterDuff.Mode getTrackTintMode();
+ method public void onMeasure(int, int);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context, int);
+ method public void setSwitchTypeface(android.graphics.Typeface, int);
+ method public void setSwitchTypeface(android.graphics.Typeface);
+ method public void setTextOff(java.lang.CharSequence);
+ method public void setTextOn(java.lang.CharSequence);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public abstract interface ThemedSpinnerAdapter implements android.widget.SpinnerAdapter {
+ method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
+ method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public class Toolbar extends android.view.ViewGroup {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method public int getContentInsetEnd();
+ method public int getContentInsetEndWithActions();
+ method public int getContentInsetLeft();
+ method public int getContentInsetRight();
+ method public int getContentInsetStart();
+ method public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method public android.graphics.drawable.Drawable getLogo();
+ method public java.lang.CharSequence getLogoDescription();
+ method public android.view.Menu getMenu();
+ method public java.lang.CharSequence getNavigationContentDescription();
+ method public android.graphics.drawable.Drawable getNavigationIcon();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public int getTitleMarginBottom();
+ method public int getTitleMarginEnd();
+ method public int getTitleMarginStart();
+ method public int getTitleMarginTop();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(int);
+ method public boolean isOverflowMenuShowing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable);
+ method public void setLogoDescription(int);
+ method public void setLogoDescription(java.lang.CharSequence);
+ method public void setNavigationContentDescription(int);
+ method public void setNavigationContentDescription(java.lang.CharSequence);
+ method public void setNavigationIcon(int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.Toolbar.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public void setSubtitle(int);
+ method public void setSubtitle(java.lang.CharSequence);
+ method public void setSubtitleTextAppearance(android.content.Context, int);
+ method public void setSubtitleTextColor(int);
+ method public void setTitle(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context, int);
+ method public void setTitleTextColor(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends android.support.v7.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(android.support.v7.widget.Toolbar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ }
+
+ public static abstract interface Toolbar.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public static class Toolbar.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel);
+ ctor public Toolbar.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public Toolbar.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.widget.Toolbar.SavedState> CREATOR;
+ }
+
+}
+
+package android.support.v7.widget.helper {
+
+ public class ItemTouchHelper extends android.support.v7.widget.RecyclerView.ItemDecoration implements android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(android.support.v7.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public static abstract class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ViewHolder chooseDropTarget(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<android.support.v7.widget.RecyclerView.ViewHolder>, int, int);
+ method public void clearView(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(android.support.v7.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static android.support.v7.widget.helper.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(android.support.v7.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public abstract boolean onMove(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoved(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method public abstract void onSwiped(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public static abstract class ItemTouchHelper.SimpleCallback extends android.support.v7.widget.helper.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static abstract interface ItemTouchHelper.ViewDropHandler {
+ method public abstract void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public abstract interface ItemTouchUIUtil {
+ method public abstract void clearView(android.view.View);
+ method public abstract void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onSelected(android.view.View);
+ }
+
+}
+
+package android.support.v7.widget.util {
+
+ public abstract class SortedListAdapterCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedListAdapterCallback(android.support.v7.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+}
+
diff --git a/api/current.txt b/api/current.txt
index 0b2129f..bab19b1 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -501,7 +501,6 @@
method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
method public static java.lang.Object getTag(android.view.View);
- method public deprecated boolean isDirty(android.support.design.widget.CoordinatorLayout, V);
method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
@@ -1948,36 +1947,44 @@
public abstract class OnboardingFragment extends android.app.Fragment {
ctor public OnboardingFragment();
method protected final int getCurrentPageIndex();
+ method public final int getIconResourceId();
method public final int getLogoResourceId();
method protected abstract int getPageCount();
method protected abstract java.lang.CharSequence getPageDescription(int);
method protected abstract java.lang.CharSequence getPageTitle(int);
method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
method protected android.animation.Animator onCreateEnterAnimation();
method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
method protected void onFinishFragment();
method protected void onPageChanged(int, int);
method public int onProvideTheme();
+ method public final void setIconResouceId(int);
method public final void setLogoResourceId(int);
}
public abstract class OnboardingSupportFragment extends android.support.v4.app.Fragment {
ctor public OnboardingSupportFragment();
method protected final int getCurrentPageIndex();
+ method public final int getIconResourceId();
method public final int getLogoResourceId();
method protected abstract int getPageCount();
method protected abstract java.lang.CharSequence getPageDescription(int);
method protected abstract java.lang.CharSequence getPageTitle(int);
method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
method protected android.animation.Animator onCreateEnterAnimation();
method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
method protected void onFinishFragment();
method protected void onPageChanged(int, int);
method public int onProvideTheme();
+ method public final void setIconResouceId(int);
method public final void setLogoResourceId(int);
}
@@ -4121,6 +4128,13 @@
field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
}
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
public class AppLaunchChecker {
ctor public AppLaunchChecker();
method public static boolean hasStartedFromLauncher(android.content.Context);
@@ -4282,14 +4296,12 @@
method public java.lang.Object getLastCustomNonConfigurationInstance();
method public android.support.v4.app.FragmentManager getSupportFragmentManager();
method public android.support.v4.app.LoaderManager getSupportLoaderManager();
- method public final deprecated android.support.v4.media.session.MediaControllerCompat getSupportMediaController();
method public void onAttachFragment(android.support.v4.app.Fragment);
method protected void onResumeFragments();
method public java.lang.Object onRetainCustomNonConfigurationInstance();
method public final java.lang.Object onRetainNonConfigurationInstance();
method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
- method public final deprecated void setSupportMediaController(android.support.v4.media.session.MediaControllerCompat);
method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
method public void startIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
@@ -4404,7 +4416,7 @@
method public abstract java.lang.String getName();
}
- public abstract class FragmentManager.FragmentLifecycleCallbacks {
+ public static abstract class FragmentManager.FragmentLifecycleCallbacks {
ctor public FragmentManager.FragmentLifecycleCallbacks();
method public void onFragmentActivityCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
method public void onFragmentAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
@@ -5364,6 +5376,17 @@
}
+package android.support.v4.math {
+
+ public class MathUtils {
+ ctor public MathUtils();
+ method public static float clamp(float, int, int);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ }
+
+}
+
package android.support.v4.media {
public final class MediaBrowserCompat {
@@ -5689,9 +5712,11 @@
method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> getQueue();
method public java.lang.CharSequence getQueueTitle();
method public int getRatingType();
+ method public int getRepeatMode();
method public android.app.PendingIntent getSessionActivity();
method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+ method public boolean isShuffleModeEnabled();
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
@@ -5709,8 +5734,10 @@
method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat);
method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
method public void onQueueTitleChanged(java.lang.CharSequence);
+ method public void onRepeatModeChanged(int);
method public void onSessionDestroyed();
method public void onSessionEvent(java.lang.String, android.os.Bundle);
+ method public void onShuffleModeChanged(boolean);
}
public static final class MediaControllerCompat.PlaybackInfo {
@@ -5739,6 +5766,8 @@
method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction, android.os.Bundle);
method public abstract void sendCustomAction(java.lang.String, android.os.Bundle);
method public abstract void setRating(android.support.v4.media.RatingCompat);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleModeEnabled(boolean);
method public abstract void skipToNext();
method public abstract void skipToPrevious();
method public abstract void skipToQueueItem(long);
@@ -5772,7 +5801,9 @@
method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
method public void setQueueTitle(java.lang.CharSequence);
method public void setRatingType(int);
+ method public void setRepeatMode(int);
method public void setSessionActivity(android.app.PendingIntent);
+ method public void setShuffleModeEnabled(boolean);
field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
}
@@ -5795,6 +5826,8 @@
method public void onRewind();
method public void onSeekTo(long);
method public void onSetRating(android.support.v4.media.RatingCompat);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleModeEnabled(boolean);
method public void onSkipToNext();
method public void onSkipToPrevious();
method public void onSkipToQueueItem(long);
@@ -5870,12 +5903,17 @@
field public static final long ACTION_REWIND = 8L; // 0x8L
field public static final long ACTION_SEEK_TO = 256L; // 0x100L
field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
field public static final long ACTION_STOP = 1L; // 0x1L
field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat> CREATOR;
field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
field public static final int STATE_BUFFERING = 6; // 0x6
field public static final int STATE_CONNECTING = 8; // 0x8
field public static final int STATE_ERROR = 7; // 0x7
@@ -10815,3 +10853,32 @@
}
+package android.support.wearable.view {
+
+ public class BoxInsetLayout extends android.view.ViewGroup {
+ ctor public BoxInsetLayout(android.content.Context);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected void onLayout(boolean, int, int, int, int);
+ }
+
+ public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.support.wearable.view.BoxInsetLayout.LayoutParams);
+ field public static final int BOX_ALL = 15; // 0xf
+ field public static final int BOX_BOTTOM = 8; // 0x8
+ field public static final int BOX_LEFT = 1; // 0x1
+ field public static final int BOX_NONE = 0; // 0x0
+ field public static final int BOX_RIGHT = 4; // 0x4
+ field public static final int BOX_TOP = 2; // 0x2
+ field public int boxedEdges;
+ }
+
+}
+
diff --git a/build.gradle b/build.gradle
index 3b9af42..0403270 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,9 +3,9 @@
import android.support.doclava.DoclavaMultilineJavadocOptionFileOption
import android.support.doclava.DoclavaTask
+import com.android.build.gradle.internal.coverage.JacocoPlugin
import com.android.build.gradle.internal.coverage.JacocoReportTask
import com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask
-import org.gradle.internal.os.OperatingSystem
import com.google.common.base.Charsets
import com.google.common.hash.HashCode
@@ -40,8 +40,8 @@
doclava project(':doclava')
}
-gradle.ext.currentSdk = 25
-ext.supportVersion = '25.2.0-SNAPSHOT'
+gradle.ext.currentSdk = 'current'
+ext.supportVersion = '26.0.0-SNAPSHOT'
ext.extraVersion = 41
ext.supportRepoOut = ''
ext.buildToolsVersion = '24.0.1'
@@ -54,12 +54,6 @@
// required for the doclava dependency.
ext.usePrebuilts = "true"
-// Use the embedded SDK by default, which can be overridden by setting the 'sdk.dir' property
-// (e.g. local.properties) or the 'ANDROID_HOME' environment variable.
-final String platform = OperatingSystem.current().isMacOsX() ? 'darwin' : 'linux'
-ext.sdkDirectory = "${rootDir}/../../prebuilts/fullsdk-${platform}";
-System.setProperty('android.home', sdkDirectory)
-
/*
* With the build server you are given two env variables.
* The OUT_DIR is a temporary directory you can use to put things during the build.
@@ -191,7 +185,7 @@
* @return a file collection containing the Android prebuilt JAR
*/
FileCollection getAndroidPrebuilt(apiLevel) {
- files("${ext.sdkDirectory}/platforms/android-${apiLevel}/android.jar")
+ files("${project.rootDir}/../../prebuilts/sdk/$apiLevel/android.jar")
}
void registerForDocsTask(Task task, Project subProject, releaseVariant) {
@@ -231,6 +225,8 @@
addStringOption "templatedir",
"${project.rootDir}/../../build/tools/droiddoc/templates-sdk"
addStringOption "federate Android", "http://developer.android.com"
+ addStringOption "federationapi Android",
+ "${project.rootDir}/../../prebuilts/sdk/api/24.txt"
addStringOption "stubpackages", "android.support.*"
addStringOption "samplesdir", "${project.rootDir}/samples"
addOption hdfOption
@@ -255,6 +251,8 @@
addStringOption "templatedir",
"${project.rootDir}/../../build/tools/droiddoc/templates-sdk"
addStringOption "federate Android", "http://developer.android.com"
+ addStringOption "federationapi Android",
+ "${project.rootDir}/../../prebuilts/sdk/api/24.txt"
addStringOption "stubpackages", "android.support.*"
}
exclude '**/BuildConfig.java'
@@ -347,6 +345,40 @@
// debugger.
project.android.buildTypes.debug.testCoverageEnabled = !hasProperty('android.injected.invoked.from.ide')
+ // Copy the class files in a jar to be later used to generate code coverage report
+ project.android.testVariants.all { v ->
+ // check if the variant has any source files
+ // and test coverage is enabled
+ if (v.buildType.testCoverageEnabled
+ && v.sourceSets.any { !it.java.sourceFiles.isEmpty() }) {
+ def jarifyTask = project.tasks.create(
+ name: "package${v.name.capitalize()}ClassFilesForCoverageReport",
+ type: Jar) {
+ from v.testedVariant.javaCompile.destinationDir
+ destinationDir file(project.distDir)
+ archiveName "${project.archivesBaseName}-${v.baseName}-allclasses.jar"
+ }
+ def jacocoAntConfig =
+ project.configurations[JacocoPlugin.ANT_CONFIGURATION_NAME]
+ def jacocoAntArtifacts = jacocoAntConfig.resolvedConfiguration.resolvedArtifacts
+ def version = jacocoAntArtifacts.find { "org.jacoco.ant".equals(it.name) }
+ .moduleVersion.id.version
+ def collectJacocoAntPackages = project.tasks.create(
+ name: "collectJacocoAntPackages",
+ type: Jar) {
+ from (jacocoAntArtifacts.collect { zipTree(it.getFile()) }) {
+ // exclude all the signatures the jar might have
+ exclude "META-INF/*.SF"
+ exclude "META-INF/*.DSA"
+ exclude "META-INF/*.RSA"
+ }
+ destinationDir file(project.distDir)
+ archiveName "jacocoant-" + version + ".jar"
+ }
+ v.assemble.dependsOn jarifyTask, collectJacocoAntPackages
+ }
+ }
+
// Enforce NewApi lint check as fatal.
project.android.lintOptions.check 'NewApi'
project.android.lintOptions.fatal 'NewApi'
diff --git a/compat/api20/android/support/v4/app/NotificationCompatApi20.java b/compat/api20/android/support/v4/app/NotificationCompatApi20.java
index 8f4059b..95205d4 100644
--- a/compat/api20/android/support/v4/app/NotificationCompatApi20.java
+++ b/compat/api20/android/support/v4/app/NotificationCompatApi20.java
@@ -24,13 +24,11 @@
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.RemoteViews;
import java.util.ArrayList;
@RequiresApi(20)
-@TargetApi(20)
class NotificationCompatApi20 {
public static class Builder implements NotificationBuilderWithBuilderAccessor,
NotificationBuilderWithActions {
diff --git a/compat/api20/android/support/v4/app/RemoteInputCompatApi20.java b/compat/api20/android/support/v4/app/RemoteInputCompatApi20.java
index 2949cfd..1da9c03 100644
--- a/compat/api20/android/support/v4/app/RemoteInputCompatApi20.java
+++ b/compat/api20/android/support/v4/app/RemoteInputCompatApi20.java
@@ -20,10 +20,8 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(20)
-@TargetApi(20)
class RemoteInputCompatApi20 {
static RemoteInputCompatBase.RemoteInput[] toCompat(RemoteInput[] srcArray,
RemoteInputCompatBase.RemoteInput.Factory factory) {
diff --git a/compat/api20/android/support/v4/view/WindowInsetsCompatApi20.java b/compat/api20/android/support/v4/view/WindowInsetsCompatApi20.java
index 617920c..6d5a547 100644
--- a/compat/api20/android/support/v4/view/WindowInsetsCompatApi20.java
+++ b/compat/api20/android/support/v4/view/WindowInsetsCompatApi20.java
@@ -17,11 +17,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.WindowInsets;
@RequiresApi(20)
-@TargetApi(20)
class WindowInsetsCompatApi20 {
public static Object consumeSystemWindowInsets(Object insets) {
return ((WindowInsets) insets).consumeSystemWindowInsets();
diff --git a/compat/api21/android/support/v4/app/ActivityCompatApi21.java b/compat/api21/android/support/v4/app/ActivityCompatApi21.java
index ddc95fd..7fdeb14 100644
--- a/compat/api21/android/support/v4/app/ActivityCompatApi21.java
+++ b/compat/api21/android/support/v4/app/ActivityCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.SharedElementCallback;
import android.content.Context;
@@ -30,7 +29,6 @@
import java.util.Map;
@RequiresApi(21)
-@TargetApi(21)
class ActivityCompatApi21 {
public static void finishAfterTransition(Activity activity) {
diff --git a/compat/api21/android/support/v4/app/ActivityOptionsCompat21.java b/compat/api21/android/support/v4/app/ActivityOptionsCompat21.java
index 16287d2..8f2b2e8 100644
--- a/compat/api21/android/support/v4/app/ActivityOptionsCompat21.java
+++ b/compat/api21/android/support/v4/app/ActivityOptionsCompat21.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Context;
@@ -27,7 +26,6 @@
import android.view.View;
@RequiresApi(21)
-@TargetApi(21)
class ActivityOptionsCompat21 {
private final ActivityOptions mActivityOptions;
diff --git a/compat/api21/android/support/v4/app/AlarmManagerCompatApi21.java b/compat/api21/android/support/v4/app/AlarmManagerCompatApi21.java
new file mode 100644
index 0000000..4d8f1ab
--- /dev/null
+++ b/compat/api21/android/support/v4/app/AlarmManagerCompatApi21.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.support.annotation.RequiresApi;
+
+@RequiresApi(21)
+class AlarmManagerCompatApi21 {
+ static void setAlarmClock(AlarmManager alarmManager, long triggerTime,
+ PendingIntent showIntent, PendingIntent operation) {
+ alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),
+ operation);
+ }
+}
diff --git a/compat/api21/android/support/v4/app/NotificationCompatApi21.java b/compat/api21/android/support/v4/app/NotificationCompatApi21.java
index feeb044..3f38f4d 100644
--- a/compat/api21/android/support/v4/app/NotificationCompatApi21.java
+++ b/compat/api21/android/support/v4/app/NotificationCompatApi21.java
@@ -23,13 +23,11 @@
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.RemoteViews;
import java.util.ArrayList;
@RequiresApi(21)
-@TargetApi(21)
class NotificationCompatApi21 {
public static final String CATEGORY_CALL = Notification.CATEGORY_CALL;
diff --git a/compat/api21/android/support/v4/content/ContextCompatApi21.java b/compat/api21/android/support/v4/content/ContextCompatApi21.java
index 97a0b37..3a45915 100644
--- a/compat/api21/android/support/v4/content/ContextCompatApi21.java
+++ b/compat/api21/android/support/v4/content/ContextCompatApi21.java
@@ -19,12 +19,10 @@
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.File;
@RequiresApi(21)
-@TargetApi(21)
class ContextCompatApi21 {
public static Drawable getDrawable(Context context, int id) {
return context.getDrawable(id);
diff --git a/compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java b/compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java
index f08dbe1..51c3edf 100644
--- a/compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java
+++ b/compat/api21/android/support/v4/content/res/ResourcesCompatApi21.java
@@ -21,10 +21,8 @@
import android.content.res.Resources.Theme;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(21)
-@TargetApi(21)
class ResourcesCompatApi21 {
public static Drawable getDrawable(Resources res, int id, Theme theme)
throws NotFoundException {
diff --git a/compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java b/compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
index a5e8650..fa3796a 100644
--- a/compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
+++ b/compat/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
@@ -24,7 +24,6 @@
import android.graphics.drawable.DrawableContainer;
import android.graphics.drawable.InsetDrawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.AttributeSet;
import org.xmlpull.v1.XmlPullParser;
@@ -37,7 +36,6 @@
*/
@RequiresApi(21)
-@TargetApi(21)
class DrawableCompatLollipop {
public static void setHotspot(Drawable drawable, float x, float y) {
diff --git a/compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java b/compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
index 9458f7b..f3cd894 100644
--- a/compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
+++ b/compat/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
@@ -29,10 +29,8 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(21)
-@TargetApi(21)
class DrawableWrapperLollipop extends DrawableWrapperKitKat {
DrawableWrapperLollipop(Drawable drawable) {
diff --git a/compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java b/compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
index 7fae8a8..ae34419 100644
--- a/compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
+++ b/compat/api21/android/support/v4/view/LayoutInflaterCompatLollipop.java
@@ -18,11 +18,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.LayoutInflater;
@RequiresApi(21)
-@TargetApi(21)
class LayoutInflaterCompatLollipop {
static void setFactory(LayoutInflater inflater, LayoutInflaterFactory factory) {
inflater.setFactory2(factory != null
diff --git a/compat/api21/android/support/v4/view/ViewCompatLollipop.java b/compat/api21/android/support/v4/view/ViewCompatLollipop.java
index 26c462a..9d21d06 100644
--- a/compat/api21/android/support/v4/view/ViewCompatLollipop.java
+++ b/compat/api21/android/support/v4/view/ViewCompatLollipop.java
@@ -22,13 +22,11 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.ViewParent;
import android.view.WindowInsets;
@RequiresApi(21)
-@TargetApi(21)
class ViewCompatLollipop {
public interface OnApplyWindowInsetsListenerBridge {
diff --git a/compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java b/compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java
index 03430e6..4a14377 100644
--- a/compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java
+++ b/compat/api21/android/support/v4/view/ViewGroupCompatLollipop.java
@@ -17,11 +17,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ViewGroup;
@RequiresApi(21)
-@TargetApi(21)
class ViewGroupCompatLollipop {
public static void setTransitionGroup(ViewGroup group, boolean isTransitionGroup) {
diff --git a/compat/api21/android/support/v4/view/ViewParentCompatLollipop.java b/compat/api21/android/support/v4/view/ViewParentCompatLollipop.java
index 1e65a09..f64db1e 100644
--- a/compat/api21/android/support/v4/view/ViewParentCompatLollipop.java
+++ b/compat/api21/android/support/v4/view/ViewParentCompatLollipop.java
@@ -18,13 +18,11 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import android.view.View;
import android.view.ViewParent;
@RequiresApi(21)
-@TargetApi(21)
class ViewParentCompatLollipop {
private static final String TAG = "ViewParentCompat";
diff --git a/compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java b/compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
index 2b979a9..f51a53e 100644
--- a/compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
+++ b/compat/api21/android/support/v4/view/ViewPropertyAnimatorCompatLollipop.java
@@ -17,11 +17,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
@RequiresApi(21)
-@TargetApi(21)
class ViewPropertyAnimatorCompatLollipop {
public static void translationZ(View view, float value) {
diff --git a/compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java b/compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java
index 5bbb802..e81dc48 100644
--- a/compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java
+++ b/compat/api21/android/support/v4/view/WindowInsetsCompatApi21.java
@@ -18,11 +18,9 @@
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.WindowInsets;
@RequiresApi(21)
-@TargetApi(21)
class WindowInsetsCompatApi21 {
public static Object consumeStableInsets(Object insets) {
return ((WindowInsets) insets).consumeStableInsets();
diff --git a/compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java b/compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
index e24b873..7bbdb25 100644
--- a/compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
+++ b/compat/api21/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi21.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
@@ -29,7 +28,6 @@
*/
@RequiresApi(21)
-@TargetApi(21)
class AccessibilityNodeInfoCompatApi21 {
static List<Object> getActionList(Object info) {
Object result = ((AccessibilityNodeInfo) info).getActionList();
diff --git a/compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java b/compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
index 23fd7ca..23a9eb8 100644
--- a/compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
+++ b/compat/api21/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi21.java
@@ -18,7 +18,6 @@
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityWindowInfo;
/**
@@ -26,7 +25,6 @@
*/
@RequiresApi(21)
-@TargetApi(21)
class AccessibilityWindowInfoCompatApi21 {
public static Object obtain() {
diff --git a/compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java b/compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
index 835e4e0..d4cdbb8 100644
--- a/compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
+++ b/compat/api21/android/support/v4/view/animation/PathInterpolatorCompatApi21.java
@@ -18,7 +18,6 @@
import android.graphics.Path;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
@@ -27,7 +26,6 @@
*/
@RequiresApi(21)
-@TargetApi(21)
class PathInterpolatorCompatApi21 {
private PathInterpolatorCompatApi21() {
diff --git a/compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java b/compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
index 42aa89a..1e50e72 100644
--- a/compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
+++ b/compat/api21/android/support/v4/widget/CompoundButtonCompatLollipop.java
@@ -19,11 +19,9 @@
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.CompoundButton;
@RequiresApi(21)
-@TargetApi(21)
class CompoundButtonCompatLollipop {
static void setButtonTintList(CompoundButton button, ColorStateList tint) {
diff --git a/compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java b/compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
index f12bc23..017a6b0 100644
--- a/compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
+++ b/compat/api21/android/support/v4/widget/EdgeEffectCompatLollipop.java
@@ -18,11 +18,9 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.EdgeEffect;
@RequiresApi(21)
-@TargetApi(21)
class EdgeEffectCompatLollipop {
public static boolean onPull(Object edgeEffect, float deltaDistance, float displacement) {
((EdgeEffect) edgeEffect).onPull(deltaDistance, displacement);
diff --git a/compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java b/compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java
index 393efa6..f231722 100644
--- a/compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java
+++ b/compat/api21/android/support/v4/widget/PopupWindowCompatApi21.java
@@ -17,14 +17,12 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import android.widget.PopupWindow;
import java.lang.reflect.Field;
@RequiresApi(21)
-@TargetApi(21)
class PopupWindowCompatApi21 {
private static final String TAG = "PopupWindowCompatApi21";
diff --git a/compat/api22/android/support/v4/app/ActivityCompatApi22.java b/compat/api22/android/support/v4/app/ActivityCompatApi22.java
index 1efef64..889c188 100644
--- a/compat/api22/android/support/v4/app/ActivityCompatApi22.java
+++ b/compat/api22/android/support/v4/app/ActivityCompatApi22.java
@@ -19,10 +19,8 @@
import android.app.Activity;
import android.net.Uri;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(22)
-@TargetApi(22)
class ActivityCompatApi22 {
public static Uri getReferrer(Activity activity) {
return activity.getReferrer();
diff --git a/compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java b/compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
index dd482d4..8480357 100644
--- a/compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
+++ b/compat/api22/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi22.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -26,7 +25,6 @@
*/
@RequiresApi(22)
-@TargetApi(22)
class AccessibilityNodeInfoCompatApi22 {
public static Object getTraversalBefore(Object info) {
diff --git a/compat/api23/android/support/v4/app/ActivityCompatApi23.java b/compat/api23/android/support/v4/app/ActivityCompatApi23.java
index 9012f56..d63ca68 100644
--- a/compat/api23/android/support/v4/app/ActivityCompatApi23.java
+++ b/compat/api23/android/support/v4/app/ActivityCompatApi23.java
@@ -23,14 +23,12 @@
import android.graphics.RectF;
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import java.util.List;
import java.util.Map;
@RequiresApi(23)
-@TargetApi(23)
class ActivityCompatApi23 {
public interface OnSharedElementsReadyListenerBridge {
void onSharedElementsReady();
diff --git a/compat/api23/android/support/v4/app/ActivityOptionsCompat23.java b/compat/api23/android/support/v4/app/ActivityOptionsCompat23.java
index 81be941..08863a5 100644
--- a/compat/api23/android/support/v4/app/ActivityOptionsCompat23.java
+++ b/compat/api23/android/support/v4/app/ActivityOptionsCompat23.java
@@ -23,12 +23,10 @@
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Pair;
import android.view.View;
@RequiresApi(23)
-@TargetApi(23)
class ActivityOptionsCompat23 {
private final ActivityOptions mActivityOptions;
diff --git a/compat/api23/android/support/v4/app/AlarmManagerCompatApi23.java b/compat/api23/android/support/v4/app/AlarmManagerCompatApi23.java
new file mode 100644
index 0000000..894cbd6
--- /dev/null
+++ b/compat/api23/android/support/v4/app/AlarmManagerCompatApi23.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.support.annotation.RequiresApi;
+
+@RequiresApi(23)
+class AlarmManagerCompatApi23 {
+ static void setAndAllowWhileIdle(AlarmManager alarmManager, int type,
+ long triggerAtMillis, PendingIntent operation) {
+ alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);
+ }
+
+ static void setExactAndAllowWhileIdle(AlarmManager alarmManager, int type,
+ long triggerAtMillis, PendingIntent operation) {
+ alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
+ }
+}
diff --git a/compat/api23/android/support/v4/app/AppOpsManagerCompat23.java b/compat/api23/android/support/v4/app/AppOpsManagerCompat23.java
index 853fd5d..26448ee 100644
--- a/compat/api23/android/support/v4/app/AppOpsManagerCompat23.java
+++ b/compat/api23/android/support/v4/app/AppOpsManagerCompat23.java
@@ -19,14 +19,12 @@
import android.app.AppOpsManager;
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* AppOpsManager implementations for API 23.
*/
@RequiresApi(23)
-@TargetApi(23)
class AppOpsManagerCompat23 {
public static String permissionToOp(String permission) {
return AppOpsManager.permissionToOp(permission);
diff --git a/compat/api23/android/support/v4/app/NotificationCompatApi23.java b/compat/api23/android/support/v4/app/NotificationCompatApi23.java
index 5262ef3..2f8216c 100644
--- a/compat/api23/android/support/v4/app/NotificationCompatApi23.java
+++ b/compat/api23/android/support/v4/app/NotificationCompatApi23.java
@@ -18,10 +18,8 @@
import android.app.Notification;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(23)
-@TargetApi(23)
class NotificationCompatApi23 {
public static final String CATEGORY_REMINDER = Notification.CATEGORY_REMINDER;
diff --git a/compat/api23/android/support/v4/content/ContextCompatApi23.java b/compat/api23/android/support/v4/content/ContextCompatApi23.java
index c22f5b6..4ee261c 100644
--- a/compat/api23/android/support/v4/content/ContextCompatApi23.java
+++ b/compat/api23/android/support/v4/content/ContextCompatApi23.java
@@ -19,10 +19,8 @@
import android.content.Context;
import android.content.res.ColorStateList;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(23)
-@TargetApi(23)
class ContextCompatApi23 {
public static ColorStateList getColorStateList(Context context, int id) {
return context.getColorStateList(id);
diff --git a/compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java b/compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java
index eade1ef..4f34e7b 100644
--- a/compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java
+++ b/compat/api23/android/support/v4/content/res/ResourcesCompatApi23.java
@@ -21,10 +21,8 @@
import android.content.res.Resources.NotFoundException;
import android.content.res.Resources.Theme;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(23)
-@TargetApi(23)
class ResourcesCompatApi23 {
public static int getColor(Resources res, int id, Theme theme) throws NotFoundException {
return res.getColor(id, theme);
diff --git a/compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java b/compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
index e454d41..9186689 100644
--- a/compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
+++ b/compat/api23/android/support/v4/graphics/drawable/DrawableCompatApi23.java
@@ -18,14 +18,12 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of drawable compatibility that can call M APIs.
*/
@RequiresApi(23)
-@TargetApi(23)
class DrawableCompatApi23 {
public static boolean setLayoutDirection(Drawable drawable, int layoutDirection) {
return drawable.setLayoutDirection(layoutDirection);
diff --git a/compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java b/compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
index e4e2aa5..72a21a3 100644
--- a/compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
+++ b/compat/api23/android/support/v4/hardware/fingerprint/FingerprintManagerCompatApi23.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
@@ -36,7 +35,6 @@
* @hide
*/
@RequiresApi(23)
-@TargetApi(23)
@RestrictTo(LIBRARY_GROUP)
public final class FingerprintManagerCompatApi23 {
diff --git a/compat/api23/android/support/v4/text/ICUCompatApi23.java b/compat/api23/android/support/v4/text/ICUCompatApi23.java
index 182c6f3..0088f95 100644
--- a/compat/api23/android/support/v4/text/ICUCompatApi23.java
+++ b/compat/api23/android/support/v4/text/ICUCompatApi23.java
@@ -17,7 +17,6 @@
package android.support.v4.text;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
@@ -25,7 +24,6 @@
import java.util.Locale;
@RequiresApi(23)
-@TargetApi(23)
class ICUCompatApi23 {
private static final String TAG = "ICUCompatIcs";
diff --git a/compat/api23/android/support/v4/view/ViewCompatMarshmallow.java b/compat/api23/android/support/v4/view/ViewCompatMarshmallow.java
index 30645ec..d370371 100644
--- a/compat/api23/android/support/v4/view/ViewCompatMarshmallow.java
+++ b/compat/api23/android/support/v4/view/ViewCompatMarshmallow.java
@@ -17,11 +17,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
@RequiresApi(23)
-@TargetApi(23)
class ViewCompatMarshmallow {
public static void setScrollIndicators(View view, int indicators) {
view.setScrollIndicators(indicators);
diff --git a/compat/api23/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi23.java b/compat/api23/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi23.java
index 457cd39..c478e76 100644
--- a/compat/api23/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi23.java
+++ b/compat/api23/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi23.java
@@ -17,11 +17,9 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
@RequiresApi(23)
-@TargetApi(23)
class AccessibilityNodeInfoCompatApi23 {
public static Object getActionScrollToPosition() {
return AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_TO_POSITION;
diff --git a/compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java b/compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
index 6dddbdb..cbfb234 100644
--- a/compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
+++ b/compat/api23/android/support/v4/widget/CompoundButtonCompatApi23.java
@@ -18,11 +18,9 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.CompoundButton;
@RequiresApi(23)
-@TargetApi(23)
class CompoundButtonCompatApi23 {
static Drawable getButtonDrawable(CompoundButton button) {
diff --git a/compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java b/compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java
index 1483e41..9d30f61 100644
--- a/compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java
+++ b/compat/api23/android/support/v4/widget/PopupWindowCompatApi23.java
@@ -17,11 +17,9 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.PopupWindow;
@RequiresApi(23)
-@TargetApi(23)
class PopupWindowCompatApi23 {
static void setOverlapAnchor(PopupWindow popupWindow, boolean overlapAnchor) {
diff --git a/compat/api23/android/support/v4/widget/TextViewCompatApi23.java b/compat/api23/android/support/v4/widget/TextViewCompatApi23.java
index f31242b..9d63929 100644
--- a/compat/api23/android/support/v4/widget/TextViewCompatApi23.java
+++ b/compat/api23/android/support/v4/widget/TextViewCompatApi23.java
@@ -18,12 +18,10 @@
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.support.annotation.StyleRes;
import android.widget.TextView;
@RequiresApi(23)
-@TargetApi(23)
class TextViewCompatApi23 {
public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
textView.setTextAppearance(resId);
diff --git a/compat/api24/android/support/v4/app/ActivityOptionsCompat24.java b/compat/api24/android/support/v4/app/ActivityOptionsCompat24.java
index d33d8a2..8e0d520 100644
--- a/compat/api24/android/support/v4/app/ActivityOptionsCompat24.java
+++ b/compat/api24/android/support/v4/app/ActivityOptionsCompat24.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityOptions;
import android.app.PendingIntent;
@@ -30,7 +29,6 @@
import android.view.View;
@RequiresApi(24)
-@TargetApi(24)
class ActivityOptionsCompat24 {
public static ActivityOptionsCompat24 makeCustomAnimation(Context context,
diff --git a/compat/api24/android/support/v4/app/NotificationCompatApi24.java b/compat/api24/android/support/v4/app/NotificationCompatApi24.java
index 6a29d89..7126665 100644
--- a/compat/api24/android/support/v4/app/NotificationCompatApi24.java
+++ b/compat/api24/android/support/v4/app/NotificationCompatApi24.java
@@ -24,14 +24,12 @@
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.RemoteViews;
import java.util.ArrayList;
import java.util.List;
@RequiresApi(24)
-@TargetApi(24)
class NotificationCompatApi24 {
public static final String CATEGORY_CALL = Notification.CATEGORY_CALL;
diff --git a/compat/api24/android/support/v4/app/NotificationManagerCompatApi24.java b/compat/api24/android/support/v4/app/NotificationManagerCompatApi24.java
index 468592f..3e03dbd 100644
--- a/compat/api24/android/support/v4/app/NotificationManagerCompatApi24.java
+++ b/compat/api24/android/support/v4/app/NotificationManagerCompatApi24.java
@@ -17,10 +17,8 @@
import android.app.NotificationManager;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(24)
-@TargetApi(24)
class NotificationManagerCompatApi24 {
public static boolean areNotificationsEnabled(NotificationManager notificationManager) {
return notificationManager.areNotificationsEnabled();
diff --git a/compat/api24/android/support/v4/app/ServiceCompatApi24.java b/compat/api24/android/support/v4/app/ServiceCompatApi24.java
index 29b6112..74b8e2c 100644
--- a/compat/api24/android/support/v4/app/ServiceCompatApi24.java
+++ b/compat/api24/android/support/v4/app/ServiceCompatApi24.java
@@ -17,10 +17,8 @@
import android.app.Service;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(24)
-@TargetApi(24)
class ServiceCompatApi24 {
public static void stopForeground(Service service, int flags) {
service.stopForeground(flags);
diff --git a/compat/api24/android/support/v4/content/ContextCompatApi24.java b/compat/api24/android/support/v4/content/ContextCompatApi24.java
index a65f21b..c979fb4 100644
--- a/compat/api24/android/support/v4/content/ContextCompatApi24.java
+++ b/compat/api24/android/support/v4/content/ContextCompatApi24.java
@@ -18,12 +18,10 @@
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.File;
@RequiresApi(24)
-@TargetApi(24)
class ContextCompatApi24 {
public static File getDataDir(Context context) {
return context.getDataDir();
diff --git a/compat/api24/android/support/v4/net/ConnectivityManagerCompatApi24.java b/compat/api24/android/support/v4/net/ConnectivityManagerCompatApi24.java
index b6e86cb..c63062d 100644
--- a/compat/api24/android/support/v4/net/ConnectivityManagerCompatApi24.java
+++ b/compat/api24/android/support/v4/net/ConnectivityManagerCompatApi24.java
@@ -16,7 +16,6 @@
package android.support.v4.net;
-import android.annotation.TargetApi;
import android.net.ConnectivityManager;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
* Implementation of ConnectivityManagerCompat that can use API 24 APIs.
*/
@RequiresApi(24)
-@TargetApi(24)
class ConnectivityManagerCompatApi24 {
public static int getRestrictBackgroundStatus(ConnectivityManager cm) {
return cm.getRestrictBackgroundStatus();
diff --git a/compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java b/compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java
index 834c6ad..7a9e248 100644
--- a/compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java
+++ b/compat/api24/android/support/v4/net/TrafficStatsCompatApi24.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.net.TrafficStats;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -28,7 +27,6 @@
/** @hide */
@RequiresApi(24)
-@TargetApi(24)
@RestrictTo(LIBRARY_GROUP)
public class TrafficStatsCompatApi24 {
public static void tagDatagramSocket(DatagramSocket socket) throws SocketException {
diff --git a/compat/api24/android/support/v4/os/UserManagerCompatApi24.java b/compat/api24/android/support/v4/os/UserManagerCompatApi24.java
index ab6f91d..30a430c 100644
--- a/compat/api24/android/support/v4/os/UserManagerCompatApi24.java
+++ b/compat/api24/android/support/v4/os/UserManagerCompatApi24.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.os.UserManager;
import android.support.annotation.RequiresApi;
@@ -26,7 +25,6 @@
/** @hide */
@RequiresApi(24)
-@TargetApi(24)
@RestrictTo(LIBRARY_GROUP)
public class UserManagerCompatApi24 {
public static boolean isUserUnlocked(Context context) {
diff --git a/compat/api24/android/support/v4/view/PointerIconCompatApi24.java b/compat/api24/android/support/v4/view/PointerIconCompatApi24.java
index 424af92..0a54ae0 100644
--- a/compat/api24/android/support/v4/view/PointerIconCompatApi24.java
+++ b/compat/api24/android/support/v4/view/PointerIconCompatApi24.java
@@ -20,11 +20,9 @@
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.PointerIcon;
@RequiresApi(24)
-@TargetApi(24)
class PointerIconCompatApi24 {
public static Object getSystemIcon(Context context, int style) {
return PointerIcon.getSystemIcon(context, style);
diff --git a/compat/api24/android/support/v4/view/ViewCompatApi24.java b/compat/api24/android/support/v4/view/ViewCompatApi24.java
index 71366a8..f4193c1 100644
--- a/compat/api24/android/support/v4/view/ViewCompatApi24.java
+++ b/compat/api24/android/support/v4/view/ViewCompatApi24.java
@@ -17,12 +17,10 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.PointerIcon;
import android.view.View;
@RequiresApi(24)
-@TargetApi(24)
class ViewCompatApi24 {
public static void setPointerIcon(View view, Object pointerIcon) {
view.setPointerIcon((PointerIcon)pointerIcon);
diff --git a/compat/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java b/compat/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java
index 5e64091..8b593b3 100644
--- a/compat/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java
+++ b/compat/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(24)
-@TargetApi(24)
class AccessibilityNodeInfoCompatApi24 {
public static Object getActionSetProgress() {
return AccessibilityNodeInfo.AccessibilityAction.ACTION_SET_PROGRESS;
diff --git a/compat/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java b/compat/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java
index c8aa21a..6a68bca 100644
--- a/compat/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java
+++ b/compat/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityWindowInfo;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(24)
-@TargetApi(24)
class AccessibilityWindowInfoCompatApi24 {
public static CharSequence getTitle(Object info) {
return ((AccessibilityWindowInfo) info).getTitle();
diff --git a/compat/gingerbread/android/support/v4/animation/GingerbreadAnimatorCompatProvider.java b/compat/gingerbread/android/support/v4/animation/GingerbreadAnimatorCompatProvider.java
index 83ba12a..ec5379c 100644
--- a/compat/gingerbread/android/support/v4/animation/GingerbreadAnimatorCompatProvider.java
+++ b/compat/gingerbread/android/support/v4/animation/GingerbreadAnimatorCompatProvider.java
@@ -17,7 +17,6 @@
package android.support.v4.animation;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import java.util.ArrayList;
@@ -30,7 +29,6 @@
*/
@RequiresApi(9)
-@TargetApi(9)
class GingerbreadAnimatorCompatProvider implements AnimatorProvider {
@Override
diff --git a/compat/gingerbread/android/support/v4/app/BundleCompatGingerbread.java b/compat/gingerbread/android/support/v4/app/BundleCompatGingerbread.java
index f7656be..24da775 100644
--- a/compat/gingerbread/android/support/v4/app/BundleCompatGingerbread.java
+++ b/compat/gingerbread/android/support/v4/app/BundleCompatGingerbread.java
@@ -19,14 +19,12 @@
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@RequiresApi(9)
-@TargetApi(9)
class BundleCompatGingerbread {
private static final String TAG = "BundleCompatGingerbread";
diff --git a/compat/gingerbread/android/support/v4/app/NotificationCompatBase.java b/compat/gingerbread/android/support/v4/app/NotificationCompatBase.java
index 33447cc..1956a31 100644
--- a/compat/gingerbread/android/support/v4/app/NotificationCompatBase.java
+++ b/compat/gingerbread/android/support/v4/app/NotificationCompatBase.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
@@ -34,7 +33,6 @@
*/
@RestrictTo(LIBRARY_GROUP)
@RequiresApi(9)
-@TargetApi(9)
public class NotificationCompatBase {
private static Method sSetLatestEventInfo;
diff --git a/compat/gingerbread/android/support/v4/app/RemoteInputCompatBase.java b/compat/gingerbread/android/support/v4/app/RemoteInputCompatBase.java
index 85117dd..6912953 100644
--- a/compat/gingerbread/android/support/v4/app/RemoteInputCompatBase.java
+++ b/compat/gingerbread/android/support/v4/app/RemoteInputCompatBase.java
@@ -18,10 +18,8 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(9)
-@TargetApi(9)
class RemoteInputCompatBase {
public static abstract class RemoteInput {
diff --git a/compat/gingerbread/android/support/v4/content/res/ConfigurationHelperGingerbread.java b/compat/gingerbread/android/support/v4/content/res/ConfigurationHelperGingerbread.java
index 6667431..ac2db3c 100644
--- a/compat/gingerbread/android/support/v4/content/res/ConfigurationHelperGingerbread.java
+++ b/compat/gingerbread/android/support/v4/content/res/ConfigurationHelperGingerbread.java
@@ -19,11 +19,9 @@
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.DisplayMetrics;
@RequiresApi(9)
-@TargetApi(9)
class ConfigurationHelperGingerbread {
static int getScreenHeightDp(@NonNull Resources resources) {
diff --git a/compat/gingerbread/android/support/v4/graphics/drawable/DrawableCompatBase.java b/compat/gingerbread/android/support/v4/graphics/drawable/DrawableCompatBase.java
index 8e5cd9f..d871ad5 100644
--- a/compat/gingerbread/android/support/v4/graphics/drawable/DrawableCompatBase.java
+++ b/compat/gingerbread/android/support/v4/graphics/drawable/DrawableCompatBase.java
@@ -21,7 +21,6 @@
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.AttributeSet;
import org.xmlpull.v1.XmlPullParser;
@@ -34,7 +33,6 @@
*/
@RequiresApi(9)
-@TargetApi(9)
class DrawableCompatBase {
public static void setTint(Drawable drawable, int tint) {
diff --git a/compat/gingerbread/android/support/v4/graphics/drawable/DrawableWrapperGingerbread.java b/compat/gingerbread/android/support/v4/graphics/drawable/DrawableWrapperGingerbread.java
index 646c677..13efc32 100644
--- a/compat/gingerbread/android/support/v4/graphics/drawable/DrawableWrapperGingerbread.java
+++ b/compat/gingerbread/android/support/v4/graphics/drawable/DrawableWrapperGingerbread.java
@@ -27,7 +27,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Drawable which delegates all calls to it's wrapped {@link Drawable}.
@@ -37,7 +36,6 @@
*/
@RequiresApi(9)
-@TargetApi(9)
class DrawableWrapperGingerbread extends Drawable
implements Drawable.Callback, DrawableWrapper, TintAwareDrawable {
diff --git a/compat/gingerbread/android/support/v4/os/BuildCompat.java b/compat/gingerbread/android/support/v4/os/BuildCompat.java
index 7a2efe0..b8e9d9b 100644
--- a/compat/gingerbread/android/support/v4/os/BuildCompat.java
+++ b/compat/gingerbread/android/support/v4/os/BuildCompat.java
@@ -26,6 +26,12 @@
public class BuildCompat {
private BuildCompat() {
}
+ /* Boilerplate for isAtLeast${PLATFORM}:
+ * public static boolean isAtLeast*() {
+ * return !"REL".equals(VERSION.CODENAME)
+ * && ("${PLATFORM}".equals(VERSION.CODENAME) || VERSION.CODENAME.startsWith("${PLATFORM}MR"));
+ * }
+ */
/**
* Check if the device is running on the Android N release or newer.
diff --git a/compat/gingerbread/android/support/v4/view/LayoutInflaterCompatBase.java b/compat/gingerbread/android/support/v4/view/LayoutInflaterCompatBase.java
index 5d97d04..3a57106 100644
--- a/compat/gingerbread/android/support/v4/view/LayoutInflaterCompatBase.java
+++ b/compat/gingerbread/android/support/v4/view/LayoutInflaterCompatBase.java
@@ -18,13 +18,11 @@
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@RequiresApi(9)
-@TargetApi(9)
class LayoutInflaterCompatBase {
static class FactoryWrapper implements LayoutInflater.Factory {
diff --git a/compat/gingerbread/android/support/v4/view/ViewCompatBase.java b/compat/gingerbread/android/support/v4/view/ViewCompatBase.java
index 7c81f5e..75100c6 100644
--- a/compat/gingerbread/android/support/v4/view/ViewCompatBase.java
+++ b/compat/gingerbread/android/support/v4/view/ViewCompatBase.java
@@ -16,7 +16,6 @@
package android.support.v4.view;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
@@ -29,7 +28,6 @@
import java.lang.reflect.Field;
@RequiresApi(9)
-@TargetApi(9)
class ViewCompatBase {
private static final String TAG = "ViewCompatBase";
diff --git a/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorCompatBase.java b/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorCompatBase.java
index 5f3e253..e885de3 100644
--- a/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorCompatBase.java
+++ b/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorCompatBase.java
@@ -18,7 +18,6 @@
import android.graphics.Path;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.animation.Interpolator;
/**
@@ -26,7 +25,6 @@
*/
@RequiresApi(9)
-@TargetApi(9)
class PathInterpolatorCompatBase {
private PathInterpolatorCompatBase() {
diff --git a/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorGingerbread.java b/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorGingerbread.java
index 4c96b97..dff9cf6 100644
--- a/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorGingerbread.java
+++ b/compat/gingerbread/android/support/v4/view/animation/PathInterpolatorGingerbread.java
@@ -19,7 +19,6 @@
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.animation.Interpolator;
/**
@@ -27,7 +26,6 @@
*/
@RequiresApi(9)
-@TargetApi(9)
class PathInterpolatorGingerbread implements Interpolator {
/**
diff --git a/compat/gingerbread/android/support/v4/widget/CompoundButtonCompatGingerbread.java b/compat/gingerbread/android/support/v4/widget/CompoundButtonCompatGingerbread.java
index 0fe01f0..ba0ed38 100644
--- a/compat/gingerbread/android/support/v4/widget/CompoundButtonCompatGingerbread.java
+++ b/compat/gingerbread/android/support/v4/widget/CompoundButtonCompatGingerbread.java
@@ -20,14 +20,12 @@
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import android.widget.CompoundButton;
import java.lang.reflect.Field;
@RequiresApi(9)
-@TargetApi(9)
class CompoundButtonCompatGingerbread {
private static final String TAG = "CompoundButtonCompatGingerbread";
diff --git a/compat/gingerbread/android/support/v4/widget/ListViewCompatGingerbread.java b/compat/gingerbread/android/support/v4/widget/ListViewCompatGingerbread.java
index 79edf2c..c390ba1 100644
--- a/compat/gingerbread/android/support/v4/widget/ListViewCompatGingerbread.java
+++ b/compat/gingerbread/android/support/v4/widget/ListViewCompatGingerbread.java
@@ -17,12 +17,10 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.widget.ListView;
@RequiresApi(9)
-@TargetApi(9)
class ListViewCompatGingerbread {
static void scrollListBy(final ListView listView, int y) {
final int firstPosition = listView.getFirstVisiblePosition();
diff --git a/compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java b/compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
index e5f3bbf..81c3a90 100644
--- a/compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/app/ActivityCompatHoneycomb.java
@@ -18,7 +18,6 @@
import android.app.Activity;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -28,7 +27,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class ActivityCompatHoneycomb {
static void invalidateOptionsMenu(Activity activity) {
activity.invalidateOptionsMenu();
diff --git a/compat/honeycomb/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java b/compat/honeycomb/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
index c75e6a2..f7d42b6 100644
--- a/compat/honeycomb/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
+++ b/compat/honeycomb/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -31,7 +30,6 @@
* @hide
*/
@RequiresApi(11)
-@TargetApi(11)
@RestrictTo(LIBRARY_GROUP)
public interface NotificationBuilderWithBuilderAccessor {
public Notification.Builder getBuilder();
diff --git a/compat/honeycomb/android/support/v4/app/NotificationCompatHoneycomb.java b/compat/honeycomb/android/support/v4/app/NotificationCompatHoneycomb.java
index 44ef21a..43ce5ed 100644
--- a/compat/honeycomb/android/support/v4/app/NotificationCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/app/NotificationCompatHoneycomb.java
@@ -21,11 +21,9 @@
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.RemoteViews;
@RequiresApi(11)
-@TargetApi(11)
class NotificationCompatHoneycomb {
static Notification add(Context context, Notification n,
CharSequence contentTitle, CharSequence contentText, CharSequence contentInfo,
diff --git a/compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
index 6b804ad..83fb972 100644
--- a/compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/content/ContextCompatHoneycomb.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.Intent;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.File;
@@ -28,7 +27,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class ContextCompatHoneycomb {
static void startActivities(Context context, Intent[] intents) {
diff --git a/compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
index 0dcd0d7..dec61db 100644
--- a/compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/content/ExecutorCompatHoneycomb.java
@@ -18,7 +18,6 @@
import android.os.AsyncTask;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.util.concurrent.Executor;
@@ -27,7 +26,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class ExecutorCompatHoneycomb {
public static Executor getParallelExecutor() {
return AsyncTask.THREAD_POOL_EXECUTOR;
diff --git a/compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java b/compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
index 81ada48..d3243d6 100644
--- a/compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/content/IntentCompatHoneycomb.java
@@ -19,10 +19,8 @@
import android.content.ComponentName;
import android.content.Intent;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(11)
-@TargetApi(11)
class IntentCompatHoneycomb {
public static Intent makeMainActivity(ComponentName mainActivity) {
return Intent.makeMainActivity(mainActivity);
diff --git a/compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
index e19f8a8..93605af 100644
--- a/compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableCompatHoneycomb.java
@@ -18,14 +18,12 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of drawable compatibility that can call Honeycomb APIs.
*/
@RequiresApi(11)
-@TargetApi(11)
class DrawableCompatHoneycomb {
public static void jumpToCurrentState(Drawable drawable) {
diff --git a/compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
index 1bd6355..1b5f112 100644
--- a/compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/graphics/drawable/DrawableWrapperHoneycomb.java
@@ -21,10 +21,8 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(11)
-@TargetApi(11)
class DrawableWrapperHoneycomb extends DrawableWrapperGingerbread {
DrawableWrapperHoneycomb(Drawable drawable) {
diff --git a/compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java b/compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
index 1b3836e..60bb892 100644
--- a/compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/os/AsyncTaskCompatHoneycomb.java
@@ -18,14 +18,12 @@
import android.os.AsyncTask;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of AsyncTask compatibility that can call Honeycomb APIs.
*/
@RequiresApi(11)
-@TargetApi(11)
class AsyncTaskCompatHoneycomb {
static <Params, Progress, Result> void executeParallel(
diff --git a/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
index 80425d8..caf0657 100644
--- a/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.KeyEvent;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class KeyEventCompatHoneycomb {
public static int normalizeMetaState(int metaState) {
return KeyEvent.normalizeMetaState(metaState);
diff --git a/compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java b/compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
index 7eea934..7edae85 100644
--- a/compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
+++ b/compat/honeycomb/android/support/v4/view/LayoutInflaterCompatHC.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
@@ -27,7 +26,6 @@
import java.lang.reflect.Field;
@RequiresApi(11)
-@TargetApi(11)
class LayoutInflaterCompatHC {
private static final String TAG = "LayoutInflaterCompatHC";
diff --git a/compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
index 0b267d2..f8597bc 100644
--- a/compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/view/MenuItemCompatHoneycomb.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.MenuItem;
import android.view.View;
@@ -26,7 +25,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class MenuItemCompatHoneycomb {
public static void setShowAsAction(MenuItem item, int actionEnum) {
item.setShowAsAction(actionEnum);
diff --git a/compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
index 189dc03..f83a39a 100644
--- a/compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/view/VelocityTrackerCompatHoneycomb.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.VelocityTracker;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class VelocityTrackerCompatHoneycomb {
public static float getXVelocity(VelocityTracker tracker, int pointerId) {
return tracker.getXVelocity(pointerId);
diff --git a/compat/honeycomb/android/support/v4/view/ViewCompatHC.java b/compat/honeycomb/android/support/v4/view/ViewCompatHC.java
index 607175b..fc57f9f 100644
--- a/compat/honeycomb/android/support/v4/view/ViewCompatHC.java
+++ b/compat/honeycomb/android/support/v4/view/ViewCompatHC.java
@@ -20,12 +20,10 @@
import android.graphics.Matrix;
import android.graphics.Paint;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.ViewParent;
@RequiresApi(11)
-@TargetApi(11)
class ViewCompatHC {
static long getFrameTime() {
return ValueAnimator.getFrameDelay();
diff --git a/compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java b/compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
index 3b31adf..4e010c6 100644
--- a/compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
+++ b/compat/honeycomb/android/support/v4/view/ViewGroupCompatHC.java
@@ -18,11 +18,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ViewGroup;
@RequiresApi(11)
-@TargetApi(11)
class ViewGroupCompatHC {
private ViewGroupCompatHC() {
}
diff --git a/compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java b/compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
index 01867d8..f44e398 100644
--- a/compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
+++ b/compat/honeycomb/android/support/v4/widget/SearchViewCompatHoneycomb.java
@@ -20,7 +20,6 @@
import android.content.ComponentName;
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.widget.SearchView;
import android.widget.SearchView.OnCloseListener;
@@ -31,7 +30,6 @@
*/
@RequiresApi(11)
-@TargetApi(11)
class SearchViewCompatHoneycomb {
public static void checkIfLegalArg(View searchView) {
diff --git a/compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java b/compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
index 9aaae0b..8f5a670 100644
--- a/compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
+++ b/compat/honeycomb_mr1/android/support/v4/animation/HoneycombMr1AnimatorCompatProvider.java
@@ -20,7 +20,6 @@
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
/**
@@ -30,7 +29,6 @@
*/
@RequiresApi(12)
-@TargetApi(12)
class HoneycombMr1AnimatorCompatProvider implements AnimatorProvider {
private TimeInterpolator mDefaultInterpolator;
diff --git a/compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java b/compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
index 4266460..5a6f246 100644
--- a/compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
+++ b/compat/honeycomb_mr1/android/support/v4/graphics/BitmapCompatHoneycombMr1.java
@@ -17,14 +17,12 @@
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of BitmapCompat that can use Honeycomb MR1 APIs.
*/
@RequiresApi(12)
-@TargetApi(12)
class BitmapCompatHoneycombMr1 {
static int getAllocationByteCount(Bitmap bitmap) {
diff --git a/compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java b/compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
index f14e77d..ae4da58 100644
--- a/compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
+++ b/compat/honeycomb_mr1/android/support/v4/view/MotionEventCompatHoneycombMr1.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.MotionEvent;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(12)
-@TargetApi(12)
class MotionEventCompatHoneycombMr1 {
static float getAxisValue(MotionEvent event, int axis) {
return event.getAxisValue(axis);
diff --git a/compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java b/compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
index aa3aaef..63a6d3b 100644
--- a/compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
+++ b/compat/honeycomb_mr2/android/support/v4/content/res/ConfigurationHelperHoneycombMr2.java
@@ -19,10 +19,8 @@
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(13)
-@TargetApi(13)
class ConfigurationHelperHoneycombMr2 {
static int getScreenHeightDp(@NonNull Resources resources) {
diff --git a/compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java b/compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
index a631941..5a93799 100644
--- a/compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
+++ b/compat/honeycomb_mr2/android/support/v4/net/ConnectivityManagerCompatHoneycombMR2.java
@@ -19,7 +19,6 @@
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import static android.net.ConnectivityManager.TYPE_BLUETOOTH;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
@@ -36,7 +35,6 @@
*/
@RequiresApi(13)
-@TargetApi(13)
class ConnectivityManagerCompatHoneycombMR2 {
public static boolean isActiveNetworkMetered(ConnectivityManager cm) {
final NetworkInfo info = cm.getActiveNetworkInfo();
diff --git a/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java b/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
index fe754c4..4accbca 100644
--- a/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
+++ b/compat/honeycomb_mr2/android/support/v4/os/ParcelableCompatHoneycombMR2.java
@@ -19,10 +19,8 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(13)
-@TargetApi(13)
class ParcelableCompatCreatorHoneycombMR2Stub {
static <T> Parcelable.Creator<T> instantiate(ParcelableCompatCreatorCallbacks<T> callbacks) {
return new ParcelableCompatCreatorHoneycombMR2<T>(callbacks);
@@ -30,7 +28,6 @@
}
@RequiresApi(13)
-@TargetApi(13)
class ParcelableCompatCreatorHoneycombMR2<T> implements Parcelable.ClassLoaderCreator<T> {
private final ParcelableCompatCreatorCallbacks<T> mCallbacks;
diff --git a/compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
index be17cd6..8dd75d8 100644
--- a/compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
+++ b/compat/ics-mr1/android/support/v4/content/IntentCompatIcsMr1.java
@@ -18,10 +18,8 @@
import android.content.Intent;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(15)
-@TargetApi(15)
class IntentCompatIcsMr1 {
public static Intent makeMainSelectorActivity(String selectorAction, String selectorCategory) {
diff --git a/compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
index be229b5..9a5fd76 100644
--- a/compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
+++ b/compat/ics-mr1/android/support/v4/content/res/ResourcesCompatIcsMr1.java
@@ -20,10 +20,8 @@
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(15)
-@TargetApi(15)
class ResourcesCompatIcsMr1 {
public static Drawable getDrawableForDensity(Resources res, int id, int density)
throws NotFoundException {
diff --git a/compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java b/compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
index 3cf4e5e..16d4bbc 100644
--- a/compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
+++ b/compat/ics-mr1/android/support/v4/view/ViewCompatICSMr1.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(15)
-@TargetApi(15)
class ViewCompatICSMr1 {
public static boolean hasOnClickListeners(View v) {
return v.hasOnClickListeners();
diff --git a/compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java b/compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
index f249bdd..103eadc 100644
--- a/compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
+++ b/compat/ics-mr1/android/support/v4/view/accessibility/AccessibilityRecordCompatIcsMr1.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityRecord;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(15)
-@TargetApi(15)
class AccessibilityRecordCompatIcsMr1 {
public static int getMaxScrollX(Object record) {
diff --git a/compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java b/compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
index 21e797d..209bf46 100644
--- a/compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
+++ b/compat/ics/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
@@ -20,14 +20,12 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.pm.ResolveInfo;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* ICS implementation of the new APIs in AccessibilityServiceInfo.
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityServiceInfoCompatIcs {
public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
diff --git a/compat/ics/android/support/v4/app/NotificationCompatIceCreamSandwich.java b/compat/ics/android/support/v4/app/NotificationCompatIceCreamSandwich.java
index d2e0e44..7799d18 100644
--- a/compat/ics/android/support/v4/app/NotificationCompatIceCreamSandwich.java
+++ b/compat/ics/android/support/v4/app/NotificationCompatIceCreamSandwich.java
@@ -21,11 +21,9 @@
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.RemoteViews;
@RequiresApi(14)
-@TargetApi(14)
class NotificationCompatIceCreamSandwich {
public static class Builder implements NotificationBuilderWithBuilderAccessor {
diff --git a/compat/ics/android/support/v4/app/NotificationManagerCompatIceCreamSandwich.java b/compat/ics/android/support/v4/app/NotificationManagerCompatIceCreamSandwich.java
index 4fcf2b1..2cda7e6 100644
--- a/compat/ics/android/support/v4/app/NotificationManagerCompatIceCreamSandwich.java
+++ b/compat/ics/android/support/v4/app/NotificationManagerCompatIceCreamSandwich.java
@@ -18,10 +18,8 @@
import android.app.Service;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(14)
-@TargetApi(14)
class NotificationManagerCompatIceCreamSandwich {
static final int SIDE_CHANNEL_BIND_FLAGS = Service.BIND_AUTO_CREATE
| Service.BIND_WAIVE_PRIORITY;
diff --git a/compat/ics/android/support/v4/app/ShareCompatICS.java b/compat/ics/android/support/v4/app/ShareCompatICS.java
index a6d1e92..f635e73 100644
--- a/compat/ics/android/support/v4/app/ShareCompatICS.java
+++ b/compat/ics/android/support/v4/app/ShareCompatICS.java
@@ -19,13 +19,11 @@
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ActionProvider;
import android.view.MenuItem;
import android.widget.ShareActionProvider;
@RequiresApi(14)
-@TargetApi(14)
class ShareCompatICS {
private static final String HISTORY_FILENAME_PREFIX = ".sharecompat_";
diff --git a/compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java b/compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java
index 724c34e..4066386 100644
--- a/compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java
+++ b/compat/ics/android/support/v4/net/TrafficStatsCompatIcs.java
@@ -19,7 +19,6 @@
import android.net.TrafficStats;
import android.os.ParcelFileDescriptor;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.net.DatagramSocket;
import java.net.Socket;
@@ -30,7 +29,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class TrafficStatsCompatIcs {
public static void clearThreadStatsTag() {
TrafficStats.clearThreadStatsTag();
diff --git a/compat/ics/android/support/v4/text/ICUCompatIcs.java b/compat/ics/android/support/v4/text/ICUCompatIcs.java
index 4baafd6..cd773b5 100644
--- a/compat/ics/android/support/v4/text/ICUCompatIcs.java
+++ b/compat/ics/android/support/v4/text/ICUCompatIcs.java
@@ -17,7 +17,6 @@
package android.support.v4.text;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
@@ -25,7 +24,6 @@
import java.util.Locale;
@RequiresApi(14)
-@TargetApi(14)
class ICUCompatIcs {
private static final String TAG = "ICUCompatIcs";
diff --git a/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java b/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
index fee33d7..0b3496b 100644
--- a/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
+++ b/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityDelegateCompatIcs {
public interface AccessibilityDelegateBridge {
diff --git a/compat/ics/android/support/v4/view/MenuItemCompatIcs.java b/compat/ics/android/support/v4/view/MenuItemCompatIcs.java
index 4dbea9a..06c5818 100644
--- a/compat/ics/android/support/v4/view/MenuItemCompatIcs.java
+++ b/compat/ics/android/support/v4/view/MenuItemCompatIcs.java
@@ -18,11 +18,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.MenuItem;
@RequiresApi(14)
-@TargetApi(14)
class MenuItemCompatIcs {
public static boolean expandActionView(MenuItem item) {
return item.expandActionView();
diff --git a/compat/ics/android/support/v4/view/MotionEventCompatICS.java b/compat/ics/android/support/v4/view/MotionEventCompatICS.java
index e8f9d49..986bab7 100644
--- a/compat/ics/android/support/v4/view/MotionEventCompatICS.java
+++ b/compat/ics/android/support/v4/view/MotionEventCompatICS.java
@@ -17,11 +17,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.MotionEvent;
@RequiresApi(14)
-@TargetApi(14)
class MotionEventCompatICS {
public static int getButtonState(MotionEvent event) {
return event.getButtonState();
diff --git a/compat/ics/android/support/v4/view/ViewCompatICS.java b/compat/ics/android/support/v4/view/ViewCompatICS.java
index 338b009..420ae18 100644
--- a/compat/ics/android/support/v4/view/ViewCompatICS.java
+++ b/compat/ics/android/support/v4/view/ViewCompatICS.java
@@ -18,7 +18,6 @@
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.accessibility.AccessibilityEvent;
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class ViewCompatICS {
public static boolean canScrollHorizontally(View v, int direction) {
diff --git a/compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java b/compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java
index 19a7174..1667439 100644
--- a/compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java
+++ b/compat/ics/android/support/v4/view/ViewConfigurationCompatICS.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ViewConfiguration;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class ViewConfigurationCompatICS {
static boolean hasPermanentMenuKey(ViewConfiguration config) {
return config.hasPermanentMenuKey();
diff --git a/compat/ics/android/support/v4/view/ViewGroupCompatIcs.java b/compat/ics/android/support/v4/view/ViewGroupCompatIcs.java
index bb03e7d..d2a0237 100644
--- a/compat/ics/android/support/v4/view/ViewGroupCompatIcs.java
+++ b/compat/ics/android/support/v4/view/ViewGroupCompatIcs.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
@@ -27,7 +26,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class ViewGroupCompatIcs {
public static boolean onRequestSendAccessibilityEvent(ViewGroup group, View child,
AccessibilityEvent event) {
diff --git a/compat/ics/android/support/v4/view/ViewParentCompatICS.java b/compat/ics/android/support/v4/view/ViewParentCompatICS.java
index 693aa40..69fefb5 100644
--- a/compat/ics/android/support/v4/view/ViewParentCompatICS.java
+++ b/compat/ics/android/support/v4/view/ViewParentCompatICS.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent;
@@ -27,7 +26,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class ViewParentCompatICS {
public static boolean requestSendAccessibilityEvent(
ViewParent parent, View child, AccessibilityEvent event) {
diff --git a/compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java b/compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
index 9cc5583..a9e4f0e 100644
--- a/compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
+++ b/compat/ics/android/support/v4/view/ViewPropertyAnimatorCompatICS.java
@@ -18,12 +18,10 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.animation.Interpolator;
@RequiresApi(14)
-@TargetApi(14)
class ViewPropertyAnimatorCompatICS {
public static void setDuration(View view, long value) {
diff --git a/compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
index 0d5196f..b2cb068 100644
--- a/compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
+++ b/compat/ics/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityRecord;
@@ -26,7 +25,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityEventCompatIcs {
public static int getRecordCount(AccessibilityEvent event) {
diff --git a/compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
index 4af6aa3..62cabea 100644
--- a/compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
+++ b/compat/ics/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java
@@ -18,7 +18,6 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityManagerCompatIcs {
public static class AccessibilityStateChangeListenerWrapper
diff --git a/compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
index 51faa89..6e3ac90 100644
--- a/compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
+++ b/compat/ics/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java
@@ -16,7 +16,6 @@
package android.support.v4.view.accessibility;
-import android.annotation.TargetApi;
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
import android.view.View;
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityNodeInfoCompatIcs {
public static Object obtain() {
return AccessibilityNodeInfo.obtain();
diff --git a/compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java b/compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
index f6e078f..9225ff7 100644
--- a/compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
+++ b/compat/ics/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java
@@ -18,7 +18,6 @@
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityRecord;
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class AccessibilityRecordCompatIcs {
public static Object obtain() {
diff --git a/compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java b/compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
index 1f75b4a..05e3e80 100644
--- a/compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
+++ b/compat/ics/android/support/v4/widget/EdgeEffectCompatIcs.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.graphics.Canvas;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.EdgeEffect;
/**
@@ -29,7 +28,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class EdgeEffectCompatIcs {
public static Object newEdgeEffect(Context context) {
return new EdgeEffect(context);
diff --git a/compat/ics/android/support/v4/widget/ScrollerCompatIcs.java b/compat/ics/android/support/v4/widget/ScrollerCompatIcs.java
index be7a07e..cce00c6 100644
--- a/compat/ics/android/support/v4/widget/ScrollerCompatIcs.java
+++ b/compat/ics/android/support/v4/widget/ScrollerCompatIcs.java
@@ -17,7 +17,6 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.OverScroller;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class ScrollerCompatIcs {
public static float getCurrVelocity(Object scroller) {
return ((OverScroller) scroller).getCurrVelocity();
diff --git a/compat/ics/android/support/v4/widget/SearchViewCompatIcs.java b/compat/ics/android/support/v4/widget/SearchViewCompatIcs.java
index 3938081..bf5c44e 100644
--- a/compat/ics/android/support/v4/widget/SearchViewCompatIcs.java
+++ b/compat/ics/android/support/v4/widget/SearchViewCompatIcs.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.widget.SearchView;
@@ -27,7 +26,6 @@
*/
@RequiresApi(14)
-@TargetApi(14)
class SearchViewCompatIcs {
public static class MySearchView extends SearchView {
diff --git a/compat/java/android/support/v4/app/ActivityOptionsCompat.java b/compat/java/android/support/v4/app/ActivityOptionsCompat.java
index 57ca1a4..3abe044 100644
--- a/compat/java/android/support/v4/app/ActivityOptionsCompat.java
+++ b/compat/java/android/support/v4/app/ActivityOptionsCompat.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
@@ -309,7 +308,6 @@
}
@RequiresApi(16)
- @TargetApi(16)
private static class ActivityOptionsImplJB extends ActivityOptionsCompat {
private final ActivityOptionsCompatJB mImpl;
@@ -332,7 +330,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
private static class ActivityOptionsImpl21 extends ActivityOptionsCompat {
private final ActivityOptionsCompat21 mImpl;
@@ -356,7 +353,6 @@
}
@RequiresApi(23)
- @TargetApi(23)
private static class ActivityOptionsImpl23 extends ActivityOptionsCompat {
private final ActivityOptionsCompat23 mImpl;
@@ -385,7 +381,6 @@
}
@RequiresApi(24)
- @TargetApi(24)
private static class ActivityOptionsImpl24 extends ActivityOptionsCompat {
private final ActivityOptionsCompat24 mImpl;
diff --git a/compat/java/android/support/v4/app/AlarmManagerCompat.java b/compat/java/android/support/v4/app/AlarmManagerCompat.java
new file mode 100644
index 0000000..3fd7931
--- /dev/null
+++ b/compat/java/android/support/v4/app/AlarmManagerCompat.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.os.Build;
+
+/**
+ * Compatibility library for {@link AlarmManager} with fallbacks for older platforms.
+ */
+public final class AlarmManagerCompat {
+ /**
+ * Schedule an alarm that represents an alarm clock.
+ *
+ * The system may choose to display information about this alarm to the user.
+ *
+ * <p>
+ * This method is like {@link #setExact}, but implies
+ * {@link AlarmManager#RTC_WAKEUP}.
+ *
+ * @param alarmManager AlarmManager instance used to set the alarm
+ * @param triggerTime time at which the underlying alarm is triggered in wall time
+ * milliseconds since the epoch
+ * @param showIntent an intent that can be used to show or edit details of
+ * the alarm clock.
+ * @param operation Action to perform when the alarm goes off;
+ * typically comes from {@link PendingIntent#getBroadcast
+ * IntentSender.getBroadcast()}.
+ *
+ * @see AlarmManager#set
+ * @see AlarmManager#setRepeating
+ * @see AlarmManager#setWindow
+ * @see #setExact
+ * @see AlarmManager#cancel
+ * @see AlarmManager#getNextAlarmClock()
+ * @see android.content.Context#sendBroadcast
+ * @see android.content.Context#registerReceiver
+ * @see android.content.Intent#filterEquals
+ */
+ public static void setAlarmClock(AlarmManager alarmManager, long triggerTime,
+ PendingIntent showIntent, PendingIntent operation) {
+ if (Build.VERSION.SDK_INT >= 21) {
+ AlarmManagerCompatApi21.setAlarmClock(alarmManager, triggerTime, showIntent,
+ operation);
+ } else {
+ AlarmManagerCompat.setExact(alarmManager, AlarmManager.RTC_WAKEUP, triggerTime,
+ operation);
+ }
+ }
+
+ /**
+ * Like {@link AlarmManager#set(int, long, PendingIntent)}, but this alarm will be allowed to
+ * execute even when the system is in low-power idle modes. This type of alarm must <b>only</b>
+ * be used for situations where it is actually required that the alarm go off while in
+ * idle -- a reasonable example would be for a calendar notification that should make a
+ * sound so the user is aware of it. When the alarm is dispatched, the app will also be
+ * added to the system's temporary whitelist for approximately 10 seconds to allow that
+ * application to acquire further wake locks in which to complete its work.</p>
+ *
+ * <p>These alarms can significantly impact the power use
+ * of the device when idle (and thus cause significant battery blame to the app scheduling
+ * them), so they should be used with care. To reduce abuse, there are restrictions on how
+ * frequently these alarms will go off for a particular application.
+ * Under normal system operation, it will not dispatch these
+ * alarms more than about every minute (at which point every such pending alarm is
+ * dispatched); when in low-power idle modes this duration may be significantly longer,
+ * such as 15 minutes.</p>
+ *
+ * <p>Unlike other alarms, the system is free to reschedule this type of alarm to happen
+ * out of order with any other alarms, even those from the same app. This will clearly happen
+ * when the device is idle (since this alarm can go off while idle, when any other alarms
+ * from the app will be held until later), but may also happen even when not idle.</p>
+ *
+ * <p>Regardless of the app's target SDK version, this call always allows batching of the
+ * alarm.</p>
+ *
+ * @param alarmManager AlarmManager instance used to set the alarm
+ * @param type One of {@link AlarmManager#ELAPSED_REALTIME},
+ * {@link AlarmManager#ELAPSED_REALTIME_WAKEUP},
+ * {@link AlarmManager#RTC}, or {@link AlarmManager#RTC_WAKEUP}.
+ * @param triggerAtMillis time in milliseconds that the alarm should go
+ * off, using the appropriate clock (depending on the alarm type).
+ * @param operation Action to perform when the alarm goes off;
+ * typically comes from {@link PendingIntent#getBroadcast
+ * IntentSender.getBroadcast()}.
+ *
+ * @see AlarmManager#set(int, long, PendingIntent)
+ * @see #setExactAndAllowWhileIdle
+ * @see AlarmManager#cancel
+ * @see android.content.Context#sendBroadcast
+ * @see android.content.Context#registerReceiver
+ * @see android.content.Intent#filterEquals
+ * @see AlarmManager#ELAPSED_REALTIME
+ * @see AlarmManager#ELAPSED_REALTIME_WAKEUP
+ * @see AlarmManager#RTC
+ * @see AlarmManager#RTC_WAKEUP
+ */
+ public static void setAndAllowWhileIdle(AlarmManager alarmManager, int type,
+ long triggerAtMillis, PendingIntent operation) {
+ if (Build.VERSION.SDK_INT >= 23) {
+ AlarmManagerCompatApi23.setAndAllowWhileIdle(alarmManager, type, triggerAtMillis,
+ operation);
+ } else {
+ alarmManager.set(type, triggerAtMillis, operation);
+ }
+ }
+
+ /**
+ * Schedule an alarm to be delivered precisely at the stated time.
+ *
+ * <p>
+ * This method is like {@link AlarmManager#set(int, long, PendingIntent)}, but does not permit
+ * the OS to adjust the delivery time. The alarm will be delivered as nearly as
+ * possible to the requested trigger time.
+ *
+ * <p>
+ * <b>Note:</b> only alarms for which there is a strong demand for exact-time
+ * delivery (such as an alarm clock ringing at the requested time) should be
+ * scheduled as exact. Applications are strongly discouraged from using exact
+ * alarms unnecessarily as they reduce the OS's ability to minimize battery use.
+ *
+ * @param alarmManager AlarmManager instance used to set the alarm
+ * @param type One of {@link AlarmManager#ELAPSED_REALTIME},
+ * {@link AlarmManager#ELAPSED_REALTIME_WAKEUP},
+ * {@link AlarmManager#RTC}, or {@link AlarmManager#RTC_WAKEUP}.
+ * @param triggerAtMillis time in milliseconds that the alarm should go
+ * off, using the appropriate clock (depending on the alarm type).
+ * @param operation Action to perform when the alarm goes off;
+ * typically comes from {@link PendingIntent#getBroadcast
+ * IntentSender.getBroadcast()}.
+ *
+ * @see AlarmManager#set
+ * @see AlarmManager#setRepeating
+ * @see AlarmManager#setWindow
+ * @see AlarmManager#cancel
+ * @see android.content.Context#sendBroadcast
+ * @see android.content.Context#registerReceiver
+ * @see android.content.Intent#filterEquals
+ * @see AlarmManager#ELAPSED_REALTIME
+ * @see AlarmManager#ELAPSED_REALTIME_WAKEUP
+ * @see AlarmManager#RTC
+ * @see AlarmManager#RTC_WAKEUP
+ */
+ public static void setExact(AlarmManager alarmManager, int type, long triggerAtMillis,
+ PendingIntent operation) {
+ if (Build.VERSION.SDK_INT >= 19) {
+ AlarmManagerCompatKitKat.setExact(alarmManager, type, triggerAtMillis, operation);
+ } else {
+ alarmManager.set(type, triggerAtMillis, operation);
+ }
+ }
+
+ /**
+ * Like {@link #setExact}, but this alarm will be allowed to execute
+ * even when the system is in low-power idle modes. If you don't need exact scheduling of
+ * the alarm but still need to execute while idle, consider using
+ * {@link #setAndAllowWhileIdle}. This type of alarm must <b>only</b>
+ * be used for situations where it is actually required that the alarm go off while in
+ * idle -- a reasonable example would be for a calendar notification that should make a
+ * sound so the user is aware of it. When the alarm is dispatched, the app will also be
+ * added to the system's temporary whitelist for approximately 10 seconds to allow that
+ * application to acquire further wake locks in which to complete its work.</p>
+ *
+ * <p>These alarms can significantly impact the power use
+ * of the device when idle (and thus cause significant battery blame to the app scheduling
+ * them), so they should be used with care. To reduce abuse, there are restrictions on how
+ * frequently these alarms will go off for a particular application.
+ * Under normal system operation, it will not dispatch these
+ * alarms more than about every minute (at which point every such pending alarm is
+ * dispatched); when in low-power idle modes this duration may be significantly longer,
+ * such as 15 minutes.</p>
+ *
+ * <p>Unlike other alarms, the system is free to reschedule this type of alarm to happen
+ * out of order with any other alarms, even those from the same app. This will clearly happen
+ * when the device is idle (since this alarm can go off while idle, when any other alarms
+ * from the app will be held until later), but may also happen even when not idle.
+ * Note that the OS will allow itself more flexibility for scheduling these alarms than
+ * regular exact alarms, since the application has opted into this behavior. When the
+ * device is idle it may take even more liberties with scheduling in order to optimize
+ * for battery life.</p>
+ *
+ * @param alarmManager AlarmManager instance used to set the alarm
+ * @param type One of {@link AlarmManager#ELAPSED_REALTIME},
+ * {@link AlarmManager#ELAPSED_REALTIME_WAKEUP},
+ * {@link AlarmManager#RTC}, or {@link AlarmManager#RTC_WAKEUP}.
+ * @param triggerAtMillis time in milliseconds that the alarm should go
+ * off, using the appropriate clock (depending on the alarm type).
+ * @param operation Action to perform when the alarm goes off;
+ * typically comes from {@link PendingIntent#getBroadcast
+ * IntentSender.getBroadcast()}.
+ *
+ * @see AlarmManager#set
+ * @see AlarmManager#setRepeating
+ * @see AlarmManager#setWindow
+ * @see AlarmManager#cancel
+ * @see android.content.Context#sendBroadcast
+ * @see android.content.Context#registerReceiver
+ * @see android.content.Intent#filterEquals
+ * @see AlarmManager#ELAPSED_REALTIME
+ * @see AlarmManager#ELAPSED_REALTIME_WAKEUP
+ * @see AlarmManager#RTC
+ * @see AlarmManager#RTC_WAKEUP
+ */
+ public static void setExactAndAllowWhileIdle(AlarmManager alarmManager, int type,
+ long triggerAtMillis, PendingIntent operation) {
+ if (Build.VERSION.SDK_INT >= 23) {
+ AlarmManagerCompatApi23.setExactAndAllowWhileIdle(alarmManager, type, triggerAtMillis,
+ operation);
+ } else {
+ AlarmManagerCompat.setExact(alarmManager, type, triggerAtMillis, operation);
+ }
+ }
+
+ private AlarmManagerCompat() {
+ }
+}
diff --git a/compat/java/android/support/v4/widget/TextViewCompatGingerbread.java b/compat/java/android/support/v4/widget/TextViewCompatGingerbread.java
index 656fae9..76c8179 100644
--- a/compat/java/android/support/v4/widget/TextViewCompatGingerbread.java
+++ b/compat/java/android/support/v4/widget/TextViewCompatGingerbread.java
@@ -24,10 +24,8 @@
import java.lang.reflect.Field;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(9)
-@TargetApi(9)
class TextViewCompatGingerbread {
private static final String LOG_TAG = "TextViewCompatGingerbread";
diff --git a/compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
index eecc581..623c0b4 100644
--- a/compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/content/res/ConfigurationHelperJellybeanMr1.java
@@ -19,10 +19,8 @@
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(17)
-@TargetApi(17)
class ConfigurationHelperJellybeanMr1 {
static int getDensityDpi(@NonNull Resources resources) {
return resources.getConfiguration().densityDpi;
diff --git a/compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
index d8da519..24c610f 100644
--- a/compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
@@ -18,7 +18,6 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import java.lang.reflect.Method;
@@ -28,7 +27,6 @@
*/
@RequiresApi(17)
-@TargetApi(17)
class DrawableCompatJellybeanMr1 {
private static final String TAG = "DrawableCompatJellybeanMr1";
diff --git a/compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
index 9cb5637..fdcc0e9 100644
--- a/compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/hardware/display/DisplayManagerJellybeanMr1.java
@@ -16,13 +16,11 @@
package android.support.v4.hardware.display;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.view.Display;
@RequiresApi(17)
-@TargetApi(17)
final class DisplayManagerJellybeanMr1 {
public static Object getDisplayManager(Context context) {
return context.getSystemService(Context.DISPLAY_SERVICE);
diff --git a/compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
index ad354e7..b9ac180 100644
--- a/compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/text/TextUtilsCompatJellybeanMr1.java
@@ -19,7 +19,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.text.TextUtils;
import java.util.Locale;
@@ -29,7 +28,6 @@
*/
@RequiresApi(17)
-@TargetApi(17)
class TextUtilsCompatJellybeanMr1 {
@NonNull
public static String htmlEncode(@NonNull String s) {
diff --git a/compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
index efb1d77..3c3dae4 100644
--- a/compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/view/GravityCompatJellybeanMr1.java
@@ -19,11 +19,9 @@
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.Gravity;
@RequiresApi(17)
-@TargetApi(17)
class GravityCompatJellybeanMr1 {
public static int getAbsoluteGravity(int gravity, int layoutDirection) {
diff --git a/compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
index c446abd..7e544bc 100644
--- a/compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/view/MarginLayoutParamsCompatJellybeanMr1.java
@@ -18,11 +18,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ViewGroup;
@RequiresApi(17)
-@TargetApi(17)
class MarginLayoutParamsCompatJellybeanMr1 {
public static int getMarginStart(ViewGroup.MarginLayoutParams lp) {
return lp.getMarginStart();
diff --git a/compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
index 79b5ce2..ed2b19f 100644
--- a/compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/view/ViewCompatJellybeanMr1.java
@@ -16,7 +16,6 @@
package android.support.v4.view;
-import android.annotation.TargetApi;
import android.graphics.Paint;
import android.support.annotation.RequiresApi;
import android.view.Display;
@@ -27,7 +26,6 @@
*/
@RequiresApi(17)
-@TargetApi(17)
class ViewCompatJellybeanMr1 {
public static int getLabelFor(View view) {
diff --git a/compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java b/compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
index aa20646..c81e6e4 100644
--- a/compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr1.java
@@ -17,12 +17,10 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
@RequiresApi(17)
-@TargetApi(17)
class AccessibilityNodeInfoCompatJellybeanMr1 {
public static void setLabelFor(Object info, View labeled) {
diff --git a/compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java b/compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
index c8dbf98..a200da2 100644
--- a/compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
+++ b/compat/jellybean-mr1/android/support/v4/widget/TextViewCompatJbMr1.java
@@ -16,7 +16,6 @@
package android.support.v4.widget;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -25,7 +24,6 @@
import android.widget.TextView;
@RequiresApi(17)
-@TargetApi(17)
class TextViewCompatJbMr1 {
public static void setCompoundDrawablesRelative(@NonNull TextView textView,
diff --git a/compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java b/compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
index acc72b1..484db20 100644
--- a/compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
+++ b/compat/jellybean-mr2/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
@@ -18,14 +18,12 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* ICS implementation of the new APIs in AccessibilityServiceInfo.
*/
@RequiresApi(18)
-@TargetApi(18)
class AccessibilityServiceInfoCompatJellyBeanMr2 {
public static int getCapabilities(AccessibilityServiceInfo info) {
diff --git a/compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
index 598ff31..6ea17e8 100644
--- a/compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
+++ b/compat/jellybean-mr2/android/support/v4/app/BundleCompatJellybeanMR2.java
@@ -19,13 +19,11 @@
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* @hide
*/
@RequiresApi(18)
-@TargetApi(18)
class BundleCompatJellybeanMR2 {
public static IBinder getBinder(Bundle bundle, String key) {
return bundle.getBinder(key);
diff --git a/compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
index 20739d1..abf4dde 100644
--- a/compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
+++ b/compat/jellybean-mr2/android/support/v4/graphics/BitmapCompatJellybeanMR2.java
@@ -17,10 +17,8 @@
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(18)
-@TargetApi(18)
class BitmapCompatJellybeanMR2 {
public static boolean hasMipMap(Bitmap bitmap) {
return bitmap.hasMipMap();
diff --git a/compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
index a41816d..bc29ad8 100644
--- a/compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
+++ b/compat/jellybean-mr2/android/support/v4/os/TraceJellybeanMR2.java
@@ -15,10 +15,8 @@
import android.os.Trace;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(18)
-@TargetApi(18)
class TraceJellybeanMR2 {
public static void beginSection(String section) {
Trace.beginSection(section);
diff --git a/compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
index 46c5d4e..d3403c6 100644
--- a/compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
+++ b/compat/jellybean-mr2/android/support/v4/view/ViewCompatJellybeanMr2.java
@@ -18,7 +18,6 @@
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
/**
@@ -26,7 +25,6 @@
*/
@RequiresApi(18)
-@TargetApi(18)
class ViewCompatJellybeanMr2 {
public static Rect getClipBounds(View view) {
diff --git a/compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java b/compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
index e1c8532..184ef6c 100644
--- a/compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
+++ b/compat/jellybean-mr2/android/support/v4/view/ViewGroupCompatJellybeanMR2.java
@@ -18,11 +18,9 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ViewGroup;
@RequiresApi(18)
-@TargetApi(18)
class ViewGroupCompatJellybeanMR2 {
public static int getLayoutMode(ViewGroup group) {
return group.getLayoutMode();
diff --git a/compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
index 14e76a9..e285f23 100644
--- a/compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
+++ b/compat/jellybean-mr2/android/support/v4/view/ViewPropertyAnimatorCompatJellybeanMr2.java
@@ -16,12 +16,10 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.animation.Interpolator;
@RequiresApi(18)
-@TargetApi(18)
class ViewPropertyAnimatorCompatJellybeanMr2 {
public static Interpolator getInterpolator(View view) {
return (Interpolator) view.animate().getInterpolator();
diff --git a/compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java b/compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
index 82bfa11..02e8ca0 100644
--- a/compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
+++ b/compat/jellybean-mr2/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellybeanMr2.java
@@ -17,13 +17,11 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
import java.util.List;
@RequiresApi(18)
-@TargetApi(18)
class AccessibilityNodeInfoCompatJellybeanMr2 {
public static void setViewIdResourceName(Object info, String viewId) {
diff --git a/compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java b/compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
index d80725b..b2377c7 100644
--- a/compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
+++ b/compat/jellybean-mr2/android/support/v4/widget/TextViewCompatJbMr2.java
@@ -16,7 +16,6 @@
package android.support.v4.widget;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
@@ -25,7 +24,6 @@
import android.widget.TextView;
@RequiresApi(18)
-@TargetApi(18)
class TextViewCompatJbMr2 {
public static void setCompoundDrawablesRelative(@NonNull TextView textView,
diff --git a/compat/jellybean/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBean.java b/compat/jellybean/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBean.java
index d42cefc..ec1bb7e 100644
--- a/compat/jellybean/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBean.java
@@ -19,14 +19,12 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.pm.PackageManager;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* JB implementation of the new APIs in AccessibilityServiceInfo.
*/
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityServiceInfoCompatJellyBean {
public static String loadDescription(AccessibilityServiceInfo info, PackageManager pm) {
diff --git a/compat/jellybean/android/support/v4/app/ActivityCompatJB.java b/compat/jellybean/android/support/v4/app/ActivityCompatJB.java
index ad1c9aa..e749a93 100644
--- a/compat/jellybean/android/support/v4/app/ActivityCompatJB.java
+++ b/compat/jellybean/android/support/v4/app/ActivityCompatJB.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentSender;
@@ -24,7 +23,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(16)
-@TargetApi(16)
class ActivityCompatJB {
public static void startActivityForResult(Activity activity, Intent intent, int requestCode, Bundle options) {
activity.startActivityForResult(intent, requestCode, options);
diff --git a/compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java b/compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
index 1655c4b..e5800e2 100644
--- a/compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
+++ b/compat/jellybean/android/support/v4/app/ActivityOptionsCompatJB.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.ActivityOptions;
import android.content.Context;
import android.graphics.Bitmap;
@@ -25,7 +24,6 @@
import android.view.View;
@RequiresApi(16)
-@TargetApi(16)
class ActivityOptionsCompatJB {
public static ActivityOptionsCompatJB makeCustomAnimation(Context context,
diff --git a/compat/jellybean/android/support/v4/app/NotificationCompatJellybean.java b/compat/jellybean/android/support/v4/app/NotificationCompatJellybean.java
index bb94873..820b3d0 100644
--- a/compat/jellybean/android/support/v4/app/NotificationCompatJellybean.java
+++ b/compat/jellybean/android/support/v4/app/NotificationCompatJellybean.java
@@ -23,7 +23,6 @@
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.Log;
import android.util.SparseArray;
import android.widget.RemoteViews;
@@ -33,7 +32,6 @@
import java.util.List;
@RequiresApi(16)
-@TargetApi(16)
class NotificationCompatJellybean {
public static final String TAG = "NotificationCompat";
diff --git a/compat/jellybean/android/support/v4/app/RemoteInputCompatJellybean.java b/compat/jellybean/android/support/v4/app/RemoteInputCompatJellybean.java
index 2fa9adc..d8bbdb4 100644
--- a/compat/jellybean/android/support/v4/app/RemoteInputCompatJellybean.java
+++ b/compat/jellybean/android/support/v4/app/RemoteInputCompatJellybean.java
@@ -21,10 +21,8 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(16)
-@TargetApi(16)
class RemoteInputCompatJellybean {
/** Label used to denote the clip data type used for remote input transport */
public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
diff --git a/compat/jellybean/android/support/v4/app/ShareCompatJB.java b/compat/jellybean/android/support/v4/app/ShareCompatJB.java
index 58eaa23..e65f952 100644
--- a/compat/jellybean/android/support/v4/app/ShareCompatJB.java
+++ b/compat/jellybean/android/support/v4/app/ShareCompatJB.java
@@ -16,12 +16,10 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.text.Html;
@RequiresApi(16)
-@TargetApi(16)
class ShareCompatJB {
public static String escapeHtml(CharSequence html) {
return Html.escapeHtml(html);
diff --git a/compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java b/compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
index ea4d610..7744d70 100644
--- a/compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
+++ b/compat/jellybean/android/support/v4/content/ContentResolverCompatJellybean.java
@@ -21,10 +21,8 @@
import android.net.Uri;
import android.os.OperationCanceledException;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(16)
-@TargetApi(16)
class ContentResolverCompatJellybean {
public static Cursor query(ContentResolver resolver, Uri uri, String[] projection,
diff --git a/compat/jellybean/android/support/v4/content/ContextCompatJellybean.java b/compat/jellybean/android/support/v4/content/ContextCompatJellybean.java
index c00a971..2f57640 100644
--- a/compat/jellybean/android/support/v4/content/ContextCompatJellybean.java
+++ b/compat/jellybean/android/support/v4/content/ContextCompatJellybean.java
@@ -20,10 +20,8 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(16)
-@TargetApi(16)
class ContextCompatJellybean {
public static void startActivities(Context context, Intent[] intents, Bundle options) {
diff --git a/compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java b/compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
index 64272b8..7e47298 100644
--- a/compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/net/ConnectivityManagerCompatJellyBean.java
@@ -18,14 +18,12 @@
import android.net.ConnectivityManager;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of ConnectivityManagerCompat that can use Jellybean APIs.
*/
@RequiresApi(16)
-@TargetApi(16)
class ConnectivityManagerCompatJellyBean {
public static boolean isActiveNetworkMetered(ConnectivityManager cm) {
return cm.isActiveNetworkMetered();
diff --git a/compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java b/compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
index 127fdbf..344a26a 100644
--- a/compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
+++ b/compat/jellybean/android/support/v4/os/CancellationSignalCompatJellybean.java
@@ -17,10 +17,8 @@
package android.support.v4.os;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(16)
-@TargetApi(16)
class CancellationSignalCompatJellybean {
public static Object create() {
return new android.os.CancellationSignal();
diff --git a/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java b/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
index e588892..c8c9fb0 100644
--- a/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
@@ -18,7 +18,6 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
@@ -31,7 +30,6 @@
*/
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityDelegateCompatJellyBean {
public interface AccessibilityDelegateBridgeJellyBean {
diff --git a/compat/jellybean/android/support/v4/view/ViewCompatJB.java b/compat/jellybean/android/support/v4/view/ViewCompatJB.java
index ccf34ba..ae3b0c8 100644
--- a/compat/jellybean/android/support/v4/view/ViewCompatJB.java
+++ b/compat/jellybean/android/support/v4/view/ViewCompatJB.java
@@ -16,7 +16,6 @@
package android.support.v4.view;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@@ -27,7 +26,6 @@
* Jellybean-specific View API access
*/
@RequiresApi(16)
-@TargetApi(16)
class ViewCompatJB {
public static boolean hasTransientState(View view) {
diff --git a/compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java b/compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
index 8e327fe..67a7b45 100644
--- a/compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
+++ b/compat/jellybean/android/support/v4/view/ViewPropertyAnimatorCompatJB.java
@@ -17,12 +17,10 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
@RequiresApi(16)
-@TargetApi(16)
class ViewPropertyAnimatorCompatJB {
public static void withStartAction(View view, Runnable runnable) {
diff --git a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityEventCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityEventCompatJellyBean.java
index 9c9ef09..673c2d2 100644
--- a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityEventCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityEventCompatJellyBean.java
@@ -17,11 +17,9 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityEvent;
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityEventCompatJellyBean {
public static void setMovementGranularity(AccessibilityEvent event, int granularity) {
event.setMovementGranularity(granularity);
diff --git a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
index a095b10..37fe9f4 100644
--- a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatJellyBean.java
@@ -18,7 +18,6 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -27,7 +26,6 @@
*/
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityNodeInfoCompatJellyBean {
public static void addChild(Object info, View child, int virtualDescendantId) {
diff --git a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
index 195e2f3..3fd5f14 100644
--- a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatJellyBean.java
@@ -18,7 +18,6 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeProvider;
@@ -29,7 +28,6 @@
*/
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityNodeProviderCompatJellyBean {
interface AccessibilityNodeInfoBridge {
public Object createAccessibilityNodeInfo(int virtualViewId);
diff --git a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
index e5a51b7..3beddc6 100644
--- a/compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
+++ b/compat/jellybean/android/support/v4/view/accessibility/AccessibilityRecordCompatJellyBean.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.accessibility.AccessibilityRecord;
@@ -26,7 +25,6 @@
*/
@RequiresApi(16)
-@TargetApi(16)
class AccessibilityRecordCompatJellyBean {
public static void setSource(Object record, View root, int virtualDescendantId) {
diff --git a/compat/jellybean/android/support/v4/widget/TextViewCompatJb.java b/compat/jellybean/android/support/v4/widget/TextViewCompatJb.java
index 4fd4c4e..82a98c5 100644
--- a/compat/jellybean/android/support/v4/widget/TextViewCompatJb.java
+++ b/compat/jellybean/android/support/v4/widget/TextViewCompatJb.java
@@ -16,12 +16,10 @@
package android.support.v4.widget;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.widget.TextView;
@RequiresApi(16)
-@TargetApi(16)
class TextViewCompatJb {
static int getMaxLines(TextView textView) {
return textView.getMaxLines();
diff --git a/compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java b/compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
index f14b553..098c581 100644
--- a/compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/app/ActivityManagerCompatKitKat.java
@@ -18,10 +18,8 @@
import android.app.ActivityManager;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(19)
-@TargetApi(19)
class ActivityManagerCompatKitKat {
public static boolean isLowRamDevice(ActivityManager am) {
return am.isLowRamDevice();
diff --git a/compat/kitkat/android/support/v4/app/AlarmManagerCompatKitKat.java b/compat/kitkat/android/support/v4/app/AlarmManagerCompatKitKat.java
new file mode 100644
index 0000000..4340bd9
--- /dev/null
+++ b/compat/kitkat/android/support/v4/app/AlarmManagerCompatKitKat.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.v4.app;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.support.annotation.RequiresApi;
+
+@RequiresApi(19)
+class AlarmManagerCompatKitKat {
+
+ static void setExact(AlarmManager alarmManager, int type, long triggerAtMillis,
+ PendingIntent operation) {
+ alarmManager.setExact(type, triggerAtMillis, operation);
+ }
+}
diff --git a/compat/kitkat/android/support/v4/app/NotificationCompatKitKat.java b/compat/kitkat/android/support/v4/app/NotificationCompatKitKat.java
index 5b11daf..c48d9ec 100644
--- a/compat/kitkat/android/support/v4/app/NotificationCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/app/NotificationCompatKitKat.java
@@ -22,7 +22,6 @@
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.util.SparseArray;
import android.widget.RemoteViews;
@@ -30,7 +29,6 @@
import java.util.List;
@RequiresApi(19)
-@TargetApi(19)
class NotificationCompatKitKat {
public static class Builder implements NotificationBuilderWithBuilderAccessor,
NotificationBuilderWithActions {
diff --git a/compat/kitkat/android/support/v4/app/NotificationManagerCompatKitKat.java b/compat/kitkat/android/support/v4/app/NotificationManagerCompatKitKat.java
index 24bacba..623db04 100644
--- a/compat/kitkat/android/support/v4/app/NotificationManagerCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/app/NotificationManagerCompatKitKat.java
@@ -19,14 +19,12 @@
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@RequiresApi(19)
-@TargetApi(19)
class NotificationManagerCompatKitKat {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
diff --git a/compat/kitkat/android/support/v4/content/ContextCompatKitKat.java b/compat/kitkat/android/support/v4/content/ContextCompatKitKat.java
index 6c1bc91..67d06a7 100644
--- a/compat/kitkat/android/support/v4/content/ContextCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/content/ContextCompatKitKat.java
@@ -18,12 +18,10 @@
import android.content.Context;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.File;
@RequiresApi(19)
-@TargetApi(19)
class ContextCompatKitKat {
public static File[] getExternalCacheDirs(Context context) {
return context.getExternalCacheDirs();
diff --git a/compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java b/compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
index ba05a32..d54c1aa 100644
--- a/compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/graphics/BitmapCompatKitKat.java
@@ -17,14 +17,12 @@
import android.graphics.Bitmap;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of BitmapCompat that can use KitKat APIs.
*/
@RequiresApi(19)
-@TargetApi(19)
class BitmapCompatKitKat {
static int getAllocationByteCount(Bitmap bitmap) {
diff --git a/compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java b/compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
index b63ea3f..e5cee20 100644
--- a/compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/graphics/drawable/DrawableCompatKitKat.java
@@ -18,14 +18,12 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
/**
* Implementation of drawable compatibility that can call KitKat APIs.
*/
@RequiresApi(19)
-@TargetApi(19)
class DrawableCompatKitKat {
public static void setAutoMirrored(Drawable drawable, boolean mirrored) {
drawable.setAutoMirrored(mirrored);
diff --git a/compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java b/compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
index b758563..6eb3d2b 100644
--- a/compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
+++ b/compat/kitkat/android/support/v4/graphics/drawable/DrawableWrapperKitKat.java
@@ -21,10 +21,8 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
@RequiresApi(19)
-@TargetApi(19)
class DrawableWrapperKitKat extends DrawableWrapperHoneycomb {
DrawableWrapperKitKat(Drawable drawable) {
diff --git a/compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java b/compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
index b835950..c31acf6 100644
--- a/compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/os/EnvironmentCompatKitKat.java
@@ -18,12 +18,10 @@
import android.os.Environment;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import java.io.File;
@RequiresApi(19)
-@TargetApi(19)
class EnvironmentCompatKitKat {
public static String getStorageState(File path) {
return Environment.getStorageState(path);
diff --git a/compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java b/compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
index 7e873e4..36ede1b 100644
--- a/compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/ScaleGestureDetectorCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.ScaleGestureDetector;
/**
@@ -26,7 +25,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class ScaleGestureDetectorCompatKitKat {
private ScaleGestureDetectorCompatKitKat() {
diff --git a/compat/kitkat/android/support/v4/view/ViewCompatKitKat.java b/compat/kitkat/android/support/v4/view/ViewCompatKitKat.java
index d864e7b..221c2dd 100644
--- a/compat/kitkat/android/support/v4/view/ViewCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/ViewCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
/**
@@ -25,7 +24,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class ViewCompatKitKat {
public static int getAccessibilityLiveRegion(View view) {
return view.getAccessibilityLiveRegion();
diff --git a/compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java b/compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
index 5a00d0c..78761a4 100644
--- a/compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/ViewParentCompatKitKat.java
@@ -17,12 +17,10 @@
package android.support.v4.view;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.ViewParent;
@RequiresApi(19)
-@TargetApi(19)
class ViewParentCompatKitKat {
public static void notifySubtreeAccessibilityStateChanged(ViewParent parent, View child,
View source, int changeType) {
diff --git a/compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java b/compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
index f507a89..aa35239 100644
--- a/compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
+++ b/compat/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
@@ -16,12 +16,10 @@
package android.support.v4.view;
import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
@RequiresApi(19)
-@TargetApi(19)
class ViewPropertyAnimatorCompatKK {
public static void setUpdateListener(final View view,
diff --git a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
index 55e2faa..dbabe2f 100644
--- a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityEventCompatKitKat.java
@@ -17,11 +17,9 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityEvent;
@RequiresApi(19)
-@TargetApi(19)
class AccessibilityEventCompatKitKat {
public static void setContentChangeTypes(AccessibilityEvent event, int changeTypes) {
event.setContentChangeTypes(changeTypes);
diff --git a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityManagerCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityManagerCompatKitKat.java
index cc94249..b8d742c 100644
--- a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityManagerCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityManagerCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.view.accessibility;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener;
@@ -26,7 +25,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class AccessibilityManagerCompatKitKat {
public static class TouchExplorationStateChangeListenerWrapper
diff --git a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
index 7bb8b1e..5855c0e 100644
--- a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatKitKat.java
@@ -18,7 +18,6 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -26,7 +25,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class AccessibilityNodeInfoCompatKitKat {
private static final byte TRAIT_UNSET = -1;
private static final String TRAITS_KEY =
diff --git a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
index a2bbbdc..892c48a 100644
--- a/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/view/accessibility/AccessibilityNodeProviderCompatKitKat.java
@@ -18,7 +18,6 @@
import android.os.Bundle;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeProvider;
@@ -29,7 +28,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class AccessibilityNodeProviderCompatKitKat {
interface AccessibilityNodeInfoBridge {
public Object createAccessibilityNodeInfo(int virtualViewId);
diff --git a/compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java b/compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
index 9678dba..1e11ea3 100644
--- a/compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/widget/ListPopupWindowCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ListPopupWindow;
@@ -27,7 +26,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class ListPopupWindowCompatKitKat {
public static OnTouchListener createDragToOpenListener(Object listPopupWindow, View src) {
return ((ListPopupWindow) listPopupWindow).createDragToOpenListener(src);
diff --git a/compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java b/compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
index ab2ff53..5dcc5b2 100644
--- a/compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/widget/ListViewCompatKitKat.java
@@ -17,11 +17,9 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.widget.ListView;
@RequiresApi(19)
-@TargetApi(19)
class ListViewCompatKitKat {
static void scrollListBy(final ListView listView, int y) {
listView.scrollListBy(y);
diff --git a/compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java b/compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
index da7bc7e..ed2b78c 100644
--- a/compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/widget/PopupMenuCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View.OnTouchListener;
import android.widget.PopupMenu;
@@ -26,7 +25,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class PopupMenuCompatKitKat {
public static OnTouchListener getDragToOpenListener(Object popupMenu) {
return ((PopupMenu) popupMenu).getDragToOpenListener();
diff --git a/compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java b/compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
index 20b0af4..887301f 100644
--- a/compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
+++ b/compat/kitkat/android/support/v4/widget/PopupWindowCompatKitKat.java
@@ -17,7 +17,6 @@
package android.support.v4.widget;
import android.support.annotation.RequiresApi;
-import android.annotation.TargetApi;
import android.view.View;
import android.widget.PopupWindow;
@@ -26,7 +25,6 @@
*/
@RequiresApi(19)
-@TargetApi(19)
class PopupWindowCompatKitKat {
public static void showAsDropDown(PopupWindow popup, View anchor, int xoff, int yoff,
int gravity) {
diff --git a/core-ui/api21/android/support/v4/widget/DrawerLayoutCompatApi21.java b/core-ui/api21/android/support/v4/widget/DrawerLayoutCompatApi21.java
index ff2e93d..f0612d1 100644
--- a/core-ui/api21/android/support/v4/widget/DrawerLayoutCompatApi21.java
+++ b/core-ui/api21/android/support/v4/widget/DrawerLayoutCompatApi21.java
@@ -17,7 +17,6 @@
package android.support.v4.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
@@ -31,7 +30,6 @@
* Provides functionality for DrawerLayout unique to API 21
*/
@RequiresApi(21)
-@TargetApi(21)
class DrawerLayoutCompatApi21 {
private static final int[] THEME_ATTRS = {
diff --git a/core-ui/honeycomb/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java b/core-ui/honeycomb/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
index bd4fd97..cce02d6 100644
--- a/core-ui/honeycomb/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
+++ b/core-ui/honeycomb/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
@@ -18,7 +18,6 @@
package android.support.v4.app;
import android.R;
-import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.content.res.TypedArray;
@@ -40,7 +39,6 @@
* this writing, the new API is accessed via reflection here if available.
*/
@RequiresApi(11)
-@TargetApi(11)
class ActionBarDrawerToggleHoneycomb {
private static final String TAG = "ActionBarDrawerToggleHoneycomb";
diff --git a/core-ui/ics/android/support/v4/view/PagerTitleStripIcs.java b/core-ui/ics/android/support/v4/view/PagerTitleStripIcs.java
index c8e70bd..c6c29b4 100644
--- a/core-ui/ics/android/support/v4/view/PagerTitleStripIcs.java
+++ b/core-ui/ics/android/support/v4/view/PagerTitleStripIcs.java
@@ -16,7 +16,6 @@
package android.support.v4.view;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.text.method.SingleLineTransformationMethod;
@@ -26,7 +25,6 @@
import java.util.Locale;
@RequiresApi(14)
-@TargetApi(14)
class PagerTitleStripIcs {
public static void setSingleLineAllCaps(TextView text) {
text.setTransformationMethod(new SingleLineAllCapsTransform(text.getContext()));
diff --git a/core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java b/core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java
index 4c99341..2a2c6c5 100644
--- a/core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java
+++ b/core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java
@@ -17,7 +17,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
@@ -135,7 +134,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
private static class ActionBarDrawerToggleImplHC implements ActionBarDrawerToggleImpl {
ActionBarDrawerToggleImplHC() {
}
@@ -160,7 +158,6 @@
}
@RequiresApi(18)
- @TargetApi(18)
private static class ActionBarDrawerToggleImplJellybeanMR2
implements ActionBarDrawerToggleImpl {
ActionBarDrawerToggleImplJellybeanMR2() {
diff --git a/core-ui/jellybean-mr2/android/support/v4/app/ActionBarDrawerToggleJellybeanMR2.java b/core-ui/jellybean-mr2/android/support/v4/app/ActionBarDrawerToggleJellybeanMR2.java
index f4dba39..40d180c 100644
--- a/core-ui/jellybean-mr2/android/support/v4/app/ActionBarDrawerToggleJellybeanMR2.java
+++ b/core-ui/jellybean-mr2/android/support/v4/app/ActionBarDrawerToggleJellybeanMR2.java
@@ -18,7 +18,6 @@
package android.support.v4.app;
import android.R;
-import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
@@ -27,7 +26,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(18)
-@TargetApi(18)
class ActionBarDrawerToggleJellybeanMR2 {
private static final String TAG = "ActionBarDrawerToggleImplJellybeanMR2";
diff --git a/core-utils/api20/android/support/v4/print/PrintHelperApi20.java b/core-utils/api20/android/support/v4/print/PrintHelperApi20.java
index 831e9dd..54699a5 100644
--- a/core-utils/api20/android/support/v4/print/PrintHelperApi20.java
+++ b/core-utils/api20/android/support/v4/print/PrintHelperApi20.java
@@ -16,7 +16,6 @@
package android.support.v4.print;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
* Api20 specific PrintManager API implementation.
*/
@RequiresApi(20)
-@TargetApi(20)
class PrintHelperApi20 extends PrintHelperKitkat {
PrintHelperApi20(Context context) {
super(context);
diff --git a/core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java b/core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
index d521293..2aa4345 100644
--- a/core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
+++ b/core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
@@ -16,7 +16,6 @@
package android.support.v4.graphics.drawable;
-import android.annotation.TargetApi;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Outline;
@@ -26,7 +25,6 @@
import android.view.View;
@RequiresApi(21)
-@TargetApi(21)
class RoundedBitmapDrawable21 extends RoundedBitmapDrawable {
protected RoundedBitmapDrawable21(Resources res, Bitmap bitmap) {
super(res, bitmap);
diff --git a/core-utils/api21/android/support/v4/provider/DocumentsContractApi21.java b/core-utils/api21/android/support/v4/provider/DocumentsContractApi21.java
index 03667b3..cfaea83 100644
--- a/core-utils/api21/android/support/v4/provider/DocumentsContractApi21.java
+++ b/core-utils/api21/android/support/v4/provider/DocumentsContractApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.provider;
-import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
@@ -28,7 +27,6 @@
import java.util.ArrayList;
@RequiresApi(21)
-@TargetApi(21)
class DocumentsContractApi21 {
private static final String TAG = "DocumentFile";
diff --git a/core-utils/api23/android/support/v4/print/PrintHelperApi23.java b/core-utils/api23/android/support/v4/print/PrintHelperApi23.java
index e2f6d69..bd949b9 100644
--- a/core-utils/api23/android/support/v4/print/PrintHelperApi23.java
+++ b/core-utils/api23/android/support/v4/print/PrintHelperApi23.java
@@ -16,7 +16,6 @@
package android.support.v4.print;
-import android.annotation.TargetApi;
import android.content.Context;
import android.print.PrintAttributes;
import android.support.annotation.RequiresApi;
@@ -25,7 +24,6 @@
* Api23 specific PrintManager API implementation.
*/
@RequiresApi(23)
-@TargetApi(23)
class PrintHelperApi23 extends PrintHelperApi20 {
@Override
protected PrintAttributes.Builder copyAttributes(PrintAttributes other) {
diff --git a/core-utils/api24/android/support/v4/print/PrintHelperApi24.java b/core-utils/api24/android/support/v4/print/PrintHelperApi24.java
index 36edfbd..9ae32b4 100644
--- a/core-utils/api24/android/support/v4/print/PrintHelperApi24.java
+++ b/core-utils/api24/android/support/v4/print/PrintHelperApi24.java
@@ -16,7 +16,6 @@
package android.support.v4.print;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
* Api24 specific PrintManager API implementation.
*/
@RequiresApi(24)
-@TargetApi(24)
class PrintHelperApi24 extends PrintHelperApi23 {
PrintHelperApi24(Context context) {
super(context);
diff --git a/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java b/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
index 72b6abb..a38afa4 100644
--- a/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
+++ b/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
@@ -15,7 +15,6 @@
*/
package android.support.v4.graphics.drawable;
-import android.annotation.TargetApi;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
@@ -43,7 +42,6 @@
* </p>
*/
@RequiresApi(9)
-@TargetApi(9)
public abstract class RoundedBitmapDrawable extends Drawable {
private static final int DEFAULT_PAINT_FLAGS =
Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG;
diff --git a/core-utils/honeycomb/android/support/v4/app/TaskStackBuilderHoneycomb.java b/core-utils/honeycomb/android/support/v4/app/TaskStackBuilderHoneycomb.java
index d970019..e41fdd8 100644
--- a/core-utils/honeycomb/android/support/v4/app/TaskStackBuilderHoneycomb.java
+++ b/core-utils/honeycomb/android/support/v4/app/TaskStackBuilderHoneycomb.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -26,7 +25,6 @@
* Implementation of TaskStackBuilder that can call Honeycomb APIs.
*/
@RequiresApi(11)
-@TargetApi(11)
class TaskStackBuilderHoneycomb {
public static PendingIntent getActivitiesPendingIntent(Context context, int requestCode,
Intent[] intents, int flags) {
diff --git a/core-utils/java/android/support/v4/math/MathUtils.java b/core-utils/java/android/support/v4/math/MathUtils.java
new file mode 100644
index 0000000..e66b2c2
--- /dev/null
+++ b/core-utils/java/android/support/v4/math/MathUtils.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.math;
+
+/**
+ * A utility class providing functions useful for common mathematical operations.
+ */
+public class MathUtils {
+
+ /**
+ * This method takes a numerical value and ensures it fits in a given numerical range. If the
+ * number is smaller than the minimum required by the range, then the minimum of the range will
+ * be returned. If the number is higher than the maximum allowed by the range then the maximum
+ * of the range will be returned.
+ *
+ * @param value the value to be clamped.
+ * @param min minimum resulting value.
+ * @param max maximum resulting value.
+ *
+ * @return the clamped value.
+ */
+ public static float clamp(float value, int min, int max) {
+ if (value < min) {
+ return min;
+ } else if (value > max) {
+ return max;
+ }
+ return value;
+ }
+
+ /**
+ * This method takes a numerical value and ensures it fits in a given numerical range. If the
+ * number is smaller than the minimum required by the range, then the minimum of the range will
+ * be returned. If the number is higher than the maximum allowed by the range then the maximum
+ * of the range will be returned.
+ *
+ * @param value the value to be clamped.
+ * @param min minimum resulting value.
+ * @param max maximum resulting value.
+ *
+ * @return the clamped value.
+ */
+ public static double clamp(double value, double min, double max) {
+ if (value < min) {
+ return min;
+ } else if (value > max) {
+ return max;
+ }
+ return value;
+ }
+
+ /**
+ * This method takes a numerical value and ensures it fits in a given numerical range. If the
+ * number is smaller than the minimum required by the range, then the minimum of the range will
+ * be returned. If the number is higher than the maximum allowed by the range then the maximum
+ * of the range will be returned.
+ *
+ * @param value the value to be clamped.
+ * @param min minimum resulting value.
+ * @param max maximum resulting value.
+ *
+ * @return the clamped value.
+ */
+ public static int clamp(int value, int min, int max) {
+ if (value < min) {
+ return min;
+ } else if (value > max) {
+ return max;
+ }
+ return value;
+ }
+}
diff --git a/core-utils/jellybean/android/support/v4/app/NavUtilsJB.java b/core-utils/jellybean/android/support/v4/app/NavUtilsJB.java
index 86a28b3..64a6a81 100644
--- a/core-utils/jellybean/android/support/v4/app/NavUtilsJB.java
+++ b/core-utils/jellybean/android/support/v4/app/NavUtilsJB.java
@@ -16,14 +16,12 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.support.annotation.RequiresApi;
@RequiresApi(16)
-@TargetApi(16)
class NavUtilsJB {
public static Intent getParentActivityIntent(Activity activity) {
return activity.getParentActivityIntent();
diff --git a/core-utils/jellybean/android/support/v4/app/TaskStackBuilderJellybean.java b/core-utils/jellybean/android/support/v4/app/TaskStackBuilderJellybean.java
index 96c3dda..2a18971 100644
--- a/core-utils/jellybean/android/support/v4/app/TaskStackBuilderJellybean.java
+++ b/core-utils/jellybean/android/support/v4/app/TaskStackBuilderJellybean.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -24,7 +23,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(16)
-@TargetApi(16)
class TaskStackBuilderJellybean {
public static PendingIntent getActivitiesPendingIntent(Context context, int requestCode,
diff --git a/core-utils/kitkat/android/support/v4/print/PrintHelperKitkat.java b/core-utils/kitkat/android/support/v4/print/PrintHelperKitkat.java
index 08a41b2..355e878 100644
--- a/core-utils/kitkat/android/support/v4/print/PrintHelperKitkat.java
+++ b/core-utils/kitkat/android/support/v4/print/PrintHelperKitkat.java
@@ -16,7 +16,6 @@
package android.support.v4.print;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
@@ -52,7 +51,6 @@
* Kitkat specific PrintManager API implementation.
*/
@RequiresApi(19)
-@TargetApi(19)
class PrintHelperKitkat {
private static final String LOG_TAG = "PrintHelperKitkat";
// will be <= 300 dpi on A4 (8.3×11.7) paper (worst case of 150 dpi)
diff --git a/core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java b/core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java
index f164f17..41ba0f0 100644
--- a/core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java
+++ b/core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java
@@ -16,7 +16,6 @@
package android.support.v4.provider;
-import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -29,7 +28,6 @@
import android.util.Log;
@RequiresApi(19)
-@TargetApi(19)
class DocumentsContractApi19 {
private static final String TAG = "DocumentFile";
diff --git a/core-utils/tests/java/android/support/v4/math/MathUtilsTest.java b/core-utils/tests/java/android/support/v4/math/MathUtilsTest.java
new file mode 100644
index 0000000..526f3a6
--- /dev/null
+++ b/core-utils/tests/java/android/support/v4/math/MathUtilsTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.math;
+
+import static org.junit.Assert.assertEquals;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class MathUtilsTest {
+
+ @Test
+ public void testClamp() {
+ // Int
+ assertEquals(0, MathUtils.clamp(-4, 0, 7));
+ assertEquals(3, MathUtils.clamp(3, -2, 7));
+ assertEquals(0, MathUtils.clamp(0, 0, 7));
+ assertEquals(7, MathUtils.clamp(7, 0, 7));
+ assertEquals(7, MathUtils.clamp(8, -2, 7));
+
+ // Double
+ assertEquals(0.0, MathUtils.clamp(-0.4, 0.0, 7.0), 0.0);
+ assertEquals(3.0, MathUtils.clamp(3.0, 0.0, 7.0), 0.0);
+ assertEquals(0.1, MathUtils.clamp(0.1, 0.0, 7.0), 0.0);
+ assertEquals(7.0, MathUtils.clamp(7.0, 0.0, 7.0), 0.0);
+ assertEquals(-0.6, MathUtils.clamp(-0.7, -0.6, 7.0), 0.0);
+
+ // Float
+ assertEquals(0.0f, MathUtils.clamp(-0.4f, 0.0f, 7.0f), 0.0f);
+ assertEquals(3.0f, MathUtils.clamp(3.0f, 0.0f, 7.0f), 0.0f);
+ assertEquals(0.1f, MathUtils.clamp(0.1f, 0.0f, 7.0f), 0.0f);
+ assertEquals(7.0f, MathUtils.clamp(7.0f, 0.0f, 7.0f), 0.0f);
+ assertEquals(-0.6f, MathUtils.clamp(-0.7f, -0.6f, 7.0f), 0.0f);
+ }
+}
diff --git a/design/honeycomb-mr1/android/support/design/widget/ValueAnimatorCompatImplHoneycombMr1.java b/design/honeycomb-mr1/android/support/design/widget/ValueAnimatorCompatImplHoneycombMr1.java
index e1f287b..b88015a 100644
--- a/design/honeycomb-mr1/android/support/design/widget/ValueAnimatorCompatImplHoneycombMr1.java
+++ b/design/honeycomb-mr1/android/support/design/widget/ValueAnimatorCompatImplHoneycombMr1.java
@@ -19,12 +19,10 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.animation.Interpolator;
@RequiresApi(12)
-@TargetApi(12)
class ValueAnimatorCompatImplHoneycombMr1 extends ValueAnimatorCompat.Impl {
private final ValueAnimator mValueAnimator;
diff --git a/design/honeycomb/android/support/design/widget/ViewGroupUtilsHoneycomb.java b/design/honeycomb/android/support/design/widget/ViewGroupUtilsHoneycomb.java
index 49a07cd..c35c1da 100644
--- a/design/honeycomb/android/support/design/widget/ViewGroupUtilsHoneycomb.java
+++ b/design/honeycomb/android/support/design/widget/ViewGroupUtilsHoneycomb.java
@@ -16,7 +16,6 @@
package android.support.design.widget;
-import android.annotation.TargetApi;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -26,7 +25,6 @@
import android.view.ViewParent;
@RequiresApi(11)
-@TargetApi(11)
class ViewGroupUtilsHoneycomb {
private static final ThreadLocal<Matrix> sMatrix = new ThreadLocal<>();
private static final ThreadLocal<RectF> sRectF = new ThreadLocal<>();
diff --git a/design/ics/android/support/design/internal/TextScale.java b/design/ics/android/support/design/internal/TextScale.java
index c017223..1687469 100644
--- a/design/ics/android/support/design/internal/TextScale.java
+++ b/design/ics/android/support/design/internal/TextScale.java
@@ -18,7 +18,6 @@
import android.animation.Animator;
import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.transition.Transition;
import android.support.transition.TransitionValues;
@@ -31,7 +30,6 @@
* @hide
*/
@RequiresApi(14)
-@TargetApi(14)
public class TextScale extends Transition {
private static final String PROPNAME_SCALE = "android:textscale:scale";
diff --git a/design/ics/android/support/design/widget/FloatingActionButtonIcs.java b/design/ics/android/support/design/widget/FloatingActionButtonIcs.java
index 73b4cac..5211926 100644
--- a/design/ics/android/support/design/widget/FloatingActionButtonIcs.java
+++ b/design/ics/android/support/design/widget/FloatingActionButtonIcs.java
@@ -18,7 +18,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.annotation.TargetApi;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
@@ -26,7 +25,6 @@
import android.view.View;
@RequiresApi(14)
-@TargetApi(14)
class FloatingActionButtonIcs extends FloatingActionButtonGingerbread {
private float mRotation;
diff --git a/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java b/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java
index ed03d35..8008404 100644
--- a/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java
+++ b/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java
@@ -16,7 +16,6 @@
package android.support.design.widget;
-import android.annotation.TargetApi;
import android.graphics.Outline;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
* Lollipop version of {@link CircularBorderDrawable}.
*/
@RequiresApi(21)
-@TargetApi(21)
class CircularBorderDrawableLollipop extends CircularBorderDrawable {
@Override
diff --git a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java b/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
index 24ef314..db7f43a 100644
--- a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
+++ b/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
@@ -19,7 +19,6 @@
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.StateListAnimator;
-import android.annotation.TargetApi;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
import android.graphics.Rect;
@@ -34,7 +33,6 @@
import android.view.View;
@RequiresApi(21)
-@TargetApi(21)
class FloatingActionButtonLollipop extends FloatingActionButtonIcs {
private InsetDrawable mInsetDrawable;
diff --git a/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java b/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java
index 8dfa926..5927e9b 100644
--- a/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java
+++ b/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java
@@ -19,7 +19,6 @@
import android.animation.AnimatorInflater;
import android.animation.ObjectAnimator;
import android.animation.StateListAnimator;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.RequiresApi;
@@ -29,7 +28,6 @@
import android.view.ViewOutlineProvider;
@RequiresApi(21)
-@TargetApi(21)
class ViewUtilsLollipop {
private static final int[] STATE_LIST_ANIM_ATTRS = new int[] {android.R.attr.stateListAnimator};
diff --git a/design/res/layout/design_bottom_sheet_dialog.xml b/design/res/layout/design_bottom_sheet_dialog.xml
index c99caa6..f4edb66 100644
--- a/design/res/layout/design_bottom_sheet_dialog.xml
+++ b/design/res/layout/design_bottom_sheet_dialog.xml
@@ -32,7 +32,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|top"
- android:clickable="true"
app:layout_behavior="@string/bottom_sheet_behavior"
style="?attr/bottomSheetStyle"/>
diff --git a/design/src/android/support/design/internal/ForegroundLinearLayout.java b/design/src/android/support/design/internal/ForegroundLinearLayout.java
index c75603b..bda83dd 100644
--- a/design/src/android/support/design/internal/ForegroundLinearLayout.java
+++ b/design/src/android/support/design/internal/ForegroundLinearLayout.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -121,7 +120,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public void jumpDrawablesToCurrentState() {
super.jumpDrawablesToCurrentState();
@@ -227,7 +225,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
@Override
public void drawableHotspotChanged(float x, float y) {
super.drawableHotspotChanged(x, y);
diff --git a/design/src/android/support/design/widget/AppBarLayout.java b/design/src/android/support/design/widget/AppBarLayout.java
index 4c7ef0a..eea818f 100644
--- a/design/src/android/support/design/widget/AppBarLayout.java
+++ b/design/src/android/support/design/widget/AppBarLayout.java
@@ -19,7 +19,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import static android.support.design.widget.ViewUtils.objectEquals;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -684,14 +683,12 @@
}
@RequiresApi(19)
- @TargetApi(19)
public LayoutParams(LinearLayout.LayoutParams source) {
// The copy constructor called here only exists on API 19+.
super(source);
}
@RequiresApi(19)
- @TargetApi(19)
public LayoutParams(LayoutParams source) {
// The copy constructor called here only exists on API 19+.
super(source);
diff --git a/design/src/android/support/design/widget/BaseTransientBottomBar.java b/design/src/android/support/design/widget/BaseTransientBottomBar.java
index 864417d..4475ee0 100644
--- a/design/src/android/support/design/widget/BaseTransientBottomBar.java
+++ b/design/src/android/support/design/widget/BaseTransientBottomBar.java
@@ -28,11 +28,9 @@
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.design.R;
import android.support.v4.view.ViewCompat;
-import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
import android.support.v4.view.WindowInsetsCompat;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -169,6 +167,9 @@
static final int MSG_SHOW = 0;
static final int MSG_DISMISS = 1;
+ private static final boolean IS_ON_JELLYBEAN = (Build.VERSION.SDK_INT >= 16)
+ && (Build.VERSION.SDK_INT <= 18);
+
static {
sHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
@@ -486,27 +487,50 @@
}
void animateViewIn() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- ViewCompat.setTranslationY(mView, mView.getHeight());
- ViewCompat.animate(mView)
- .translationY(0f)
- .setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
- .setDuration(ANIMATION_DURATION)
- .setListener(new ViewPropertyAnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(View view) {
- mContentViewCallback.animateContentIn(
- ANIMATION_DURATION - ANIMATION_FADE_DURATION,
- ANIMATION_FADE_DURATION);
- }
+ if (Build.VERSION.SDK_INT >= 12) {
+ final int viewHeight = mView.getHeight();
+ if (IS_ON_JELLYBEAN) {
+ ViewCompat.offsetTopAndBottom(mView, viewHeight);
+ } else {
+ ViewCompat.setTranslationY(mView, viewHeight);
+ }
+ final ValueAnimatorCompat animator = ViewUtils.createAnimator();
+ animator.setIntValues(viewHeight, 0);
+ animator.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
+ animator.setDuration(ANIMATION_DURATION);
+ animator.addListener(new ValueAnimatorCompat.AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(ValueAnimatorCompat animator) {
+ mContentViewCallback.animateContentIn(
+ ANIMATION_DURATION - ANIMATION_FADE_DURATION,
+ ANIMATION_FADE_DURATION);
+ }
- @Override
- public void onAnimationEnd(View view) {
- onViewShown();
- }
- }).start();
+ @Override
+ public void onAnimationEnd(ValueAnimatorCompat animator) {
+ onViewShown();
+ }
+ });
+ animator.addUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() {
+ private int mPreviousAnimatedIntValue = viewHeight;
+
+ @Override
+ public void onAnimationUpdate(ValueAnimatorCompat animator) {
+ int currentAnimatedIntValue = animator.getAnimatedIntValue();
+ if (IS_ON_JELLYBEAN) {
+ // On JB versions of the platform sometimes View.setTranslationY does not
+ // result in layout / draw pass
+ ViewCompat.offsetTopAndBottom(mView,
+ currentAnimatedIntValue - mPreviousAnimatedIntValue);
+ } else {
+ ViewCompat.setTranslationY(mView, animator.getAnimatedIntValue());
+ }
+ mPreviousAnimatedIntValue = currentAnimatedIntValue;
+ }
+ });
+ animator.start();
} else {
- Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
+ final Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
R.anim.design_snackbar_in);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(ANIMATION_DURATION);
@@ -527,24 +551,42 @@
}
private void animateViewOut(final int event) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- ViewCompat.animate(mView)
- .translationY(mView.getHeight())
- .setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
- .setDuration(ANIMATION_DURATION)
- .setListener(new ViewPropertyAnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(View view) {
- mContentViewCallback.animateContentOut(0, ANIMATION_FADE_DURATION);
- }
+ if (Build.VERSION.SDK_INT >= 12) {
+ final ValueAnimatorCompat animator = ViewUtils.createAnimator();
+ animator.setIntValues(0, mView.getHeight());
+ animator.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
+ animator.setDuration(ANIMATION_DURATION);
+ animator.addListener(new ValueAnimatorCompat.AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(ValueAnimatorCompat animator) {
+ mContentViewCallback.animateContentOut(0, ANIMATION_FADE_DURATION);
+ }
- @Override
- public void onAnimationEnd(View view) {
- onViewHidden(event);
- }
- }).start();
+ @Override
+ public void onAnimationEnd(ValueAnimatorCompat animator) {
+ onViewHidden(event);
+ }
+ });
+ animator.addUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() {
+ private int mPreviousAnimatedIntValue = 0;
+
+ @Override
+ public void onAnimationUpdate(ValueAnimatorCompat animator) {
+ int currentAnimatedIntValue = animator.getAnimatedIntValue();
+ if (IS_ON_JELLYBEAN) {
+ // On JB versions of the platform sometimes View.setTranslationY does not
+ // result in layout / draw pass
+ ViewCompat.offsetTopAndBottom(mView,
+ currentAnimatedIntValue - mPreviousAnimatedIntValue);
+ } else {
+ ViewCompat.setTranslationY(mView, animator.getAnimatedIntValue());
+ }
+ mPreviousAnimatedIntValue = currentAnimatedIntValue;
+ }
+ });
+ animator.start();
} else {
- Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
+ final Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
R.anim.design_snackbar_out);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(ANIMATION_DURATION);
diff --git a/design/src/android/support/design/widget/BottomSheetBehavior.java b/design/src/android/support/design/widget/BottomSheetBehavior.java
index e745217..2a85f83 100644
--- a/design/src/android/support/design/widget/BottomSheetBehavior.java
+++ b/design/src/android/support/design/widget/BottomSheetBehavior.java
@@ -629,9 +629,11 @@
} else {
throw new IllegalArgumentException("Illegal state argument: " + state);
}
- setStateInternal(STATE_SETTLING);
if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
+ setStateInternal(STATE_SETTLING);
ViewCompat.postOnAnimation(child, new SettleRunnable(child, state));
+ } else {
+ setStateInternal(state);
}
}
diff --git a/design/src/android/support/design/widget/BottomSheetDialog.java b/design/src/android/support/design/widget/BottomSheetDialog.java
index de48937..149a216 100644
--- a/design/src/android/support/design/widget/BottomSheetDialog.java
+++ b/design/src/android/support/design/widget/BottomSheetDialog.java
@@ -29,6 +29,7 @@
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v7.app.AppCompatDialog;
import android.util.TypedValue;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
@@ -153,6 +154,13 @@
return super.performAccessibilityAction(host, action, args);
}
});
+ bottomSheet.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent event) {
+ // Consume the event and prevent it from falling through
+ return true;
+ }
+ });
return coordinator;
}
diff --git a/design/src/android/support/design/widget/CollapsingToolbarLayout.java b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
index 5f8de36..fdd25d5 100644
--- a/design/src/android/support/design/widget/CollapsingToolbarLayout.java
+++ b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
@@ -20,7 +20,6 @@
import static android.support.design.widget.MathUtils.constrain;
import static android.support.design.widget.ViewUtils.objectEquals;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
@@ -1185,7 +1184,6 @@
}
@RequiresApi(19)
- @TargetApi(19)
public LayoutParams(FrameLayout.LayoutParams source) {
// The copy constructor called here only exists on API 19+.
super(source);
diff --git a/design/src/android/support/design/widget/CoordinatorLayout.java b/design/src/android/support/design/widget/CoordinatorLayout.java
index bac67f9..375edcc 100644
--- a/design/src/android/support/design/widget/CoordinatorLayout.java
+++ b/design/src/android/support/design/widget/CoordinatorLayout.java
@@ -1364,9 +1364,9 @@
if (behavior != null && behavior.getInsetDodgeRect(this, child, dodgeRect)) {
// Make sure that the rect is within the view's bounds
if (!bounds.contains(dodgeRect)) {
- throw new IllegalArgumentException("Rect should be within the child's bounds."
- + " Rect:" + dodgeRect.toShortString()
- + " | Bounds:" + bounds.toShortString());
+ throw new IllegalArgumentException("Rect should be within the child's bounds."
+ + " Rect:" + dodgeRect.toShortString()
+ + " | Bounds:" + bounds.toShortString());
}
} else {
dodgeRect.set(bounds);
@@ -2158,15 +2158,6 @@
}
/**
- * @deprecated this method is not called anymore. You can safely remove all usages
- * and implementations. This method will be removed in a future release.
- */
- @Deprecated
- public boolean isDirty(CoordinatorLayout parent, V child) {
- return false;
- }
-
- /**
* Called when the parent CoordinatorLayout is about to measure the given child view.
*
* <p>This method can be used to perform custom or modified measurement of a child view
diff --git a/design/src/android/support/design/widget/FloatingActionButton.java b/design/src/android/support/design/widget/FloatingActionButton.java
index 1597386..f8d94d2 100644
--- a/design/src/android/support/design/widget/FloatingActionButton.java
+++ b/design/src/android/support/design/widget/FloatingActionButton.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -470,7 +469,6 @@
getImpl().onDrawableStateChanged(getDrawableState());
}
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void jumpDrawablesToCurrentState() {
super.jumpDrawablesToCurrentState();
diff --git a/design/src/android/support/design/widget/TabLayout.java b/design/src/android/support/design/widget/TabLayout.java
index b6f94a4..23a15e1 100755
--- a/design/src/android/support/design/widget/TabLayout.java
+++ b/design/src/android/support/design/widget/TabLayout.java
@@ -21,7 +21,6 @@
import static android.support.v4.view.ViewPager.SCROLL_STATE_IDLE;
import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -1551,7 +1550,6 @@
}
}
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
@@ -1559,7 +1557,6 @@
event.setClassName(ActionBar.Tab.class.getName());
}
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
diff --git a/design/tests/src/android/support/design/testutils/ViewPagerActions.java b/design/tests/src/android/support/design/testutils/ViewPagerActions.java
index e7b4bf7..1a147cf 100644
--- a/design/tests/src/android/support/design/testutils/ViewPagerActions.java
+++ b/design/tests/src/android/support/design/testutils/ViewPagerActions.java
@@ -16,22 +16,17 @@
package android.support.design.testutils;
+import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast;
+
import android.support.annotation.Nullable;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.action.CoordinatesProvider;
-import android.support.test.espresso.action.GeneralClickAction;
-import android.support.test.espresso.action.Press;
-import android.support.test.espresso.action.Tap;
import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.view.View;
-import android.widget.TextView;
-import org.hamcrest.Matcher;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast;
+import org.hamcrest.Matcher;
public class ViewPagerActions {
/**
@@ -203,31 +198,4 @@
}
};
}
-
- /**
- * Moves <code>ViewPager</code> to specific page.
- */
- public static ViewAction notifyAdapterContentChange() {
- return new ViewAction() {
- @Override
- public Matcher<View> getConstraints() {
- return isAssignableFrom(ViewPager.class);
- }
-
- @Override
- public String getDescription() {
- return "ViewPager notify on adapter content change";
- }
-
- @Override
- public void perform(UiController uiController, View view) {
- uiController.loopMainThreadUntilIdle();
-
- ViewPager viewPager = (ViewPager) view;
- viewPager.getAdapter().notifyDataSetChanged();
-
- uiController.loopMainThreadUntilIdle();
- }
- };
- }
}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java
index 3a4ae2a..1394720 100644
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java
+++ b/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java
@@ -723,6 +723,23 @@
}
}
+ @Test
+ @MediumTest
+ public void testExpandedPeekHeight() throws Throwable {
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // Make the peek height as tall as the bottom sheet.
+ BottomSheetBehavior behavior = getBehavior();
+ behavior.setPeekHeight(getBottomSheet().getHeight());
+ assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
+ }
+ });
+ // Both of these will not animate the sheet , but the state should be changed.
+ checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
+ checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
+ }
+
private void checkSetState(final int state, Matcher<View> matcher) throws Throwable {
registerIdlingResourceCallback();
try {
diff --git a/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java b/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java
index 84c522c..2aca6de 100644
--- a/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java
+++ b/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java
@@ -20,7 +20,12 @@
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.lessThan;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import android.content.Context;
import android.content.DialogInterface;
@@ -86,6 +91,59 @@
@Test
@MediumTest
+ public void testTouchInside() throws Throwable {
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ showDialog();
+ // Confirms that the dialog is shown
+ assertThat(mDialog.isShowing(), is(true));
+ FrameLayout bottomSheet = (FrameLayout) mDialog
+ .findViewById(R.id.design_bottom_sheet);
+ // The bottom sheet is not clickable
+ assertNotNull(bottomSheet);
+ assertThat(bottomSheet.isClickable(), is(false));
+ }
+ });
+ // Click on the bottom sheet
+ Espresso.onView(ViewMatchers.withId(R.id.design_bottom_sheet))
+ .perform(ViewActions.click());
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // Confirm that touch didn't fall through as outside touch
+ assertThat(mDialog.isShowing(), is(true));
+ }
+ });
+ }
+
+ @Test
+ @MediumTest
+ public void testClickContent() throws Throwable {
+ final View.OnClickListener mockListener = mock(View.OnClickListener.class);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ showDialog();
+ // Confirms that the dialog is shown
+ assertThat(mDialog.isShowing(), is(true));
+ FrameLayout bottomSheet = (FrameLayout) mDialog
+ .findViewById(R.id.design_bottom_sheet);
+ // Set up an OnClickListener to the content of the bottom sheet
+ assertNotNull(bottomSheet);
+ View child = bottomSheet.getChildAt(0);
+ child.setOnClickListener(mockListener);
+ }
+ });
+ // Click on the bottom sheet; since the whole sheet is occupied with its only child, this
+ // clicks the child
+ Espresso.onView(ViewMatchers.withParent(ViewMatchers.withId(R.id.design_bottom_sheet)))
+ .perform(ViewActions.click());
+ verify(mockListener, times(1)).onClick(any(View.class));
+ }
+
+ @Test
+ @MediumTest
public void testShortDialog() throws Throwable {
mActivityTestRule.runOnUiThread(new Runnable() {
@Override
diff --git a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java b/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java
index 00810d5..c01b785 100755
--- a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java
+++ b/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java
@@ -16,7 +16,6 @@
package android.support.design.widget;
import static android.support.design.testutils.TabLayoutActions.setupWithViewPager;
-import static android.support.design.testutils.ViewPagerActions.notifyAdapterContentChange;
import static android.support.design.testutils.ViewPagerActions.setAdapter;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
@@ -42,6 +41,8 @@
import android.support.design.testutils.TestUtilsActions;
import android.support.design.testutils.TestUtilsMatchers;
import android.support.design.testutils.ViewPagerActions;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
@@ -176,6 +177,63 @@
}
}
+ private static <Q> ViewAction addItemToPager(final String title, final Q content) {
+ return new ViewAction() {
+ @Override
+ public Matcher<View> getConstraints() {
+ return isAssignableFrom(ViewPager.class);
+ }
+
+ @Override
+ public String getDescription() {
+ return "Add item and notify on content change";
+ }
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ uiController.loopMainThreadUntilIdle();
+
+ final ViewPager viewPager = (ViewPager) view;
+ final BasePagerAdapter<Q> viewPagerAdapter =
+ (BasePagerAdapter<Q>) viewPager.getAdapter();
+ viewPagerAdapter.add(title, content);
+ viewPagerAdapter.notifyDataSetChanged();
+
+ uiController.loopMainThreadUntilIdle();
+ }
+ };
+ }
+
+ private static <Q> ViewAction addItemsToPager(final String[] title, final Q[] content) {
+ return new ViewAction() {
+ @Override
+ public Matcher<View> getConstraints() {
+ return isAssignableFrom(ViewPager.class);
+ }
+
+ @Override
+ public String getDescription() {
+ return "Add items and notify on content change";
+ }
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ uiController.loopMainThreadUntilIdle();
+
+ final ViewPager viewPager = (ViewPager) view;
+ final BasePagerAdapter<Q> viewPagerAdapter =
+ (BasePagerAdapter<Q>) viewPager.getAdapter();
+ int itemCount = title.length;
+ for (int i = 0; i < itemCount; i++) {
+ viewPagerAdapter.add(title[i], content[i]);
+ }
+ viewPagerAdapter.notifyDataSetChanged();
+
+ uiController.loopMainThreadUntilIdle();
+ }
+ };
+ }
+
public TabLayoutWithViewPagerTest() {
super(TabLayoutWithViewPagerActivity.class);
}
@@ -307,15 +365,15 @@
assertEquals("Initial adapter page count", 3, initialAdapter.getCount());
// Add two more entries to our adapter
- mDefaultPagerAdapter.add("Yellow", Color.YELLOW);
- mDefaultPagerAdapter.add("Magenta", Color.MAGENTA);
- final int newItemCount = mDefaultPagerAdapter.getCount();
- onView(withId(R.id.tabs_viewpager)).perform(notifyAdapterContentChange());
+ onView(withId(R.id.tabs_viewpager)).perform(
+ addItemsToPager(new String[] { "Yellow", "Magenta"},
+ new Integer[] { Color.YELLOW, Color.MAGENTA }));
// We have more comprehensive test coverage for changing the ViewPager adapter in v4/tests.
// Here we are focused on testing the continuous integration of TabLayout with the new
// content of ViewPager
+ final int newItemCount = mDefaultPagerAdapter.getCount();
assertEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
for (int i = 0; i < newItemCount; i++) {
@@ -337,15 +395,13 @@
assertEquals("Initial adapter class", ColorPagerAdapter.class, initialAdapter.getClass());
assertEquals("Initial adapter page count", 3, initialAdapter.getCount());
- // Add two more entries to our adapter
- mDefaultPagerAdapter.add("Yellow", Color.YELLOW);
- mDefaultPagerAdapter.add("Magenta", Color.MAGENTA);
- final int newItemCount = mDefaultPagerAdapter.getCount();
-
- // Notify the adapter that it has changed
- onView(withId(R.id.tabs_viewpager)).perform(notifyAdapterContentChange());
+ // Add two entries to our adapter
+ onView(withId(R.id.tabs_viewpager)).perform(
+ addItemsToPager(new String[] { "Yellow", "Magenta"},
+ new Integer[] { Color.YELLOW, Color.MAGENTA }));
// Assert that the TabLayout did not update and add the new items
+ final int newItemCount = mDefaultPagerAdapter.getCount();
assertNotEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
}
@@ -428,9 +484,7 @@
// Add a bunch of tabs and verify that all of them are visible on the screen
for (int i = 0; i < 8; i++) {
- newAdapter.add("Title " + i, "Body " + i);
- onView(withId(R.id.tabs_viewpager)).perform(
- notifyAdapterContentChange());
+ onView(withId(R.id.tabs_viewpager)).perform(addItemToPager("Title " + i, "Body " + i));
int expectedTabCount = i + 1;
assertEquals("Tab count after adding #" + i, expectedTabCount,
@@ -499,9 +553,7 @@
tabTitleBuilder.append(titleComponent);
}
final String tabTitle = tabTitleBuilder.toString();
- newAdapter.add(tabTitle, "Body " + i);
- onView(withId(R.id.tabs_viewpager)).perform(
- notifyAdapterContentChange());
+ onView(withId(R.id.tabs_viewpager)).perform(addItemToPager(tabTitle, "Body " + i));
int expectedTabCount = i + 1;
// Check that all tabs are at least as wide as min width *and* at most as wide as max
diff --git a/documents-archive/src/android/support/provider/DocumentArchive.java b/documents-archive/src/android/support/provider/DocumentArchive.java
deleted file mode 100644
index 4b0b0b9..0000000
--- a/documents-archive/src/android/support/provider/DocumentArchive.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * 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 android.support.provider;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.graphics.Point;
-import android.media.ExifInterface;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.CancellationSignal;
-import android.os.OperationCanceledException;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsProvider;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.util.Log;
-import android.webkit.MimeTypeMap;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Stack;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-/**
- * Provides basic implementation for creating, extracting and accessing
- * files within archives exposed by a document provider. The id delimiter
- * must be a character which is not used in document ids generated by the
- * document provider.
- *
- * <p>This class is thread safe.
- *
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class DocumentArchive implements Closeable {
- private static final String TAG = "DocumentArchive";
-
- private static final String[] DEFAULT_PROJECTION = new String[] {
- Document.COLUMN_DOCUMENT_ID,
- Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_MIME_TYPE,
- Document.COLUMN_SIZE,
- Document.COLUMN_FLAGS
- };
-
- private final Context mContext;
- private final String mDocumentId;
- private final char mIdDelimiter;
- private final Uri mNotificationUri;
- private final ZipFile mZipFile;
- private final ExecutorService mExecutor;
- private final Map<String, ZipEntry> mEntries;
- private final Map<String, List<ZipEntry>> mTree;
-
- private DocumentArchive(
- Context context,
- File file,
- String documentId,
- char idDelimiter,
- @Nullable Uri notificationUri)
- throws IOException {
- mContext = context;
- mDocumentId = documentId;
- mIdDelimiter = idDelimiter;
- mNotificationUri = notificationUri;
- mZipFile = new ZipFile(file);
- mExecutor = Executors.newSingleThreadExecutor();
-
- // Build the tree structure in memory.
- mTree = new HashMap<String, List<ZipEntry>>();
- mTree.put("/", new ArrayList<ZipEntry>());
-
- mEntries = new HashMap<String, ZipEntry>();
- ZipEntry entry;
- final List<? extends ZipEntry> entries = Collections.list(mZipFile.entries());
- final Stack<ZipEntry> stack = new Stack<>();
- for (int i = entries.size() - 1; i >= 0; i--) {
- entry = entries.get(i);
- if (entry.isDirectory() != entry.getName().endsWith("/")) {
- throw new IOException(
- "Directories must have a trailing slash, and files must not.");
- }
- if (mEntries.containsKey(entry.getName())) {
- throw new IOException("Multiple entries with the same name are not supported.");
- }
- mEntries.put(entry.getName(), entry);
- if (entry.isDirectory()) {
- mTree.put(entry.getName(), new ArrayList<ZipEntry>());
- }
- stack.push(entry);
- }
-
- int delimiterIndex;
- String parentPath;
- ZipEntry parentEntry;
- List<ZipEntry> parentList;
-
- while (stack.size() > 0) {
- entry = stack.pop();
-
- delimiterIndex = entry.getName().lastIndexOf('/', entry.isDirectory()
- ? entry.getName().length() - 2 : entry.getName().length() - 1);
- parentPath =
- delimiterIndex != -1 ? entry.getName().substring(0, delimiterIndex) + "/" : "/";
- parentList = mTree.get(parentPath);
-
- if (parentList == null) {
- parentEntry = mEntries.get(parentPath);
- if (parentEntry == null) {
- // The ZIP file doesn't contain all directories leading to the entry.
- // It's rare, but can happen in a valid ZIP archive. In such case create a
- // fake ZipEntry and add it on top of the stack to process it next.
- parentEntry = new ZipEntry(parentPath);
- parentEntry.setSize(0);
- parentEntry.setTime(entry.getTime());
- mEntries.put(parentPath, parentEntry);
- stack.push(parentEntry);
- }
- parentList = new ArrayList<ZipEntry>();
- mTree.put(parentPath, parentList);
- }
-
- parentList.add(entry);
- }
- }
-
- /**
- * Creates a DocumentsArchive instance for opening, browsing and accessing
- * documents within the archive passed as a local file.
- *
- * @param context Context of the provider.
- * @param File Local file containing the archive.
- * @param documentId ID of the archive document.
- * @param idDelimiter Delimiter for constructing IDs of documents within the archive.
- * The delimiter must never be used for IDs of other documents.
- * @param Uri notificationUri Uri for notifying that the archive file has changed.
- * @see createForParcelFileDescriptor(DocumentsProvider, ParcelFileDescriptor, String, char,
- * Uri)
- */
- public static DocumentArchive createForLocalFile(
- Context context, File file, String documentId, char idDelimiter,
- @Nullable Uri notificationUri)
- throws IOException {
- return new DocumentArchive(context, file, documentId, idDelimiter, notificationUri);
- }
-
- /**
- * Creates a DocumentsArchive instance for opening, browsing and accessing
- * documents within the archive passed as a file descriptor.
- *
- * <p>Note, that this method should be used only if the document does not exist
- * on the local storage. A snapshot file will be created, which may be slower
- * and consume significant resources, in contrast to using
- * {@see createForLocalFile(Context, File, String, char, Uri}.
- *
- * @param context Context of the provider.
- * @param descriptor File descriptor for the archive's contents.
- * @param documentId ID of the archive document.
- * @param idDelimiter Delimiter for constructing IDs of documents within the archive.
- * The delimiter must never be used for IDs of other documents.
- * @param Uri notificationUri Uri for notifying that the archive file has changed.
- * @see createForLocalFile(Context, File, String, char, Uri)
- */
- public static DocumentArchive createForParcelFileDescriptor(
- Context context, ParcelFileDescriptor descriptor, String documentId,
- char idDelimiter, @Nullable Uri notificationUri)
- throws IOException {
- File snapshotFile = null;
- try {
- // Create a copy of the archive, as ZipFile doesn't operate on streams.
- // Moreover, ZipInputStream would be inefficient for large files on
- // pipes.
- snapshotFile = File.createTempFile("android.support.provider.snapshot{",
- "}.zip", context.getCacheDir());
-
- try (
- final FileOutputStream outputStream =
- new ParcelFileDescriptor.AutoCloseOutputStream(
- ParcelFileDescriptor.open(
- snapshotFile, ParcelFileDescriptor.MODE_WRITE_ONLY));
- final ParcelFileDescriptor.AutoCloseInputStream inputStream =
- new ParcelFileDescriptor.AutoCloseInputStream(descriptor);
- ) {
- final byte[] buffer = new byte[32 * 1024];
- int bytes;
- while ((bytes = inputStream.read(buffer)) != -1) {
- outputStream.write(buffer, 0, bytes);
- }
- outputStream.flush();
- return new DocumentArchive(context, snapshotFile, documentId, idDelimiter,
- notificationUri);
- }
- } finally {
- // On UNIX the file will be still available for processes which opened it, even
- // after deleting it. Remove it ASAP, as it won't be used by anyone else.
- if (snapshotFile != null) {
- snapshotFile.delete();
- }
- }
- }
-
- /**
- * Lists child documents of an archive or a directory within an
- * archive. Must be called only for archives with supported mime type,
- * or for documents within archives.
- *
- * @see DocumentsProvider.queryChildDocuments(String, String[], String)
- */
- public Cursor queryChildDocuments(String documentId, @Nullable String[] projection,
- @Nullable String sortOrder) throws FileNotFoundException {
- final ParsedDocumentId parsedParentId = ParsedDocumentId.fromDocumentId(
- documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedParentId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
-
- final String parentPath = parsedParentId.mPath != null ? parsedParentId.mPath : "/";
- final MatrixCursor result = new MatrixCursor(
- projection != null ? projection : DEFAULT_PROJECTION);
- if (mNotificationUri != null) {
- result.setNotificationUri(mContext.getContentResolver(), mNotificationUri);
- }
-
- final List<ZipEntry> parentList = mTree.get(parentPath);
- if (parentList == null) {
- throw new FileNotFoundException();
- }
- for (final ZipEntry entry : parentList) {
- addCursorRow(result, entry);
- }
- return result;
- }
-
- /**
- * Returns a MIME type of a document within an archive.
- *
- * @see DocumentsProvider.getDocumentType(String)
- */
- public String getDocumentType(String documentId) throws FileNotFoundException {
- final ParsedDocumentId parsedId = ParsedDocumentId.fromDocumentId(
- documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
- Preconditions.checkArgumentNotNull(parsedId.mPath, "Not a document within an archive.");
-
- final ZipEntry entry = mEntries.get(parsedId.mPath);
- if (entry == null) {
- throw new FileNotFoundException();
- }
- return getMimeTypeForEntry(entry);
- }
-
- /**
- * Returns true if a document within an archive is a child or any descendant of the archive
- * document or another document within the archive.
- *
- * @see DocumentsProvider.isChildDocument(String, String)
- */
- public boolean isChildDocument(String parentDocumentId, String documentId) {
- final ParsedDocumentId parsedParentId = ParsedDocumentId.fromDocumentId(
- parentDocumentId, mIdDelimiter);
- final ParsedDocumentId parsedId = ParsedDocumentId.fromDocumentId(
- documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedParentId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
- Preconditions.checkArgumentNotNull(parsedId.mPath,
- "Not a document within an archive.");
-
- final ZipEntry entry = mEntries.get(parsedId.mPath);
- if (entry == null) {
- return false;
- }
-
- if (parsedParentId.mPath == null) {
- // No need to compare paths. Every file in the archive is a child of the archive
- // file.
- return true;
- }
-
- final ZipEntry parentEntry = mEntries.get(parsedParentId.mPath);
- if (parentEntry == null || !parentEntry.isDirectory()) {
- return false;
- }
-
- final String parentPath = entry.getName();
-
- // Add a trailing slash even if it's not a directory, so it's easy to check if the
- // entry is a descendant.
- final String pathWithSlash = entry.isDirectory() ? entry.getName() : entry.getName() + "/";
- return pathWithSlash.startsWith(parentPath) && !parentPath.equals(pathWithSlash);
- }
-
- /**
- * Returns metadata of a document within an archive.
- *
- * @see DocumentsProvider.queryDocument(String, String[])
- */
- public Cursor queryDocument(String documentId, @Nullable String[] projection)
- throws FileNotFoundException {
- final ParsedDocumentId parsedId = ParsedDocumentId.fromDocumentId(
- documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
- Preconditions.checkArgumentNotNull(parsedId.mPath, "Not a document within an archive.");
-
- final ZipEntry entry = mEntries.get(parsedId.mPath);
- if (entry == null) {
- throw new FileNotFoundException();
- }
-
- final MatrixCursor result = new MatrixCursor(
- projection != null ? projection : DEFAULT_PROJECTION);
- if (mNotificationUri != null) {
- result.setNotificationUri(mContext.getContentResolver(), mNotificationUri);
- }
- addCursorRow(result, entry);
- return result;
- }
-
- /**
- * Opens a file within an archive.
- *
- * @see DocumentsProvider.openDocument(String, String, CancellationSignal))
- */
- public ParcelFileDescriptor openDocument(
- String documentId, String mode, @Nullable final CancellationSignal signal)
- throws FileNotFoundException {
- Preconditions.checkArgumentEquals("r", mode,
- "Invalid mode. Only reading \"r\" supported, but got: \"%s\".");
- final ParsedDocumentId parsedId = ParsedDocumentId.fromDocumentId(
- documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
- Preconditions.checkArgumentNotNull(parsedId.mPath, "Not a document within an archive.");
-
- final ZipEntry entry = mEntries.get(parsedId.mPath);
- if (entry == null) {
- throw new FileNotFoundException();
- }
-
- ParcelFileDescriptor[] pipe;
- InputStream inputStream = null;
- try {
- pipe = ParcelFileDescriptor.createReliablePipe();
- inputStream = mZipFile.getInputStream(entry);
- } catch (IOException e) {
- if (inputStream != null) {
- IoUtils.closeQuietly(inputStream);
- }
- // Ideally we'd simply throw IOException to the caller, but for consistency
- // with DocumentsProvider::openDocument, converting it to IllegalStateException.
- throw new IllegalStateException("Failed to open the document.", e);
- }
- final ParcelFileDescriptor outputPipe = pipe[1];
- final InputStream finalInputStream = inputStream;
- mExecutor.execute(
- new Runnable() {
- @Override
- public void run() {
- try (final ParcelFileDescriptor.AutoCloseOutputStream outputStream =
- new ParcelFileDescriptor.AutoCloseOutputStream(outputPipe)) {
- try {
- final byte buffer[] = new byte[32 * 1024];
- int bytes;
- while ((bytes = finalInputStream.read(buffer)) != -1) {
- if (Thread.interrupted()) {
- throw new InterruptedException();
- }
- if (signal != null) {
- signal.throwIfCanceled();
- }
- outputStream.write(buffer, 0, bytes);
- }
- } catch (IOException | InterruptedException e) {
- // Catch the exception before the outer try-with-resource closes the
- // pipe with close() instead of closeWithError().
- try {
- outputPipe.closeWithError(e.getMessage());
- } catch (IOException e2) {
- Log.e(TAG, "Failed to close the pipe after an error.", e2);
- }
- }
- } catch (OperationCanceledException e) {
- // Cancelled gracefully.
- } catch (IOException e) {
- Log.e(TAG, "Failed to close the output stream gracefully.", e);
- } finally {
- IoUtils.closeQuietly(finalInputStream);
- }
- }
- });
-
- return pipe[0];
- }
-
- /**
- * Opens a thumbnail of a file within an archive.
- *
- * @see DocumentsProvider.openDocumentThumbnail(String, Point, CancellationSignal))
- */
- public AssetFileDescriptor openDocumentThumbnail(
- String documentId, Point sizeHint, final CancellationSignal signal)
- throws FileNotFoundException {
- final ParsedDocumentId parsedId = ParsedDocumentId.fromDocumentId(documentId, mIdDelimiter);
- Preconditions.checkArgumentEquals(mDocumentId, parsedId.mArchiveId,
- "Mismatching document ID. Expected: %s, actual: %s.");
- Preconditions.checkArgumentNotNull(parsedId.mPath, "Not a document within an archive.");
- Preconditions.checkArgument(getDocumentType(documentId).startsWith("image/"),
- "Thumbnails only supported for image/* MIME type.");
-
- final ZipEntry entry = mEntries.get(parsedId.mPath);
- if (entry == null) {
- throw new FileNotFoundException();
- }
-
- InputStream inputStream = null;
- try {
- inputStream = mZipFile.getInputStream(entry);
- final ExifInterface exif = new ExifInterface(inputStream);
- if (exif.hasThumbnail()) {
- Bundle extras = null;
- switch (exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1)) {
- case ExifInterface.ORIENTATION_ROTATE_90:
- extras = new Bundle(1);
- extras.putInt(DocumentsContract.EXTRA_ORIENTATION, 90);
- break;
- case ExifInterface.ORIENTATION_ROTATE_180:
- extras = new Bundle(1);
- extras.putInt(DocumentsContract.EXTRA_ORIENTATION, 180);
- break;
- case ExifInterface.ORIENTATION_ROTATE_270:
- extras = new Bundle(1);
- extras.putInt(DocumentsContract.EXTRA_ORIENTATION, 270);
- break;
- }
- final long[] range = exif.getThumbnailRange();
- return new AssetFileDescriptor(
- openDocument(documentId, "r", signal), range[0], range[1], extras);
- }
- } catch (IOException e) {
- // Ignore the exception, as reading the EXIF may legally fail.
- Log.e(TAG, "Failed to obtain thumbnail from EXIF.", e);
- } finally {
- IoUtils.closeQuietly(inputStream);
- }
-
- return new AssetFileDescriptor(
- openDocument(documentId, "r", signal), 0, entry.getSize(), null);
- }
-
- /**
- * Schedules a gracefully close of the archive after any opened files are closed.
- *
- * <p>This method does not block until shutdown. Once called, other methods should not be
- * called.
- */
- @Override
- public void close() {
- mExecutor.execute(new Runnable() {
- @Override
- public void run() {
- IoUtils.closeQuietly(mZipFile);
- }
- });
- mExecutor.shutdown();
- }
-
- private void addCursorRow(MatrixCursor cursor, ZipEntry entry) {
- final MatrixCursor.RowBuilder row = cursor.newRow();
- final ParsedDocumentId parsedId = new ParsedDocumentId(mDocumentId, entry.getName());
- row.add(Document.COLUMN_DOCUMENT_ID, parsedId.toDocumentId(mIdDelimiter));
-
- final File file = new File(entry.getName());
- row.add(Document.COLUMN_DISPLAY_NAME, file.getName());
- row.add(Document.COLUMN_SIZE, entry.getSize());
-
- final String mimeType = getMimeTypeForEntry(entry);
- row.add(Document.COLUMN_MIME_TYPE, mimeType);
-
- final int flags = mimeType.startsWith("image/") ? Document.FLAG_SUPPORTS_THUMBNAIL : 0;
- row.add(Document.COLUMN_FLAGS, flags);
- }
-
- private String getMimeTypeForEntry(ZipEntry entry) {
- if (entry.isDirectory()) {
- return Document.MIME_TYPE_DIR;
- }
-
- final int lastDot = entry.getName().lastIndexOf('.');
- if (lastDot >= 0) {
- final String extension = entry.getName().substring(lastDot + 1).toLowerCase(Locale.US);
- final String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
- if (mimeType != null) {
- return mimeType;
- }
- }
-
- return "application/octet-stream";
- }
-};
diff --git a/documents-archive/src/android/support/provider/DocumentArchiveHelper.java b/documents-archive/src/android/support/provider/DocumentArchiveHelper.java
deleted file mode 100644
index 6c5e198..0000000
--- a/documents-archive/src/android/support/provider/DocumentArchiveHelper.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * 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 android.support.provider;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.res.AssetFileDescriptor;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.graphics.Point;
-import android.net.Uri;
-import android.os.CancellationSignal;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsProvider;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.util.Log;
-import android.util.LruCache;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- * Provides basic implementation for creating, extracting and accessing
- * files within archives exposed by a document provider.
- *
- * <p>This class is thread safe. All methods can be called on any thread without
- * synchronization.
- *
- * TODO: Update the documentation. b/26047732
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class DocumentArchiveHelper implements Closeable {
- /**
- * Cursor column to be used for passing the local file path for documents.
- * If it's not specified, then a snapshot will be created, which is slower
- * and consumes more resources.
- *
- * <p>Type: STRING
- */
- public static final String COLUMN_LOCAL_FILE_PATH = "local_file_path";
-
- private static final String TAG = "DocumentArchiveHelper";
- private static final int OPENED_ARCHIVES_CACHE_SIZE = 4;
- private static final String[] ZIP_MIME_TYPES = {
- "application/zip", "application/x-zip", "application/x-zip-compressed"
- };
-
- private final DocumentsProvider mProvider;
- private final char mIdDelimiter;
-
- // @GuardedBy("mArchives")
- private final LruCache<String, Loader> mArchives =
- new LruCache<String, Loader>(OPENED_ARCHIVES_CACHE_SIZE) {
- @Override
- public void entryRemoved(boolean evicted, String key,
- Loader oldValue, Loader newValue) {
- oldValue.getWriteLock().lock();
- try {
- oldValue.get().close();
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Failed to close an archive as it no longer exists.");
- } finally {
- oldValue.getWriteLock().unlock();
- }
- }
- };
-
- /**
- * Creates a helper for handling archived documents.
- *
- * @param provider Instance of a documents provider which provides archived documents.
- * @param idDelimiter A character used to create document IDs within archives. Can be any
- * character which is not used in any other document ID. If your provider uses
- * numbers as document IDs, the delimiter can be eg. a colon. However if your
- * provider uses paths, then a delimiter can be any character not allowed in the
- * path, which is often \0.
- */
- public DocumentArchiveHelper(DocumentsProvider provider, char idDelimiter) {
- mProvider = provider;
- mIdDelimiter = idDelimiter;
- }
-
- /**
- * Lists child documents of an archive or a directory within an
- * archive. Must be called only for archives with supported mime type,
- * or for documents within archives.
- *
- * @see DocumentsProvider.queryChildDocuments(String, String[], String)
- */
- public Cursor queryChildDocuments(String documentId, @Nullable String[] projection,
- @Nullable String sortOrder)
- throws FileNotFoundException {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().queryChildDocuments(documentId, projection, sortOrder);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Returns a MIME type of a document within an archive.
- *
- * @see DocumentsProvider.getDocumentType(String)
- */
- public String getDocumentType(String documentId) throws FileNotFoundException {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().getDocumentType(documentId);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Returns true if a document within an archive is a child or any descendant of the archive
- * document or another document within the archive.
- *
- * @see DocumentsProvider.isChildDocument(String, String)
- */
- public boolean isChildDocument(String parentDocumentId, String documentId) {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().isChildDocument(parentDocumentId, documentId);
- } catch (FileNotFoundException e) {
- throw new IllegalStateException(e);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Returns metadata of a document within an archive.
- *
- * @see DocumentsProvider.queryDocument(String, String[])
- */
- public Cursor queryDocument(String documentId, @Nullable String[] projection)
- throws FileNotFoundException {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().queryDocument(documentId, projection);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Opens a file within an archive.
- *
- * @see DocumentsProvider.openDocument(String, String, CancellationSignal))
- */
- public ParcelFileDescriptor openDocument(
- String documentId, String mode, final CancellationSignal signal)
- throws FileNotFoundException {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().openDocument(documentId, mode, signal);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Opens a thumbnail of a file within an archive.
- *
- * @see DocumentsProvider.openDocumentThumbnail(String, Point, CancellationSignal))
- */
- public AssetFileDescriptor openDocumentThumbnail(
- String documentId, Point sizeHint, final CancellationSignal signal)
- throws FileNotFoundException {
- Loader loader = null;
- try {
- loader = obtainInstance(documentId);
- return loader.get().openDocumentThumbnail(documentId, sizeHint, signal);
- } finally {
- releaseInstance(loader);
- }
- }
-
- /**
- * Returns true if the passed document ID is for a document within an archive.
- */
- public boolean isArchivedDocument(String documentId) {
- return ParsedDocumentId.hasPath(documentId, mIdDelimiter);
- }
-
- /**
- * Returns true if the passed mime type is supported by the helper.
- */
- public boolean isSupportedArchiveType(String mimeType) {
- for (final String zipMimeType : ZIP_MIME_TYPES) {
- if (zipMimeType.equals(mimeType)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Closes the helper and disposes all existing archives. It will block until all ongoing
- * operations on each opened archive are finished.
- */
- @Override
- public void close() {
- synchronized (mArchives) {
- mArchives.evictAll();
- }
- }
-
- /**
- * Releases resources for an archive with the specified document ID. It will block until all
- * operations on the archive are finished. If not opened, the method does nothing.
- *
- * <p>Calling this method is optional. The helper automatically closes the least recently used
- * archives if too many archives are opened.
- *
- * @param archiveDocumentId ID of the archive file.
- */
- public void closeArchive(String documentId) {
- synchronized (mArchives) {
- mArchives.remove(documentId);
- }
- }
-
- private Loader obtainInstance(String documentId) throws FileNotFoundException {
- Loader loader;
- synchronized (mArchives) {
- loader = getInstanceUncheckedLocked(documentId);
- loader.getReadLock().lock();
- }
- return loader;
- }
-
- private void releaseInstance(@Nullable Loader loader) {
- if (loader != null) {
- loader.getReadLock().unlock();
- }
- }
-
- private Loader getInstanceUncheckedLocked(String documentId)
- throws FileNotFoundException {
- try {
- final ParsedDocumentId id = ParsedDocumentId.fromDocumentId(documentId, mIdDelimiter);
- if (mArchives.get(id.mArchiveId) != null) {
- return mArchives.get(id.mArchiveId);
- }
-
- final Cursor cursor = mProvider.queryDocument(id.mArchiveId, new String[]
- { Document.COLUMN_MIME_TYPE, COLUMN_LOCAL_FILE_PATH });
- cursor.moveToFirst();
- final String mimeType = cursor.getString(cursor.getColumnIndex(
- Document.COLUMN_MIME_TYPE));
- Preconditions.checkArgument(isSupportedArchiveType(mimeType),
- "Unsupported archive type.");
- final int columnIndex = cursor.getColumnIndex(COLUMN_LOCAL_FILE_PATH);
- final String localFilePath = columnIndex != -1 ? cursor.getString(columnIndex) : null;
- final File localFile = localFilePath != null ? new File(localFilePath) : null;
- final Uri notificationUri = cursor.getNotificationUri();
- final Loader loader = new Loader(mProvider, localFile, id, mIdDelimiter,
- notificationUri);
-
- // Remove the instance from mArchives collection once the archive file changes.
- if (notificationUri != null) {
- final LruCache<String, Loader> finalArchives = mArchives;
- mProvider.getContext().getContentResolver().registerContentObserver(notificationUri,
- false,
- new ContentObserver(null) {
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- synchronized (mArchives) {
- final Loader currentLoader = mArchives.get(id.mArchiveId);
- if (currentLoader == loader) {
- mArchives.remove(id.mArchiveId);
- }
- }
- }
- });
- }
-
- mArchives.put(id.mArchiveId, loader);
- return loader;
- } catch (IOException e) {
- // DocumentsProvider doesn't use IOException. For consistency convert it to
- // IllegalStateException.
- throw new IllegalStateException(e);
- }
- }
-
- /**
- * Loads an instance of DocumentArchive lazily.
- */
- private static final class Loader {
- private final DocumentsProvider mProvider;
- private final File mLocalFile;
- private final ParsedDocumentId mId;
- private final char mIdDelimiter;
- private final Uri mNotificationUri;
- private final ReentrantReadWriteLock mLock = new ReentrantReadWriteLock();
- private DocumentArchive mArchive = null;
-
- Loader(DocumentsProvider provider, @Nullable File localFile, ParsedDocumentId id,
- char idDelimiter, Uri notificationUri) {
- this.mProvider = provider;
- this.mLocalFile = localFile;
- this.mId = id;
- this.mIdDelimiter = idDelimiter;
- this.mNotificationUri = notificationUri;
- }
-
- synchronized DocumentArchive get() throws FileNotFoundException {
- if (mArchive != null) {
- return mArchive;
- }
-
- try {
- if (mLocalFile != null) {
- mArchive = DocumentArchive.createForLocalFile(
- mProvider.getContext(), mLocalFile, mId.mArchiveId, mIdDelimiter,
- mNotificationUri);
- } else {
- mArchive = DocumentArchive.createForParcelFileDescriptor(
- mProvider.getContext(),
- mProvider.openDocument(mId.mArchiveId, "r", null /* signal */),
- mId.mArchiveId, mIdDelimiter, mNotificationUri);
- }
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
-
- return mArchive;
- }
-
- Lock getReadLock() {
- return mLock.readLock();
- }
-
- Lock getWriteLock() {
- return mLock.writeLock();
- }
- }
-}
diff --git a/documents-archive/src/android/support/provider/IoUtils.java b/documents-archive/src/android/support/provider/IoUtils.java
deleted file mode 100644
index 55c293d..0000000
--- a/documents-archive/src/android/support/provider/IoUtils.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 android.support.provider;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-
-import java.io.Closeable;
-import java.io.InputStream;
-
-/**
- * Simple static methods to perform common IO operations.
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-final class IoUtils {
- static void closeQuietly(@Nullable Closeable closeable) {
- if (closeable != null) {
- try {
- closeable.close();
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- // Ignore.
- }
- }
- }
-
- static void closeQuietly(@Nullable InputStream stream) {
- if (stream != null) {
- try {
- stream.close();
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- // Ignore.
- }
- }
- }
-}
diff --git a/documents-archive/src/android/support/provider/ParsedDocumentId.java b/documents-archive/src/android/support/provider/ParsedDocumentId.java
deleted file mode 100644
index a8c7810..0000000
--- a/documents-archive/src/android/support/provider/ParsedDocumentId.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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 android.support.provider;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.support.annotation.RestrictTo;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-class ParsedDocumentId {
- public final String mArchiveId;
- public final String mPath;
-
- public ParsedDocumentId(String archiveId, String path) {
- mArchiveId = archiveId;
- mPath = path;
- }
-
- static public ParsedDocumentId fromDocumentId(String documentId, char idDelimiter) {
- final int delimiterPosition = documentId.indexOf(idDelimiter);
- if (delimiterPosition == -1) {
- return new ParsedDocumentId(documentId, null);
- } else {
- return new ParsedDocumentId(documentId.substring(0, delimiterPosition),
- documentId.substring((delimiterPosition + 1)));
- }
- }
-
- static public boolean hasPath(String documentId, char idDelimiter) {
- return documentId.indexOf(idDelimiter) != -1;
- }
-
- public String toDocumentId(char idDelimiter) {
- if (mPath == null) {
- return mArchiveId;
- } else {
- return mArchiveId + idDelimiter + mPath;
- }
- }
-};
diff --git a/documents-archive/src/android/support/provider/Preconditions.java b/documents-archive/src/android/support/provider/Preconditions.java
deleted file mode 100644
index e3971aa..0000000
--- a/documents-archive/src/android/support/provider/Preconditions.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 android.support.provider;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.text.TextUtils;
-
-/**
- * Simple static methods to be called at the start of your own methods to verify
- * correct arguments and state.
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-final class Preconditions {
- static void checkArgument(boolean expression, String message) {
- if (!expression) {
- throw new IllegalArgumentException(message);
- }
- }
-
- static void checkArgumentNotNull(Object object, String message) {
- if (object == null) {
- throw new IllegalArgumentException(message);
- }
- }
-
- static void checkArgumentEquals(String expected, @Nullable String actual, String message) {
- if (!TextUtils.equals(expected, actual)) {
- throw new IllegalArgumentException(String.format(message, String.valueOf(expected),
- String.valueOf(actual)));
- }
- }
-
- static void checkState(boolean expression, String message) {
- if (!expression) {
- throw new IllegalStateException(message);
- }
- }
-}
diff --git a/documents-archive/tests/AndroidManifest.xml b/documents-archive/tests/AndroidManifest.xml
deleted file mode 100644
index 47da733..0000000
--- a/documents-archive/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.support.provider.tests">
- <application>
- <uses-library android:name="android.test.runner" />
- <provider
- android:name="android.support.provider.tests.StubProvider"
- android:authorities="android.support.provider.tests.mystubprovider"
- android:grantUriPermissions="true"
- android:exported="true"
- android:permission="android.permission.MANAGE_DOCUMENTS" />
- </application>
-
- <instrumentation android:name="android.test.InstrumentationTestRunner"
- android:targetPackage="android.support.provider.tests"
- android:label="Tests for android.support.provider." />
-</manifest>
diff --git a/documents-archive/tests/NO_DOCS b/documents-archive/tests/NO_DOCS
deleted file mode 100644
index e69de29..0000000
--- a/documents-archive/tests/NO_DOCS
+++ /dev/null
diff --git a/documents-archive/tests/res/raw/archive.zip b/documents-archive/tests/res/raw/archive.zip
deleted file mode 100644
index c3b8d22..0000000
--- a/documents-archive/tests/res/raw/archive.zip
+++ /dev/null
Binary files differ
diff --git a/documents-archive/tests/res/raw/empty_dirs.zip b/documents-archive/tests/res/raw/empty_dirs.zip
deleted file mode 100644
index 1dd2251..0000000
--- a/documents-archive/tests/res/raw/empty_dirs.zip
+++ /dev/null
Binary files differ
diff --git a/documents-archive/tests/res/raw/no_dirs.zip b/documents-archive/tests/res/raw/no_dirs.zip
deleted file mode 100644
index e178ae1..0000000
--- a/documents-archive/tests/res/raw/no_dirs.zip
+++ /dev/null
Binary files differ
diff --git a/documents-archive/tests/src/android/support/provider/DocumentArchiveTest.java b/documents-archive/tests/src/android/support/provider/DocumentArchiveTest.java
deleted file mode 100644
index 9845412..0000000
--- a/documents-archive/tests/src/android/support/provider/DocumentArchiveTest.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * 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 android.support.provider.tests;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract.Document;
-import android.support.provider.DocumentArchive;
-import android.test.AndroidTestCase;
-import android.util.Log;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Scanner;
-
-/**
- * Tests for DocumentArchive.
- */
-public class DocumentArchiveTest extends AndroidTestCase {
- private static final String DOCUMENT_ID = "document-id";
- private static final char DELIMITER = ':';
- private static final String NOTIFICATION_URI = "content://notification-uri";
- private DocumentArchive mArchive = null;
-
- public void loadArchive(int resource) {
- // Extract the file from resources.
- File file = null;
- try {
- file = File.createTempFile("android.support.provider.tests{",
- "}.zip", mContext.getCacheDir());
- try (
- final FileOutputStream outputStream =
- new ParcelFileDescriptor.AutoCloseOutputStream(
- ParcelFileDescriptor.open(
- file, ParcelFileDescriptor.MODE_WRITE_ONLY));
- final InputStream inputStream =
- mContext.getResources().openRawResource(resource);
- ) {
- final byte[] buffer = new byte[32 * 1024];
- int bytes;
- while ((bytes = inputStream.read(buffer)) != -1) {
- outputStream.write(buffer, 0, bytes);
- }
- outputStream.flush();
- mArchive = DocumentArchive.createForLocalFile(
- mContext,
- file,
- DOCUMENT_ID,
- DELIMITER,
- Uri.parse(NOTIFICATION_URI));
-
- }
- } catch (IOException e) {
- fail(String.valueOf(e));
- } finally {
- // On UNIX the file will be still available for processes which opened it, even
- // after deleting it. Remove it ASAP, as it won't be used by anyone else.
- if (file != null) {
- file.delete();
- }
- }
- }
-
- @Override
- public void tearDown() {
- if (mArchive != null) {
- mArchive.close();
- }
- }
-
- public void testQueryChildDocument() throws IOException {
- loadArchive(R.raw.archive);
- final Cursor cursor = mArchive.queryChildDocuments(DOCUMENT_ID, null, null);
-
- assertTrue(cursor.moveToFirst());
- assertEquals("document-id:dir1/",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir1",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
-
- assertTrue(cursor.moveToNext());
- assertEquals("document-id:dir2/",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir2",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
-
- assertTrue(cursor.moveToNext());
- assertEquals("document-id:file1.txt",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("file1.txt",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals("text/plain",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(13,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
-
- assertFalse(cursor.moveToNext());
-
- // Check if querying children works too.
- final Cursor childCursor = mArchive.queryChildDocuments("document-id:dir1/", null, null);
-
- assertTrue(childCursor.moveToFirst());
- assertEquals("document-id:dir1/cherries.txt",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DOCUMENT_ID)));
- assertEquals("cherries.txt",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DISPLAY_NAME)));
- assertEquals("text/plain",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_MIME_TYPE)));
- assertEquals(17,
- childCursor.getInt(childCursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- }
-
- public void testQueryChildDocument_NoDirs() throws IOException {
- loadArchive(R.raw.no_dirs);
- final Cursor cursor = mArchive.queryChildDocuments(DOCUMENT_ID, null, null);
-
- assertTrue(cursor.moveToFirst());
- assertEquals("document-id:dir1/",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir1",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- assertFalse(cursor.moveToNext());
-
- final Cursor childCursor = mArchive.queryChildDocuments("document-id:dir1/", null, null);
-
- assertTrue(childCursor.moveToFirst());
- assertEquals("document-id:dir1/dir2/",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir2",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- childCursor.getInt(childCursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- assertFalse(childCursor.moveToNext());
-
- final Cursor childCursor2 = mArchive.queryChildDocuments(
- "document-id:dir1/dir2/", null, null);
-
- assertTrue(childCursor2.moveToFirst());
- assertEquals("document-id:dir1/dir2/cherries.txt",
- childCursor2.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DOCUMENT_ID)));
- assertFalse(childCursor2.moveToNext());
- }
-
- public void testQueryChildDocument_EmptyDirs() throws IOException {
- loadArchive(R.raw.empty_dirs);
- final Cursor cursor = mArchive.queryChildDocuments(DOCUMENT_ID, null, null);
-
- assertTrue(cursor.moveToFirst());
- assertEquals("document-id:dir1/",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir1",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- assertFalse(cursor.moveToNext());
-
- final Cursor childCursor = mArchive.queryChildDocuments("document-id:dir1/", null, null);
-
- assertTrue(childCursor.moveToFirst());
- assertEquals("document-id:dir1/dir2/",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir2",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- childCursor.getInt(childCursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
-
- assertTrue(childCursor.moveToNext());
- assertEquals("document-id:dir1/dir3/",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DOCUMENT_ID)));
- assertEquals("dir3",
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_DISPLAY_NAME)));
- assertEquals(Document.MIME_TYPE_DIR,
- childCursor.getString(childCursor.getColumnIndexOrThrow(
- Document.COLUMN_MIME_TYPE)));
- assertEquals(0,
- childCursor.getInt(childCursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- assertFalse(cursor.moveToNext());
-
- final Cursor childCursor2 = mArchive.queryChildDocuments(
- "document-id:dir1/dir2/", null, null);
- assertFalse(childCursor2.moveToFirst());
-
- final Cursor childCursor3 = mArchive.queryChildDocuments(
- "document-id:dir1/dir3/", null, null);
- assertFalse(childCursor3.moveToFirst());
- }
-
- public void testGetDocumentType() throws IOException {
- loadArchive(R.raw.archive);
- assertEquals(Document.MIME_TYPE_DIR, mArchive.getDocumentType("document-id:dir1/"));
- assertEquals("text/plain", mArchive.getDocumentType("document-id:file1.txt"));
- }
-
- public void testIsChildDocument() throws IOException {
- loadArchive(R.raw.archive);
- assertTrue(mArchive.isChildDocument(DOCUMENT_ID, "document-id:dir1/"));
- assertFalse(mArchive.isChildDocument(DOCUMENT_ID, "document-id:this-does-not-exist"));
- assertTrue(mArchive.isChildDocument("document-id:dir1/", "document-id:dir1/cherries.txt"));
- assertTrue(mArchive.isChildDocument(DOCUMENT_ID, "document-id:dir1/cherries.txt"));
- }
-
- public void testQueryDocument() throws IOException {
- loadArchive(R.raw.archive);
- final Cursor cursor = mArchive.queryDocument("document-id:dir2/strawberries.txt", null);
-
- assertTrue(cursor.moveToFirst());
- assertEquals("document-id:dir2/strawberries.txt",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID)));
- assertEquals("strawberries.txt",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_DISPLAY_NAME)));
- assertEquals("text/plain",
- cursor.getString(cursor.getColumnIndexOrThrow(Document.COLUMN_MIME_TYPE)));
- assertEquals(21,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_SIZE)));
- }
-
- public void testOpenDocument() throws IOException {
- loadArchive(R.raw.archive);
- final ParcelFileDescriptor descriptor = mArchive.openDocument(
- "document-id:dir2/strawberries.txt", "r", null /* signal */);
- try (final ParcelFileDescriptor.AutoCloseInputStream inputStream =
- new ParcelFileDescriptor.AutoCloseInputStream(descriptor)) {
- assertEquals("I love strawberries!", new Scanner(inputStream).nextLine());
- }
- }
-}
diff --git a/documents-archive/tests/src/android/support/provider/IntegrationTest.java b/documents-archive/tests/src/android/support/provider/IntegrationTest.java
deleted file mode 100644
index 0445d82..0000000
--- a/documents-archive/tests/src/android/support/provider/IntegrationTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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 android.support.provider.tests;
-
-import android.content.ContentProviderClient;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract;
-import android.test.AndroidTestCase;
-import android.util.Log;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.IllegalArgumentException;
-import java.util.Scanner;
-import java.util.concurrent.CountDownLatch;
-
-/**
- * Integration tests for DocumentsProvider and DocumentArchiveHelper.
- *
- * <p>Only checks if the provider, then helper are forwarding the calls to the
- * underlying {@code ArchiveDocument} correctly. More detailed output testing is
- * done in {@code DocumentArchiveTest}.
- */
-public class IntegrationTest extends AndroidTestCase {
- private ContentProviderClient mClient;
-
- @Override
- public void setUp() throws RemoteException {
- mClient = getContext().getContentResolver().acquireContentProviderClient(
- StubProvider.AUTHORITY);
- assertNotNull(mClient);
- mClient.call("reset", null, null);
- }
-
- @Override
- public void tearDown() {
- if (mClient != null) {
- mClient.release();
- mClient = null;
- }
- }
-
- public void testQueryForChildren() throws IOException {
- final Cursor cursor = mContext.getContentResolver().query(
- DocumentsContract.buildChildDocumentsUri(
- StubProvider.AUTHORITY, StubProvider.DOCUMENT_ID),
- null, null, null, null);
- assertEquals(3, cursor.getCount());
- }
-
- public void testQueryForDocument_Archive()
- throws IOException, RemoteException, InterruptedException {
- final Cursor cursor = mContext.getContentResolver().query(
- DocumentsContract.buildDocumentUri(
- StubProvider.AUTHORITY, StubProvider.DOCUMENT_ID),
- null, null, null, null);
- assertEquals(1, cursor.getCount());
- assertTrue(cursor.moveToFirst());
- assertEquals(Document.FLAG_ARCHIVE,
- cursor.getInt(cursor.getColumnIndexOrThrow(Document.COLUMN_FLAGS)));
- }
-
- public void testQueryForDocument_ArchiveDescendant()
- throws IOException, RemoteException, InterruptedException {
- final Cursor cursor = mContext.getContentResolver().query(
- DocumentsContract.buildDocumentUri(
- StubProvider.AUTHORITY, StubProvider.FILE_DOCUMENT_ID),
- null, null, null, null);
- assertEquals(1, cursor.getCount());
- assertEquals(StubProvider.NOTIFY_URI, cursor.getNotificationUri());
-
- final CountDownLatch changeSignal = new CountDownLatch(1);
- final ContentObserver observer = new ContentObserver(null) {
- @Override
- public void onChange(boolean selfChange) {
- changeSignal.countDown();
- }
- };
-
- try {
- getContext().getContentResolver().registerContentObserver(
- cursor.getNotificationUri(), false /* notifyForDescendants */, observer);
-
- // Simulate deleting the archive file, then confirm that the notification is
- // propagated and the archive closed.
- mClient.call("delete", null, null);
- changeSignal.await();
-
- mContext.getContentResolver().query(
- DocumentsContract.buildChildDocumentsUri(
- StubProvider.AUTHORITY, StubProvider.FILE_DOCUMENT_ID),
- null, null, null, null);
- fail("Expected IllegalStateException, but succeeded.");
- } catch (IllegalStateException e) {
- // Expected, as the file is gone.
- } finally {
- getContext().getContentResolver().unregisterContentObserver(observer);
- }
- }
-
- public void testGetType() throws IOException {
- assertEquals("text/plain", mContext.getContentResolver().getType(
- DocumentsContract.buildDocumentUri(
- StubProvider.AUTHORITY, StubProvider.FILE_DOCUMENT_ID)));
- }
-
- public void testOpenFileDescriptor() throws IOException {
- final ParcelFileDescriptor descriptor = mContext.getContentResolver().openFileDescriptor(
- DocumentsContract.buildDocumentUri(
- StubProvider.AUTHORITY, StubProvider.FILE_DOCUMENT_ID),
- "r", null);
- assertNotNull(descriptor);
- }
-}
diff --git a/documents-archive/tests/src/android/support/provider/StubProvider.java b/documents-archive/tests/src/android/support/provider/StubProvider.java
deleted file mode 100644
index 3f72cd2..0000000
--- a/documents-archive/tests/src/android/support/provider/StubProvider.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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 android.support.provider.tests;
-
-import android.database.Cursor;
-import android.database.MatrixCursor.RowBuilder;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.CancellationSignal;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsProvider;
-import android.support.provider.DocumentArchiveHelper;
-import android.util.Log;
-
-import java.io.FileNotFoundException;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Stub provider for testing support for archives.
- */
-public class StubProvider extends DocumentsProvider {
- public static final String AUTHORITY = "android.support.provider.tests.mystubprovider";
- public static final String DOCUMENT_ID = "document-id";
- public static final String FILE_DOCUMENT_ID = "document-id:dir1/cherries.txt";
- public static final Uri NOTIFY_URI = DocumentsContract.buildRootsUri(AUTHORITY);
-
- private static final String TAG = "StubProvider";
- private static final String[] DEFAULT_PROJECTION = new String[] {
- Document.COLUMN_DOCUMENT_ID, Document.COLUMN_DISPLAY_NAME, Document.COLUMN_SIZE,
- Document.COLUMN_MIME_TYPE, Document.COLUMN_FLAGS,
- DocumentArchiveHelper.COLUMN_LOCAL_FILE_PATH
- };
-
- public File file;
- public DocumentArchiveHelper archiveHelper;
- public boolean simulatedDelete = false;
-
- @Override
- public Bundle call(String method, String args, Bundle extras) {
- switch (method) {
- case "reset":
- simulatedDelete = false;
- getContext().getContentResolver().notifyChange(NOTIFY_URI, null);
- return null;
- case "delete":
- simulatedDelete = true;
- getContext().getContentResolver().notifyChange(NOTIFY_URI, null);
- return null;
- default:
- return super.call(method, args, extras);
- }
- }
-
- @Override
- public boolean onCreate() {
- try {
- archiveHelper = new DocumentArchiveHelper(this, ':');
- file = TestUtils.createFileFromResource(getContext(), R.raw.archive);
- return true;
- } catch (IOException e) {
- Log.e(TAG, "Failed to initialize StubProvider.");
- return false;
- }
- }
-
- @Override
- public ParcelFileDescriptor openDocument(
- String documentId, String mode, CancellationSignal signal)
- throws FileNotFoundException {
- if (archiveHelper.isArchivedDocument(documentId)) {
- return archiveHelper.openDocument(documentId, mode, signal);
- }
-
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Cursor queryChildDocuments(
- String parentDocumentId, String[] projection, String sortOrder)
- throws FileNotFoundException {
- if (archiveHelper.isArchivedDocument(parentDocumentId) ||
- archiveHelper.isSupportedArchiveType(getDocumentType(parentDocumentId))) {
- return archiveHelper.queryChildDocuments(parentDocumentId, projection, sortOrder);
- }
-
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Cursor queryDocument(String documentId, String[] projection)
- throws FileNotFoundException {
- if (archiveHelper.isArchivedDocument(documentId)) {
- return archiveHelper.queryDocument(documentId, projection);
- }
-
- if (DOCUMENT_ID.equals(documentId)) {
- if (simulatedDelete) {
- throw new FileNotFoundException();
- }
-
- final MatrixCursor result = new MatrixCursor(
- projection != null ? projection : DEFAULT_PROJECTION);
- result.setNotificationUri(getContext().getContentResolver(), NOTIFY_URI);
- final RowBuilder row = result.newRow();
- row.add(Document.COLUMN_DOCUMENT_ID, DOCUMENT_ID);
- row.add(Document.COLUMN_DISPLAY_NAME, file.getName());
- row.add(Document.COLUMN_SIZE, file.length());
- row.add(Document.COLUMN_MIME_TYPE, "application/zip");
- final int flags = archiveHelper.isSupportedArchiveType("application/zip")
- ? Document.FLAG_ARCHIVE : 0;
- row.add(Document.COLUMN_FLAGS, flags);
- row.add(DocumentArchiveHelper.COLUMN_LOCAL_FILE_PATH, file.getPath());
- return result;
- }
-
- throw new FileNotFoundException();
- }
-
- @Override
- public Cursor queryRoots(String[] projection) throws FileNotFoundException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getDocumentType(String documentId) throws FileNotFoundException {
- if (archiveHelper.isArchivedDocument(documentId)) {
- return archiveHelper.getDocumentType(documentId);
- }
-
- if (DOCUMENT_ID.equals(documentId)) {
- return "application/zip";
- }
-
- throw new UnsupportedOperationException();
- }
-}
diff --git a/documents-archive/tests/src/android/support/provider/TestUtils.java b/documents-archive/tests/src/android/support/provider/TestUtils.java
deleted file mode 100644
index 17ec3e1..0000000
--- a/documents-archive/tests/src/android/support/provider/TestUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 android.support.provider.tests;
-
-import android.content.Context;
-import android.os.ParcelFileDescriptor;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Utilities for tests.
- */
-final class TestUtils {
- /**
- * Saves a file from resources to a temporary location and returns a File instance for it.
- *
- * @param id Resource ID
- */
- static File createFileFromResource(Context context, int id) throws IOException {
- final File file = File.createTempFile("android.support.provider.tests{",
- "}.zip", context.getCacheDir());
- try (
- final FileOutputStream outputStream =
- new ParcelFileDescriptor.AutoCloseOutputStream(
- ParcelFileDescriptor.open(
- file, ParcelFileDescriptor.MODE_WRITE_ONLY));
- final InputStream inputStream = context.getResources().openRawResource(id);
- ) {
- final byte[] buffer = new byte[32 * 1024];
- int bytes;
- while ((bytes = inputStream.read(buffer)) != -1) {
- outputStream.write(buffer, 0, bytes);
- }
- outputStream.flush();
- return file;
- }
- }
-}
diff --git a/fragment/Android.mk b/fragment/Android.mk
index a41b0c2..d982b92 100644
--- a/fragment/Android.mk
+++ b/fragment/Android.mk
@@ -40,7 +40,6 @@
android-support-compat \
android-support-core-ui \
android-support-core-utils \
- android-support-media-compat \
android-support-annotations
LOCAL_JAR_EXCLUDE_FILES := none
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
diff --git a/fragment/api21/android/support/v4/app/FragmentTransitionCompat21.java b/fragment/api21/android/support/v4/app/FragmentTransitionCompat21.java
index a8323dc..6fce8d5 100644
--- a/fragment/api21/android/support/v4/app/FragmentTransitionCompat21.java
+++ b/fragment/api21/android/support/v4/app/FragmentTransitionCompat21.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
import android.transition.Transition;
@@ -24,14 +23,12 @@
import android.transition.TransitionSet;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RequiresApi(21)
-@TargetApi(21)
class FragmentTransitionCompat21 {
/**
@@ -343,18 +340,15 @@
}
}
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- for (int i = 0; i < numSharedElements; i++) {
- sharedElementsIn.get(i).setTransitionName(inNames.get(i));
- sharedElementsOut.get(i).setTransitionName(outNames.get(i));
- }
- return true;
- }
- });
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < numSharedElements; i++) {
+ sharedElementsIn.get(i).setTransitionName(inNames.get(i));
+ sharedElementsOut.get(i).setTransitionName(outNames.get(i));
+ }
+ }
+ });
}
/**
@@ -406,23 +400,20 @@
public static void setNameOverridesUnoptimized(final View sceneRoot,
final ArrayList<View> sharedElementsIn, final Map<String, String> nameOverrides) {
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- final int numSharedElements = sharedElementsIn.size();
- for (int i = 0; i < numSharedElements; i++) {
- View view = sharedElementsIn.get(i);
- String name = view.getTransitionName();
- if (name != null) {
- String inName = findKeyForValue(nameOverrides, name);
- view.setTransitionName(inName);
- }
- }
- return true;
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ final int numSharedElements = sharedElementsIn.size();
+ for (int i = 0; i < numSharedElements; i++) {
+ View view = sharedElementsIn.get(i);
+ String name = view.getTransitionName();
+ if (name != null) {
+ String inName = findKeyForValue(nameOverrides, name);
+ view.setTransitionName(inName);
}
- });
+ }
+ }
+ });
}
/**
@@ -566,20 +557,17 @@
public static void scheduleNameReset(final ViewGroup sceneRoot,
final ArrayList<View> sharedElementsIn, final Map<String, String> nameOverrides) {
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- final int numSharedElements = sharedElementsIn.size();
- for (int i = 0; i < numSharedElements; i++) {
- final View view = sharedElementsIn.get(i);
- final String name = view.getTransitionName();
- final String inName = nameOverrides.get(name);
- view.setTransitionName(inName);
- }
- return true;
- }
- });
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ final int numSharedElements = sharedElementsIn.size();
+ for (int i = 0; i < numSharedElements; i++) {
+ final View view = sharedElementsIn.get(i);
+ final String name = view.getTransitionName();
+ final String inName = nameOverrides.get(name);
+ view.setTransitionName(inName);
+ }
+ }
+ });
}
}
diff --git a/fragment/api21/android/support/v4/app/OneShotPreDrawListener.java b/fragment/api21/android/support/v4/app/OneShotPreDrawListener.java
new file mode 100644
index 0000000..502af1f
--- /dev/null
+++ b/fragment/api21/android/support/v4/app/OneShotPreDrawListener.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.v4.app;
+
+
+import android.view.View;
+import android.view.ViewTreeObserver;
+
+/**
+ * An OnPreDrawListener that will remove itself after one OnPreDraw call. Typical
+ * usage is:
+ * <pre><code>
+ * OneShotPreDrawListener.add(view, () -> { view.doSomething(); })
+ * </code></pre>
+ * <p>
+ * The onPreDraw always returns true.
+ * <p>
+ * The listener will also remove itself from the ViewTreeObserver when the view
+ * is detached from the view hierarchy. In that case, the Runnable will never be
+ * executed.
+ */
+class OneShotPreDrawListener implements ViewTreeObserver.OnPreDrawListener,
+ View.OnAttachStateChangeListener {
+ private final View mView;
+ private ViewTreeObserver mViewTreeObserver;
+ private final Runnable mRunnable;
+
+ private OneShotPreDrawListener(View view, Runnable runnable) {
+ mView = view;
+ mViewTreeObserver = view.getViewTreeObserver();
+ mRunnable = runnable;
+ }
+
+ /**
+ * Creates a OneShotPreDrawListener and adds it to view's ViewTreeObserver.
+ * @param view The view whose ViewTreeObserver the OnPreDrawListener should listen.
+ * @param runnable The Runnable to execute in the OnPreDraw (once)
+ * @return The added OneShotPreDrawListener. It can be removed prior to
+ * the onPreDraw by calling {@link #removeListener()}.
+ */
+ public static OneShotPreDrawListener add(View view, Runnable runnable) {
+ OneShotPreDrawListener listener = new OneShotPreDrawListener(view, runnable);
+ view.getViewTreeObserver().addOnPreDrawListener(listener);
+ view.addOnAttachStateChangeListener(listener);
+ return listener;
+ }
+
+ @Override
+ public boolean onPreDraw() {
+ removeListener();
+ mRunnable.run();
+ return true;
+ }
+
+ /**
+ * Removes the listener from the ViewTreeObserver. This is useful to call if the
+ * callback should be removed prior to {@link #onPreDraw()}.
+ */
+ public void removeListener() {
+ if (mViewTreeObserver.isAlive()) {
+ mViewTreeObserver.removeOnPreDrawListener(this);
+ } else {
+ mView.getViewTreeObserver().removeOnPreDrawListener(this);
+ }
+ mView.removeOnAttachStateChangeListener(this);
+ }
+
+ @Override
+ public void onViewAttachedToWindow(View v) {
+ mViewTreeObserver = v.getViewTreeObserver();
+ }
+
+ @Override
+ public void onViewDetachedFromWindow(View v) {
+ removeListener();
+ }
+}
diff --git a/fragment/build.gradle b/fragment/build.gradle
index 26e9f1c..aeb6754 100644
--- a/fragment/build.gradle
+++ b/fragment/build.gradle
@@ -3,7 +3,6 @@
dependencies {
compile project(':support-compat')
- compile project(':support-media-compat')
compile project(':support-core-ui')
compile project(':support-core-utils')
androidTestCompile ("com.android.support.test:runner:${project.rootProject.ext.testRunnerVersion}") {
@@ -124,4 +123,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/fragment/gingerbread/android/support/v4/app/BaseFragmentActivityGingerbread.java b/fragment/gingerbread/android/support/v4/app/BaseFragmentActivityGingerbread.java
index 01e9f22..26f29d8 100644
--- a/fragment/gingerbread/android/support/v4/app/BaseFragmentActivityGingerbread.java
+++ b/fragment/gingerbread/android/support/v4/app/BaseFragmentActivityGingerbread.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
@@ -33,7 +32,6 @@
* @hide
*/
@RequiresApi(9)
-@TargetApi(9)
abstract class BaseFragmentActivityGingerbread extends SupportActivity {
// We need to keep track of whether startIntentSenderForResult originated from a Fragment, so we
diff --git a/fragment/java/android/support/v4/app/BackStackRecord.java b/fragment/java/android/support/v4/app/BackStackRecord.java
index 85ded71..75cae8a 100644
--- a/fragment/java/android/support/v4/app/BackStackRecord.java
+++ b/fragment/java/android/support/v4/app/BackStackRecord.java
@@ -513,6 +513,12 @@
if (mSharedElementSourceNames == null) {
mSharedElementSourceNames = new ArrayList<String>();
mSharedElementTargetNames = new ArrayList<String>();
+ } else if (mSharedElementTargetNames.contains(name)) {
+ throw new IllegalArgumentException("A shared element with the target name '"
+ + name + "' has already been added to the transaction.");
+ } else if (mSharedElementSourceNames.contains(transitionName)) {
+ throw new IllegalArgumentException("A shared element with the source name '"
+ + transitionName + " has already been added to the transaction.");
}
mSharedElementSourceNames.add(transitionName);
diff --git a/fragment/java/android/support/v4/app/Fragment.java b/fragment/java/android/support/v4/app/Fragment.java
index 0c7300e..37a9015 100644
--- a/fragment/java/android/support/v4/app/Fragment.java
+++ b/fragment/java/android/support/v4/app/Fragment.java
@@ -231,6 +231,10 @@
// True if this fragment has been restored from previously saved state.
boolean mRestored;
+ // True if performCreateView has been called and a matching call to performDestroyView
+ // has not yet happened.
+ boolean mPerformedCreateView;
+
// Number of active back stack entries this fragment is in.
int mBackStackNesting;
@@ -425,7 +429,7 @@
Fragment f = (Fragment)clazz.newInstance();
if (args != null) {
args.setClassLoader(f.getClass().getClassLoader());
- f.mArguments = args;
+ f.setArguments(args);
}
return f;
} catch (ClassNotFoundException e) {
@@ -2181,6 +2185,7 @@
if (mChildFragmentManager != null) {
mChildFragmentManager.noteStateNotSaved();
}
+ mPerformedCreateView = true;
return onCreateView(inflater, container, savedInstanceState);
}
@@ -2415,6 +2420,7 @@
if (mLoaderManager != null) {
mLoaderManager.doReportNextStart();
}
+ mPerformedCreateView = false;
}
void performDestroy() {
diff --git a/fragment/java/android/support/v4/app/FragmentActivity.java b/fragment/java/android/support/v4/app/FragmentActivity.java
index 0b38fd4..7699bc6 100644
--- a/fragment/java/android/support/v4/app/FragmentActivity.java
+++ b/fragment/java/android/support/v4/app/FragmentActivity.java
@@ -34,7 +34,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
-import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.util.SimpleArrayMap;
import android.support.v4.util.SparseArrayCompat;
import android.util.AttributeSet;
@@ -181,43 +180,6 @@
}
/**
- * Sets a {@link MediaControllerCompat} for later retrieval via
- * {@link #getSupportMediaController()}.
- *
- * <p>On API 21 and later, this controller will be tied to the window of the activity and
- * media key and volume events which are received while the Activity is in the foreground
- * will be forwarded to the controller and used to invoke transport controls or adjust the
- * volume. Prior to API 21, the global handling of media key and volume events through an
- * active {@link android.support.v4.media.session.MediaSessionCompat} and media button receiver
- * will still be respected.</p>
- *
- * @param mediaController The controller for the session which should receive
- * media keys and volume changes on API 21 and later.
- * @see #getSupportMediaController()
- * @see #setMediaController(android.media.session.MediaController)
- * @deprecated Use {@link MediaControllerCompat#setMediaController} instead. This API will be
- * removed in a future release.
- */
- @Deprecated
- final public void setSupportMediaController(MediaControllerCompat mediaController) {
- MediaControllerCompat.setMediaController(this, mediaController);
- }
-
- /**
- * Retrieves the current {@link MediaControllerCompat} for sending media key and volume events.
- *
- * @return The controller which should receive events.
- * @see #setSupportMediaController(MediaControllerCompat)
- * @see #getMediaController()
- * @deprecated Use {@link MediaControllerCompat#getMediaController} instead. This API will be
- * removed in a future release.
- */
- @Deprecated
- final public MediaControllerCompat getSupportMediaController() {
- return MediaControllerCompat.getMediaController(this);
- }
-
- /**
* Reverses the Activity Scene entry Transition and triggers the calling Activity
* to reverse its exit Transition. When the exit Transition completes,
* {@link #finish()} is called. If no entry Transition was used, finish() is called
diff --git a/fragment/java/android/support/v4/app/FragmentManager.java b/fragment/java/android/support/v4/app/FragmentManager.java
index 829e974..a7a2e50 100644
--- a/fragment/java/android/support/v4/app/FragmentManager.java
+++ b/fragment/java/android/support/v4/app/FragmentManager.java
@@ -407,7 +407,7 @@
* Callback interface for listening to fragment state changes that happen
* within a given FragmentManager.
*/
- public abstract class FragmentLifecycleCallbacks {
+ public abstract static class FragmentLifecycleCallbacks {
/**
* Called right before the fragment's {@link Fragment#onAttach(Context)} method is called.
* This is a good time to inject any required dependencies for the fragment before any of
@@ -1184,7 +1184,7 @@
if (f.mDeferStart && f.mState < Fragment.STARTED && newState > Fragment.STOPPED) {
newState = Fragment.STOPPED;
}
- if (f.mState < newState) {
+ if (f.mState <= newState) {
// For fragments that are created from a layout, when restoring from
// state we don't want to allow them to be created until they are
// being reloaded from the layout.
@@ -1201,73 +1201,62 @@
}
switch (f.mState) {
case Fragment.INITIALIZING:
- if (DEBUG) Log.v(TAG, "moveto CREATED: " + f);
- if (f.mSavedFragmentState != null) {
- f.mSavedFragmentState.setClassLoader(mHost.getContext().getClassLoader());
- f.mSavedViewState = f.mSavedFragmentState.getSparseParcelableArray(
- FragmentManagerImpl.VIEW_STATE_TAG);
- f.mTarget = getFragment(f.mSavedFragmentState,
- FragmentManagerImpl.TARGET_STATE_TAG);
- if (f.mTarget != null) {
- f.mTargetRequestCode = f.mSavedFragmentState.getInt(
- FragmentManagerImpl.TARGET_REQUEST_CODE_STATE_TAG, 0);
- }
- f.mUserVisibleHint = f.mSavedFragmentState.getBoolean(
- FragmentManagerImpl.USER_VISIBLE_HINT_TAG, true);
- if (!f.mUserVisibleHint) {
- f.mDeferStart = true;
- if (newState > Fragment.STOPPED) {
- newState = Fragment.STOPPED;
+ if (newState > Fragment.INITIALIZING) {
+ if (DEBUG) Log.v(TAG, "moveto CREATED: " + f);
+ if (f.mSavedFragmentState != null) {
+ f.mSavedFragmentState.setClassLoader(mHost.getContext()
+ .getClassLoader());
+ f.mSavedViewState = f.mSavedFragmentState.getSparseParcelableArray(
+ FragmentManagerImpl.VIEW_STATE_TAG);
+ f.mTarget = getFragment(f.mSavedFragmentState,
+ FragmentManagerImpl.TARGET_STATE_TAG);
+ if (f.mTarget != null) {
+ f.mTargetRequestCode = f.mSavedFragmentState.getInt(
+ FragmentManagerImpl.TARGET_REQUEST_CODE_STATE_TAG, 0);
+ }
+ f.mUserVisibleHint = f.mSavedFragmentState.getBoolean(
+ FragmentManagerImpl.USER_VISIBLE_HINT_TAG, true);
+ if (!f.mUserVisibleHint) {
+ f.mDeferStart = true;
+ if (newState > Fragment.STOPPED) {
+ newState = Fragment.STOPPED;
+ }
}
}
- }
- f.mHost = mHost;
- f.mParentFragment = mParent;
- f.mFragmentManager = mParent != null
- ? mParent.mChildFragmentManager : mHost.getFragmentManagerImpl();
- dispatchOnFragmentPreAttached(f, mHost.getContext(), false);
- f.mCalled = false;
- f.onAttach(mHost.getContext());
- if (!f.mCalled) {
- throw new SuperNotCalledException("Fragment " + f
- + " did not call through to super.onAttach()");
- }
- if (f.mParentFragment == null) {
- mHost.onAttachFragment(f);
- } else {
- f.mParentFragment.onAttachFragment(f);
- }
- dispatchOnFragmentAttached(f, mHost.getContext(), false);
-
- if (!f.mRetaining) {
- f.performCreate(f.mSavedFragmentState);
- dispatchOnFragmentCreated(f, f.mSavedFragmentState, false);
- } else {
- f.restoreChildFragmentState(f.mSavedFragmentState);
- f.mState = Fragment.CREATED;
- }
- f.mRetaining = false;
- if (f.mFromLayout) {
- // For fragments that are part of the content view
- // layout, we need to instantiate the view immediately
- // and the inflater will take care of adding it.
- f.mView = f.performCreateView(f.getLayoutInflater(
- f.mSavedFragmentState), null, f.mSavedFragmentState);
- if (f.mView != null) {
- f.mInnerView = f.mView;
- if (Build.VERSION.SDK_INT >= 11) {
- ViewCompat.setSaveFromParentEnabled(f.mView, false);
- } else {
- f.mView = NoSaveStateFrameLayout.wrap(f.mView);
- }
- if (f.mHidden) f.mView.setVisibility(View.GONE);
- f.onViewCreated(f.mView, f.mSavedFragmentState);
- dispatchOnFragmentViewCreated(f, f.mView, f.mSavedFragmentState, false);
+ f.mHost = mHost;
+ f.mParentFragment = mParent;
+ f.mFragmentManager = mParent != null
+ ? mParent.mChildFragmentManager : mHost.getFragmentManagerImpl();
+ dispatchOnFragmentPreAttached(f, mHost.getContext(), false);
+ f.mCalled = false;
+ f.onAttach(mHost.getContext());
+ if (!f.mCalled) {
+ throw new SuperNotCalledException("Fragment " + f
+ + " did not call through to super.onAttach()");
+ }
+ if (f.mParentFragment == null) {
+ mHost.onAttachFragment(f);
} else {
- f.mInnerView = null;
+ f.mParentFragment.onAttachFragment(f);
}
+ dispatchOnFragmentAttached(f, mHost.getContext(), false);
+
+ if (!f.mRetaining) {
+ f.performCreate(f.mSavedFragmentState);
+ dispatchOnFragmentCreated(f, f.mSavedFragmentState, false);
+ } else {
+ f.restoreChildFragmentState(f.mSavedFragmentState);
+ f.mState = Fragment.CREATED;
+ }
+ f.mRetaining = false;
}
+
case Fragment.CREATED:
+ // This is outside the if statement below on purpose; we want this to run
+ // even if we do a moveToState from CREATED => *, CREATED => CREATED, and
+ // * => CREATED as part of the case fallthrough above.
+ ensureInflatedFragmentView(f);
+
if (newState > Fragment.CREATED) {
if (DEBUG) Log.v(TAG, "moveto ACTIVITY_CREATED: " + f);
if (!f.mFromLayout) {
@@ -1306,15 +1295,17 @@
}
if (container != null) {
container.addView(f.mView);
- f.mIsNewlyAdded = true;
}
if (f.mHidden) {
f.mView.setVisibility(View.GONE);
- f.mIsNewlyAdded = false; // No animation
}
f.onViewCreated(f.mView, f.mSavedFragmentState);
dispatchOnFragmentViewCreated(f, f.mView, f.mSavedFragmentState,
false);
+ // Only animate the view if it is visible. This is done after
+ // dispatchOnFragmentViewCreated in case visibility is changed
+ f.mIsNewlyAdded = (f.mView.getVisibility() == View.VISIBLE)
+ && f.mContainer != null;
} else {
f.mInnerView = null;
}
@@ -1408,6 +1399,7 @@
f.mContainer = null;
f.mView = null;
f.mInnerView = null;
+ f.mInLayout = false;
}
case Fragment.CREATED:
if (newState < Fragment.CREATED) {
@@ -1467,6 +1459,26 @@
moveToState(f, mCurState, 0, 0, false);
}
+ void ensureInflatedFragmentView(Fragment f) {
+ if (f.mFromLayout && !f.mPerformedCreateView) {
+ f.mView = f.performCreateView(f.getLayoutInflater(
+ f.mSavedFragmentState), null, f.mSavedFragmentState);
+ if (f.mView != null) {
+ f.mInnerView = f.mView;
+ if (Build.VERSION.SDK_INT >= 11) {
+ ViewCompat.setSaveFromParentEnabled(f.mView, false);
+ } else {
+ f.mView = NoSaveStateFrameLayout.wrap(f.mView);
+ }
+ if (f.mHidden) f.mView.setVisibility(View.GONE);
+ f.onViewCreated(f.mView, f.mSavedFragmentState);
+ dispatchOnFragmentViewCreated(f, f.mView, f.mSavedFragmentState, false);
+ } else {
+ f.mInnerView = null;
+ }
+ }
+ }
+
/**
* Fragments that have been shown or hidden don't have their visibility changed or
* animations run during the {@link #showFragment(Fragment)} or {@link #hideFragment(Fragment)}
@@ -3377,7 +3389,9 @@
}
// If we haven't finished entering the CREATED state ourselves yet,
- // push the inflated child fragment along.
+ // push the inflated child fragment along. This will ensureInflatedFragmentView
+ // at the right phase of the lifecycle so that we will have mView populated
+ // for compliant fragments below.
if (mCurState < Fragment.CREATED && fragment.mFromLayout) {
moveToState(fragment, Fragment.CREATED, 0, 0, false);
} else {
diff --git a/fragment/java/android/support/v4/app/FragmentTransition.java b/fragment/java/android/support/v4/app/FragmentTransition.java
index 9efd1bc..aa64859 100644
--- a/fragment/java/android/support/v4/app/FragmentTransition.java
+++ b/fragment/java/android/support/v4/app/FragmentTransition.java
@@ -22,7 +22,6 @@
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import java.util.ArrayList;
import java.util.Collection;
@@ -250,15 +249,12 @@
FragmentTransitionCompat21.scheduleHideFragmentView(exitTransition,
exitingFragment.getView(), exitingViews);
final ViewGroup container = exitingFragment.mContainer;
- container.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- container.getViewTreeObserver().removeOnPreDrawListener(this);
- setViewVisibility(exitingViews, View.INVISIBLE);
- return true;
- }
- });
+ OneShotPreDrawListener.add(container, new Runnable() {
+ @Override
+ public void run() {
+ setViewVisibility(exitingViews, View.INVISIBLE);
+ }
+ });
}
}
@@ -356,33 +352,29 @@
final ArrayList<View> sharedElementsIn,
final Object enterTransition, final ArrayList<View> enteringViews,
final Object exitTransition, final ArrayList<View> exitingViews) {
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ if (enterTransition != null) {
+ FragmentTransitionCompat21.removeTarget(enterTransition,
+ nonExistentView);
+ ArrayList<View> views = configureEnteringExitingViews(
+ enterTransition, inFragment, sharedElementsIn, nonExistentView);
+ enteringViews.addAll(views);
+ }
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
-
- if (enterTransition != null) {
- FragmentTransitionCompat21.removeTarget(enterTransition,
- nonExistentView);
- ArrayList<View> views = configureEnteringExitingViews(
- enterTransition, inFragment, sharedElementsIn, nonExistentView);
- enteringViews.addAll(views);
- }
-
- if (exitingViews != null) {
- ArrayList<View> tempExiting = new ArrayList<>();
- tempExiting.add(nonExistentView);
- FragmentTransitionCompat21.replaceTargets(exitTransition, exitingViews,
- tempExiting);
- exitingViews.clear();
- exitingViews.add(nonExistentView);
- }
-
- return true;
+ if (exitingViews != null) {
+ if (exitTransition != null) {
+ ArrayList<View> tempExiting = new ArrayList<>();
+ tempExiting.add(nonExistentView);
+ FragmentTransitionCompat21.replaceTargets(exitTransition, exitingViews,
+ tempExiting);
}
- });
+ exitingViews.clear();
+ exitingViews.add(nonExistentView);
+ }
+ }
+ });
}
/**
@@ -486,9 +478,17 @@
if (nameOverrides.isEmpty()) {
sharedElementTransition = null;
+ if (outSharedElements != null) {
+ outSharedElements.clear();
+ }
+ if (inSharedElements != null) {
+ inSharedElements.clear();
+ }
} else {
- sharedElementsOut.addAll(outSharedElements.values());
- sharedElementsIn.addAll(inSharedElements.values());
+ addSharedElementsWithMatchingNames(sharedElementsOut, outSharedElements,
+ nameOverrides.keySet());
+ addSharedElementsWithMatchingNames(sharedElementsIn, inSharedElements,
+ nameOverrides.values());
}
if (enterTransition == null && exitTransition == null && sharedElementTransition == null) {
@@ -519,23 +519,39 @@
epicenterView = null;
}
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- callSharedElementStartEnd(inFragment, outFragment, inIsPop,
- inSharedElements, false);
- if (epicenterView != null) {
- FragmentTransitionCompat21.getBoundsOnScreen(epicenterView, epicenter);
- }
- return true;
- }
- });
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ callSharedElementStartEnd(inFragment, outFragment, inIsPop,
+ inSharedElements, false);
+ if (epicenterView != null) {
+ FragmentTransitionCompat21.getBoundsOnScreen(epicenterView, epicenter);
+ }
+ }
+ });
return sharedElementTransition;
}
/**
+ * Add Views from sharedElements into views that have the transitionName in the
+ * nameOverridesSet.
+ *
+ * @param views Views list to add shared elements to
+ * @param sharedElements List of shared elements
+ * @param nameOverridesSet The transition names for all views to be copied from
+ * sharedElements to views.
+ */
+ private static void addSharedElementsWithMatchingNames(ArrayList<View> views,
+ ArrayMap<String, View> sharedElements, Collection<String> nameOverridesSet) {
+ for (int i = sharedElements.size() - 1; i >= 0; i--) {
+ View view = sharedElements.valueAt(i);
+ if (nameOverridesSet.contains(ViewCompat.getTransitionName(view))) {
+ views.add(view);
+ }
+ }
+ }
+
+ /**
* Configures the shared elements of an unoptimized fragment transaction's transition.
* This retrieves the shared elements of the incoming fragments, and schedules capturing
* the incoming fragment's shared elements. It also maps the views, and sets up the epicenter
@@ -612,38 +628,36 @@
inEpicenter = null;
}
+
final Object finalSharedElementTransition = sharedElementTransition;
+ OneShotPreDrawListener.add(sceneRoot, new Runnable() {
+ @Override
+ public void run() {
+ ArrayMap<String, View> inSharedElements = captureInSharedElements(
+ nameOverrides, finalSharedElementTransition, fragments);
- sceneRoot.getViewTreeObserver().addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- ArrayMap<String, View> inSharedElements = captureInSharedElements(
- nameOverrides, finalSharedElementTransition, fragments);
+ if (inSharedElements != null) {
+ sharedElementsIn.addAll(inSharedElements.values());
+ sharedElementsIn.add(nonExistentView);
+ }
- if (inSharedElements != null) {
- sharedElementsIn.addAll(inSharedElements.values());
- sharedElementsIn.add(nonExistentView);
- }
+ callSharedElementStartEnd(inFragment, outFragment, inIsPop,
+ inSharedElements, false);
+ if (finalSharedElementTransition != null) {
+ FragmentTransitionCompat21.swapSharedElementTargets(
+ finalSharedElementTransition, sharedElementsOut,
+ sharedElementsIn);
- callSharedElementStartEnd(inFragment, outFragment, inIsPop,
- inSharedElements, false);
- if (finalSharedElementTransition != null) {
- FragmentTransitionCompat21.swapSharedElementTargets(
- finalSharedElementTransition, sharedElementsOut,
- sharedElementsIn);
-
- final View inEpicenterView = getInEpicenterView(inSharedElements,
- fragments, enterTransition, inIsPop);
- if (inEpicenterView != null) {
- FragmentTransitionCompat21.getBoundsOnScreen(inEpicenterView,
- inEpicenter);
- }
- }
- return true;
+ final View inEpicenterView = getInEpicenterView(inSharedElements,
+ fragments, enterTransition, inIsPop);
+ if (inEpicenterView != null) {
+ FragmentTransitionCompat21.getBoundsOnScreen(inEpicenterView,
+ inEpicenter);
}
- });
+ }
+ }
+ });
+
return sharedElementTransition;
}
diff --git a/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java b/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
index bc8e9e1..71e5d2f 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
@@ -19,6 +19,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
@@ -26,6 +27,7 @@
import android.app.Instrumentation;
import android.graphics.Rect;
import android.os.Build;
+import android.os.Bundle;
import android.support.fragment.test.R;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
@@ -592,6 +594,109 @@
verifyNoOtherTransitions(fragment2);
}
+ // Ensure that shared element without matching transition name doesn't error out
+ @Test
+ public void sharedElementMismatch() throws Throwable {
+ final TransitionFragment fragment1 = setupInitialFragment();
+
+ // Now do a transition to scene2
+ TransitionFragment fragment2 = new TransitionFragment();
+ fragment2.setLayoutId(R.layout.scene2);
+
+ final View startBlue = findBlue();
+ final View startGreen = findGreen();
+ final Rect startBlueBounds = getBoundsOnScreen(startBlue);
+
+ mFragmentManager.beginTransaction()
+ .addSharedElement(startBlue, "fooSquare")
+ .replace(R.id.fragmentContainer, fragment2)
+ .setAllowOptimization(mOptimize)
+ .addToBackStack(null)
+ .commit();
+ FragmentTestUtil.waitForExecution(mActivityRule);
+
+ fragment1.waitForTransition();
+ fragment2.waitForTransition();
+
+ final View endBlue = findBlue();
+ final View endGreen = findGreen();
+
+ if (mOptimize) {
+ verifyAndClearTransition(fragment1.exitTransition, null, startGreen, startBlue);
+ } else {
+ verifyAndClearTransition(fragment1.exitTransition, startBlueBounds, startGreen);
+ verifyAndClearTransition(fragment2.sharedElementEnter, startBlueBounds, startBlue);
+ }
+ verifyNoOtherTransitions(fragment1);
+
+ verifyAndClearTransition(fragment2.enterTransition, null, endGreen, endBlue);
+ verifyNoOtherTransitions(fragment2);
+ }
+
+ // Ensure that using the same source or target shared element results in an exception.
+ @Test
+ public void sharedDuplicateTargetNames() throws Throwable {
+ setupInitialFragment();
+
+ final View startBlue = findBlue();
+ final View startGreen = findGreen();
+
+ FragmentTransaction ft = mFragmentManager.beginTransaction();
+ ft.addSharedElement(startBlue, "blueSquare");
+ try {
+ ft.addSharedElement(startGreen, "blueSquare");
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+
+ try {
+ ft.addSharedElement(startBlue, "greenSquare");
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ // Test that invisible fragment views don't participate in transitions
+ @Test
+ public void invisibleNoTransitions() throws Throwable {
+ if (!mOptimize) {
+ return; // only optimized transitions can avoid interaction
+ }
+ // enter transition
+ TransitionFragment fragment = new InvisibleFragment();
+ fragment.setLayoutId(R.layout.scene1);
+ mFragmentManager.beginTransaction()
+ .setAllowOptimization(mOptimize)
+ .add(R.id.fragmentContainer, fragment)
+ .addToBackStack(null)
+ .commit();
+ FragmentTestUtil.waitForExecution(mActivityRule);
+ fragment.waitForNoTransition();
+ verifyNoOtherTransitions(fragment);
+
+ // exit transition
+ mFragmentManager.beginTransaction()
+ .setAllowOptimization(mOptimize)
+ .remove(fragment)
+ .addToBackStack(null)
+ .commit();
+
+ fragment.waitForNoTransition();
+ verifyNoOtherTransitions(fragment);
+
+ // reenter transition
+ FragmentTestUtil.popBackStackImmediate(mActivityRule);
+ fragment.waitForNoTransition();
+ verifyNoOtherTransitions(fragment);
+
+ // return transition
+ FragmentTestUtil.popBackStackImmediate(mActivityRule);
+ fragment.waitForNoTransition();
+ verifyNoOtherTransitions(fragment);
+ }
+
private TransitionFragment setupInitialFragment() throws Throwable {
TransitionFragment fragment1 = new TransitionFragment();
fragment1.setLayoutId(R.layout.scene1);
@@ -888,6 +993,13 @@
setSharedElementEnterTransition(sharedElementEnterTransition);
setSharedElementReturnTransition(sharedElementReturnTransition);
}
+ }
+ public static class InvisibleFragment extends TransitionFragment {
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ view.setVisibility(View.INVISIBLE);
+ super.onViewCreated(view, savedInstanceState);
+ }
}
}
diff --git a/fragment/tests/java/android/support/v4/app/FragmentViewTests.java b/fragment/tests/java/android/support/v4/app/FragmentViewTests.java
index 22a52ed..ad970c8 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentViewTests.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentViewTests.java
@@ -25,6 +25,7 @@
import static org.junit.Assert.fail;
import android.app.Instrumentation;
+import android.os.Bundle;
import android.support.fragment.test.R;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
@@ -873,6 +874,34 @@
assertNotNull(findViewById(R.id.textC));
}
+ // Test that adding a fragment with invisible or gone views does not end up with the view
+ // being visible
+ @Test
+ public void addInvisibleAndGoneFragments() throws Throwable {
+ FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container);
+ ViewGroup container = (ViewGroup)
+ mActivityRule.getActivity().findViewById(R.id.fragmentContainer);
+ final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
+
+ final StrictViewFragment fragment1 = new InvisibleFragment();
+ fm.beginTransaction().add(R.id.fragmentContainer, fragment1).addToBackStack(null).commit();
+ FragmentTestUtil.executePendingTransactions(mActivityRule);
+ FragmentTestUtil.assertChildren(container, fragment1);
+
+ assertEquals(View.INVISIBLE, fragment1.getView().getVisibility());
+
+ final InvisibleFragment fragment2 = new InvisibleFragment();
+ fragment2.visibility = View.GONE;
+ fm.beginTransaction()
+ .replace(R.id.fragmentContainer, fragment2)
+ .addToBackStack(null)
+ .commit();
+ FragmentTestUtil.executePendingTransactions(mActivityRule);
+ FragmentTestUtil.assertChildren(container, fragment2);
+
+ assertEquals(View.GONE, fragment2.getView().getVisibility());
+ }
+
private View findViewById(int viewId) {
return mActivityRule.getActivity().findViewById(viewId);
}
@@ -886,4 +915,14 @@
fragments[i].getView());
}
}
+
+ public static class InvisibleFragment extends StrictViewFragment {
+ public int visibility = View.INVISIBLE;
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ view.setVisibility(visibility);
+ super.onViewCreated(view, savedInstanceState);
+ }
+ }
}
diff --git a/fragment/tests/java/android/support/v4/app/NestedInflatedFragmentTest.java b/fragment/tests/java/android/support/v4/app/NestedInflatedFragmentTest.java
new file mode 100644
index 0000000..b4316da
--- /dev/null
+++ b/fragment/tests/java/android/support/v4/app/NestedInflatedFragmentTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package android.support.v4.app;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.fragment.test.R;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.test.FragmentTestActivity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class NestedInflatedFragmentTest {
+ private static final String TAG = "NestedInflatedFragmentTest";
+
+ @Rule
+ public ActivityTestRule<FragmentTestActivity> mActivityRule =
+ new ActivityTestRule<>(FragmentTestActivity.class);
+
+ @Test
+ @UiThreadTest
+ public void inflatedChildFragment() throws Throwable {
+ final FragmentTestActivity activity = mActivityRule.getActivity();
+ final FragmentManager fm = activity.getSupportFragmentManager();
+
+ ParentFragment parentFragment = new ParentFragment();
+ fm.beginTransaction().add(android.R.id.content, parentFragment).commitNow();
+
+ fm.beginTransaction().replace(android.R.id.content, new SimpleFragment())
+ .addToBackStack(null).commit();
+ fm.executePendingTransactions();
+
+ fm.popBackStackImmediate();
+ }
+
+ public static class ParentFragment extends Fragment {
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.nested_inflated_fragment_parent, container, false);
+ }
+ }
+
+ public static class InflatedChildFragment extends Fragment {
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.nested_inflated_fragment_child, container, false);
+ }
+ }
+
+ public static class SimpleFragment extends Fragment {
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ TextView textView = new TextView(inflater.getContext());
+ textView.setText("Simple fragment");
+ return textView;
+ }
+ }
+}
diff --git a/fragment/tests/java/android/support/v4/app/TransitionFragment.java b/fragment/tests/java/android/support/v4/app/TransitionFragment.java
index fda2784..e6493c2 100644
--- a/fragment/tests/java/android/support/v4/app/TransitionFragment.java
+++ b/fragment/tests/java/android/support/v4/app/TransitionFragment.java
@@ -51,9 +51,11 @@
setSharedElementEnterTransition(sharedElementEnter);
setSharedElementReturnTransition(sharedElementReturn);
enterTransition.addListener(mListener);
+ sharedElementEnter.addListener(mListener);
reenterTransition.addListener(mListener);
exitTransition.addListener(mListener);
returnTransition.addListener(mListener);
+ sharedElementReturn.addListener(mListener);
}
@Override
diff --git a/fragment/tests/res/layout/nested_inflated_fragment_child.xml b/fragment/tests/res/layout/nested_inflated_fragment_child.xml
new file mode 100644
index 0000000..0bb98d2
--- /dev/null
+++ b/fragment/tests/res/layout/nested_inflated_fragment_child.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <TextView android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Test" />
+</LinearLayout>
\ No newline at end of file
diff --git a/fragment/tests/res/layout/nested_inflated_fragment_parent.xml b/fragment/tests/res/layout/nested_inflated_fragment_parent.xml
new file mode 100644
index 0000000..665a705
--- /dev/null
+++ b/fragment/tests/res/layout/nested_inflated_fragment_parent.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <fragment android:name="android.support.v4.app.NestedInflatedFragmentTest$InflatedChildFragment"
+ android:id="@+id/child_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</LinearLayout>
\ No newline at end of file
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java b/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
index 8c0a7be..c9ef5d1 100644
--- a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
+++ b/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
@@ -55,12 +55,81 @@
* For older API version, this class uses {@link android.animation.ObjectAnimator} and
* {@link android.animation.AnimatorSet} to animate the properties of a
* {@link VectorDrawableCompat} to create an animated drawable.
- * <p>
+ * <p/>
* AnimatedVectorDrawableCompat are defined in the same XML format as {@link AnimatedVectorDrawable}.
- * </p>
+ * <p/>
+ * Here are all the animatable attributes in {@link VectorDrawableCompat}:
+ * <table border="2" align="center" cellpadding="5">
+ * <thead>
+ * <tr>
+ * <th>Element Name</th>
+ * <th>Animatable attribute name</th>
+ * </tr>
+ * </thead>
+ * <tr>
+ * <td><vector></td>
+ * <td>alpha</td>
+ * </tr>
+ * <tr>
+ * <td rowspan="7"><group></td>
+ * <td>rotation</td>
+ * </tr>
+ * <tr>
+ * <td>pivotX</td>
+ * </tr>
+ * <tr>
+ * <td>pivotY</td>
+ * </tr>
+ * <tr>
+ * <td>scaleX</td>
+ * </tr>
+ * <tr>
+ * <td>scaleY</td>
+ * </tr>
+ * <tr>
+ * <td>translateX</td>
+ * </tr>
+ * <tr>
+ * <td>translateY</td>
+ * </tr>
+ * <tr>
+ * <td rowspan="8"><path></td>
+ * <td>fillColor</td>
+ * </tr>
+ * <tr>
+ * <td>strokeColor</td>
+ * </tr>
+ * <tr>
+ * <td>strokeWidth</td>
+ * </tr>
+ * <tr>
+ * <td>strokeAlpha</td>
+ * </tr>
+ * <tr>
+ * <td>fillAlpha</td>
+ * </tr>
+ * <tr>
+ * <td>trimPathStart</td>
+ * </tr>
+ * <tr>
+ * <td>trimPathOffset</td>
+ * </tr>
+ * </table>
+ * <p/>
* You can always create a AnimatedVectorDrawableCompat object and use it as a Drawable by the Java
* API. In order to refer to AnimatedVectorDrawableCompat inside a XML file, you can use
* app:srcCompat attribute in AppCompat library's ImageButton or ImageView.
+ * <p/>
+ * Note that the animation in AnimatedVectorDrawableCompat has to be valid and functional based on
+ * the SDK version the app will be running on. Before SDK version 21, the animation system didn't
+ * support the following features:
+ * <ul>
+ * <li>Path Morphing (PathType evaluator). This is used for morphing one path into another.</li>
+ * <li>Path Interpolation. This is used to defined a flexible interpolator (represented as a path)
+ * instead of the system defined ones like LinearInterpolator.</li>
+ * <li>Animating 2 values in one ObjectAnimator according to one path's X value and Y value. One
+ * usage is moving one object in both X and Y dimensions along an path.</li>
+ * </ul>
*/
@SuppressLint("NewApi")
public class AnimatedVectorDrawableCompat extends VectorDrawableCommon implements Animatable {
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
index 3166df7..5704d6f 100644
--- a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
+++ b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
@@ -81,36 +81,27 @@
* <dl>
* <dt><code>android:name</code></dt>
* <dd>Defines the name of this vector drawable.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:width</code></dt>
* <dd>Used to define the intrinsic width of the drawable.
* This support all the dimension units, normally specified with dp.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:height</code></dt>
* <dd>Used to define the intrinsic height the drawable.
* This support all the dimension units, normally specified with dp.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:viewportWidth</code></dt>
* <dd>Used to define the width of the viewport space. Viewport is basically
* the virtual canvas where the paths are drawn on.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:viewportHeight</code></dt>
* <dd>Used to define the height of the viewport space. Viewport is basically
* the virtual canvas where the paths are drawn on.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:tint</code></dt>
* <dd>The color to apply to the drawable as a tint. By default, no tint is applied.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:tintMode</code></dt>
- * <dd>The Porter-Duff blending mode for the tint color. The default value is src_in.</dd>
- * <dd>Animatable : No.</dd>
+ * <dd>The Porter-Duff blending mode for the tint color. Default is src_in.</dd>
* <dt><code>android:autoMirrored</code></dt>
* <dd>Indicates if the drawable needs to be mirrored when its layout direction is
- * RTL (right-to-left).</dd>
- * <dd>Animatable : No.</dd>
+ * RTL (right-to-left). Default is false.</dd>
* <dt><code>android:alpha</code></dt>
- * <dd>The opacity of this drawable.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The opacity of this drawable. Default is 1.</dd>
* </dl></dd>
* </dl>
*
@@ -122,32 +113,24 @@
* <dl>
* <dt><code>android:name</code></dt>
* <dd>Defines the name of the group.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:rotation</code></dt>
- * <dd>The degrees of rotation of the group.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The degrees of rotation of the group. Default is 0.</dd>
* <dt><code>android:pivotX</code></dt>
* <dd>The X coordinate of the pivot for the scale and rotation of the group.
- * This is defined in the viewport space.</dd>
- * <dd>Animatable : Yes.</dd>
+ * This is defined in the viewport space. Default is 0.</dd>
* <dt><code>android:pivotY</code></dt>
* <dd>The Y coordinate of the pivot for the scale and rotation of the group.
- * This is defined in the viewport space.</dd>
- * <dd>Animatable : Yes.</dd>
+ * This is defined in the viewport space. Default is 0.</dd>
* <dt><code>android:scaleX</code></dt>
- * <dd>The amount of scale on the X Coordinate.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The amount of scale on the X Coordinate. Default is 1.</dd>
* <dt><code>android:scaleY</code></dt>
- * <dd>The amount of scale on the Y coordinate.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The amount of scale on the Y coordinate. Default is 1.</dd>
* <dt><code>android:translateX</code></dt>
* <dd>The amount of translation on the X coordinate.
- * This is defined in the viewport space.</dd>
- * <dd>Animatable : Yes.</dd>
+ * This is defined in the viewport space. Default is 0.</dd>
* <dt><code>android:translateY</code></dt>
* <dd>The amount of translation on the Y coordinate.
- * This is defined in the viewport space.</dd>
- * <dd>Animatable : Yes.</dd>
+ * This is defined in the viewport space. Default is 0.</dd>
* </dl></dd>
* </dl>
*
@@ -157,49 +140,36 @@
* <dl>
* <dt><code>android:name</code></dt>
* <dd>Defines the name of the path.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:pathData</code></dt>
* <dd>Defines path data using exactly same format as "d" attribute
* in the SVG's path data. This is defined in the viewport space.</dd>
- * <dd>Animatable : Yes.</dd>
* <dt><code>android:fillColor</code></dt>
* <dd>Specifies the color used to fill the path.
* If this property is animated, any value set by the animation will override the original value.
* No path fill is drawn if this property is not specified.</dd>
- * <dd>Animatable : Yes.</dd>
* <dt><code>android:strokeColor</code></dt>
* <dd>Specifies the color used to draw the path outline.
* If this property is animated, any value set by the animation will override the original value.
* No path outline is drawn if this property is not specified.</dd>
- * <dd>Animatable : Yes.</dd>
* <dt><code>android:strokeWidth</code></dt>
- * <dd>The width a path stroke.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The width a path stroke. Default is 0.</dd>
* <dt><code>android:strokeAlpha</code></dt>
- * <dd>The opacity of a path stroke.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The opacity of a path stroke. Default is 1.</dd>
* <dt><code>android:fillAlpha</code></dt>
- * <dd>The opacity to fill the path with.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The opacity to fill the path with. Default is 1.</dd>
* <dt><code>android:trimPathStart</code></dt>
- * <dd>The fraction of the path to trim from the start, in the range from 0 to 1.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The fraction of the path to trim from the start, in the range from 0 to 1. Default is 0.</dd>
* <dt><code>android:trimPathEnd</code></dt>
- * <dd>The fraction of the path to trim from the end, in the range from 0 to 1.</dd>
- * <dd>Animatable : Yes.</dd>
+ * <dd>The fraction of the path to trim from the end, in the range from 0 to 1. Default is 1.</dd>
* <dt><code>android:trimPathOffset</code></dt>
* <dd>Shift trim region (allows showed region to include the start and end), in the range
- * from 0 to 1.</dd>
- * <dd>Animatable : Yes.</dd>
+ * from 0 to 1. Default is 0.</dd>
* <dt><code>android:strokeLineCap</code></dt>
- * <dd>Sets the linecap for a stroked path: butt, round, square.</dd>
- * <dd>Animatable : No.</dd>
+ * <dd>Sets the linecap for a stroked path: butt, round, square. Default is butt.</dd>
* <dt><code>android:strokeLineJoin</code></dt>
- * <dd>Sets the lineJoin for a stroked path: miter,round,bevel.</dd>
- * <dd>Animatable : No.</dd>
+ * <dd>Sets the lineJoin for a stroked path: miter,round,bevel. Default is miter.</dd>
* <dt><code>android:strokeMiterLimit</code></dt>
- * <dd>Sets the Miter limit for a stroked path.</dd>
- * <dd>Animatable : No.</dd>
+ * <dd>Sets the Miter limit for a stroked path. Default is 4.</dd>
* </dl></dd>
* </dl>
*
@@ -210,13 +180,14 @@
* <dl>
* <dt><code>android:name</code></dt>
* <dd>Defines the name of the clip path.</dd>
- * <dd>Animatable : No.</dd>
* <dt><code>android:pathData</code></dt>
* <dd>Defines clip path using the same format as "d" attribute
* in the SVG's path data.</dd>
- * <dd>Animatable : Yes.</dd>
* </dl></dd>
* </dl>
+ * <p/>
+ * Note that theme attributes in XML file are supported through
+ * <code>{@link #inflate(Resources, XmlPullParser, AttributeSet, Theme)}</code>.
*/
public class VectorDrawableCompat extends VectorDrawableCommon {
static final String LOGTAG = "VectorDrawableCompat";
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..7b7f7a0
--- /dev/null
+++ b/local.properties
@@ -0,0 +1,12 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Mon Apr 11 17:16:19 PDT 2016
+#do not define sdk.dir here, it will confuse android studio
+android.dir=../../
diff --git a/media-compat/Android.mk b/media-compat/Android.mk
index 52dc3d8..37acd06 100644
--- a/media-compat/Android.mk
+++ b/media-compat/Android.mk
@@ -35,6 +35,7 @@
$(call all-java-files-under,api22) \
$(call all-java-files-under,api23) \
$(call all-java-files-under,api24) \
+ $(call all-java-files-under,api26) \
$(call all-java-files-under,java) \
$(call all-Iaidl-files-under,java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
diff --git a/media-compat/api21/android/support/v4/media/MediaBrowserCompatApi21.java b/media-compat/api21/android/support/v4/media/MediaBrowserCompatApi21.java
index 9a0b0f3..0634309 100644
--- a/media-compat/api21/android/support/v4/media/MediaBrowserCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/MediaBrowserCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.content.ComponentName;
import android.content.Context;
import android.media.browse.MediaBrowser;
@@ -27,7 +26,6 @@
import java.util.List;
@RequiresApi(21)
-@TargetApi(21)
class MediaBrowserCompatApi21 {
static final String NULL_MEDIA_ITEM_ID =
"android.support.v4.media.MediaBrowserCompat.NULL_MEDIA_ITEM";
diff --git a/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java b/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
index affb130..f494668 100644
--- a/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.media.browse.MediaBrowser;
@@ -31,7 +30,6 @@
import java.util.List;
@RequiresApi(21)
-@TargetApi(21)
class MediaBrowserServiceCompatApi21 {
public static Object createService(Context context, ServiceCompatProxy serviceProxy) {
diff --git a/media-compat/api21/android/support/v4/media/MediaDescriptionCompatApi21.java b/media-compat/api21/android/support/v4/media/MediaDescriptionCompatApi21.java
index 556d092..8361711 100644
--- a/media-compat/api21/android/support/v4/media/MediaDescriptionCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/MediaDescriptionCompatApi21.java
@@ -15,7 +15,6 @@
*/
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.media.MediaDescription;
import android.net.Uri;
@@ -24,7 +23,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(21)
-@TargetApi(21)
class MediaDescriptionCompatApi21 {
public static String getMediaId(Object descriptionObj) {
diff --git a/media-compat/api21/android/support/v4/media/MediaMetadataCompatApi21.java b/media-compat/api21/android/support/v4/media/MediaMetadataCompatApi21.java
index ed30c29..6020a08 100644
--- a/media-compat/api21/android/support/v4/media/MediaMetadataCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/MediaMetadataCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.media.MediaMetadata;
import android.media.Rating;
@@ -26,7 +25,6 @@
import java.util.Set;
@RequiresApi(21)
-@TargetApi(21)
class MediaMetadataCompatApi21 {
public static Set<String> keySet(Object metadataObj) {
return ((MediaMetadata)metadataObj).keySet();
diff --git a/media-compat/api21/android/support/v4/media/ParceledListSliceAdapterApi21.java b/media-compat/api21/android/support/v4/media/ParceledListSliceAdapterApi21.java
index ab5e4ef..6af9903 100644
--- a/media-compat/api21/android/support/v4/media/ParceledListSliceAdapterApi21.java
+++ b/media-compat/api21/android/support/v4/media/ParceledListSliceAdapterApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.browse.MediaBrowser;
import android.support.annotation.RequiresApi;
@@ -28,7 +27,6 @@
* An adapter class for accessing the hidden framework classes, ParceledListSlice using reflection.
*/
@RequiresApi(21)
-@TargetApi(21)
class ParceledListSliceAdapterApi21 {
private static Constructor sConstructor;
static {
diff --git a/media-compat/api21/android/support/v4/media/VolumeProviderCompatApi21.java b/media-compat/api21/android/support/v4/media/VolumeProviderCompatApi21.java
index 66f5144..cefbf59 100644
--- a/media-compat/api21/android/support/v4/media/VolumeProviderCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/VolumeProviderCompatApi21.java
@@ -16,12 +16,10 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.VolumeProvider;
import android.support.annotation.RequiresApi;
@RequiresApi(21)
-@TargetApi(21)
class VolumeProviderCompatApi21 {
public static Object createVolumeProvider(int volumeControl, int maxVolume, int currentVolume,
final Delegate delegate) {
diff --git a/media-compat/api21/android/support/v4/media/session/MediaControllerCompatApi21.java b/media-compat/api21/android/support/v4/media/session/MediaControllerCompatApi21.java
index c498f7f..c13d901 100644
--- a/media-compat/api21/android/support/v4/media/session/MediaControllerCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/session/MediaControllerCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
@@ -37,7 +36,6 @@
import java.util.List;
@RequiresApi(21)
-@TargetApi(21)
class MediaControllerCompatApi21 {
public static Object fromToken(Context context, Object sessionToken) {
return new MediaController(context, (MediaSession.Token) sessionToken);
diff --git a/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java b/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
index 38c42cb..72c5c8c 100644
--- a/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -37,7 +36,6 @@
import java.util.List;
@RequiresApi(21)
-@TargetApi(21)
class MediaSessionCompatApi21 {
public static Object createSession(Context context, String tag) {
return new MediaSession(context, tag);
diff --git a/media-compat/api21/android/support/v4/media/session/PlaybackStateCompatApi21.java b/media-compat/api21/android/support/v4/media/session/PlaybackStateCompatApi21.java
index df6a203..577f35d 100644
--- a/media-compat/api21/android/support/v4/media/session/PlaybackStateCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/session/PlaybackStateCompatApi21.java
@@ -16,7 +16,6 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
import java.util.List;
@RequiresApi(21)
-@TargetApi(21)
class PlaybackStateCompatApi21 {
public static int getState(Object stateObj) {
return ((PlaybackState)stateObj).getState();
diff --git a/media-compat/api22/android/support/v4/media/session/MediaSessionCompatApi22.java b/media-compat/api22/android/support/v4/media/session/MediaSessionCompatApi22.java
index 687e965..b7ddc99 100644
--- a/media-compat/api22/android/support/v4/media/session/MediaSessionCompatApi22.java
+++ b/media-compat/api22/android/support/v4/media/session/MediaSessionCompatApi22.java
@@ -15,12 +15,10 @@
*/
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.MediaSession;
import android.support.annotation.RequiresApi;
@RequiresApi(22)
-@TargetApi(22)
class MediaSessionCompatApi22 {
public static void setRatingType(Object sessionObj, int type) {
diff --git a/media-compat/api22/android/support/v4/media/session/PlaybackStateCompatApi22.java b/media-compat/api22/android/support/v4/media/session/PlaybackStateCompatApi22.java
index ff398b9..6be3f4b 100644
--- a/media-compat/api22/android/support/v4/media/session/PlaybackStateCompatApi22.java
+++ b/media-compat/api22/android/support/v4/media/session/PlaybackStateCompatApi22.java
@@ -16,7 +16,6 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
import java.util.List;
@RequiresApi(22)
-@TargetApi(22)
class PlaybackStateCompatApi22 {
public static Bundle getExtras(Object stateObj) {
return ((PlaybackState)stateObj).getExtras();
diff --git a/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java b/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
index 308c490..0e37570 100644
--- a/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
@@ -16,14 +16,12 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.browse.MediaBrowser;
import android.os.Parcel;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class MediaBrowserCompatApi23 {
public static Object createItemCallback(ItemCallback callback) {
diff --git a/media-compat/api23/android/support/v4/media/MediaBrowserServiceCompatApi23.java b/media-compat/api23/android/support/v4/media/MediaBrowserServiceCompatApi23.java
index 1091dec..7b30ad5 100644
--- a/media-compat/api23/android/support/v4/media/MediaBrowserServiceCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/MediaBrowserServiceCompatApi23.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.content.Context;
import android.media.browse.MediaBrowser;
import android.os.Parcel;
@@ -24,7 +23,6 @@
import android.support.v4.media.MediaBrowserServiceCompatApi21.ResultWrapper;
@RequiresApi(23)
-@TargetApi(23)
class MediaBrowserServiceCompatApi23 {
public static Object createService(Context context, ServiceCompatProxy serviceProxy) {
diff --git a/media-compat/api23/android/support/v4/media/MediaDescriptionCompatApi23.java b/media-compat/api23/android/support/v4/media/MediaDescriptionCompatApi23.java
index 862fbbf..957cc54 100644
--- a/media-compat/api23/android/support/v4/media/MediaDescriptionCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/MediaDescriptionCompatApi23.java
@@ -15,13 +15,11 @@
*/
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.MediaDescription;
import android.net.Uri;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class MediaDescriptionCompatApi23 extends MediaDescriptionCompatApi21 {
public static Uri getMediaUri(Object descriptionObj) {
return ((MediaDescription) descriptionObj).getMediaUri();
diff --git a/media-compat/api23/android/support/v4/media/session/MediaControllerCompatApi23.java b/media-compat/api23/android/support/v4/media/session/MediaControllerCompatApi23.java
index 92e49fc..12ce345 100644
--- a/media-compat/api23/android/support/v4/media/session/MediaControllerCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/session/MediaControllerCompatApi23.java
@@ -16,14 +16,12 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.MediaController;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class MediaControllerCompatApi23 {
public static class TransportControls extends MediaControllerCompatApi21.TransportControls {
diff --git a/media-compat/api23/android/support/v4/media/session/MediaSessionCompatApi23.java b/media-compat/api23/android/support/v4/media/session/MediaSessionCompatApi23.java
index ddb25fc..2818f02 100644
--- a/media-compat/api23/android/support/v4/media/session/MediaSessionCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/session/MediaSessionCompatApi23.java
@@ -16,13 +16,11 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class MediaSessionCompatApi23 {
public static Object createCallback(Callback callback) {
diff --git a/media-compat/api24/android/support/v4/media/MediaBrowserCompatApi24.java b/media-compat/api24/android/support/v4/media/MediaBrowserCompatApi24.java
index 45a428c..4842cc1 100644
--- a/media-compat/api24/android/support/v4/media/MediaBrowserCompatApi24.java
+++ b/media-compat/api24/android/support/v4/media/MediaBrowserCompatApi24.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.browse.MediaBrowser;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -25,7 +24,6 @@
import java.util.List;
@RequiresApi(24)
-@TargetApi(24)
class MediaBrowserCompatApi24 {
public static Object createSubscriptionCallback(SubscriptionCallback callback) {
return new SubscriptionCallbackProxy<>(callback);
diff --git a/media-compat/api24/android/support/v4/media/MediaBrowserServiceCompatApi24.java b/media-compat/api24/android/support/v4/media/MediaBrowserServiceCompatApi24.java
index 2440864..a7e5e19 100644
--- a/media-compat/api24/android/support/v4/media/MediaBrowserServiceCompatApi24.java
+++ b/media-compat/api24/android/support/v4/media/MediaBrowserServiceCompatApi24.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.content.Context;
import android.media.browse.MediaBrowser;
import android.os.Bundle;
@@ -30,7 +29,6 @@
import java.util.List;
@RequiresApi(24)
-@TargetApi(24)
class MediaBrowserServiceCompatApi24 {
private static final String TAG = "MBSCompatApi24";
diff --git a/media-compat/api24/android/support/v4/media/session/MediaControllerCompatApi24.java b/media-compat/api24/android/support/v4/media/session/MediaControllerCompatApi24.java
index 3c8b650..c336d70 100644
--- a/media-compat/api24/android/support/v4/media/session/MediaControllerCompatApi24.java
+++ b/media-compat/api24/android/support/v4/media/session/MediaControllerCompatApi24.java
@@ -16,14 +16,12 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.MediaController;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
@RequiresApi(24)
-@TargetApi(24)
class MediaControllerCompatApi24 {
public static class TransportControls extends MediaControllerCompatApi23.TransportControls {
diff --git a/media-compat/api24/android/support/v4/media/session/MediaSessionCompatApi24.java b/media-compat/api24/android/support/v4/media/session/MediaSessionCompatApi24.java
index 506b04f..cd358e5 100644
--- a/media-compat/api24/android/support/v4/media/session/MediaSessionCompatApi24.java
+++ b/media-compat/api24/android/support/v4/media/session/MediaSessionCompatApi24.java
@@ -16,7 +16,6 @@
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.session.MediaSession;
import android.net.Uri;
import android.os.Bundle;
@@ -27,7 +26,6 @@
import java.lang.reflect.Method;
@RequiresApi(24)
-@TargetApi(24)
class MediaSessionCompatApi24 {
private static final String TAG = "MediaSessionCompatApi24";
diff --git a/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java b/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java
new file mode 100644
index 0000000..b2c4ac0
--- /dev/null
+++ b/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.media.session;
+
+import android.media.session.MediaController;
+
+class MediaControllerCompatApi26 {
+ public static Object createCallback(Callback callback) {
+ return new CallbackProxy<Callback>(callback);
+ }
+
+ public static int getRepeatMode(Object controllerObj) {
+ return ((MediaController) controllerObj).getRepeatMode();
+ }
+
+ public static boolean isShuffleModeEnabled(Object controllerObj) {
+ return ((MediaController) controllerObj).isShuffleModeEnabled();
+ }
+
+ public static class TransportControls extends MediaControllerCompatApi23.TransportControls {
+ public static void setRepeatMode(Object controlsObj, int repeatMode) {
+ ((MediaController.TransportControls) controlsObj).setRepeatMode(repeatMode);
+ }
+
+ public static void setShuffleModeEnabled(Object controlsObj, boolean enabled) {
+ ((MediaController.TransportControls) controlsObj).setShuffleModeEnabled(enabled);
+ }
+ }
+
+ public interface Callback extends MediaControllerCompatApi21.Callback {
+ void onRepeatModeChanged(int repeatMode);
+ void onShuffleModeChanged(boolean enabled);
+ }
+
+ static class CallbackProxy<T extends Callback> extends MediaControllerCompatApi21
+ .CallbackProxy<T> {
+ CallbackProxy(T callback) {
+ super(callback);
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+ mCallback.onRepeatModeChanged(repeatMode);
+ }
+
+ @Override
+ public void onShuffleModeChanged(boolean enabled) {
+ mCallback.onShuffleModeChanged(enabled);
+ }
+ }
+}
diff --git a/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java b/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java
new file mode 100644
index 0000000..80c5fd0
--- /dev/null
+++ b/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.media.session;
+
+import android.media.session.MediaSession;
+
+class MediaSessionCompatApi26 {
+
+ public static Object createCallback(Callback callback) {
+ return new CallbackProxy<Callback>(callback);
+ }
+
+ public static void setRepeatMode(Object sessionObj, int repeatMode) {
+ ((MediaSession) sessionObj).setRepeatMode(repeatMode);
+ }
+
+ public static void setShuffleModeEnabled(Object sessionObj, boolean enabled) {
+ ((MediaSession) sessionObj).setShuffleModeEnabled(enabled);
+ }
+
+ public interface Callback extends MediaSessionCompatApi24.Callback {
+ void onSetRepeatMode(int repeatMode);
+ void onSetShuffleModeEnabled(boolean enabled);
+ }
+
+ static class CallbackProxy<T extends Callback>
+ extends MediaSessionCompatApi24.CallbackProxy<T> {
+ CallbackProxy(T callback) {
+ super(callback);
+ }
+
+ @Override
+ public void onSetRepeatMode(int repeatMode) {
+ mCallback.onSetRepeatMode(repeatMode);
+ }
+
+ @Override
+ public void onSetShuffleModeEnabled(boolean enabled) {
+ mCallback.onSetShuffleModeEnabled(enabled);
+ }
+ }
+}
diff --git a/media-compat/build.gradle b/media-compat/build.gradle
index e26a1bc..bddff30 100644
--- a/media-compat/build.gradle
+++ b/media-compat/build.gradle
@@ -35,6 +35,7 @@
'api22',
'api23',
'api24',
+ 'api26',
'java'
]
main.aidl.srcDirs = ['java']
diff --git a/media-compat/ics/android/support/v4/media/session/MediaSessionCompatApi14.java b/media-compat/ics/android/support/v4/media/session/MediaSessionCompatApi14.java
index b6f7a38..cb86b2b 100644
--- a/media-compat/ics/android/support/v4/media/session/MediaSessionCompatApi14.java
+++ b/media-compat/ics/android/support/v4/media/session/MediaSessionCompatApi14.java
@@ -15,7 +15,6 @@
*/
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Bitmap;
@@ -26,7 +25,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(14)
-@TargetApi(14)
class MediaSessionCompatApi14 {
/***** RemoteControlClient States, we only need none as the others were public *******/
final static int RCC_PLAYSTATE_NONE = 0;
diff --git a/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl b/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
index d905350..d1d143d 100644
--- a/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
+++ b/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
@@ -37,4 +37,6 @@
void onQueueTitleChanged(CharSequence title);
void onExtrasChanged(in Bundle extras);
void onVolumeInfoChanged(in ParcelableVolumeInfo info);
+ void onRepeatModeChanged(int repeatMode);
+ void onShuffleModeChanged(boolean enabled);
}
diff --git a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
index c7705e8..4f2e38a 100644
--- a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
+++ b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
@@ -52,6 +52,8 @@
CharSequence getQueueTitle() = 29;
Bundle getExtras() = 30;
int getRatingType() = 31;
+ int getRepeatMode() = 36;
+ boolean isShuffleModeEnabled() = 37;
// These commands are for the TransportControls
void prepare() = 32;
@@ -71,5 +73,7 @@
void rewind() = 22;
void seekTo(long pos) = 23;
void rate(in RatingCompat rating) = 24;
+ void setRepeatMode(int repeatMode) = 38;
+ void setShuffleModeEnabled(boolean shuffleMode) = 39;
void sendCustomAction(String action, in Bundle args) = 25;
}
diff --git a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
index 4ef4319..3357474 100644
--- a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
@@ -148,7 +148,9 @@
}
mToken = session.getSessionToken();
- if (android.os.Build.VERSION.SDK_INT >= 24) {
+ if (android.os.Build.VERSION.SDK_INT >= 26) {
+ mImpl = new MediaControllerImplApi26(context, session);
+ } else if (android.os.Build.VERSION.SDK_INT >= 24) {
mImpl = new MediaControllerImplApi24(context, session);
} else if (android.os.Build.VERSION.SDK_INT >= 23) {
mImpl = new MediaControllerImplApi23(context, session);
@@ -173,7 +175,9 @@
}
mToken = sessionToken;
- if (android.os.Build.VERSION.SDK_INT >= 24) {
+ if (android.os.Build.VERSION.SDK_INT >= 26) {
+ mImpl = new MediaControllerImplApi26(context, sessionToken);
+ } else if (android.os.Build.VERSION.SDK_INT >= 24) {
mImpl = new MediaControllerImplApi24(context, sessionToken);
} else if (android.os.Build.VERSION.SDK_INT >= 23) {
mImpl = new MediaControllerImplApi23(context, sessionToken);
@@ -268,6 +272,25 @@
}
/**
+ * Get the repeat mode for this session.
+ *
+ * @return The latest repeat mode set to the session, or
+ * {@link PlaybackStateCompat#REPEAT_MODE_NONE} if not set.
+ */
+ public int getRepeatMode() {
+ return mImpl.getRepeatMode();
+ }
+
+ /**
+ * Return whether the shuffle mode is enabled for this session.
+ *
+ * @return {@code true} if the shuffle mode is enabled, {@code false} if disabled or not set.
+ */
+ public boolean isShuffleModeEnabled() {
+ return mImpl.isShuffleModeEnabled();
+ }
+
+ /**
* Get the flags for this session. Flags are defined in
* {@link MediaSessionCompat}.
*
@@ -429,7 +452,9 @@
boolean mRegistered = false;
public Callback() {
- if (android.os.Build.VERSION.SDK_INT >= 21) {
+ if (android.os.Build.VERSION.SDK_INT >= 26) {
+ mCallbackObj = MediaControllerCompatApi26.createCallback(new StubApi26());
+ } else if (android.os.Build.VERSION.SDK_INT >= 21) {
mCallbackObj = MediaControllerCompatApi21.createCallback(new StubApi21());
} else {
mCallbackObj = new StubCompat();
@@ -509,6 +534,25 @@
public void onAudioInfoChanged(PlaybackInfo info) {
}
+ /**
+ * Override to handle changes to the repeat mode.
+ *
+ * @param repeatMode The repeat mode. It should be one of followings:
+ * {@link PlaybackStateCompat#REPEAT_MODE_NONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ALL}
+ */
+ public void onRepeatModeChanged(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ }
+
+ /**
+ * Override to handle changes to the shuffle mode.
+ *
+ * @param enabled {@code true} if the shuffle mode is enabled, {@code false} otherwise.
+ */
+ public void onShuffleModeChanged(boolean enabled) {
+ }
+
@Override
public void binderDied() {
onSessionDestroyed();
@@ -577,6 +621,18 @@
}
}
+ private class StubApi26 extends StubApi21 implements MediaControllerCompatApi26.Callback {
+ @Override
+ public void onRepeatModeChanged(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ Callback.this.onRepeatModeChanged(repeatMode);
+ }
+
+ @Override
+ public void onShuffleModeChanged(boolean enabled) {
+ Callback.this.onShuffleModeChanged(enabled);
+ }
+ }
+
private class StubCompat extends IMediaControllerCallback.Stub {
StubCompat() {
@@ -613,6 +669,16 @@
}
@Override
+ public void onRepeatModeChanged(int repeatMode) throws RemoteException {
+ mHandler.post(MessageHandler.MSG_UPDATE_REPEAT_MODE, repeatMode, null);
+ }
+
+ @Override
+ public void onShuffleModeChanged(boolean enabled) throws RemoteException {
+ mHandler.post(MessageHandler.MSG_UPDATE_SHUFFLE_MODE, enabled, null);
+ }
+
+ @Override
public void onExtrasChanged(Bundle extras) throws RemoteException {
mHandler.post(MessageHandler.MSG_UPDATE_EXTRAS, extras, null);
}
@@ -637,6 +703,8 @@
private static final int MSG_UPDATE_QUEUE_TITLE = 6;
private static final int MSG_UPDATE_EXTRAS = 7;
private static final int MSG_DESTROYED = 8;
+ private static final int MSG_UPDATE_REPEAT_MODE = 9;
+ private static final int MSG_UPDATE_SHUFFLE_MODE = 10;
public MessageHandler(Looper looper) {
super(looper);
@@ -663,6 +731,12 @@
case MSG_UPDATE_QUEUE_TITLE:
onQueueTitleChanged((CharSequence) msg.obj);
break;
+ case MSG_UPDATE_REPEAT_MODE:
+ onRepeatModeChanged((int) msg.obj);
+ break;
+ case MSG_UPDATE_SHUFFLE_MODE:
+ onShuffleModeChanged((boolean) msg.obj);
+ break;
case MSG_UPDATE_EXTRAS:
onExtrasChanged((Bundle) msg.obj);
break;
@@ -838,6 +912,23 @@
public abstract void setRating(RatingCompat rating);
/**
+ * Set the repeat mode for this session.
+ *
+ * @param repeatMode The repeat mode. Must be one of the followings:
+ * {@link PlaybackStateCompat#REPEAT_MODE_NONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ALL}
+ */
+ public abstract void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode);
+
+ /**
+ * Set the shuffle mode for this session.
+ *
+ * @param enabled {@code true} to enable the shuffle mode, {@code false} to disable.
+ */
+ public abstract void setShuffleModeEnabled(boolean enabled);
+
+ /**
* Send a custom action for the {@link MediaSessionCompat} to perform.
*
* @param customAction The action to perform.
@@ -962,6 +1053,8 @@
CharSequence getQueueTitle();
Bundle getExtras();
int getRatingType();
+ int getRepeatMode();
+ boolean isShuffleModeEnabled();
long getFlags();
PlaybackInfo getPlaybackInfo();
PendingIntent getSessionActivity();
@@ -1098,6 +1191,26 @@
}
@Override
+ public int getRepeatMode() {
+ try {
+ return mBinder.getRepeatMode();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in getRepeatMode. " + e);
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean isShuffleModeEnabled() {
+ try {
+ return mBinder.isShuffleModeEnabled();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in isShuffleModeEnabled. " + e);
+ }
+ return false;
+ }
+
+ @Override
public long getFlags() {
try {
return mBinder.getFlags();
@@ -1335,6 +1448,24 @@
}
@Override
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ try {
+ mBinder.setRepeatMode(repeatMode);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in setRepeatMode. " + e);
+ }
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) {
+ try {
+ mBinder.setShuffleModeEnabled(enabled);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in setShuffleModeEnabled. " + e);
+ }
+ }
+
+ @Override
public void sendCustomAction(CustomAction customAction, Bundle args) {
sendCustomAction(customAction.getAction(), args);
}
@@ -1361,7 +1492,9 @@
public MediaControllerImplApi21(Context context, MediaSessionCompat session) {
mControllerObj = MediaControllerCompatApi21.fromToken(context,
session.getSessionToken().getToken());
- requestExtraBinder();
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ requestExtraBinder();
+ }
}
public MediaControllerImplApi21(Context context, MediaSessionCompat.Token sessionToken)
@@ -1369,7 +1502,9 @@
mControllerObj = MediaControllerCompatApi21.fromToken(context,
sessionToken.getToken());
if (mControllerObj == null) throw new RemoteException();
- requestExtraBinder();
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ requestExtraBinder();
+ }
}
@Override
@@ -1386,7 +1521,7 @@
} catch (RemoteException e) {
Log.e(TAG, "Dead object in registerCallback. " + e);
}
- } else {
+ } else if (android.os.Build.VERSION.SDK_INT < 26) {
if (mPendingCallbacks == null) {
mPendingCallbacks = new ArrayList<>();
}
@@ -1407,7 +1542,7 @@
} catch (RemoteException e) {
Log.e(TAG, "Dead object in unregisterCallback. " + e);
}
- } else {
+ } else if (android.os.Build.VERSION.SDK_INT < 26) {
if (mPendingCallbacks == null) {
mPendingCallbacks = new ArrayList<>();
}
@@ -1475,6 +1610,30 @@
}
@Override
+ public int getRepeatMode() {
+ if (mExtraBinder != null) {
+ try {
+ return mExtraBinder.getRepeatMode();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in getRepeatMode. " + e);
+ }
+ }
+ return PlaybackStateCompat.REPEAT_MODE_NONE;
+ }
+
+ @Override
+ public boolean isShuffleModeEnabled() {
+ if (mExtraBinder != null) {
+ try {
+ return mExtraBinder.isShuffleModeEnabled();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in isShuffleModeEnabled. " + e);
+ }
+ }
+ return false;
+ }
+
+ @Override
public long getFlags() {
return MediaControllerCompatApi21.getFlags(mControllerObj);
}
@@ -1602,6 +1761,26 @@
}
@Override
+ public void onRepeatModeChanged(final int repeatMode) throws RemoteException {
+ mCallback.mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onRepeatModeChanged(repeatMode);
+ }
+ });
+ }
+
+ @Override
+ public void onShuffleModeChanged(final boolean enabled) throws RemoteException {
+ mCallback.mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onShuffleModeChanged(enabled);
+ }
+ });
+ }
+
+ @Override
public void onExtrasChanged(Bundle extras) throws RemoteException {
// Will not be called.
throw new AssertionError();
@@ -1698,6 +1877,20 @@
}
@Override
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ Bundle bundle = new Bundle();
+ bundle.putInt(MediaSessionCompat.ACTION_ARGUMENT_REPEAT_MODE, repeatMode);
+ sendCustomAction(MediaSessionCompat.ACTION_SET_REPEAT_MODE, bundle);
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(MediaSessionCompat.ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED, enabled);
+ sendCustomAction(MediaSessionCompat.ACTION_SET_SHUFFLE_MODE_ENABLED, bundle);
+ }
+
+ @Override
public void playFromMediaId(String mediaId, Bundle extras) {
MediaControllerCompatApi21.TransportControls.playFromMediaId(mControlsObj, mediaId,
extras);
@@ -1817,4 +2010,50 @@
}
}
+ static class MediaControllerImplApi26 extends MediaControllerImplApi24 {
+
+ MediaControllerImplApi26(Context context, MediaSessionCompat session) {
+ super(context, session);
+ }
+
+ MediaControllerImplApi26(Context context, MediaSessionCompat.Token sessionToken)
+ throws RemoteException {
+ super(context, sessionToken);
+ }
+
+ @Override
+ public TransportControls getTransportControls() {
+ Object controlsObj = MediaControllerCompatApi21.getTransportControls(mControllerObj);
+ return controlsObj != null ? new TransportControlsApi26(controlsObj) : null;
+ }
+
+ @Override
+ public int getRepeatMode() {
+ return MediaControllerCompatApi26.getRepeatMode(mControllerObj);
+ }
+
+ @Override
+ public boolean isShuffleModeEnabled() {
+ return MediaControllerCompatApi26.isShuffleModeEnabled(mControllerObj);
+ }
+ }
+
+ static class TransportControlsApi26 extends TransportControlsApi24 {
+
+ TransportControlsApi26(Object controlsObj) {
+ super(controlsObj);
+ }
+
+ @Override
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ MediaControllerCompatApi26.TransportControls.setRepeatMode(mControlsObj, repeatMode);
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) {
+ MediaControllerCompatApi26.TransportControls.setShuffleModeEnabled(mControlsObj,
+ enabled);
+ }
+ }
+
}
diff --git a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
index 78b0c50..be17522 100644
--- a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -140,6 +140,18 @@
"android.support.v4.media.session.action.PREPARE_FROM_URI";
/**
+ * Custom action to invoke setRepeatMode() for the forward compatibility.
+ */
+ static final String ACTION_SET_REPEAT_MODE =
+ "android.support.v4.media.session.action.SET_REPEAT_MODE";
+
+ /**
+ * Custom action to invoke setShuffleModeEnabled() for the forward compatibility.
+ */
+ static final String ACTION_SET_SHUFFLE_MODE_ENABLED =
+ "android.support.v4.media.session.action.SET_SHUFFLE_MODE_ENABLED";
+
+ /**
* Argument for use with {@link #ACTION_PREPARE_FROM_MEDIA_ID} indicating media id to play.
*/
static final String ACTION_ARGUMENT_MEDIA_ID =
@@ -164,6 +176,19 @@
static final String ACTION_ARGUMENT_EXTRAS =
"android.support.v4.media.session.action.ARGUMENT_EXTRAS";
+ /**
+ * Argument for use with {@link #ACTION_SET_REPEAT_MODE} indicating repeat mode.
+ */
+ static final String ACTION_ARGUMENT_REPEAT_MODE =
+ "android.support.v4.media.session.action.ARGUMENT_REPEAT_MODE";
+
+ /**
+ * Argument for use with {@link #ACTION_SET_SHUFFLE_MODE_ENABLED} indicating that shuffle mode
+ * is enabled.
+ */
+ static final String ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED =
+ "android.support.v4.media.session.action.ARGUMENT_SHUFFLE_MODE_ENABLED";
+
static final String EXTRA_BINDER = "android.support.v4.media.session.EXTRA_BINDER";
// Maximum size of the bitmap in dp.
@@ -224,6 +249,10 @@
if (android.os.Build.VERSION.SDK_INT >= 21) {
mImpl = new MediaSessionImplApi21(context, tag);
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ // Set default callback to respond to controllers' extra binder requests.
+ setCallback(new Callback() {});
+ }
} else {
mImpl = new MediaSessionImplBase(context, tag, mbrComponent, mbrIntent);
}
@@ -237,7 +266,7 @@
private MediaSessionCompat(Context context, MediaSessionImpl impl) {
mImpl = impl;
- if (android.os.Build.VERSION.SDK_INT >= 21) {
+ if (android.os.Build.VERSION.SDK_INT >= 21 && android.os.Build.VERSION.SDK_INT < 26) {
// Set default callback to respond to controllers' extra binder requests.
setCallback(new Callback() {});
}
@@ -487,6 +516,33 @@
}
/**
+ * Set the repeat mode for this session.
+ * <p>
+ * Note that if this method is not called before, {@link MediaControllerCompat#getRepeatMode}
+ * will return {@link PlaybackStateCompat#REPEAT_MODE_NONE}.
+ *
+ * @param repeatMode The repeat mode. Must be one of the followings:
+ * {@link PlaybackStateCompat#REPEAT_MODE_NONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ALL}
+ */
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ mImpl.setRepeatMode(repeatMode);
+ }
+
+ /**
+ * Set the shuffle mode for this session.
+ * <p>
+ * Note that if this method is not called before,
+ * {@link MediaControllerCompat#isShuffleModeEnabled} will return {@code false}.
+ *
+ * @param enabled {@code true} to enable the shuffle mode, {@code false} to disable.
+ */
+ public void setShuffleModeEnabled(boolean enabled) {
+ mImpl.setShuffleModeEnabled(enabled);
+ }
+
+ /**
* Set some extras that can be associated with the
* {@link MediaSessionCompat}. No assumptions should be made as to how a
* {@link MediaControllerCompat} will handle these extras. Keys should be
@@ -607,7 +663,9 @@
WeakReference<MediaSessionImpl> mSessionImpl;
public Callback() {
- if (android.os.Build.VERSION.SDK_INT >= 24) {
+ if (android.os.Build.VERSION.SDK_INT >= 26) {
+ mCallbackObj = MediaSessionCompatApi26.createCallback(new StubApi26());
+ } else if (android.os.Build.VERSION.SDK_INT >= 24) {
mCallbackObj = MediaSessionCompatApi24.createCallback(new StubApi24());
} else if (android.os.Build.VERSION.SDK_INT >= 23) {
mCallbackObj = MediaSessionCompatApi23.createCallback(new StubApi23());
@@ -773,6 +831,33 @@
}
/**
+ * Override to handle the setting of the repeat mode.
+ * <p>
+ * You should call {@link #setRepeatMode} before end of this method in order to notify
+ * the change to the {@link MediaControllerCompat}, or
+ * {@link MediaControllerCompat#getRepeatMode} could return an invalid value.
+ *
+ * @param repeatMode The repeat mode which is one of followings:
+ * {@link PlaybackStateCompat#REPEAT_MODE_NONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ONE},
+ * {@link PlaybackStateCompat#REPEAT_MODE_ALL}
+ */
+ public void onSetRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ }
+
+ /**
+ * Override to handle the setting of the shuffle mode.
+ * <p>
+ * You should call {@link #setShuffleModeEnabled} before the end of this method in order to
+ * notify the change to the {@link MediaControllerCompat}, or
+ * {@link MediaControllerCompat#isShuffleModeEnabled} could return an invalid value.
+ *
+ * @param enabled true when the shuffle mode is enabled, false otherwise.
+ */
+ public void onSetShuffleModeEnabled(boolean enabled) {
+ }
+
+ /**
* Called when a {@link MediaControllerCompat} wants a
* {@link PlaybackStateCompat.CustomAction} to be performed.
*
@@ -888,6 +973,12 @@
Uri uri = extras.getParcelable(ACTION_ARGUMENT_URI);
Bundle bundle = extras.getBundle(ACTION_ARGUMENT_EXTRAS);
Callback.this.onPrepareFromUri(uri, bundle);
+ } else if (action.equals(ACTION_SET_REPEAT_MODE)) {
+ int repeatMode = extras.getInt(ACTION_ARGUMENT_REPEAT_MODE);
+ Callback.this.onSetRepeatMode(repeatMode);
+ } else if (action.equals(ACTION_SET_SHUFFLE_MODE_ENABLED)) {
+ boolean enabled = extras.getBoolean(ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED);
+ Callback.this.onSetShuffleModeEnabled(enabled);
} else {
Callback.this.onCustomAction(action, extras);
}
@@ -930,6 +1021,18 @@
Callback.this.onPrepareFromUri(uri, extras);
}
}
+
+ private class StubApi26 extends StubApi24 implements MediaSessionCompatApi26.Callback {
+ @Override
+ public void onSetRepeatMode(int repeatMode) {
+ Callback.this.onSetRepeatMode(repeatMode);
+ }
+
+ @Override
+ public void onSetShuffleModeEnabled(boolean enabled) {
+ Callback.this.onSetShuffleModeEnabled(enabled);
+ }
+ }
}
/**
@@ -1267,6 +1370,8 @@
void setQueueTitle(CharSequence title);
void setRatingType(@RatingCompat.Style int type);
+ void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode);
+ void setShuffleModeEnabled(boolean enabled);
void setExtras(Bundle extras);
Object getMediaSession();
@@ -1306,6 +1411,8 @@
List<QueueItem> mQueue;
CharSequence mQueueTitle;
@RatingCompat.Style int mRatingType;
+ @PlaybackStateCompat.RepeatMode int mRepeatMode;
+ boolean mShuffleModeEnabled;
Bundle mExtras;
int mVolumeType;
@@ -1608,6 +1715,22 @@
}
@Override
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ if (mRepeatMode != repeatMode) {
+ mRepeatMode = repeatMode;
+ sendRepeatMode(repeatMode);
+ }
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) {
+ if (mShuffleModeEnabled != enabled) {
+ mShuffleModeEnabled = enabled;
+ sendShuffleModeEnabled(enabled);
+ }
+ }
+
+ @Override
public void setExtras(Bundle extras) {
mExtras = extras;
sendExtras(extras);
@@ -1826,6 +1949,30 @@
mControllerCallbacks.finishBroadcast();
}
+ private void sendRepeatMode(int repeatMode) {
+ int size = mControllerCallbacks.beginBroadcast();
+ for (int i = size - 1; i >= 0; i--) {
+ IMediaControllerCallback cb = mControllerCallbacks.getBroadcastItem(i);
+ try {
+ cb.onRepeatModeChanged(repeatMode);
+ } catch (RemoteException e) {
+ }
+ }
+ mControllerCallbacks.finishBroadcast();
+ }
+
+ private void sendShuffleModeEnabled(boolean enabled) {
+ int size = mControllerCallbacks.beginBroadcast();
+ for (int i = size - 1; i >= 0; i--) {
+ IMediaControllerCallback cb = mControllerCallbacks.getBroadcastItem(i);
+ try {
+ cb.onShuffleModeChanged(enabled);
+ } catch (RemoteException e) {
+ }
+ }
+ mControllerCallbacks.finishBroadcast();
+ }
+
private void sendExtras(Bundle extras) {
int size = mControllerCallbacks.beginBroadcast();
for (int i = size - 1; i >= 0; i--) {
@@ -2022,6 +2169,16 @@
}
@Override
+ public void setRepeatMode(int repeatMode) throws RemoteException {
+ postToHandler(MessageHandler.MSG_SET_REPEAT_MODE, repeatMode);
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) throws RemoteException {
+ postToHandler(MessageHandler.MSG_SET_SHUFFLE_MODE_ENABLED, enabled);
+ }
+
+ @Override
public void sendCustomAction(String action, Bundle args)
throws RemoteException {
postToHandler(MessageHandler.MSG_CUSTOM_ACTION, action, args);
@@ -2063,6 +2220,17 @@
}
@Override
+ @PlaybackStateCompat.RepeatMode
+ public int getRepeatMode() {
+ return mRepeatMode;
+ }
+
+ @Override
+ public boolean isShuffleModeEnabled() {
+ return mShuffleModeEnabled;
+ }
+
+ @Override
public boolean isTransportControlEnabled() {
return (mFlags & FLAG_HANDLES_TRANSPORT_CONTROLS) != 0;
}
@@ -2104,6 +2272,8 @@
private static final int MSG_CUSTOM_ACTION = 20;
private static final int MSG_MEDIA_BUTTON = 21;
private static final int MSG_SET_VOLUME = 22;
+ private static final int MSG_SET_REPEAT_MODE = 23;
+ private static final int MSG_SET_SHUFFLE_MODE_ENABLED = 24;
// KeyEvent constants only available on API 11+
private static final int KEYCODE_MEDIA_PAUSE = 127;
@@ -2211,6 +2381,12 @@
case MSG_SET_VOLUME:
setVolumeTo((int) msg.obj, 0);
break;
+ case MSG_SET_REPEAT_MODE:
+ cb.onSetRepeatMode((int) msg.obj);
+ break;
+ case MSG_SET_SHUFFLE_MODE_ENABLED:
+ cb.onSetShuffleModeEnabled((boolean) msg.obj);
+ break;
}
}
@@ -2287,6 +2463,8 @@
private PlaybackStateCompat mPlaybackState;
@RatingCompat.Style int mRatingType;
+ @PlaybackStateCompat.RepeatMode int mRepeatMode;
+ boolean mShuffleModeEnabled;
public MediaSessionImplApi21(Context context, String tag) {
mSessionObj = MediaSessionCompatApi21.createSession(context, tag);
@@ -2302,7 +2480,9 @@
public void setCallback(Callback callback, Handler handler) {
MediaSessionCompatApi21.setCallback(mSessionObj,
callback == null ? null : callback.mCallbackObj, handler);
- callback.mSessionImpl = new WeakReference<MediaSessionImpl>(this);
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ callback.mSessionImpl = new WeakReference<MediaSessionImpl>(this);
+ }
}
@Override
@@ -2419,6 +2599,46 @@
}
@Override
+ public void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode) {
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ if (mRepeatMode != repeatMode) {
+ mRepeatMode = repeatMode;
+ int size = mExtraControllerCallbacks.beginBroadcast();
+ for (int i = size - 1; i >= 0; i--) {
+ IMediaControllerCallback cb = mExtraControllerCallbacks.getBroadcastItem(i);
+ try {
+ cb.onRepeatModeChanged(repeatMode);
+ } catch (RemoteException e) {
+ }
+ }
+ mExtraControllerCallbacks.finishBroadcast();
+ }
+ } else {
+ MediaSessionCompatApi26.setRepeatMode(mSessionObj, repeatMode);
+ }
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) {
+ if (android.os.Build.VERSION.SDK_INT < 26) {
+ if (mShuffleModeEnabled != enabled) {
+ mShuffleModeEnabled = enabled;
+ int size = mExtraControllerCallbacks.beginBroadcast();
+ for (int i = size - 1; i >= 0; i--) {
+ IMediaControllerCallback cb = mExtraControllerCallbacks.getBroadcastItem(i);
+ try {
+ cb.onShuffleModeChanged(enabled);
+ } catch (RemoteException e) {
+ }
+ }
+ mExtraControllerCallbacks.finishBroadcast();
+ }
+ } else {
+ MediaSessionCompatApi26.setShuffleModeEnabled(mSessionObj, enabled);
+ }
+ }
+
+ @Override
public void setExtras(Bundle extras) {
MediaSessionCompatApi21.setExtras(mSessionObj, extras);
}
@@ -2620,6 +2840,18 @@
}
@Override
+ public void setRepeatMode(int repeatMode) throws RemoteException {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
+ public void setShuffleModeEnabled(boolean enabled) throws RemoteException {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
public void sendCustomAction(String action, Bundle args) throws RemoteException {
// Will not be called.
throw new AssertionError();
@@ -2661,6 +2893,17 @@
}
@Override
+ @PlaybackStateCompat.RepeatMode
+ public int getRepeatMode() {
+ return mRepeatMode;
+ }
+
+ @Override
+ public boolean isShuffleModeEnabled() {
+ return mShuffleModeEnabled;
+ }
+
+ @Override
public boolean isTransportControlEnabled() {
// Will not be called.
throw new AssertionError();
diff --git a/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java b/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
index be6e4b1..5e33d6c 100644
--- a/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
+++ b/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
@@ -49,7 +49,8 @@
ACTION_SKIP_TO_PREVIOUS, ACTION_SKIP_TO_NEXT, ACTION_FAST_FORWARD, ACTION_SET_RATING,
ACTION_SEEK_TO, ACTION_PLAY_PAUSE, ACTION_PLAY_FROM_MEDIA_ID, ACTION_PLAY_FROM_SEARCH,
ACTION_SKIP_TO_QUEUE_ITEM, ACTION_PLAY_FROM_URI, ACTION_PREPARE,
- ACTION_PREPARE_FROM_MEDIA_ID, ACTION_PREPARE_FROM_SEARCH, ACTION_PREPARE_FROM_URI})
+ ACTION_PREPARE_FROM_MEDIA_ID, ACTION_PREPARE_FROM_SEARCH, ACTION_PREPARE_FROM_URI,
+ ACTION_SET_REPEAT_MODE, ACTION_SET_SHUFFLE_MODE_ENABLED})
@Retention(RetentionPolicy.SOURCE)
public @interface Actions {}
@@ -189,6 +190,20 @@
public static final long ACTION_PREPARE_FROM_URI = 1 << 17;
/**
+ * Indicates this session supports the set repeat mode command.
+ *
+ * @see Builder#setActions(long)
+ */
+ public static final long ACTION_SET_REPEAT_MODE = 1 << 18;
+
+ /**
+ * Indicates this session supports the set shuffle mode enabled command.
+ *
+ * @see Builder#setActions(long)
+ */
+ public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 1 << 19;
+
+ /**
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
@@ -300,6 +315,31 @@
*/
public final static long PLAYBACK_POSITION_UNKNOWN = -1;
+ /**
+ * @hide
+ */
+ @IntDef({REPEAT_MODE_NONE, REPEAT_MODE_ONE, REPEAT_MODE_ALL})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RepeatMode {}
+
+ /**
+ * Use this value with {@link MediaControllerCompat.TransportControls#setRepeatMode}
+ * to indicate that the playback will be stopped at the end of the playing media list.
+ */
+ public static final int REPEAT_MODE_NONE = 0;
+
+ /**
+ * Use this value with {@link MediaControllerCompat.TransportControls#setRepeatMode}
+ * to indicate that the playback of the current playing media item will be repeated.
+ */
+ public static final int REPEAT_MODE_ONE = 1;
+
+ /**
+ * Use this value with {@link MediaControllerCompat.TransportControls#setRepeatMode}
+ * to indicate that the playback of the playing media list will be repeated.
+ */
+ public static final int REPEAT_MODE_ALL = 2;
+
// KeyEvent constants only available on API 11+
private static final int KEYCODE_MEDIA_PAUSE = 127;
private static final int KEYCODE_MEDIA_PLAY = 126;
@@ -490,6 +530,8 @@
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_MEDIA_ID}</li>
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_SEARCH}</li>
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_URI}</li>
+ * <li> {@link PlaybackStateCompat#ACTION_SET_REPEAT_MODE}</li>
+ * <li> {@link PlaybackStateCompat#ACTION_SET_SHUFFLE_MODE_ENABLED}</li>
* </ul>
*/
@Actions
@@ -1000,6 +1042,8 @@
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_MEDIA_ID}</li>
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_SEARCH}</li>
* <li> {@link PlaybackStateCompat#ACTION_PREPARE_FROM_URI}</li>
+ * <li> {@link PlaybackStateCompat#ACTION_SET_REPEAT_MODE}</li>
+ * <li> {@link PlaybackStateCompat#ACTION_SET_SHUFFLE_MODE_ENABLED}</li>
* </ul>
*
* @return this
diff --git a/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorCallback.java b/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorCallback.java
index 4abf568..f5b41fd 100644
--- a/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorCallback.java
+++ b/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorCallback.java
@@ -16,12 +16,10 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.KeyEvent;
@RequiresApi(18)
-@TargetApi(18)
interface TransportMediatorCallback {
public void handleKey(KeyEvent key);
public void handleAudioFocusChange(int focusChange);
diff --git a/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorJellybeanMR2.java b/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorJellybeanMR2.java
index aebf7ca..c27a716 100644
--- a/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorJellybeanMR2.java
+++ b/media-compat/jellybean-mr2/android/support/v4/media/TransportMediatorJellybeanMR2.java
@@ -16,7 +16,6 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -31,7 +30,6 @@
import android.view.ViewTreeObserver;
@RequiresApi(18)
-@TargetApi(18)
class TransportMediatorJellybeanMR2 {
final Context mContext;
final AudioManager mAudioManager;
diff --git a/media-compat/jellybean-mr2/android/support/v4/media/session/MediaSessionCompatApi18.java b/media-compat/jellybean-mr2/android/support/v4/media/session/MediaSessionCompatApi18.java
index 3f323a1..cba1a31 100644
--- a/media-compat/jellybean-mr2/android/support/v4/media/session/MediaSessionCompatApi18.java
+++ b/media-compat/jellybean-mr2/android/support/v4/media/session/MediaSessionCompatApi18.java
@@ -15,7 +15,6 @@
*/
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
@@ -26,7 +25,6 @@
import android.util.Log;
@RequiresApi(18)
-@TargetApi(18)
class MediaSessionCompatApi18 {
private static final String TAG = "MediaSessionCompatApi18";
diff --git a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java b/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
index 5efdc58..1d3fa50 100644
--- a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
+++ b/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
@@ -16,12 +16,10 @@
package android.support.v4.media;
-import android.annotation.TargetApi;
import android.media.Rating;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class RatingCompatKitkat {
public static Object newUnratedRating(int ratingStyle) {
return Rating.newUnratedRating(ratingStyle);
diff --git a/media-compat/kitkat/android/support/v4/media/session/MediaSessionCompatApi19.java b/media-compat/kitkat/android/support/v4/media/session/MediaSessionCompatApi19.java
index 94b446b..489344c 100644
--- a/media-compat/kitkat/android/support/v4/media/session/MediaSessionCompatApi19.java
+++ b/media-compat/kitkat/android/support/v4/media/session/MediaSessionCompatApi19.java
@@ -15,7 +15,6 @@
*/
package android.support.v4.media.session;
-import android.annotation.TargetApi;
import android.media.MediaMetadataEditor;
import android.media.MediaMetadataRetriever;
import android.media.Rating;
@@ -24,7 +23,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class MediaSessionCompatApi19 {
/***** PlaybackState actions *****/
private static final long ACTION_SET_RATING = 1 << 7;
diff --git a/percent/src/android/support/percent/PercentFrameLayout.java b/percent/src/android/support/percent/PercentFrameLayout.java
index 679ffbe..9dce2bb 100644
--- a/percent/src/android/support/percent/PercentFrameLayout.java
+++ b/percent/src/android/support/percent/PercentFrameLayout.java
@@ -16,7 +16,6 @@
package android.support.percent;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.RequiresApi;
@@ -147,7 +146,6 @@
}
@RequiresApi(19)
- @TargetApi(19)
public LayoutParams(LayoutParams source) {
// The copy constructor used here is only supported on API 19+.
this((FrameLayout.LayoutParams) source);
diff --git a/samples/Support4Demos/AndroidManifest.xml b/samples/Support4Demos/AndroidManifest.xml
index 67faa66..c48e790 100644
--- a/samples/Support4Demos/AndroidManifest.xml
+++ b/samples/Support4Demos/AndroidManifest.xml
@@ -432,6 +432,20 @@
</intent-filter>
</activity>
+ <!-- (OPTIONAL) use this meta data to indicate which icon should be used in media
+ notifications (for example, when the music changes and the user is
+ looking at another app) -->
+ <meta-data android:name="com.google.android.gms.car.notification.SmallIcon"
+ android:resource="@drawable/ic_notification" />
+
+ <!--
+ (OPTIONAL) use this meta data to override the theme from which Android Auto will
+ look for colors. If you don't set this, Android Auto will look
+ for color attributes in your application theme.
+ -->
+ <meta-data android:name="com.google.android.gms.car.application.theme"
+ android:resource="@style/CarTheme" />
+
<service android:name=".media.MediaBrowserServiceSupport"
android:exported="true" android:process=":service">
<intent-filter>
diff --git a/settings.gradle b/settings.gradle
index e4e79a8..16b7b91 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -85,6 +85,8 @@
include ':support-exifinterface'
project(':support-exifinterface').projectDir = new File(rootDir, 'exifinterface')
+include ':support-wearable'
+project(':support-wearable').projectDir = new File(rootDir, 'wearable')
/////////////////////////////
//
diff --git a/transition/api21/android/support/transition/SceneApi21.java b/transition/api21/android/support/transition/SceneApi21.java
index 1e8f0ba..3997d7f 100644
--- a/transition/api21/android/support/transition/SceneApi21.java
+++ b/transition/api21/android/support/transition/SceneApi21.java
@@ -16,13 +16,11 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewGroup;
@RequiresApi(21)
-@TargetApi(21)
class SceneApi21 extends SceneWrapper {
@Override
diff --git a/transition/api21/android/support/transition/SceneStaticsApi21.java b/transition/api21/android/support/transition/SceneStaticsApi21.java
index 547ca70..a5a2bef 100644
--- a/transition/api21/android/support/transition/SceneStaticsApi21.java
+++ b/transition/api21/android/support/transition/SceneStaticsApi21.java
@@ -16,13 +16,11 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
@RequiresApi(21)
-@TargetApi(21)
class SceneStaticsApi21 extends SceneStaticsImpl {
@Override
diff --git a/transition/api23/android/support/transition/TransitionApi23.java b/transition/api23/android/support/transition/TransitionApi23.java
index 0df0ec5..bf22e4a 100644
--- a/transition/api23/android/support/transition/TransitionApi23.java
+++ b/transition/api23/android/support/transition/TransitionApi23.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class TransitionApi23 extends TransitionKitKat {
@Override
diff --git a/transition/ics/android/support/transition/AutoTransitionPort.java b/transition/ics/android/support/transition/AutoTransitionPort.java
index f3d4583..51c5519 100644
--- a/transition/ics/android/support/transition/AutoTransitionPort.java
+++ b/transition/ics/android/support/transition/AutoTransitionPort.java
@@ -16,7 +16,6 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
/**
@@ -28,7 +27,6 @@
* attributes of {@link android.R.styleable#Transition}.</p>
*/
@RequiresApi(14)
-@TargetApi(14)
class AutoTransitionPort extends TransitionSetPort {
/**
diff --git a/transition/ics/android/support/transition/ChangeBoundsIcs.java b/transition/ics/android/support/transition/ChangeBoundsIcs.java
index 61b7ac1..8a3de7c 100644
--- a/transition/ics/android/support/transition/ChangeBoundsIcs.java
+++ b/transition/ics/android/support/transition/ChangeBoundsIcs.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(14)
-@TargetApi(14)
class ChangeBoundsIcs extends TransitionIcs implements ChangeBoundsInterface {
public ChangeBoundsIcs(TransitionInterface transition) {
diff --git a/transition/ics/android/support/transition/ChangeBoundsPort.java b/transition/ics/android/support/transition/ChangeBoundsPort.java
index d9db2c7..abf3e9e 100644
--- a/transition/ics/android/support/transition/ChangeBoundsPort.java
+++ b/transition/ics/android/support/transition/ChangeBoundsPort.java
@@ -20,7 +20,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
-import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -40,7 +39,6 @@
* attributes of {@link android.R.styleable#Transition}.</p>
*/
@RequiresApi(14)
-@TargetApi(14)
class ChangeBoundsPort extends TransitionPort {
private static final String PROPNAME_BOUNDS = "android:changeBounds:bounds";
diff --git a/transition/ics/android/support/transition/FadeIcs.java b/transition/ics/android/support/transition/FadeIcs.java
index ead8c00..8b145cb 100644
--- a/transition/ics/android/support/transition/FadeIcs.java
+++ b/transition/ics/android/support/transition/FadeIcs.java
@@ -17,12 +17,10 @@
package android.support.transition;
import android.animation.Animator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class FadeIcs extends TransitionIcs implements VisibilityImpl {
public FadeIcs(TransitionInterface transition) {
diff --git a/transition/ics/android/support/transition/FadePort.java b/transition/ics/android/support/transition/FadePort.java
index 79673f5..4481cd1 100644
--- a/transition/ics/android/support/transition/FadePort.java
+++ b/transition/ics/android/support/transition/FadePort.java
@@ -19,7 +19,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.v4.view.ViewCompat;
import android.util.Log;
@@ -57,7 +56,6 @@
* {@link android.R.styleable#Transition}.</p>
*/
@RequiresApi(14)
-@TargetApi(14)
class FadePort extends VisibilityPort {
/**
diff --git a/transition/ics/android/support/transition/RectEvaluator.java b/transition/ics/android/support/transition/RectEvaluator.java
index c85ed18..47d6ebe 100644
--- a/transition/ics/android/support/transition/RectEvaluator.java
+++ b/transition/ics/android/support/transition/RectEvaluator.java
@@ -17,7 +17,6 @@
package android.support.transition;
import android.animation.TypeEvaluator;
-import android.annotation.TargetApi;
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
@@ -25,7 +24,6 @@
* This evaluator can be used to perform type interpolation between <code>Rect</code> values.
*/
@RequiresApi(14)
-@TargetApi(14)
class RectEvaluator implements TypeEvaluator<Rect> {
/**
diff --git a/transition/ics/android/support/transition/SceneIcs.java b/transition/ics/android/support/transition/SceneIcs.java
index 01e0508..8d77bea 100644
--- a/transition/ics/android/support/transition/SceneIcs.java
+++ b/transition/ics/android/support/transition/SceneIcs.java
@@ -16,13 +16,11 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class SceneIcs extends SceneImpl {
/* package */ ScenePort mScene;
diff --git a/transition/ics/android/support/transition/ScenePort.java b/transition/ics/android/support/transition/ScenePort.java
index 34b2d7b..ac25c9d 100644
--- a/transition/ics/android/support/transition/ScenePort.java
+++ b/transition/ics/android/support/transition/ScenePort.java
@@ -16,7 +16,6 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.view.LayoutInflater;
@@ -31,7 +30,6 @@
* scene change.
*/
@RequiresApi(14)
-@TargetApi(14)
final class ScenePort {
Runnable mEnterAction, mExitAction;
diff --git a/transition/ics/android/support/transition/SceneStaticsIcs.java b/transition/ics/android/support/transition/SceneStaticsIcs.java
index bcc7451..343ad4a 100644
--- a/transition/ics/android/support/transition/SceneStaticsIcs.java
+++ b/transition/ics/android/support/transition/SceneStaticsIcs.java
@@ -16,13 +16,11 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class SceneStaticsIcs extends SceneStaticsImpl {
@Override
diff --git a/transition/ics/android/support/transition/TransitionIcs.java b/transition/ics/android/support/transition/TransitionIcs.java
index 832b59e..16d1891 100644
--- a/transition/ics/android/support/transition/TransitionIcs.java
+++ b/transition/ics/android/support/transition/TransitionIcs.java
@@ -18,7 +18,6 @@
import android.animation.Animator;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewGroup;
@@ -27,7 +26,6 @@
import java.util.List;
@RequiresApi(14)
-@TargetApi(14)
class TransitionIcs extends TransitionImpl {
/* package */ TransitionPort mTransition;
diff --git a/transition/ics/android/support/transition/TransitionManagerIcs.java b/transition/ics/android/support/transition/TransitionManagerIcs.java
index d277ae7..0ae9293 100644
--- a/transition/ics/android/support/transition/TransitionManagerIcs.java
+++ b/transition/ics/android/support/transition/TransitionManagerIcs.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(14)
-@TargetApi(14)
class TransitionManagerIcs extends TransitionManagerImpl {
private final TransitionManagerPort mTransitionManager = new TransitionManagerPort();
diff --git a/transition/ics/android/support/transition/TransitionManagerPort.java b/transition/ics/android/support/transition/TransitionManagerPort.java
index 2ea7656..27878dc 100644
--- a/transition/ics/android/support/transition/TransitionManagerPort.java
+++ b/transition/ics/android/support/transition/TransitionManagerPort.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
import android.support.v4.util.ArrayMap;
@@ -32,7 +31,6 @@
import java.util.ArrayList;
@RequiresApi(14)
-@TargetApi(14)
class TransitionManagerPort {
// TODO: how to handle enter/exit?
diff --git a/transition/ics/android/support/transition/TransitionManagerStaticsIcs.java b/transition/ics/android/support/transition/TransitionManagerStaticsIcs.java
index aab7083..1392633 100644
--- a/transition/ics/android/support/transition/TransitionManagerStaticsIcs.java
+++ b/transition/ics/android/support/transition/TransitionManagerStaticsIcs.java
@@ -16,12 +16,10 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class TransitionManagerStaticsIcs extends TransitionManagerStaticsImpl {
@Override
diff --git a/transition/ics/android/support/transition/TransitionPort.java b/transition/ics/android/support/transition/TransitionPort.java
index 98b217d..29327c2 100644
--- a/transition/ics/android/support/transition/TransitionPort.java
+++ b/transition/ics/android/support/transition/TransitionPort.java
@@ -21,7 +21,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
import android.support.v4.util.ArrayMap;
@@ -36,7 +35,6 @@
import java.util.List;
@RequiresApi(14)
-@TargetApi(14)
abstract class TransitionPort implements Cloneable {
static final boolean DBG = false;
diff --git a/transition/ics/android/support/transition/TransitionSetIcs.java b/transition/ics/android/support/transition/TransitionSetIcs.java
index b3fcd8f..ea1b3dd 100644
--- a/transition/ics/android/support/transition/TransitionSetIcs.java
+++ b/transition/ics/android/support/transition/TransitionSetIcs.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(14)
-@TargetApi(14)
class TransitionSetIcs extends TransitionIcs implements TransitionSetImpl {
private TransitionSetPort mTransitionSet;
diff --git a/transition/ics/android/support/transition/TransitionSetPort.java b/transition/ics/android/support/transition/TransitionSetPort.java
index d88e046..402abd9 100644
--- a/transition/ics/android/support/transition/TransitionSetPort.java
+++ b/transition/ics/android/support/transition/TransitionSetPort.java
@@ -19,7 +19,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
import android.util.AndroidRuntimeException;
@@ -29,7 +28,6 @@
import java.util.ArrayList;
@RequiresApi(14)
-@TargetApi(14)
class TransitionSetPort extends TransitionPort {
/**
diff --git a/transition/ics/android/support/transition/TransitionValuesMaps.java b/transition/ics/android/support/transition/TransitionValuesMaps.java
index ddf05da..22ee7e9 100644
--- a/transition/ics/android/support/transition/TransitionValuesMaps.java
+++ b/transition/ics/android/support/transition/TransitionValuesMaps.java
@@ -16,7 +16,6 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.v4.util.ArrayMap;
import android.support.v4.util.LongSparseArray;
@@ -24,7 +23,6 @@
import android.view.View;
@RequiresApi(14)
-@TargetApi(14)
class TransitionValuesMaps {
public ArrayMap<View, TransitionValues> viewValues = new ArrayMap<>();
diff --git a/transition/ics/android/support/transition/ViewGroupOverlay.java b/transition/ics/android/support/transition/ViewGroupOverlay.java
index da91466..ea56b0d 100644
--- a/transition/ics/android/support/transition/ViewGroupOverlay.java
+++ b/transition/ics/android/support/transition/ViewGroupOverlay.java
@@ -16,7 +16,6 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class ViewGroupOverlay extends ViewOverlay {
ViewGroupOverlay(Context context, ViewGroup hostView, View requestingView) {
diff --git a/transition/ics/android/support/transition/ViewOverlay.java b/transition/ics/android/support/transition/ViewOverlay.java
index 8b36850..bc3ee48 100644
--- a/transition/ics/android/support/transition/ViewOverlay.java
+++ b/transition/ics/android/support/transition/ViewOverlay.java
@@ -19,7 +19,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import android.R;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -37,7 +36,6 @@
import java.util.ArrayList;
@RequiresApi(14)
-@TargetApi(14)
class ViewOverlay {
/**
diff --git a/transition/ics/android/support/transition/VisibilityIcs.java b/transition/ics/android/support/transition/VisibilityIcs.java
index f2290cf..3f1d86d 100644
--- a/transition/ics/android/support/transition/VisibilityIcs.java
+++ b/transition/ics/android/support/transition/VisibilityIcs.java
@@ -17,12 +17,10 @@
package android.support.transition;
import android.animation.Animator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
@RequiresApi(14)
-@TargetApi(14)
class VisibilityIcs extends TransitionIcs implements VisibilityImpl {
@Override
diff --git a/transition/ics/android/support/transition/VisibilityPort.java b/transition/ics/android/support/transition/VisibilityPort.java
index e740b19..7831dbb 100644
--- a/transition/ics/android/support/transition/VisibilityPort.java
+++ b/transition/ics/android/support/transition/VisibilityPort.java
@@ -17,7 +17,6 @@
package android.support.transition;
import android.animation.Animator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewGroup;
@@ -34,7 +33,6 @@
* {@link #onDisappear(ViewGroup, TransitionValues, int, TransitionValues, int)},
*/
@RequiresApi(14)
-@TargetApi(14)
abstract class VisibilityPort extends TransitionPort {
private static final String PROPNAME_VISIBILITY = "android:visibility:visibility";
diff --git a/transition/ics/android/support/transition/WindowIdPort.java b/transition/ics/android/support/transition/WindowIdPort.java
index 148332e..4917b81 100644
--- a/transition/ics/android/support/transition/WindowIdPort.java
+++ b/transition/ics/android/support/transition/WindowIdPort.java
@@ -16,7 +16,6 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.os.IBinder;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
@@ -30,7 +29,6 @@
* wrap a window token and use it as an identifier.</p>
*/
@RequiresApi(14)
-@TargetApi(14)
class WindowIdPort {
private final IBinder mToken;
diff --git a/transition/kitkat/android/support/transition/ChangeBoundsKitKat.java b/transition/kitkat/android/support/transition/ChangeBoundsKitKat.java
index e8575d4..623da2e 100644
--- a/transition/kitkat/android/support/transition/ChangeBoundsKitKat.java
+++ b/transition/kitkat/android/support/transition/ChangeBoundsKitKat.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class ChangeBoundsKitKat extends TransitionKitKat implements ChangeBoundsInterface {
public ChangeBoundsKitKat(TransitionInterface transition) {
diff --git a/transition/kitkat/android/support/transition/FadeKitKat.java b/transition/kitkat/android/support/transition/FadeKitKat.java
index 26992af..bef4c2f 100644
--- a/transition/kitkat/android/support/transition/FadeKitKat.java
+++ b/transition/kitkat/android/support/transition/FadeKitKat.java
@@ -19,11 +19,9 @@
import android.animation.Animator;
import android.view.ViewGroup;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class FadeKitKat extends TransitionKitKat implements VisibilityImpl {
public FadeKitKat(TransitionInterface transition) {
diff --git a/transition/kitkat/android/support/transition/SceneKitKat.java b/transition/kitkat/android/support/transition/SceneKitKat.java
index ae7ad10..f55bf3e 100644
--- a/transition/kitkat/android/support/transition/SceneKitKat.java
+++ b/transition/kitkat/android/support/transition/SceneKitKat.java
@@ -23,11 +23,9 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class SceneKitKat extends SceneWrapper {
private static Field sEnterAction;
diff --git a/transition/kitkat/android/support/transition/SceneStaticsKitKat.java b/transition/kitkat/android/support/transition/SceneStaticsKitKat.java
index 94868d0..d83cefc 100644
--- a/transition/kitkat/android/support/transition/SceneStaticsKitKat.java
+++ b/transition/kitkat/android/support/transition/SceneStaticsKitKat.java
@@ -19,11 +19,9 @@
import android.content.Context;
import android.view.ViewGroup;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class SceneStaticsKitKat extends SceneStaticsImpl {
@Override
diff --git a/transition/kitkat/android/support/transition/SceneWrapper.java b/transition/kitkat/android/support/transition/SceneWrapper.java
index cad5db9..54b38f2 100644
--- a/transition/kitkat/android/support/transition/SceneWrapper.java
+++ b/transition/kitkat/android/support/transition/SceneWrapper.java
@@ -18,11 +18,9 @@
import android.view.ViewGroup;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
abstract class SceneWrapper extends SceneImpl {
/* package */ android.transition.Scene mScene;
diff --git a/transition/kitkat/android/support/transition/TransitionKitKat.java b/transition/kitkat/android/support/transition/TransitionKitKat.java
index c608f66..b034712 100644
--- a/transition/kitkat/android/support/transition/TransitionKitKat.java
+++ b/transition/kitkat/android/support/transition/TransitionKitKat.java
@@ -25,11 +25,9 @@
import java.util.ArrayList;
import java.util.List;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class TransitionKitKat extends TransitionImpl {
/* package */ android.transition.Transition mTransition;
diff --git a/transition/kitkat/android/support/transition/TransitionManagerKitKat.java b/transition/kitkat/android/support/transition/TransitionManagerKitKat.java
index 3326600..9999854 100644
--- a/transition/kitkat/android/support/transition/TransitionManagerKitKat.java
+++ b/transition/kitkat/android/support/transition/TransitionManagerKitKat.java
@@ -18,11 +18,9 @@
import android.transition.TransitionManager;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class TransitionManagerKitKat extends TransitionManagerImpl {
private final android.transition.TransitionManager mTransitionManager = new TransitionManager();
diff --git a/transition/kitkat/android/support/transition/TransitionManagerStaticsKitKat.java b/transition/kitkat/android/support/transition/TransitionManagerStaticsKitKat.java
index e7c927b..125de25 100644
--- a/transition/kitkat/android/support/transition/TransitionManagerStaticsKitKat.java
+++ b/transition/kitkat/android/support/transition/TransitionManagerStaticsKitKat.java
@@ -18,11 +18,9 @@
import android.view.ViewGroup;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class TransitionManagerStaticsKitKat extends TransitionManagerStaticsImpl {
@Override
diff --git a/transition/kitkat/android/support/transition/TransitionSetKitKat.java b/transition/kitkat/android/support/transition/TransitionSetKitKat.java
index f880d71..e391c4c 100644
--- a/transition/kitkat/android/support/transition/TransitionSetKitKat.java
+++ b/transition/kitkat/android/support/transition/TransitionSetKitKat.java
@@ -16,11 +16,9 @@
package android.support.transition;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class TransitionSetKitKat extends TransitionKitKat implements TransitionSetImpl {
private android.transition.TransitionSet mTransitionSet;
diff --git a/transition/kitkat/android/support/transition/VisibilityKitKat.java b/transition/kitkat/android/support/transition/VisibilityKitKat.java
index ca603ae..0d495fa 100644
--- a/transition/kitkat/android/support/transition/VisibilityKitKat.java
+++ b/transition/kitkat/android/support/transition/VisibilityKitKat.java
@@ -19,11 +19,9 @@
import android.animation.Animator;
import android.view.ViewGroup;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(19)
-@TargetApi(19)
class VisibilityKitKat extends TransitionKitKat implements VisibilityImpl {
@Override
diff --git a/v13/api23/android/support/v13/app/FragmentCompat23.java b/v13/api23/android/support/v13/app/FragmentCompat23.java
index 1364e84..aa59bf5 100644
--- a/v13/api23/android/support/v13/app/FragmentCompat23.java
+++ b/v13/api23/android/support/v13/app/FragmentCompat23.java
@@ -16,12 +16,10 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class FragmentCompat23 {
public static void requestPermissions(Fragment fragment, String[] permissions,
int requestCode) {
diff --git a/v13/api24/android/support/v13/app/FragmentCompatApi24.java b/v13/api24/android/support/v13/app/FragmentCompatApi24.java
index 2b41d25..caa34b0 100644
--- a/v13/api24/android/support/v13/app/FragmentCompatApi24.java
+++ b/v13/api24/android/support/v13/app/FragmentCompatApi24.java
@@ -17,12 +17,10 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.support.annotation.RequiresApi;
@RequiresApi(24)
-@TargetApi(24)
class FragmentCompatApi24 {
public static void setUserVisibleHint(Fragment f, boolean isVisible) {
f.setUserVisibleHint(isVisible);
diff --git a/v13/api24/android/support/v13/view/DragAndDropPermissionsCompatApi24.java b/v13/api24/android/support/v13/view/DragAndDropPermissionsCompatApi24.java
index fd38b79..1894f69 100644
--- a/v13/api24/android/support/v13/view/DragAndDropPermissionsCompatApi24.java
+++ b/v13/api24/android/support/v13/view/DragAndDropPermissionsCompatApi24.java
@@ -16,14 +16,12 @@
package android.support.v13.view;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.support.annotation.RequiresApi;
import android.view.DragAndDropPermissions;
import android.view.DragEvent;
@RequiresApi(24)
-@TargetApi(24)
class DragAndDropPermissionsCompatApi24 {
public static Object request(Activity activity, DragEvent dragEvent) {
return activity.requestDragAndDropPermissions(dragEvent);
diff --git a/v13/api24/android/support/v13/view/ViewCompatApi24.java b/v13/api24/android/support/v13/view/ViewCompatApi24.java
index 422dbb9..905ea71 100644
--- a/v13/api24/android/support/v13/view/ViewCompatApi24.java
+++ b/v13/api24/android/support/v13/view/ViewCompatApi24.java
@@ -16,13 +16,11 @@
package android.support.v13.view;
-import android.annotation.TargetApi;
import android.content.ClipData;
import android.support.annotation.RequiresApi;
import android.view.View;
@RequiresApi(24)
-@TargetApi(24)
class ViewCompatApi24 {
public static boolean startDragAndDrop(View v, ClipData data,
View.DragShadowBuilder shadowBuilder, Object localState, int flags) {
diff --git a/v13/api25/android/support/v13/view/inputmethod/EditorInfoCompatApi25.java b/v13/api25/android/support/v13/view/inputmethod/EditorInfoCompatApi25.java
index 3eef2ba..321f642 100644
--- a/v13/api25/android/support/v13/view/inputmethod/EditorInfoCompatApi25.java
+++ b/v13/api25/android/support/v13/view/inputmethod/EditorInfoCompatApi25.java
@@ -16,12 +16,10 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.inputmethod.EditorInfo;
@RequiresApi(25)
-@TargetApi(25)
final class EditorInfoCompatApi25 {
public static void setContentMimeTypes(EditorInfo editorInfo, String[] contentMimeTypes) {
editorInfo.contentMimeTypes = contentMimeTypes;
diff --git a/v13/api25/android/support/v13/view/inputmethod/InputConnectionCompatApi25.java b/v13/api25/android/support/v13/view/inputmethod/InputConnectionCompatApi25.java
index 41de756..4f0fb70 100644
--- a/v13/api25/android/support/v13/view/inputmethod/InputConnectionCompatApi25.java
+++ b/v13/api25/android/support/v13/view/inputmethod/InputConnectionCompatApi25.java
@@ -16,7 +16,6 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.view.inputmethod.InputConnection;
@@ -24,7 +23,6 @@
import android.view.inputmethod.InputContentInfo;
@RequiresApi(25)
-@TargetApi(25)
final class InputConnectionCompatApi25 {
public static boolean commitContent(InputConnection ic, Object inputContentInfo, int flags,
diff --git a/v13/api25/android/support/v13/view/inputmethod/InputContentInfoCompatApi25.java b/v13/api25/android/support/v13/view/inputmethod/InputContentInfoCompatApi25.java
index e9b7a01..9295f08 100644
--- a/v13/api25/android/support/v13/view/inputmethod/InputContentInfoCompatApi25.java
+++ b/v13/api25/android/support/v13/view/inputmethod/InputContentInfoCompatApi25.java
@@ -16,14 +16,12 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.content.ClipDescription;
import android.net.Uri;
import android.support.annotation.RequiresApi;
import android.view.inputmethod.InputContentInfo;
@RequiresApi(25)
-@TargetApi(25)
final class InputContentInfoCompatApi25 {
public static Object create(Uri contentUri, ClipDescription description, Uri linkUri) {
diff --git a/v13/ics-mr1/android/support/v13/app/FragmentCompatICSMR1.java b/v13/ics-mr1/android/support/v13/app/FragmentCompatICSMR1.java
index 2da10ae..655dcdc 100644
--- a/v13/ics-mr1/android/support/v13/app/FragmentCompatICSMR1.java
+++ b/v13/ics-mr1/android/support/v13/app/FragmentCompatICSMR1.java
@@ -16,12 +16,10 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.support.annotation.RequiresApi;
@RequiresApi(15)
-@TargetApi(15)
class FragmentCompatICSMR1 {
public static void setUserVisibleHint(Fragment f, boolean isVisible) {
if (f.getFragmentManager() != null) {
diff --git a/v13/ics/android/support/v13/app/FragmentCompatICS.java b/v13/ics/android/support/v13/app/FragmentCompatICS.java
index ff40337..dfb5e30 100644
--- a/v13/ics/android/support/v13/app/FragmentCompatICS.java
+++ b/v13/ics/android/support/v13/app/FragmentCompatICS.java
@@ -16,12 +16,10 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.support.annotation.RequiresApi;
@RequiresApi(14)
-@TargetApi(14)
class FragmentCompatICS {
public static void setMenuVisibility(Fragment f, boolean visible) {
f.setMenuVisibility(visible);
diff --git a/v13/java/android/support/v13/app/ActivityCompat.java b/v13/java/android/support/v13/app/ActivityCompat.java
index 8f9a767..caa1c92 100644
--- a/v13/java/android/support/v13/app/ActivityCompat.java
+++ b/v13/java/android/support/v13/app/ActivityCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.support.annotation.RequiresApi;
import android.support.v13.view.DragAndDropPermissionsCompat;
@@ -27,7 +26,6 @@
* introduced after API level 13 in a backwards compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public class ActivityCompat extends android.support.v4.app.ActivityCompat {
/**
diff --git a/v13/java/android/support/v13/app/FragmentCompat.java b/v13/java/android/support/v13/app/FragmentCompat.java
index 99e4a80..c2ef88e 100644
--- a/v13/java/android/support/v13/app/FragmentCompat.java
+++ b/v13/java/android/support/v13/app/FragmentCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -34,7 +33,6 @@
* API level 13 in a backwards compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public class FragmentCompat {
interface FragmentCompatImpl {
void setMenuVisibility(Fragment f, boolean visible);
diff --git a/v13/java/android/support/v13/app/FragmentPagerAdapter.java b/v13/java/android/support/v13/app/FragmentPagerAdapter.java
index 78d8b89..49f5222 100644
--- a/v13/java/android/support/v13/app/FragmentPagerAdapter.java
+++ b/v13/java/android/support/v13/app/FragmentPagerAdapter.java
@@ -16,7 +16,6 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -65,7 +64,6 @@
* complete}
*/
@RequiresApi(13)
-@TargetApi(13)
public abstract class FragmentPagerAdapter extends PagerAdapter {
private static final String TAG = "FragmentPagerAdapter";
private static final boolean DEBUG = false;
diff --git a/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java b/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
index 2579688..6d4904e 100644
--- a/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
+++ b/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
@@ -16,7 +16,6 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -68,7 +67,6 @@
* complete}
*/
@RequiresApi(13)
-@TargetApi(13)
public abstract class FragmentStatePagerAdapter extends PagerAdapter {
private static final String TAG = "FragmentStatePagerAdapter";
private static final boolean DEBUG = false;
diff --git a/v13/java/android/support/v13/app/FragmentTabHost.java b/v13/java/android/support/v13/app/FragmentTabHost.java
index ba5d659..0743d59 100644
--- a/v13/java/android/support/v13/app/FragmentTabHost.java
+++ b/v13/java/android/support/v13/app/FragmentTabHost.java
@@ -16,7 +16,6 @@
package android.support.v13.app;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -42,7 +41,6 @@
* normally use this, instead using action bar tabs.
*/
@RequiresApi(13)
-@TargetApi(13)
public class FragmentTabHost extends TabHost
implements TabHost.OnTabChangeListener {
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
diff --git a/v13/java/android/support/v13/view/DragAndDropPermissionsCompat.java b/v13/java/android/support/v13/view/DragAndDropPermissionsCompat.java
index 46484da..0a6ac06 100644
--- a/v13/java/android/support/v13/view/DragAndDropPermissionsCompat.java
+++ b/v13/java/android/support/v13/view/DragAndDropPermissionsCompat.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -30,7 +29,6 @@
* introduced after API level 13 in a backwards compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public final class DragAndDropPermissionsCompat {
interface DragAndDropPermissionsCompatImpl {
diff --git a/v13/java/android/support/v13/view/DragStartHelper.java b/v13/java/android/support/v13/view/DragStartHelper.java
index 16c54b9..d32f9f7 100644
--- a/v13/java/android/support/v13/view/DragStartHelper.java
+++ b/v13/java/android/support/v13/view/DragStartHelper.java
@@ -17,7 +17,6 @@
package android.support.v13.view;
-import android.annotation.TargetApi;
import android.graphics.Point;
import android.support.annotation.RequiresApi;
import android.support.v4.view.InputDeviceCompat;
@@ -71,7 +70,6 @@
* </pre>
*/
@RequiresApi(13)
-@TargetApi(13)
public class DragStartHelper {
final private View mView;
final private OnDragStartListener mListener;
diff --git a/v13/java/android/support/v13/view/ViewCompat.java b/v13/java/android/support/v13/view/ViewCompat.java
index 0fd3234..d66f964 100644
--- a/v13/java/android/support/v13/view/ViewCompat.java
+++ b/v13/java/android/support/v13/view/ViewCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.view;
-import android.annotation.TargetApi;
import android.content.ClipData;
import android.support.annotation.RequiresApi;
import android.support.v4.os.BuildCompat;
@@ -27,7 +26,6 @@
* level 13 in a backwards compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public class ViewCompat extends android.support.v4.view.ViewCompat {
interface ViewCompatImpl {
boolean startDragAndDrop(View v, ClipData data, View.DragShadowBuilder shadowBuilder,
diff --git a/v13/java/android/support/v13/view/inputmethod/EditorInfoCompat.java b/v13/java/android/support/v13/view/inputmethod/EditorInfoCompat.java
index 17976a8..fd5ac3a 100644
--- a/v13/java/android/support/v13/view/inputmethod/EditorInfoCompat.java
+++ b/v13/java/android/support/v13/view/inputmethod/EditorInfoCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -30,7 +29,6 @@
* compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public final class EditorInfoCompat {
private interface EditorInfoCompatImpl {
diff --git a/v13/java/android/support/v13/view/inputmethod/InputConnectionCompat.java b/v13/java/android/support/v13/view/inputmethod/InputConnectionCompat.java
index 5f7b012..ac50a25 100644
--- a/v13/java/android/support/v13/view/inputmethod/InputConnectionCompat.java
+++ b/v13/java/android/support/v13/view/inputmethod/InputConnectionCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.content.ClipDescription;
import android.net.Uri;
import android.os.Bundle;
@@ -35,7 +34,6 @@
* backwards compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public final class InputConnectionCompat {
private interface InputConnectionCompatImpl {
diff --git a/v13/java/android/support/v13/view/inputmethod/InputContentInfoCompat.java b/v13/java/android/support/v13/view/inputmethod/InputContentInfoCompat.java
index 9379020..b1a44ce 100644
--- a/v13/java/android/support/v13/view/inputmethod/InputContentInfoCompat.java
+++ b/v13/java/android/support/v13/view/inputmethod/InputContentInfoCompat.java
@@ -16,7 +16,6 @@
package android.support.v13.view.inputmethod;
-import android.annotation.TargetApi;
import android.content.ClipDescription;
import android.net.Uri;
import android.support.annotation.NonNull;
@@ -29,7 +28,6 @@
* compatible fashion.
*/
@RequiresApi(13)
-@TargetApi(13)
public final class InputContentInfoCompat {
private interface InputContentInfoCompatImpl {
diff --git a/v13/tests/java/android/support/v13/view/DragStartHelperTest.java b/v13/tests/java/android/support/v13/view/DragStartHelperTest.java
index ad6625f..c35501c 100644
--- a/v13/tests/java/android/support/v13/view/DragStartHelperTest.java
+++ b/v13/tests/java/android/support/v13/view/DragStartHelperTest.java
@@ -26,7 +26,6 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import android.annotation.TargetApi;
import android.app.Instrumentation;
import android.graphics.Point;
import android.os.Build;
@@ -53,7 +52,6 @@
import org.mockito.InOrder;
@RequiresApi(13)
-@TargetApi(13)
@SmallTest
@RunWith(AndroidJUnit4.class)
public class DragStartHelperTest {
diff --git a/v17/leanback/api21/android/support/v17/leanback/transition/FadeAndShortSlide.java b/v17/leanback/api21/android/support/v17/leanback/transition/FadeAndShortSlide.java
index 76e237b..0e135a9 100644
--- a/v17/leanback/api21/android/support/v17/leanback/transition/FadeAndShortSlide.java
+++ b/v17/leanback/api21/android/support/v17/leanback/transition/FadeAndShortSlide.java
@@ -20,7 +20,6 @@
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -42,7 +41,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
public class FadeAndShortSlide extends Visibility {
diff --git a/v17/leanback/api21/android/support/v17/leanback/transition/SlideNoPropagation.java b/v17/leanback/api21/android/support/v17/leanback/transition/SlideNoPropagation.java
index 5158992..46c67ac 100644
--- a/v17/leanback/api21/android/support/v17/leanback/transition/SlideNoPropagation.java
+++ b/v17/leanback/api21/android/support/v17/leanback/transition/SlideNoPropagation.java
@@ -15,7 +15,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -26,7 +25,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
public class SlideNoPropagation extends Slide {
diff --git a/v17/leanback/api21/android/support/v17/leanback/transition/TransitionHelperApi21.java b/v17/leanback/api21/android/support/v17/leanback/transition/TransitionHelperApi21.java
index 1fe0874..4734c26 100644
--- a/v17/leanback/api21/android/support/v17/leanback/transition/TransitionHelperApi21.java
+++ b/v17/leanback/api21/android/support/v17/leanback/transition/TransitionHelperApi21.java
@@ -14,7 +14,6 @@
package android.support.v17.leanback.transition;
import android.R;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Rect;
import android.support.annotation.RequiresApi;
@@ -27,7 +26,6 @@
import android.view.animation.AnimationUtils;
@RequiresApi(21)
-@TargetApi(21)
final class TransitionHelperApi21 {
TransitionHelperApi21() {
diff --git a/v17/leanback/api21/android/support/v17/leanback/transition/TranslationAnimationCreator.java b/v17/leanback/api21/android/support/v17/leanback/transition/TranslationAnimationCreator.java
index 15b9081..157118e 100644
--- a/v17/leanback/api21/android/support/v17/leanback/transition/TranslationAnimationCreator.java
+++ b/v17/leanback/api21/android/support/v17/leanback/transition/TranslationAnimationCreator.java
@@ -6,7 +6,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.graphics.Path;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -23,7 +22,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
class TranslationAnimationCreator {
diff --git a/v17/leanback/api21/android/support/v17/leanback/widget/RoundedRectHelperApi21.java b/v17/leanback/api21/android/support/v17/leanback/widget/RoundedRectHelperApi21.java
index c0ba7dd..df1f0f3 100644
--- a/v17/leanback/api21/android/support/v17/leanback/widget/RoundedRectHelperApi21.java
+++ b/v17/leanback/api21/android/support/v17/leanback/widget/RoundedRectHelperApi21.java
@@ -13,7 +13,6 @@
*/
package android.support.v17.leanback.widget;
-import android.annotation.TargetApi;
import android.graphics.Outline;
import android.support.annotation.RequiresApi;
import android.util.SparseArray;
@@ -21,7 +20,6 @@
import android.view.ViewOutlineProvider;
@RequiresApi(21)
-@TargetApi(21)
class RoundedRectHelperApi21 {
private static SparseArray<ViewOutlineProvider> sRoundedRectProvider;
diff --git a/v17/leanback/api21/android/support/v17/leanback/widget/ShadowHelperApi21.java b/v17/leanback/api21/android/support/v17/leanback/widget/ShadowHelperApi21.java
index 35f2c51..4e03d8a 100644
--- a/v17/leanback/api21/android/support/v17/leanback/widget/ShadowHelperApi21.java
+++ b/v17/leanback/api21/android/support/v17/leanback/widget/ShadowHelperApi21.java
@@ -13,14 +13,12 @@
*/
package android.support.v17.leanback.widget;
-import android.annotation.TargetApi;
import android.graphics.Outline;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewOutlineProvider;
@RequiresApi(21)
-@TargetApi(21)
class ShadowHelperApi21 {
static class ShadowImpl {
diff --git a/v17/leanback/api23/android/support/v17/leanback/app/PermissionHelper23.java b/v17/leanback/api23/android/support/v17/leanback/app/PermissionHelper23.java
index 82ba369..4d5d5ad 100644
--- a/v17/leanback/api23/android/support/v17/leanback/app/PermissionHelper23.java
+++ b/v17/leanback/api23/android/support/v17/leanback/app/PermissionHelper23.java
@@ -13,11 +13,9 @@
*/
package android.support.v17.leanback.app;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(23)
-@TargetApi(23)
class PermissionHelper23 {
public static void requestPermissions(android.app.Fragment fragment, String[] permissions,
diff --git a/v17/leanback/api23/android/support/v17/leanback/widget/ForegroundHelperApi23.java b/v17/leanback/api23/android/support/v17/leanback/widget/ForegroundHelperApi23.java
index f00f43d..e02eea9 100644
--- a/v17/leanback/api23/android/support/v17/leanback/widget/ForegroundHelperApi23.java
+++ b/v17/leanback/api23/android/support/v17/leanback/widget/ForegroundHelperApi23.java
@@ -13,13 +13,11 @@
*/
package android.support.v17.leanback.widget;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
import android.view.View;
@RequiresApi(23)
-@TargetApi(23)
class ForegroundHelperApi23 {
public static Drawable getForeground(View view) {
diff --git a/v17/leanback/jbmr2/android/support/v17/leanback/widget/ShadowHelperJbmr2.java b/v17/leanback/jbmr2/android/support/v17/leanback/widget/ShadowHelperJbmr2.java
index 4ee6b29..8cd0054 100644
--- a/v17/leanback/jbmr2/android/support/v17/leanback/widget/ShadowHelperJbmr2.java
+++ b/v17/leanback/jbmr2/android/support/v17/leanback/widget/ShadowHelperJbmr2.java
@@ -13,7 +13,6 @@
*/
package android.support.v17.leanback.widget;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.v17.leanback.R;
import android.view.LayoutInflater;
@@ -21,7 +20,6 @@
import android.view.ViewGroup;
@RequiresApi(18)
-@TargetApi(18)
class ShadowHelperJbmr2 {
static class ShadowImpl {
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat.java b/v17/leanback/kitkat/android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat.java
index b6a82b7..872e836 100644
--- a/v17/leanback/kitkat/android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat.java
+++ b/v17/leanback/kitkat/android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat.java
@@ -13,7 +13,6 @@
*/
package android.support.v17.leanback.transition;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.support.v17.leanback.R;
@@ -21,7 +20,6 @@
import android.view.animation.AnimationUtils;
@RequiresApi(19)
-@TargetApi(19)
class LeanbackTransitionHelperKitKat {
static public Object loadTitleInTransition(Context context) {
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/transition/Scale.java b/v17/leanback/kitkat/android/support/v17/leanback/transition/Scale.java
index 5fbf414..2fe4c9a 100644
--- a/v17/leanback/kitkat/android/support/v17/leanback/transition/Scale.java
+++ b/v17/leanback/kitkat/android/support/v17/leanback/transition/Scale.java
@@ -17,7 +17,6 @@
import android.animation.Animator;
import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.view.ViewGroup;
@@ -25,7 +24,6 @@
import android.transition.TransitionValues;
@RequiresApi(19)
-@TargetApi(19)
class Scale extends Transition {
private static final String PROPNAME_SCALE = "android:leanback:scale";
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/transition/SlideKitkat.java b/v17/leanback/kitkat/android/support/v17/leanback/transition/SlideKitkat.java
index e8e4c10..2d74958 100644
--- a/v17/leanback/kitkat/android/support/v17/leanback/transition/SlideKitkat.java
+++ b/v17/leanback/kitkat/android/support/v17/leanback/transition/SlideKitkat.java
@@ -19,7 +19,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.RequiresApi;
@@ -40,7 +39,6 @@
* This is a limited Slide implementation for KitKat without propagation support.
*/
@RequiresApi(19)
-@TargetApi(19)
class SlideKitkat extends Visibility {
private static final String TAG = "SlideKitkat";
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/transition/TransitionHelperKitkat.java b/v17/leanback/kitkat/android/support/v17/leanback/transition/TransitionHelperKitkat.java
index 777b34b..38a80f2 100644
--- a/v17/leanback/kitkat/android/support/v17/leanback/transition/TransitionHelperKitkat.java
+++ b/v17/leanback/kitkat/android/support/v17/leanback/transition/TransitionHelperKitkat.java
@@ -15,7 +15,6 @@
import android.animation.Animator;
import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.transition.AutoTransition;
@@ -36,7 +35,6 @@
import java.util.HashMap;
@RequiresApi(19)
-@TargetApi(19)
final class TransitionHelperKitkat {
TransitionHelperKitkat() {
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java b/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java
index 49cb35e..64c02a7 100644
--- a/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java
+++ b/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java
@@ -15,13 +15,11 @@
*/
package android.support.v17.leanback.widget;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
import android.view.View;
@RequiresApi(19)
-@TargetApi(19)
class BackgroundHelperKitkat {
public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {
diff --git a/v17/leanback/res/animator/lb_onboarding_description_enter.xml b/v17/leanback/res/animator/lb_onboarding_description_enter.xml
index 5f26cdd..3cb5843 100644
--- a/v17/leanback/res/animator/lb_onboarding_description_enter.xml
+++ b/v17/leanback/res/animator/lb_onboarding_description_enter.xml
@@ -21,11 +21,13 @@
android:valueFrom="0.0"
android:valueTo="1.0"
android:duration="533"
+ android:startOffset="@integer/lb_onboarding_header_description_delay"
android:interpolator="@android:interpolator/fast_out_slow_in" />
<objectAnimator
android:propertyName="translationY"
android:valueFrom="60dp"
android:valueTo="0dp"
android:duration="533"
+ android:startOffset="@integer/lb_onboarding_header_description_delay"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
diff --git a/v17/leanback/res/animator/lb_onboarding_title_enter.xml b/v17/leanback/res/animator/lb_onboarding_title_enter.xml
index 5f26cdd..9b65b48 100644
--- a/v17/leanback/res/animator/lb_onboarding_title_enter.xml
+++ b/v17/leanback/res/animator/lb_onboarding_title_enter.xml
@@ -21,11 +21,13 @@
android:valueFrom="0.0"
android:valueTo="1.0"
android:duration="533"
+ android:startOffset="@integer/lb_onboarding_header_title_delay"
android:interpolator="@android:interpolator/fast_out_slow_in" />
<objectAnimator
android:propertyName="translationY"
android:valueFrom="60dp"
android:valueTo="0dp"
android:duration="533"
+ android:startOffset="@integer/lb_onboarding_header_title_delay"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
diff --git a/v17/leanback/res/layout/lb_onboarding_fragment.xml b/v17/leanback/res/layout/lb_onboarding_fragment.xml
index 04bd0ea..823fe74 100644
--- a/v17/leanback/res/layout/lb_onboarding_fragment.xml
+++ b/v17/leanback/res/layout/lb_onboarding_fragment.xml
@@ -28,10 +28,15 @@
android:layout_height="match_parent"
android:visibility="gone" />
+ <ImageView
+ android:id="@+id/main_icon"
+ style="?attr/onboardingMainIconStyle"/>
+
<LinearLayout
android:id="@+id/page_container"
style="?attr/onboardingHeaderStyle"
android:visibility="gone">
+
<TextView
android:id="@+id/title"
style="?attr/onboardingTitleStyle"/>
diff --git a/v17/leanback/res/values/attrs.xml b/v17/leanback/res/values/attrs.xml
index 870d958..26c5ef7 100644
--- a/v17/leanback/res/values/attrs.xml
+++ b/v17/leanback/res/values/attrs.xml
@@ -559,6 +559,10 @@
<!-- Theme attribute for the style of the logo in onboarding screen. Default is
{@link android.support.v17.leanback.R.style#Widget_Leanback_OnboardingLogoStyle}.-->
<attr name="onboardingLogoStyle" format="reference" />
+
+ <!-- Theme attribute for the style of the main icon in onboarding fragment. Default is
+ {@link android.support.v17.leanback.R.style#Widget_Leanback_OnboardingMainIconStyle}.-->
+ <attr name="onboardingMainIconStyle" format="reference" />
</declare-styleable>
<declare-styleable name="PagingIndicator">
diff --git a/v17/leanback/res/values/integers.xml b/v17/leanback/res/values/integers.xml
index c9f3384..b8bdb18 100644
--- a/v17/leanback/res/values/integers.xml
+++ b/v17/leanback/res/values/integers.xml
@@ -29,6 +29,8 @@
<integer name="lb_playback_rows_fade_out_ms">250</integer>
<integer name="lb_playback_rows_fade_delay_ms">100</integer>
<integer name="lb_playback_controls_show_time_ms">3000</integer>
+ <integer name="lb_onboarding_header_title_delay">33</integer>
+ <integer name="lb_onboarding_header_description_delay">33</integer>
<!-- Gravity.LEFT -->
<integer name="slideEdgeStart">3</integer>
diff --git a/v17/leanback/res/values/styles.xml b/v17/leanback/res/values/styles.xml
index dbe090a..d10260d 100644
--- a/v17/leanback/res/values/styles.xml
+++ b/v17/leanback/res/values/styles.xml
@@ -778,4 +778,15 @@
<item name="android:contentDescription">@null</item>
</style>
+ <!-- Styles for the main icon in OnboardingFragment. -->
+ <style name="Widget.Leanback.OnboardingMainIconStyle">
+ <item name="android:layout_width">64dp</item>
+ <item name="android:layout_height">64dp</item>
+ <item name="android:layout_above">@id/page_container</item>
+ <item name="android:layout_centerHorizontal">true</item>
+ <item name="android:layout_marginBottom">16dp</item>
+ <item name="android:contentDescription">@null</item>
+ <item name="android:visibility">gone</item>
+ </style>
+
</resources>
diff --git a/v17/leanback/res/values/themes.xml b/v17/leanback/res/values/themes.xml
index c6d6baa..e5b98f6 100644
--- a/v17/leanback/res/values/themes.xml
+++ b/v17/leanback/res/values/themes.xml
@@ -213,6 +213,7 @@
<item name="onboardingPageIndicatorStyle">@style/Widget.Leanback.OnboardingPageIndicatorStyle</item>
<item name="onboardingStartButtonStyle">@style/Widget.Leanback.OnboardingStartButtonStyle</item>
<item name="onboardingLogoStyle">@style/Widget.Leanback.OnboardingLogoStyle</item>
+ <item name="onboardingMainIconStyle">@style/Widget.Leanback.OnboardingMainIconStyle</item>
</style>
</resources>
diff --git a/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java b/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
index 0459ab6..d67cdf2 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
@@ -53,8 +53,8 @@
* <p>
* <h3>Building the screen</h3>
* The view structure of onboarding screen is composed of the common parts and custom parts. The
- * common parts are composed of title, description and page navigator and the custom parts are
- * composed of background, contents and foreground.
+ * common parts are composed of icon, title, description and page navigator and the custom parts
+ * are composed of background, contents and foreground.
* <p>
* To build the screen views, the inherited class should override:
* <ul>
@@ -102,8 +102,12 @@
* If the inherited class provides neither the logo image nor the animation, the logo animation will
* be omitted.
* <h4>Page enter animation</h4>
- * After logo animation finishes, page enter animation starts. The application can provide the
- * animations of custom views by overriding {@link #onCreateEnterAnimation}.
+ * After logo animation finishes, page enter animation starts, which causes the header section -
+ * title and description views to fade and slide in. Users can override the default
+ * fade + slide animation by overriding {@link #onCreateTitleAnimator()} &
+ * {@link #onCreateDescriptionAnimator()}. By default we don't animate the custom views but users
+ * can provide animation by overriding {@link #onCreateEnterAnimation}.
+ *
* <h4>Page change animation</h4>
* When the page changes, the default animations of the title and description are played. The
* inherited class can override {@link #onPageChanged} to start the custom animations.
@@ -149,8 +153,6 @@
private static final boolean DEBUG = false;
private static final long LOGO_SPLASH_PAUSE_DURATION_MS = 1333;
- private static final long START_DELAY_TITLE_MS = 33;
- private static final long START_DELAY_DESCRIPTION_MS = 33;
private static final long HEADER_ANIMATION_DURATION_MS = 417;
private static final long DESCRIPTION_START_DELAY_MS = 33;
@@ -171,6 +173,10 @@
PagingIndicator mPageIndicator;
View mStartButton;
private ImageView mLogoView;
+ // Optional icon that can be displayed on top of the header section.
+ private ImageView mMainIconView;
+ private int mIconResourceId;
+
TextView mTitleView;
TextView mDescriptionView;
@@ -264,6 +270,7 @@
mStartButton = view.findViewById(R.id.button_start);
mStartButton.setOnClickListener(mOnClickListener);
mStartButton.setOnKeyListener(mOnKeyListener);
+ mMainIconView = (ImageView) view.findViewById(R.id.main_icon);
mLogoView = (ImageView) view.findViewById(R.id.logo);
mTitleView = (TextView) view.findViewById(R.id.title);
mDescriptionView = (TextView) view.findViewById(R.id.description);
@@ -410,6 +417,12 @@
private void initializeViews(View container) {
mLogoView.setVisibility(View.GONE);
+
+ if (mIconResourceId != 0) {
+ mMainIconView.setImageResource(mIconResourceId);
+ mMainIconView.setVisibility(View.VISIBLE);
+ }
+
// Create custom views.
LayoutInflater inflater = getThemeInflater(LayoutInflater.from(getActivity()));
ViewGroup backgroundContainer = (ViewGroup) container.findViewById(
@@ -457,27 +470,31 @@
R.animator.lb_onboarding_page_indicator_enter);
animator.setTarget(getPageCount() <= 1 ? mStartButton : mPageIndicator);
animators.add(animator);
- // Header title
- View view = getActivity().findViewById(R.id.title);
- view.setAlpha(0);
- animator = AnimatorInflater.loadAnimator(getActivity(),
- R.animator.lb_onboarding_title_enter);
- animator.setStartDelay(START_DELAY_TITLE_MS);
- animator.setTarget(view);
- animators.add(animator);
- // Header description
- view = getActivity().findViewById(R.id.description);
- view.setAlpha(0);
- animator = AnimatorInflater.loadAnimator(getActivity(),
- R.animator.lb_onboarding_description_enter);
- animator.setStartDelay(START_DELAY_DESCRIPTION_MS);
- animator.setTarget(view);
- animators.add(animator);
+
+ animator = onCreateTitleAnimator();
+ if (animator != null) {
+ // Header title.
+ animator.setTarget(mTitleView);
+ animators.add(animator);
+ }
+
+ animator = onCreateDescriptionAnimator();
+ if (animator != null) {
+ // Header description.
+ animator.setTarget(mDescriptionView);
+ animators.add(animator);
+ }
+
// Customized animation by the inherited class.
Animator customAnimator = onCreateEnterAnimation();
if (customAnimator != null) {
animators.add(customAnimator);
}
+
+ // Return if we don't have any animations.
+ if (animators.isEmpty()) {
+ return;
+ }
mAnimator = new AnimatorSet();
mAnimator.playTogether(animators);
mAnimator.start();
@@ -486,6 +503,24 @@
}
/**
+ * Provides the entry animation for description view. This allows users to override the
+ * default fade and slide animation. Returning null will disable the animation.
+ */
+ protected Animator onCreateDescriptionAnimator() {
+ return AnimatorInflater.loadAnimator(getActivity(),
+ R.animator.lb_onboarding_description_enter);
+ }
+
+ /**
+ * Provides the entry animation for title view. This allows users to override the
+ * default fade and slide animation. Returning null will disable the animation.
+ */
+ protected Animator onCreateTitleAnimator() {
+ return AnimatorInflater.loadAnimator(getActivity(),
+ R.animator.lb_onboarding_title_enter);
+ }
+
+ /**
* Returns the page count.
*
* @return The page count.
@@ -690,4 +725,22 @@
}
return animator;
}
+
+ /**
+ * Sets the resource id for the main icon.
+ */
+ public final void setIconResouceId(int resourceId) {
+ this.mIconResourceId = resourceId;
+ if (mMainIconView != null) {
+ mMainIconView.setImageResource(resourceId);
+ mMainIconView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the resource id of the main icon.
+ */
+ public final int getIconResourceId() {
+ return mIconResourceId;
+ }
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
index 32163b0..75daf31 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
@@ -56,8 +56,8 @@
* <p>
* <h3>Building the screen</h3>
* The view structure of onboarding screen is composed of the common parts and custom parts. The
- * common parts are composed of title, description and page navigator and the custom parts are
- * composed of background, contents and foreground.
+ * common parts are composed of icon, title, description and page navigator and the custom parts
+ * are composed of background, contents and foreground.
* <p>
* To build the screen views, the inherited class should override:
* <ul>
@@ -105,8 +105,12 @@
* If the inherited class provides neither the logo image nor the animation, the logo animation will
* be omitted.
* <h4>Page enter animation</h4>
- * After logo animation finishes, page enter animation starts. The application can provide the
- * animations of custom views by overriding {@link #onCreateEnterAnimation}.
+ * After logo animation finishes, page enter animation starts, which causes the header section -
+ * title and description views to fade and slide in. Users can override the default
+ * fade + slide animation by overriding {@link #onCreateTitleAnimator()} &
+ * {@link #onCreateDescriptionAnimator()}. By default we don't animate the custom views but users
+ * can provide animation by overriding {@link #onCreateEnterAnimation}.
+ *
* <h4>Page change animation</h4>
* When the page changes, the default animations of the title and description are played. The
* inherited class can override {@link #onPageChanged} to start the custom animations.
@@ -152,8 +156,6 @@
private static final boolean DEBUG = false;
private static final long LOGO_SPLASH_PAUSE_DURATION_MS = 1333;
- private static final long START_DELAY_TITLE_MS = 33;
- private static final long START_DELAY_DESCRIPTION_MS = 33;
private static final long HEADER_ANIMATION_DURATION_MS = 417;
private static final long DESCRIPTION_START_DELAY_MS = 33;
@@ -174,6 +176,10 @@
PagingIndicator mPageIndicator;
View mStartButton;
private ImageView mLogoView;
+ // Optional icon that can be displayed on top of the header section.
+ private ImageView mMainIconView;
+ private int mIconResourceId;
+
TextView mTitleView;
TextView mDescriptionView;
@@ -267,6 +273,7 @@
mStartButton = view.findViewById(R.id.button_start);
mStartButton.setOnClickListener(mOnClickListener);
mStartButton.setOnKeyListener(mOnKeyListener);
+ mMainIconView = (ImageView) view.findViewById(R.id.main_icon);
mLogoView = (ImageView) view.findViewById(R.id.logo);
mTitleView = (TextView) view.findViewById(R.id.title);
mDescriptionView = (TextView) view.findViewById(R.id.description);
@@ -413,6 +420,12 @@
private void initializeViews(View container) {
mLogoView.setVisibility(View.GONE);
+
+ if (mIconResourceId != 0) {
+ mMainIconView.setImageResource(mIconResourceId);
+ mMainIconView.setVisibility(View.VISIBLE);
+ }
+
// Create custom views.
LayoutInflater inflater = getThemeInflater(LayoutInflater.from(getActivity()));
ViewGroup backgroundContainer = (ViewGroup) container.findViewById(
@@ -460,27 +473,31 @@
R.animator.lb_onboarding_page_indicator_enter);
animator.setTarget(getPageCount() <= 1 ? mStartButton : mPageIndicator);
animators.add(animator);
- // Header title
- View view = getActivity().findViewById(R.id.title);
- view.setAlpha(0);
- animator = AnimatorInflater.loadAnimator(getActivity(),
- R.animator.lb_onboarding_title_enter);
- animator.setStartDelay(START_DELAY_TITLE_MS);
- animator.setTarget(view);
- animators.add(animator);
- // Header description
- view = getActivity().findViewById(R.id.description);
- view.setAlpha(0);
- animator = AnimatorInflater.loadAnimator(getActivity(),
- R.animator.lb_onboarding_description_enter);
- animator.setStartDelay(START_DELAY_DESCRIPTION_MS);
- animator.setTarget(view);
- animators.add(animator);
+
+ animator = onCreateTitleAnimator();
+ if (animator != null) {
+ // Header title.
+ animator.setTarget(mTitleView);
+ animators.add(animator);
+ }
+
+ animator = onCreateDescriptionAnimator();
+ if (animator != null) {
+ // Header description.
+ animator.setTarget(mDescriptionView);
+ animators.add(animator);
+ }
+
// Customized animation by the inherited class.
Animator customAnimator = onCreateEnterAnimation();
if (customAnimator != null) {
animators.add(customAnimator);
}
+
+ // Return if we don't have any animations.
+ if (animators.isEmpty()) {
+ return;
+ }
mAnimator = new AnimatorSet();
mAnimator.playTogether(animators);
mAnimator.start();
@@ -489,6 +506,24 @@
}
/**
+ * Provides the entry animation for description view. This allows users to override the
+ * default fade and slide animation. Returning null will disable the animation.
+ */
+ protected Animator onCreateDescriptionAnimator() {
+ return AnimatorInflater.loadAnimator(getActivity(),
+ R.animator.lb_onboarding_description_enter);
+ }
+
+ /**
+ * Provides the entry animation for title view. This allows users to override the
+ * default fade and slide animation. Returning null will disable the animation.
+ */
+ protected Animator onCreateTitleAnimator() {
+ return AnimatorInflater.loadAnimator(getActivity(),
+ R.animator.lb_onboarding_title_enter);
+ }
+
+ /**
* Returns the page count.
*
* @return The page count.
@@ -693,4 +728,22 @@
}
return animator;
}
+
+ /**
+ * Sets the resource id for the main icon.
+ */
+ public final void setIconResouceId(int resourceId) {
+ this.mIconResourceId = resourceId;
+ if (mMainIconView != null) {
+ mMainIconView.setImageResource(resourceId);
+ mMainIconView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the resource id of the main icon.
+ */
+ public final int getIconResourceId() {
+ return mIconResourceId;
+ }
}
diff --git a/v17/leanback/src/android/support/v17/leanback/graphics/CompositeDrawable.java b/v17/leanback/src/android/support/v17/leanback/graphics/CompositeDrawable.java
index 8077115..c469457 100644
--- a/v17/leanback/src/android/support/v17/leanback/graphics/CompositeDrawable.java
+++ b/v17/leanback/src/android/support/v17/leanback/graphics/CompositeDrawable.java
@@ -15,7 +15,6 @@
*/
package android.support.v17.leanback.graphics;
-import android.annotation.TargetApi;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
@@ -34,7 +33,6 @@
* for this class, it updates those of it's children.
* @hide
*/
-@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class CompositeDrawable extends Drawable implements Drawable.Callback {
static class CompositeState extends Drawable.ConstantState {
@@ -235,7 +233,6 @@
* Wrapper class holding a drawable object and {@link BoundsRule} to update drawable bounds
* when parent bound changes.
*/
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public static final class ChildDrawable {
private final BoundsRule mBoundsRule;
private final Drawable mDrawable;
diff --git a/v17/leanback/src/android/support/v17/leanback/transition/ParallaxTransition.java b/v17/leanback/src/android/support/v17/leanback/transition/ParallaxTransition.java
index 03af625..d7e945b 100644
--- a/v17/leanback/src/android/support/v17/leanback/transition/ParallaxTransition.java
+++ b/v17/leanback/src/android/support/v17/leanback/transition/ParallaxTransition.java
@@ -20,7 +20,6 @@
import android.animation.Animator;
import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -43,7 +42,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
public class ParallaxTransition extends Visibility {
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/app/DetailsFragmentTest.java b/v17/leanback/tests/java/android/support/v17/leanback/app/DetailsFragmentTest.java
index c6662ab..cc8d31e 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/app/DetailsFragmentTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/app/DetailsFragmentTest.java
@@ -21,6 +21,7 @@
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.support.test.filters.MediumTest;
+import android.support.test.filters.Suppress;
import android.support.test.rule.ActivityTestRule;
import android.support.v17.leanback.R;
import android.support.v17.leanback.graphics.CompositeDrawable;
@@ -46,6 +47,7 @@
new ActivityTestRule<>(DetailsFragmentTestActivity.class, false, false);
private DetailsFragmentTestActivity mActivity;
+ @Suppress // Disabled due to flakiness.
@Test
public void parallaxTest() throws Throwable {
final int mDefaultVerticalOffset = -300;
diff --git a/v17/preference-leanback/api21/android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout.java b/v17/preference-leanback/api21/android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout.java
index 893af77..0396469 100644
--- a/v17/preference-leanback/api21/android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout.java
+++ b/v17/preference-leanback/api21/android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Outline;
import android.support.annotation.RequiresApi;
@@ -35,7 +34,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
public class OutlineOnlyWithChildrenFrameLayout extends FrameLayout {
diff --git a/v17/preference-leanback/api21/android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java b/v17/preference-leanback/api21/android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java
index e258686..955ab9e 100644
--- a/v17/preference-leanback/api21/android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java
+++ b/v17/preference-leanback/api21/android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.app.Fragment;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -30,7 +29,6 @@
* @hide
*/
@RequiresApi(21)
-@TargetApi(21)
@RestrictTo(LIBRARY_GROUP)
public class LeanbackPreferenceFragmentTransitionHelperApi21 {
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java b/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java
index 1fe51b8..52b7b2e 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
@@ -499,7 +498,6 @@
* Delegate if SDK version is between Honeycomb and ICS
*/
@RequiresApi(11)
- @TargetApi(11)
private static class HoneycombDelegate implements Delegate {
final Activity mActivity;
@@ -548,7 +546,6 @@
* Delegate if SDK version is between ICS and JBMR2
*/
@RequiresApi(14)
- @TargetApi(14)
private static class IcsDelegate extends HoneycombDelegate {
IcsDelegate(Activity activity) {
@@ -572,7 +569,6 @@
* Delegate if SDK version is JB MR2 or newer
*/
@RequiresApi(18)
- @TargetApi(18)
private static class JellybeanMr2Delegate implements Delegate {
final Activity mActivity;
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java b/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
index 1463ecb..92cf866 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
@@ -18,7 +18,6 @@
package android.support.v7.app;
import android.R;
-import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.content.res.TypedArray;
@@ -42,7 +41,6 @@
* Moved from Support-v4
*/
@RequiresApi(11)
-@TargetApi(11)
class ActionBarDrawerToggleHoneycomb {
private static final String TAG = "ActionBarDrawerToggleHoneycomb";
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
index 6da5250..5cf58bd 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
@@ -39,7 +38,6 @@
import android.view.Window;
@RequiresApi(9)
-@TargetApi(9)
abstract class AppCompatDelegateImplBase extends AppCompatDelegate {
static final boolean DEBUG = false;
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java
index 9f162dd..e282324 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.view.KeyboardShortcutGroup;
@@ -26,7 +25,6 @@
import java.util.List;
@RequiresApi(24)
-@TargetApi(24)
class AppCompatDelegateImplN extends AppCompatDelegateImplV23 {
AppCompatDelegateImplN(Context context, Window window, AppCompatCallback callback) {
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
index f3fda8e..736b160 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
@@ -24,7 +23,6 @@
import android.view.Window;
@RequiresApi(11)
-@TargetApi(11)
class AppCompatDelegateImplV11 extends AppCompatDelegateImplV9 {
AppCompatDelegateImplV11(Context context, Window window, AppCompatCallback callback) {
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
index 152f379..1559691 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -38,7 +37,6 @@
import android.view.Window;
@RequiresApi(14)
-@TargetApi(14)
class AppCompatDelegateImplV14 extends AppCompatDelegateImplV11 {
private static final String KEY_LOCAL_NIGHT_MODE = "appcompat:local_night_mode";
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java
index d061114..0095b55 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.UiModeManager;
import android.content.Context;
import android.support.annotation.RequiresApi;
@@ -24,7 +23,6 @@
import android.view.Window;
@RequiresApi(23)
-@TargetApi(23)
class AppCompatDelegateImplV23 extends AppCompatDelegateImplV14 {
private final UiModeManager mUiModeManager;
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
index b52c0ba..824deb9 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
@@ -20,7 +20,6 @@
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.Window.FEATURE_OPTIONS_PANEL;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
@@ -93,7 +92,6 @@
import android.widget.TextView;
@RequiresApi(9)
-@TargetApi(9)
class AppCompatDelegateImplV9 extends AppCompatDelegateImplBase
implements MenuBuilder.Callback, LayoutInflaterFactory {
diff --git a/v7/appcompat/src/android/support/v7/app/NotificationCompat.java b/v7/appcompat/src/android/support/v7/app/NotificationCompat.java
index bd72879..0f3b4f1 100644
--- a/v7/appcompat/src/android/support/v7/app/NotificationCompat.java
+++ b/v7/appcompat/src/android/support/v7/app/NotificationCompat.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
@@ -85,7 +84,6 @@
}
@RequiresApi(24)
- @TargetApi(24)
private static void addStyleToBuilderApi24(NotificationBuilderWithBuilderAccessor builder,
android.support.v4.app.NotificationCompat.Builder b) {
if (b.mStyle instanceof DecoratedCustomViewStyle) {
@@ -98,7 +96,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
private static RemoteViews addStyleGetContentViewLollipop(
NotificationBuilderWithBuilderAccessor builder,
android.support.v4.app.NotificationCompat.Builder b) {
@@ -138,7 +135,6 @@
}
@RequiresApi(16)
- @TargetApi(16)
private static RemoteViews addStyleGetContentViewJellybean(
NotificationBuilderWithBuilderAccessor builder,
android.support.v4.app.NotificationCompat.Builder b) {
@@ -226,7 +222,6 @@
}
@RequiresApi(14)
- @TargetApi(14)
private static RemoteViews addStyleGetContentViewIcs(
NotificationBuilderWithBuilderAccessor builder,
android.support.v4.app.NotificationCompat.Builder b) {
@@ -251,7 +246,6 @@
}
@RequiresApi(16)
- @TargetApi(16)
private static void addBigStyleToBuilderJellybean(Notification n,
android.support.v4.app.NotificationCompat.Builder b) {
if (b.mStyle instanceof MediaStyle) {
@@ -292,7 +286,6 @@
}
@RequiresApi(16)
- @TargetApi(16)
private static void addDecoratedBigStyleToBuilderJellybean(Notification n,
android.support.v4.app.NotificationCompat.Builder b) {
RemoteViews bigContentView = b.getBigContentView();
@@ -311,7 +304,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
private static void addDecoratedHeadsUpToBuilderLollipop(Notification n,
android.support.v4.app.NotificationCompat.Builder b) {
RemoteViews headsUp = b.getHeadsUpContentView();
@@ -330,7 +322,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
private static void addBigStyleToBuilderLollipop(Notification n,
android.support.v4.app.NotificationCompat.Builder b) {
RemoteViews innerView = b.getBigContentView() != null
@@ -359,7 +350,6 @@
}
@RequiresApi(21)
- @TargetApi(21)
private static void addHeadsUpToBuilderLollipop(Notification n,
android.support.v4.app.NotificationCompat.Builder b) {
RemoteViews innerView = b.getHeadsUpContentView() != null
diff --git a/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl21.java b/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl21.java
index 9b0f028..2a4bf7b 100644
--- a/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl21.java
+++ b/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl21.java
@@ -16,14 +16,12 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.media.session.MediaSession;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationBuilderWithBuilderAccessor;
@RequiresApi(21)
-@TargetApi(21)
class NotificationCompatImpl21 {
public static void addMediaStyle(NotificationBuilderWithBuilderAccessor b,
diff --git a/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl24.java b/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl24.java
index a65751b..c48e286 100644
--- a/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl24.java
+++ b/v7/appcompat/src/android/support/v7/app/NotificationCompatImpl24.java
@@ -16,13 +16,11 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationBuilderWithBuilderAccessor;
@RequiresApi(24)
-@TargetApi(24)
class NotificationCompatImpl24 {
public static void addDecoratedCustomViewStyle(NotificationBuilderWithBuilderAccessor b) {
diff --git a/v7/appcompat/src/android/support/v7/app/NotificationCompatImplBase.java b/v7/appcompat/src/android/support/v7/app/NotificationCompatImplBase.java
index a6e73ef..c1432c9 100644
--- a/v7/appcompat/src/android/support/v7/app/NotificationCompatImplBase.java
+++ b/v7/appcompat/src/android/support/v7/app/NotificationCompatImplBase.java
@@ -16,7 +16,6 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
@@ -47,7 +46,6 @@
* contentView and bigContentView of the notification.
*/
@RequiresApi(9)
-@TargetApi(9)
class NotificationCompatImplBase {
static final int MAX_MEDIA_BUTTONS_IN_COMPACT = 3;
@@ -55,7 +53,6 @@
private static final int MAX_ACTION_BUTTONS = 3;
@RequiresApi(11)
- @TargetApi(11)
public static <T extends NotificationCompatBase.Action> RemoteViews overrideContentViewMedia(
NotificationBuilderWithBuilderAccessor builder,
Context context, CharSequence contentTitle, CharSequence contentText,
@@ -75,7 +72,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
private static <T extends NotificationCompatBase.Action> RemoteViews generateContentViewMedia(
Context context, CharSequence contentTitle, CharSequence contentText,
CharSequence contentInfo, int number, Bitmap largeIcon, CharSequence subText,
@@ -121,7 +117,6 @@
}
@RequiresApi(16)
- @TargetApi(16)
public static <T extends NotificationCompatBase.Action> void overrideMediaBigContentView(
Notification n, Context context, CharSequence contentTitle, CharSequence contentText,
CharSequence contentInfo, int number, Bitmap largeIcon, CharSequence subText,
@@ -137,7 +132,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
public static <T extends NotificationCompatBase.Action> RemoteViews generateMediaBigView(
Context context, CharSequence contentTitle, CharSequence contentText,
CharSequence contentInfo, int number, Bitmap largeIcon, CharSequence subText,
@@ -169,7 +163,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
private static RemoteViews generateMediaActionButton(Context context,
NotificationCompatBase.Action action) {
final boolean tombstone = (action.getActionIntent() == null);
@@ -186,7 +179,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
private static int getBigMediaLayoutResource(boolean decoratedCustomView, int actionCount) {
if (actionCount <= 3) {
return decoratedCustomView
diff --git a/v7/appcompat/src/android/support/v7/app/NotificationCompatImplJellybean.java b/v7/appcompat/src/android/support/v7/app/NotificationCompatImplJellybean.java
index b600d43..2fca0f0 100644
--- a/v7/appcompat/src/android/support/v7/app/NotificationCompatImplJellybean.java
+++ b/v7/appcompat/src/android/support/v7/app/NotificationCompatImplJellybean.java
@@ -16,13 +16,11 @@
package android.support.v7.app;
-import android.annotation.TargetApi;
import android.app.Notification;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationBuilderWithBuilderAccessor;
@RequiresApi(16)
-@TargetApi(16)
class NotificationCompatImplJellybean {
public static void addBigTextStyle(NotificationBuilderWithBuilderAccessor b,
diff --git a/v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java b/v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java
index ff929ba..3ab5f81 100644
--- a/v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java
+++ b/v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.RestrictTo;
@@ -40,7 +39,6 @@
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
-@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class SupportActionModeWrapper extends ActionMode {
final Context mContext;
diff --git a/v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java b/v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java
index 4fbdd50..7df9844 100644
--- a/v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java
+++ b/v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
import android.view.ActionMode;
@@ -60,7 +59,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public boolean dispatchKeyShortcutEvent(KeyEvent event) {
return mWrapped.dispatchKeyShortcutEvent(event);
@@ -77,7 +75,6 @@
}
@RequiresApi(12)
- @TargetApi(12)
@Override
public boolean dispatchGenericMotionEvent(MotionEvent event) {
return mWrapped.dispatchGenericMotionEvent(event);
@@ -144,7 +141,6 @@
}
@RequiresApi(23)
- @TargetApi(23)
@Override
public boolean onSearchRequested(SearchEvent searchEvent) {
return mWrapped.onSearchRequested(searchEvent);
@@ -156,35 +152,30 @@
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
return mWrapped.onWindowStartingActionMode(callback);
}
@RequiresApi(23)
- @TargetApi(23)
@Override
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {
return mWrapped.onWindowStartingActionMode(callback, type);
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public void onActionModeStarted(ActionMode mode) {
mWrapped.onActionModeStarted(mode);
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public void onActionModeFinished(ActionMode mode) {
mWrapped.onActionModeFinished(mode);
}
@RequiresApi(24)
- @TargetApi(24)
@Override
public void onProvideKeyboardShortcuts(
List<KeyboardShortcutGroup> data, Menu menu, int deviceId) {
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java b/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java
index 4ba3c89..842ba97 100644
--- a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java
+++ b/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -42,7 +41,6 @@
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
-@TargetApi(14)
@RequiresApi(14)
public class MenuItemWrapperICS extends BaseMenuWrapper<SupportMenuItem> implements MenuItem {
static final String LOG_TAG = "MenuItemWrapper";
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java b/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java
index 07db707..267903b 100644
--- a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java
+++ b/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -32,7 +31,6 @@
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
-@TargetApi(16)
@RequiresApi(16)
class MenuItemWrapperJB extends MenuItemWrapperICS {
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java b/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java
index 25208af..9672449 100644
--- a/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java
+++ b/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java
@@ -16,7 +16,6 @@
package android.support.v7.view.menu;
-import android.annotation.TargetApi;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -30,7 +29,6 @@
/**
* Wraps a support {@link SupportMenu} as a framework {@link android.view.Menu}
*/
-@TargetApi(14)
@RequiresApi(14)
class MenuWrapperICS extends BaseMenuWrapper<SupportMenu> implements Menu {
diff --git a/v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java b/v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java
index 55245f6..b7478a9 100644
--- a/v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java
+++ b/v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
@@ -34,7 +33,6 @@
*/
@RestrictTo(LIBRARY_GROUP)
@RequiresApi(14)
-@TargetApi(14)
class SubMenuWrapperICS extends MenuWrapperICS implements SubMenu {
SubMenuWrapperICS(Context context, SupportSubMenu subMenu) {
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java b/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java
index d8b0f2d..5e86497 100644
--- a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java
+++ b/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java
@@ -16,14 +16,12 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
@RequiresApi(9)
-@TargetApi(9)
class ActionBarBackgroundDrawable extends Drawable {
final ActionBarContainer mContainer;
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java b/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
index 56f2a09..989fc4c 100644
--- a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
+++ b/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
@@ -16,13 +16,11 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.graphics.Outline;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
@RequiresApi(21)
-@TargetApi(21)
class ActionBarBackgroundDrawableV21 extends ActionBarBackgroundDrawable {
public ActionBarBackgroundDrawableV21(ActionBarContainer container) {
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java b/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
index f7fa23f..23c6308 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
@@ -171,7 +170,6 @@
}
@RequiresApi(14)
- @TargetApi(14)
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
index 50a17cd..d42a4fc 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
@@ -24,7 +24,6 @@
import static android.support.v7.widget.ThemeUtils.getThemeAttrColorStateList;
import android.annotation.SuppressLint;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -740,7 +739,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
private static class AvdcInflateDelegate implements InflateDelegate {
AvdcInflateDelegate() {
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java b/v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java
index c9e778d..097ce91 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.AttrRes;
@@ -50,7 +49,6 @@
init(context, attrs, defStyleAttr, 0);
}
- @TargetApi(11)
public AppCompatPopupWindow(@NonNull Context context, @Nullable AttributeSet attrs,
@AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
@@ -95,7 +93,6 @@
super.showAsDropDown(anchor, xoff, yoff);
}
- @TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void showAsDropDown(View anchor, int xoff, int yoff, int gravity) {
if (COMPAT_OVERLAP_ANCHOR && mOverlapAnchor) {
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
index bac1cb8..724fbd4 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
@@ -16,7 +16,6 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.support.annotation.RequiresApi;
@@ -62,7 +61,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
@Override
public void jumpDrawablesToCurrentState() {
super.jumpDrawablesToCurrentState();
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
index 93e1851..e1e62ee 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
@@ -16,7 +16,6 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.PorterDuff;
@@ -143,7 +142,6 @@
}
@RequiresApi(11)
- @TargetApi(11)
void jumpDrawablesToCurrentState() {
if (mTickMark != null) {
mTickMark.jumpToCurrentState();
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
index c210036..0dc5759 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
@@ -16,7 +16,6 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
@@ -29,7 +28,6 @@
import android.widget.TextView;
@RequiresApi(9)
-@TargetApi(9)
class AppCompatTextHelper {
static AppCompatTextHelper create(TextView textView) {
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
index e022756..d5cc872 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
@@ -16,7 +16,6 @@
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
@@ -26,7 +25,6 @@
import android.widget.TextView;
@RequiresApi(17)
-@TargetApi(17)
class AppCompatTextHelperV17 extends AppCompatTextHelper {
private TintInfo mDrawableStartTint;
private TintInfo mDrawableEndTint;
diff --git a/v7/appcompat/src/android/support/v7/widget/ForwardingListener.java b/v7/appcompat/src/android/support/v7/widget/ForwardingListener.java
index 80fbbd4..fa5e02c 100644
--- a/v7/appcompat/src/android/support/v7/widget/ForwardingListener.java
+++ b/v7/appcompat/src/android/support/v7/widget/ForwardingListener.java
@@ -18,7 +18,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import android.annotation.TargetApi;
import android.os.Build;
import android.os.SystemClock;
import android.support.annotation.RequiresApi;
@@ -88,7 +87,6 @@
}
@RequiresApi(12)
- @TargetApi(12)
private void addDetachListenerApi12(View src) {
src.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
@Override
diff --git a/v7/appcompat/src/android/support/v7/widget/SearchView.java b/v7/appcompat/src/android/support/v7/widget/SearchView.java
index 40793df..eb2a053 100644
--- a/v7/appcompat/src/android/support/v7/widget/SearchView.java
+++ b/v7/appcompat/src/android/support/v7/widget/SearchView.java
@@ -19,7 +19,6 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import static android.support.v7.widget.SuggestionsAdapter.getColumnString;
-import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.app.SearchManager;
import android.app.SearchableInfo;
@@ -402,7 +401,6 @@
updateQueryHint();
}
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void addOnLayoutChangeListenerToDropDownAnchorSDK11() {
mDropDownAnchor.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
diff --git a/v7/cardview/api21/android/support/v7/widget/CardViewApi21.java b/v7/cardview/api21/android/support/v7/widget/CardViewApi21.java
index b4f2460..7942895 100644
--- a/v7/cardview/api21/android/support/v7/widget/CardViewApi21.java
+++ b/v7/cardview/api21/android/support/v7/widget/CardViewApi21.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.support.annotation.Nullable;
@@ -23,7 +22,6 @@
import android.view.View;
@RequiresApi(21)
-@TargetApi(21)
class CardViewApi21 implements CardViewImpl {
@Override
diff --git a/v7/cardview/api21/android/support/v7/widget/RoundRectDrawable.java b/v7/cardview/api21/android/support/v7/widget/RoundRectDrawable.java
index 7e85b7f..09cc205 100644
--- a/v7/cardview/api21/android/support/v7/widget/RoundRectDrawable.java
+++ b/v7/cardview/api21/android/support/v7/widget/RoundRectDrawable.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -41,7 +40,6 @@
* Simpler and uses less resources compared to GradientDrawable or ShapeDrawable.
*/
@RequiresApi(21)
-@TargetApi(21)
class RoundRectDrawable extends Drawable {
private float mRadius;
private final Paint mPaint;
diff --git a/v7/cardview/base/android/support/v7/widget/CardViewDelegate.java b/v7/cardview/base/android/support/v7/widget/CardViewDelegate.java
index 2573631..b710b46 100644
--- a/v7/cardview/base/android/support/v7/widget/CardViewDelegate.java
+++ b/v7/cardview/base/android/support/v7/widget/CardViewDelegate.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.support.annotation.RequiresApi;
import android.view.View;
@@ -26,7 +25,6 @@
* Necessary to resolve circular dependency between base CardView and platform implementations.
*/
@RequiresApi(9)
-@TargetApi(9)
interface CardViewDelegate {
void setCardBackground(Drawable drawable);
Drawable getCardBackground();
diff --git a/v7/cardview/base/android/support/v7/widget/CardViewImpl.java b/v7/cardview/base/android/support/v7/widget/CardViewImpl.java
index f36bd2b..d9439ae 100644
--- a/v7/cardview/base/android/support/v7/widget/CardViewImpl.java
+++ b/v7/cardview/base/android/support/v7/widget/CardViewImpl.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.support.annotation.Nullable;
@@ -25,7 +24,6 @@
* Interface for platform specific CardView implementations.
*/
@RequiresApi(9)
-@TargetApi(9)
interface CardViewImpl {
void initialize(CardViewDelegate cardView, Context context, ColorStateList backgroundColor,
float radius, float elevation, float maxElevation);
diff --git a/v7/cardview/gingerbread/android/support/v7/widget/CardViewGingerbread.java b/v7/cardview/gingerbread/android/support/v7/widget/CardViewGingerbread.java
index f430213..298505b 100644
--- a/v7/cardview/gingerbread/android/support/v7/widget/CardViewGingerbread.java
+++ b/v7/cardview/gingerbread/android/support/v7/widget/CardViewGingerbread.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
@@ -27,7 +26,6 @@
import android.support.annotation.RequiresApi;
@RequiresApi(9)
-@TargetApi(9)
class CardViewGingerbread implements CardViewImpl {
final RectF sCornerRect = new RectF();
diff --git a/v7/cardview/gingerbread/android/support/v7/widget/RoundRectDrawableWithShadow.java b/v7/cardview/gingerbread/android/support/v7/widget/RoundRectDrawableWithShadow.java
index 32bf877..3b33ccf 100644
--- a/v7/cardview/gingerbread/android/support/v7/widget/RoundRectDrawableWithShadow.java
+++ b/v7/cardview/gingerbread/android/support/v7/widget/RoundRectDrawableWithShadow.java
@@ -15,7 +15,6 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Canvas;
@@ -38,7 +37,6 @@
* A rounded rectangle drawable which also includes a shadow around.
*/
@RequiresApi(9)
-@TargetApi(9)
class RoundRectDrawableWithShadow extends Drawable {
// used to calculate content padding
final static double COS_45 = Math.cos(Math.toRadians(45));
diff --git a/v7/cardview/jellybean-mr1/android/support/v7/widget/CardViewJellybeanMr1.java b/v7/cardview/jellybean-mr1/android/support/v7/widget/CardViewJellybeanMr1.java
index a9c0e0a..a9ed03f 100644
--- a/v7/cardview/jellybean-mr1/android/support/v7/widget/CardViewJellybeanMr1.java
+++ b/v7/cardview/jellybean-mr1/android/support/v7/widget/CardViewJellybeanMr1.java
@@ -15,14 +15,12 @@
*/
package android.support.v7.widget;
-import android.annotation.TargetApi;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.RequiresApi;
@RequiresApi(17)
-@TargetApi(17)
class CardViewJellybeanMr1 extends CardViewGingerbread {
@Override
diff --git a/v7/mediarouter/api24/android/support/v7/media/MediaRouterApi24.java b/v7/mediarouter/api24/android/support/v7/media/MediaRouterApi24.java
index 48bef17..0b1eda9 100644
--- a/v7/mediarouter/api24/android/support/v7/media/MediaRouterApi24.java
+++ b/v7/mediarouter/api24/android/support/v7/media/MediaRouterApi24.java
@@ -16,11 +16,9 @@
package android.support.v7.media;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(24)
-@TargetApi(24)
final class MediaRouterApi24 {
public static final class RouteInfo {
public static int getDeviceType(Object routeObj) {
diff --git a/v7/mediarouter/jellybean-mr1/android/support/v7/media/MediaRouterJellybeanMr1.java b/v7/mediarouter/jellybean-mr1/android/support/v7/media/MediaRouterJellybeanMr1.java
index 3a42a2f..6fc5ba5 100644
--- a/v7/mediarouter/jellybean-mr1/android/support/v7/media/MediaRouterJellybeanMr1.java
+++ b/v7/mediarouter/jellybean-mr1/android/support/v7/media/MediaRouterJellybeanMr1.java
@@ -16,7 +16,6 @@
package android.support.v7.media;
-import android.annotation.TargetApi;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.Build;
@@ -30,7 +29,6 @@
import java.lang.reflect.Method;
@RequiresApi(17)
-@TargetApi(17)
final class MediaRouterJellybeanMr1 {
private static final String TAG = "MediaRouterJellybeanMr1";
diff --git a/v7/mediarouter/jellybean-mr2/android/support/v7/media/MediaRouterJellybeanMr2.java b/v7/mediarouter/jellybean-mr2/android/support/v7/media/MediaRouterJellybeanMr2.java
index 6799faa..8abfc7f 100644
--- a/v7/mediarouter/jellybean-mr2/android/support/v7/media/MediaRouterJellybeanMr2.java
+++ b/v7/mediarouter/jellybean-mr2/android/support/v7/media/MediaRouterJellybeanMr2.java
@@ -16,11 +16,9 @@
package android.support.v7.media;
-import android.annotation.TargetApi;
import android.support.annotation.RequiresApi;
@RequiresApi(18)
-@TargetApi(18)
final class MediaRouterJellybeanMr2 {
public static Object getDefaultRoute(Object routerObj) {
return ((android.media.MediaRouter)routerObj).getDefaultRoute();
diff --git a/v7/mediarouter/jellybean/android/support/v7/media/MediaRouterJellybean.java b/v7/mediarouter/jellybean/android/support/v7/media/MediaRouterJellybean.java
index 85071a4..c6ecbcb 100644
--- a/v7/mediarouter/jellybean/android/support/v7/media/MediaRouterJellybean.java
+++ b/v7/mediarouter/jellybean/android/support/v7/media/MediaRouterJellybean.java
@@ -16,7 +16,6 @@
package android.support.v7.media;
-import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
@@ -30,7 +29,6 @@
import java.util.List;
@RequiresApi(16)
-@TargetApi(16)
final class MediaRouterJellybean {
private static final String TAG = "MediaRouterJellybean";
diff --git a/v7/mediarouter/res/values-zh-rCN/strings.xml b/v7/mediarouter/res/values-zh-rCN/strings.xml
index c22a91c..30c7dcc 100644
--- a/v7/mediarouter/res/values-zh-rCN/strings.xml
+++ b/v7/mediarouter/res/values-zh-rCN/strings.xml
@@ -30,7 +30,7 @@
<string name="mr_controller_play" msgid="683634565969987458">"播放"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"暂停"</string>
<string name="mr_controller_expand_group" msgid="8062427022744266907">"展开"</string>
- <string name="mr_controller_collapse_group" msgid="7924809056904240926">"折叠"</string>
+ <string name="mr_controller_collapse_group" msgid="7924809056904240926">"收起"</string>
<string name="mr_controller_album_art" msgid="6422801843540543585">"专辑封面"</string>
<string name="mr_controller_volume_slider" msgid="2361785992211841709">"音量滑块"</string>
<string name="mr_controller_no_media_selected" msgid="6547130360349182381">"未选择任何媒体"</string>
diff --git a/v7/mediarouter/res/values/attrs.xml b/v7/mediarouter/res/values/attrs.xml
index c618fd8..cf6a7b5 100644
--- a/v7/mediarouter/res/values/attrs.xml
+++ b/v7/mediarouter/res/values/attrs.xml
@@ -22,7 +22,7 @@
that media is playing to the local device only. -->
<attr name="externalRouteEnabledDrawable" format="reference" />
<!-- Tint to apply to the media route button -->
- <attr name="buttonTint" />
+ <attr name="buttonTint" format="color" />
<attr name="android:minWidth" />
<attr name="android:minHeight" />
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
index 066054c..c877290 100644
--- a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
+++ b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
@@ -2990,7 +2990,9 @@
// custom onMeasure
if (mAdapterUpdateDuringMeasure) {
eatRequestLayout();
+ onEnterLayoutOrScroll();
processAdapterUpdatesAndSetAnimationFlags();
+ onExitLayoutOrScroll();
if (mState.mRunPredictiveAnimations) {
mState.mInPreLayout = true;
@@ -8174,9 +8176,11 @@
/**
* Returns the number of items in the adapter bound to the parent RecyclerView.
* <p>
- * Note that this number is not necessarily equal to {@link State#getItemCount()}. In
- * methods where State is available, you should use {@link State#getItemCount()} instead.
- * For more details, check the documentation for {@link State#getItemCount()}.
+ * Note that this number is not necessarily equal to
+ * {@link State#getItemCount() State#getItemCount()}. In methods where {@link State} is
+ * available, you should use {@link State#getItemCount() State#getItemCount()} instead.
+ * For more details, check the documentation for
+ * {@link State#getItemCount() State#getItemCount()}.
*
* @return The number of items in the bound adapter
* @see State#getItemCount()
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
index e48818a..6a2a175 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
@@ -19,14 +19,11 @@
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.annotation.TargetApi;
-import android.content.Context;
import android.os.Build;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SdkSuppress;
@@ -37,7 +34,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Arrays;
@@ -101,7 +97,7 @@
assertThat(calledA11DuringLayout.get(), is(false));
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Test
public void processAllViewHolders() {
diff --git a/v8/renderscript/Android.mk b/v8/renderscript/Android.mk
deleted file mode 100644
index 8815a0a..0000000
--- a/v8/renderscript/Android.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (C) 2012 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.
-#
-
-# Don't build the library in unbundled branches.
-ifeq (,$(TARGET_BUILD_APPS))
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_CFLAGS += -std=c++11
-
-LOCAL_MODULE := android-support-v8-renderscript
-LOCAL_SDK_VERSION := 23
-LOCAL_SRC_FILES := $(call all-java-files-under, java/src)
-LOCAL_SHARED_ANDROID_LIBRARIES := android-support-annotations
-
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-# TODO: Build the tests as an APK here
-
-include $(call all-makefiles-under, $(LOCAL_PATH))
-
-endif
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java b/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java
deleted file mode 100644
index 2384518..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java
+++ /dev/null
@@ -1,3032 +0,0 @@
-/*
- * Copyright (C) 2008-2012 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.support.v8.renderscript;
-
-import java.nio.ByteBuffer;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.util.Log;
-import android.view.Surface;
-
-/**
- * <p> This class provides the primary method through which data is passed to
- * and from RenderScript kernels. An Allocation provides the backing store for
- * a given {@link android.support.v8.renderscript.Type}. </p>
- *
- * <p>An Allocation also contains a set of usage flags that denote how the
- * Allocation could be used. For example, an Allocation may have usage flags
- * specifying that it can be used from a script as well as input to a {@link
- * android.support.v8.renderscript.Sampler}. A developer must synchronize
- * across these different usages using
- * {@link android.support.v8.renderscript.Allocation#syncAll} in
- * order to ensure that different users of the Allocation have a consistent view
- * of memory. For example, in the case where an Allocation is used as the output
- * of one kernel and as Sampler input in a later kernel, a developer must call
- * {@link #syncAll syncAll(Allocation.USAGE_SCRIPT)} prior to launching the
- * second kernel to ensure correctness.
- *
- * <p>An Allocation can be populated with the {@link #copyFrom} routines. For
- * more complex Element types, the {@link #copyFromUnchecked} methods can be
- * used to copy from byte arrays or similar constructs.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about creating an application that uses
- * RenderScript, read the
- * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a>
- * developer guide.</p>
- * </div>
- **/
-public class Allocation extends BaseObj {
- Type mType;
- Bitmap mBitmap;
- int mUsage;
- int mSize;
- Allocation mAdaptedAllocation;
- ByteBuffer mByteBuffer = null;
- long mByteBufferStride = 0;
-
- boolean mConstrainedLOD;
- boolean mConstrainedFace;
- boolean mConstrainedY;
- boolean mConstrainedZ;
- boolean mReadAllowed = true;
- boolean mWriteAllowed = true;
- boolean mAutoPadding = false;
- int mSelectedY;
- int mSelectedZ;
- int mSelectedLOD;
- Type.CubemapFace mSelectedFace = Type.CubemapFace.POSITIVE_X;
-
- int mCurrentDimX;
- int mCurrentDimY;
- int mCurrentDimZ;
- int mCurrentCount;
-
- private Element.DataType validateObjectIsPrimitiveArray(Object d, boolean checkType) {
- final Class c = d.getClass();
- if (!c.isArray()) {
- throw new RSIllegalArgumentException("Object passed is not an array of primitives.");
- }
- final Class cmp = c.getComponentType();
- if (!cmp.isPrimitive()) {
- throw new RSIllegalArgumentException("Object passed is not an Array of primitives.");
- }
-
- if (cmp == Long.TYPE) {
- if (checkType) {
- validateIsInt64();
- return mType.mElement.mType;
- }
- return Element.DataType.SIGNED_64;
- }
-
- if (cmp == Integer.TYPE) {
- if (checkType) {
- validateIsInt32();
- return mType.mElement.mType;
- }
- return Element.DataType.SIGNED_32;
- }
-
- if (cmp == Short.TYPE) {
- if (checkType) {
- validateIsInt16();
- return mType.mElement.mType;
- }
- return Element.DataType.SIGNED_16;
- }
-
- if (cmp == Byte.TYPE) {
- if (checkType) {
- validateIsInt8();
- return mType.mElement.mType;
- }
- return Element.DataType.SIGNED_8;
- }
-
- if (cmp == Float.TYPE) {
- if (checkType) {
- validateIsFloat32();
- }
- return Element.DataType.FLOAT_32;
- }
-
- if (cmp == Double.TYPE) {
- if (checkType) {
- validateIsFloat64();
- }
- return Element.DataType.FLOAT_64;
- }
- return null;
- }
-
- /*
- * Hold reference to the shared allocation in compat context
- * for Incremental Support Lib.
- */
- long mIncCompatAllocation;
- boolean mIncAllocDestroyed;
- /**
- * The usage of the Allocation. These signal to RenderScript where to place
- * the Allocation in memory.
- *
- */
-
- /**
- * The Allocation will be bound to and accessed by scripts.
- */
- public static final int USAGE_SCRIPT = 0x0001;
-
- /**
- * The Allocation will be used as a texture source by one or more graphics
- * programs.
- *
- */
- public static final int USAGE_GRAPHICS_TEXTURE = 0x0002;
-
- /**
- * The Allocation will be used as a {@link android.graphics.SurfaceTexture}
- * consumer. This usage will cause the Allocation to be created as
- * read-only.
- *
- */
- public static final int USAGE_IO_INPUT = 0x0020;
-
- /**
- * The Allocation will be used as a {@link android.graphics.SurfaceTexture}
- * producer. The dimensions and format of the {@link
- * android.graphics.SurfaceTexture} will be forced to those of the
- * Allocation.
- *
- */
- public static final int USAGE_IO_OUTPUT = 0x0040;
-
- /**
- * The Allocation's backing store will be inherited from another object
- * (usually a {@link android.graphics.Bitmap}); copying to or from the
- * original source Bitmap will cause a synchronization rather than a full
- * copy. {@link #syncAll} may also be used to synchronize the Allocation
- * and the source Bitmap.
- *
- * <p>This is set by default for allocations created with {@link
- * #createFromBitmap} in API version 18 and higher.</p>
- *
- */
- public static final int USAGE_SHARED = 0x0080;
-
- /**
- * Controls mipmap behavior when using the bitmap creation and update
- * functions.
- */
- public enum MipmapControl {
- /**
- * No mipmaps will be generated and the type generated from the incoming
- * bitmap will not contain additional LODs.
- */
- MIPMAP_NONE(0),
-
- /**
- * A full mipmap chain will be created in script memory. The Type of
- * the Allocation will contain a full mipmap chain. On upload, the full
- * chain will be transferred.
- */
- MIPMAP_FULL(1),
-
- /**
- * The Type of the Allocation will be the same as MIPMAP_NONE. It will
- * not contain mipmaps. On upload, the allocation data will contain a
- * full mipmap chain generated from the top level in script memory.
- */
- MIPMAP_ON_SYNC_TO_TEXTURE(2);
-
- int mID;
- MipmapControl(int id) {
- mID = id;
- }
- }
-
- /**
- * Getter & Setter for the dummy allocation for Inc Support Lib.
- *
- */
- public long getIncAllocID() {
- return mIncCompatAllocation;
- }
- public void setIncAllocID(long id) {
- mIncCompatAllocation = id;
- }
-
- private long getIDSafe() {
- if (mAdaptedAllocation != null) {
- return mAdaptedAllocation.getID(mRS);
- }
- return getID(mRS);
- }
-
-
- /**
- * Get the {@link android.support.v8.renderscript.Element} of the {@link
- * android.support.v8.renderscript.Type} of the Allocation.
- *
- * @return Element
- *
- */
- public Element getElement() {
- return mType.getElement();
- }
-
- /**
- * Get the usage flags of the Allocation.
- *
- * @return usage this Allocation's set of the USAGE_* flags OR'd together
- *
- */
- public int getUsage() {
- return mUsage;
- }
-
- /**
- * Specifies the mapping between the Allocation's cells and an array's elements
- * when data is copied from the Allocation to the array, or vice-versa.
- *
- * Only applies to an Allocation whose Element is a vector of length 3 (such as
- * {@link Element#U8_3} or {@link Element#RGB_888}). Enabling this feature may make
- * copying data from the Allocation to an array or vice-versa less efficient.
- *
- * <p> Vec3 Element cells are stored in an Allocation as Vec4 Element cells with
- * the same {@link android.support.v8.renderscript.Element.DataType}, with the fourth vector
- * component treated as padding. When this feature is enabled, only the data components,
- * i.e. the first 3 vector components of each cell, will be mapped between the array
- * and the Allocation. When disabled, explicit mapping of the padding components
- * is required, as described in the following example.
- *
- * <p> For example, when copying an integer array to an Allocation of two {@link
- * Element#I32_3} cells using {@link #copyFrom(int[])}:
- * <p> When disabled:
- * The array must have at least 8 integers, with the first 4 integers copied
- * to the first cell of the Allocation, and the next 4 integers copied to
- * the second cell. The 4th and 8th integers are mapped as the padding components.
- *
- * <p> When enabled:
- * The array just needs to have at least 6 integers, with the first 3 integers
- * copied to the the first cell as data components, and the next 3 copied to
- * the second cell. There is no mapping for the padding components.
- *
- * <p> Similarly, when copying a byte array to an Allocation of two {@link
- * Element#I32_3} cells, using {@link #copyFromUnchecked(int[])}:
- * <p> When disabled:
- * The array must have at least 32 bytes, with the first 16 bytes copied
- * to the first cell of the Allocation, and the next 16 bytes copied to
- * the second cell. The 13th-16th and 29th-32nd bytes are mapped as padding
- * components.
- *
- * <p> When enabled:
- * The array just needs to have at least 24 bytes, with the first 12 bytes copied
- * to the first cell of the Allocation, and the next 12 bytes copied to
- * the second cell. There is no mapping for the padding components.
- *
- * <p> Similar to copying data to an Allocation from an array, when copying data from an
- * Allocation to an array, the padding components for Vec3 Element cells will not be
- * copied/mapped to the array if AutoPadding is enabled.
- *
- * <p> Default: Disabled.
- *
- * @param useAutoPadding True: enable AutoPadding; False: disable AutoPadding
- *
- */
- public void setAutoPadding(boolean useAutoPadding) {
- mAutoPadding = useAutoPadding;
- }
-
- /**
- * Get the size of the Allocation in bytes.
- *
- * @return size of the Allocation in bytes.
- *
- */
- public int getBytesSize() {
- if (mType.mDimYuv != 0) {
- return (int)Math.ceil(mType.getCount() * mType.getElement().getBytesSize() * 1.5);
- }
- return mType.getCount() * mType.getElement().getBytesSize();
- }
-
- private void updateCacheInfo(Type t) {
- mCurrentDimX = t.getX();
- mCurrentDimY = t.getY();
- mCurrentDimZ = t.getZ();
- mCurrentCount = mCurrentDimX;
- if (mCurrentDimY > 1) {
- mCurrentCount *= mCurrentDimY;
- }
- if (mCurrentDimZ > 1) {
- mCurrentCount *= mCurrentDimZ;
- }
- }
-
- private void setBitmap(Bitmap b) {
- mBitmap = b;
- }
-
- Allocation(long id, RenderScript rs, Type t, int usage) {
- super(id, rs);
- if ((usage & ~(USAGE_SCRIPT |
- USAGE_GRAPHICS_TEXTURE |
- USAGE_IO_INPUT |
- USAGE_IO_OUTPUT |
- USAGE_SHARED)) != 0) {
- throw new RSIllegalArgumentException("Unknown usage specified.");
- }
-
- if ((usage & USAGE_IO_INPUT) != 0) {
- mWriteAllowed = false;
-
- if ((usage & ~(USAGE_IO_INPUT |
- USAGE_GRAPHICS_TEXTURE |
- USAGE_SCRIPT)) != 0) {
- throw new RSIllegalArgumentException("Invalid usage combination.");
- }
- }
-
- mType = t;
- mUsage = usage;
- mIncCompatAllocation = 0;
- mIncAllocDestroyed = false;
-
- if (t != null) {
- // TODO: A3D doesn't have Type info during creation, so we can't
- // calculate the size ahead of time. We can possibly add a method
- // to update the size in the future if it seems reasonable.
- mSize = mType.getCount() * mType.getElement().getBytesSize();
- updateCacheInfo(t);
- }
- if (RenderScript.sUseGCHooks == true) {
- try {
- RenderScript.registerNativeAllocation.invoke(RenderScript.sRuntime, mSize);
- } catch (Exception e) {
- Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e);
- throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e);
- }
- }
- }
-
- protected void finalize() throws Throwable {
- if (RenderScript.sUseGCHooks == true) {
- RenderScript.registerNativeFree.invoke(RenderScript.sRuntime, mSize);
- }
- super.finalize();
- }
-
- private void validateIsInt64() {
- if ((mType.mElement.mType == Element.DataType.SIGNED_64) ||
- (mType.mElement.mType == Element.DataType.UNSIGNED_64)) {
- return;
- }
- throw new RSIllegalArgumentException(
- "64 bit integer source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsInt32() {
- if ((mType.mElement.mType == Element.DataType.SIGNED_32) ||
- (mType.mElement.mType == Element.DataType.UNSIGNED_32)) {
- return;
- }
- throw new RSIllegalArgumentException(
- "32 bit integer source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsInt16() {
- if ((mType.mElement.mType == Element.DataType.SIGNED_16) ||
- (mType.mElement.mType == Element.DataType.UNSIGNED_16)) {
- return;
- }
- throw new RSIllegalArgumentException(
- "16 bit integer source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsInt8() {
- if ((mType.mElement.mType == Element.DataType.SIGNED_8) ||
- (mType.mElement.mType == Element.DataType.UNSIGNED_8)) {
- return;
- }
- throw new RSIllegalArgumentException(
- "8 bit integer source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsFloat32() {
- if (mType.mElement.mType == Element.DataType.FLOAT_32) {
- return;
- }
- throw new RSIllegalArgumentException(
- "32 bit float source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsFloat64() {
- if (mType.mElement.mType == Element.DataType.FLOAT_64) {
- return;
- }
- throw new RSIllegalArgumentException(
- "64 bit float source does not match allocation type " + mType.mElement.mType);
- }
-
- private void validateIsObject() {
- if ((mType.mElement.mType == Element.DataType.RS_ELEMENT) ||
- (mType.mElement.mType == Element.DataType.RS_TYPE) ||
- (mType.mElement.mType == Element.DataType.RS_ALLOCATION) ||
- (mType.mElement.mType == Element.DataType.RS_SAMPLER) ||
- (mType.mElement.mType == Element.DataType.RS_SCRIPT)) {
- return;
- }
- throw new RSIllegalArgumentException(
- "Object source does not match allocation type " + mType.mElement.mType);
- }
-
- /**
- * Get the {@link android.support.v8.renderscript.Type} of the Allocation.
- *
- * @return Type
- *
- */
- public Type getType() {
- return mType;
- }
-
- /**
- * Propagate changes from one usage of the Allocation to the
- * other usages of the Allocation.
- *
- */
- public void syncAll(int srcLocation) {
- switch (srcLocation) {
- case USAGE_SCRIPT:
- case USAGE_GRAPHICS_TEXTURE:
- break;
- default:
- throw new RSIllegalArgumentException("Source must be exactly one usage type.");
- }
- mRS.validate();
- mRS.nAllocationSyncAll(getIDSafe(), srcLocation);
- }
-
- /**
- * Send a buffer to the output stream. The contents of the Allocation will
- * be undefined after this operation. This operation is only valid if {@link
- * #USAGE_IO_OUTPUT} is set on the Allocation.
- *
- *
- */
- public void ioSend() {
- if ((mUsage & USAGE_IO_OUTPUT) == 0) {
- throw new RSIllegalArgumentException(
- "Can only send buffer if IO_OUTPUT usage specified.");
- }
- mRS.validate();
- mRS.nAllocationIoSend(getID(mRS));
- }
-
- /**
- * Delete once code is updated.
- */
- public void ioSendOutput() {
- ioSend();
- }
- /**
- * Gets or creates a ByteBuffer that contains the raw data of the current Allocation.
- * <p> If the Allocation is created with USAGE_IO_INPUT, the returned ByteBuffer
- * would contain the up-to-date data as READ ONLY.
- * For a 2D or 3D Allocation, the raw data maybe padded so that each row of
- * the Allocation has certain alignment. The size of each row including padding,
- * called stride, can be queried using the {@link #getStride()} method.
- *
- * Note: Operating on the ByteBuffer of a destroyed Allocation will triger errors.
- * The ByteBuffer will be Read-Only for devices before Lollopop (API 21).
- *
- * @return ByteBuffer The ByteBuffer associated with raw data pointer of the Allocation.
- */
- public ByteBuffer getByteBuffer() {
- int xBytesSize = mType.getX() * mType.getElement().getBytesSize();
- // When running on devices before L, we need to construct the ByteBuffer
- // and explicitly copy the data from the allocation to it.
- if (mRS.getDispatchAPILevel() < 21) {
- byte[] data = null;
- if (mType.getZ() > 0) {
- // TODO: add support for 3D allocations.
- return null;
- } else if (mType.getY() > 0) {
- // 2D Allocation
- data = new byte[xBytesSize * mType.getY()];
- copy2DRangeToUnchecked(0, 0, mType.getX(), mType.getY(), data,
- Element.DataType.SIGNED_8, xBytesSize * mType.getY());
- } else {
- // 1D Allocation
- data = new byte[xBytesSize];
- copy1DRangeToUnchecked(0, mType.getX(), data);
- }
- ByteBuffer bBuffer = ByteBuffer.wrap(data).asReadOnlyBuffer();
- mByteBufferStride = xBytesSize;
- return bBuffer;
- }
- // Create a new ByteBuffer if it is not initialized or using IO_INPUT.
- if (mByteBuffer == null || (mUsage & USAGE_IO_INPUT) != 0) {
- mByteBuffer = mRS.nAllocationGetByteBuffer(getID(mRS), xBytesSize, mType.getY(), mType.getZ());
- }
- return mByteBuffer;
- }
-
- /**
- * Gets the stride of the Allocation.
- * For a 2D or 3D Allocation, the raw data maybe padded so that each row of
- * the Allocation has certain alignment. The size of each row including such
- * padding is called stride.
- *
- * @return the stride. For 1D Allocation, the stride will be the number of
- * bytes of this Allocation. For 2D and 3D Allocations, the stride
- * will be the stride in X dimension measuring in bytes.
- */
- public long getStride() {
- if (mByteBufferStride ==0) {
- if (mRS.getDispatchAPILevel() > 21) {
- mByteBufferStride = mRS.nAllocationGetStride(getID(mRS));
- } else {
- mByteBufferStride = mType.getX() * mType.getElement().getBytesSize();
- }
- }
- return mByteBufferStride;
- }
-
- /**
- * Receive the latest input into the Allocation. This operation
- * is only valid if {@link #USAGE_IO_INPUT} is set on the Allocation.
- *
- */
- public void ioReceive() {
- if ((mUsage & USAGE_IO_INPUT) == 0) {
- throw new RSIllegalArgumentException(
- "Can only receive if IO_INPUT usage specified.");
- }
- mRS.validate();
- mRS.nAllocationIoReceive(getID(mRS));
- }
-
- /**
- * Copy an array of RS objects to the Allocation.
- *
- * @param d Source array.
- */
- public void copyFrom(BaseObj[] d) {
- mRS.validate();
- validateIsObject();
- if (d.length != mCurrentCount) {
- throw new RSIllegalArgumentException("Array size mismatch, allocation sizeX = " +
- mCurrentCount + ", array length = " + d.length);
- }
-
- if (RenderScript.sPointerSize == 8) {
- long i[] = new long[d.length * 4];
- for (int ct=0; ct < d.length; ct++) {
- i[ct * 4] = d[ct].getID(mRS);
- }
- copy1DRangeFromUnchecked(0, mCurrentCount, i);
- } else {
- int i[] = new int[d.length];
- for (int ct=0; ct < d.length; ct++) {
- i[ct] = (int)d[ct].getID(mRS);
- }
- copy1DRangeFromUnchecked(0, mCurrentCount, i);
- }
- }
-
- private void validateBitmapFormat(Bitmap b) {
- Bitmap.Config bc = b.getConfig();
- if (bc == null) {
- throw new RSIllegalArgumentException("Bitmap has an unsupported format for this operation");
- }
- switch (bc) {
- case ALPHA_8:
- if (mType.getElement().mKind != Element.DataKind.PIXEL_A) {
- throw new RSIllegalArgumentException("Allocation kind is " +
- mType.getElement().mKind + ", type " +
- mType.getElement().mType +
- " of " + mType.getElement().getBytesSize() +
- " bytes, passed bitmap was " + bc);
- }
- break;
- case ARGB_8888:
- if ((mType.getElement().mKind != Element.DataKind.PIXEL_RGBA) ||
- (mType.getElement().getBytesSize() != 4)) {
- throw new RSIllegalArgumentException("Allocation kind is " +
- mType.getElement().mKind + ", type " +
- mType.getElement().mType +
- " of " + mType.getElement().getBytesSize() +
- " bytes, passed bitmap was " + bc);
- }
- break;
- case RGB_565:
- if ((mType.getElement().mKind != Element.DataKind.PIXEL_RGB) ||
- (mType.getElement().getBytesSize() != 2)) {
- throw new RSIllegalArgumentException("Allocation kind is " +
- mType.getElement().mKind + ", type " +
- mType.getElement().mType +
- " of " + mType.getElement().getBytesSize() +
- " bytes, passed bitmap was " + bc);
- }
- break;
- case ARGB_4444:
- if ((mType.getElement().mKind != Element.DataKind.PIXEL_RGBA) ||
- (mType.getElement().getBytesSize() != 2)) {
- throw new RSIllegalArgumentException("Allocation kind is " +
- mType.getElement().mKind + ", type " +
- mType.getElement().mType +
- " of " + mType.getElement().getBytesSize() +
- " bytes, passed bitmap was " + bc);
- }
- break;
-
- }
- }
-
- private void validateBitmapSize(Bitmap b) {
- if((mCurrentDimX != b.getWidth()) || (mCurrentDimY != b.getHeight())) {
- throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch");
- }
- }
-
- private void copyFromUnchecked(Object array, Element.DataType dt, int arrayLen) {
- mRS.validate();
- if (mCurrentDimZ > 0) {
- copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, array, dt, arrayLen);
- } else if (mCurrentDimY > 0) {
- copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, array, dt, arrayLen);
- } else {
- copy1DRangeFromUnchecked(0, mCurrentCount, array, dt, arrayLen);
- }
- }
-
- /**
- * Copy into this Allocation from an array. This method does not guarantee
- * that the Allocation is compatible with the input buffer; it copies memory
- * without reinterpretation.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param array The source array
- */
- public void copyFromUnchecked(Object array) {
- copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, false),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy into this Allocation from an array. This method does not guarantee
- * that the Allocation is compatible with the input buffer; it copies memory
- * without reinterpretation.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFromUnchecked(int[] d) {
- copyFromUnchecked(d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This method does not guarantee
- * that the Allocation is compatible with the input buffer; it copies memory
- * without reinterpretation.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFromUnchecked(short[] d) {
- copyFromUnchecked(d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This method does not guarantee
- * that the Allocation is compatible with the input buffer; it copies memory
- * without reinterpretation.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFromUnchecked(byte[] d) {
- copyFromUnchecked(d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This method does not guarantee
- * that the Allocation is compatible with the input buffer; it copies memory
- * without reinterpretation.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFromUnchecked(float[] d) {
- copyFromUnchecked(d, Element.DataType.FLOAT_32, d.length);
- }
-
-
- /**
- * Copy into this Allocation from an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the array's
- * primitive type.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param array The source array
- */
- public void copyFrom(Object array) {
- copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy into this Allocation from an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 32 bit integer nor a vector of 32 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFrom(int[] d) {
- validateIsInt32();
- copyFromUnchecked(d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 16 bit integer nor a vector of 16 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFrom(short[] d) {
- validateIsInt16();
- copyFromUnchecked(d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not an 8 bit integer nor a vector of 8 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFrom(byte[] d) {
- validateIsInt8();
- copyFromUnchecked(d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy into this Allocation from an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector of
- * 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d the source array
- */
- public void copyFrom(float[] d) {
- validateIsFloat32();
- copyFromUnchecked(d, Element.DataType.FLOAT_32, d.length);
- }
-
- /**
- * Copy into an Allocation from a {@link android.graphics.Bitmap}. The
- * height, width, and format of the bitmap must match the existing
- * allocation.
- *
- * <p>If the {@link android.graphics.Bitmap} is the same as the {@link
- * android.graphics.Bitmap} used to create the Allocation with {@link
- * #createFromBitmap} and {@link #USAGE_SHARED} is set on the Allocation,
- * this will synchronize the Allocation with the latest data from the {@link
- * android.graphics.Bitmap}, potentially avoiding the actual copy.</p>
- *
- * @param b the source bitmap
- */
- public void copyFrom(Bitmap b) {
- mRS.validate();
- if (b.getConfig() == null) {
- Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(b, 0, 0, null);
- copyFrom(newBitmap);
- return;
- }
- validateBitmapSize(b);
- validateBitmapFormat(b);
- mRS.nAllocationCopyFromBitmap(getID(mRS), b);
- }
-
- /**
- * Copy an Allocation from an Allocation. The types of both allocations
- * must be identical.
- *
- * @param a the source allocation
- */
- public void copyFrom(Allocation a) {
- mRS.validate();
- if (!mType.equals(a.getType())) {
- throw new RSIllegalArgumentException("Types of allocations must match.");
- }
- copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, a, 0, 0);
- }
-
-
- /**
- * This is only intended to be used by auto-generated code reflected from
- * the RenderScript script files and should not be used by developers.
- *
- * @param xoff
- * @param fp
- */
- public void setFromFieldPacker(int xoff, FieldPacker fp) {
- mRS.validate();
- int eSize = mType.mElement.getBytesSize();
- final byte[] data = fp.getData();
- int data_length = fp.getPos();
-
- int count = data_length / eSize;
- if ((eSize * count) != data_length) {
- throw new RSIllegalArgumentException("Field packer length " + data_length +
- " not divisible by element size " + eSize + ".");
- }
- copy1DRangeFromUnchecked(xoff, count, data);
- }
-
- /**
- * This is only intended to be used by auto-generated code reflected from
- * the RenderScript script files.
- *
- * @param xoff
- * @param component_number
- * @param fp
- */
- public void setFromFieldPacker(int xoff, int component_number, FieldPacker fp) {
- mRS.validate();
- if (component_number >= mType.mElement.mElements.length) {
- throw new RSIllegalArgumentException("Component_number " + component_number + " out of range.");
- }
- if(xoff < 0) {
- throw new RSIllegalArgumentException("Offset must be >= 0.");
- }
-
- final byte[] data = fp.getData();
- int data_length = fp.getPos();
- int eSize = mType.mElement.mElements[component_number].getBytesSize();
- eSize *= mType.mElement.mArraySizes[component_number];
-
- if (data_length != eSize) {
- throw new RSIllegalArgumentException("Field packer sizelength " + data_length +
- " does not match component size " + eSize + ".");
- }
-
- mRS.nAllocationElementData1D(getIDSafe(), xoff, mSelectedLOD,
- component_number, data, data_length);
- }
-
- /**
- * @hide
- * This is only intended to be used by auto-generated code reflected from
- * the RenderScript script files.
- *
- * @param xoff
- * @param yoff
- * @param zoff
- * @param component_number
- * @param fp
- */
- /*
- public void setFromFieldPacker(int xoff, int yoff, int zoff, int component_number, FieldPacker fp) {
- mRS.validate();
- if (component_number >= mType.mElement.mElements.length) {
- throw new RSIllegalArgumentException("Component_number " + component_number + " out of range.");
- }
- if(xoff < 0) {
- throw new RSIllegalArgumentException("Offset x must be >= 0.");
- }
- if(yoff < 0) {
- throw new RSIllegalArgumentException("Offset y must be >= 0.");
- }
- if(zoff < 0) {
- throw new RSIllegalArgumentException("Offset z must be >= 0.");
- }
-
- final byte[] data = fp.getData();
- int data_length = fp.getPos();
- int eSize = mType.mElement.mElements[component_number].getBytesSize();
- eSize *= mType.mElement.mArraySizes[component_number];
-
- if (data_length != eSize) {
- throw new RSIllegalArgumentException("Field packer sizelength " + data_length +
- " does not match component size " + eSize + ".");
- }
-
- mRS.nAllocationElementData(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
- component_number, data, data_length);
- }
- */
-
- private void data1DChecks(int off, int count, int len, int dataSize, boolean usePadding) {
- mRS.validate();
- if(off < 0) {
- throw new RSIllegalArgumentException("Offset must be >= 0.");
- }
- if(count < 1) {
- throw new RSIllegalArgumentException("Count must be >= 1.");
- }
- if((off + count) > mCurrentCount) {
- throw new RSIllegalArgumentException("Overflow, Available count " + mCurrentCount +
- ", got " + count + " at offset " + off + ".");
- }
- if(usePadding) {
- if(len < dataSize / 4 * 3) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- } else {
- if(len < dataSize) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- }
- }
-
- /**
- * Generate a mipmap chain. This is only valid if the Type of the Allocation
- * includes mipmaps.
- *
- * <p>This function will generate a complete set of mipmaps from the top
- * level LOD and place them into the script memory space.</p>
- *
- * <p>If the Allocation is also using other memory spaces, a call to {@link
- * #syncAll syncAll(Allocation.USAGE_SCRIPT)} is required.</p>
- */
- public void generateMipmaps() {
- mRS.nAllocationGenerateMipmaps(getID(mRS));
- }
-
- private void copy1DRangeFromUnchecked(int off, int count, Object array,
- Element.DataType dt, int arrayLen) {
- final int dataSize = mType.mElement.getBytesSize() * count;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
- }
- data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
- mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
- mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param array The source array
- */
- public void copy1DRangeFromUnchecked(int off, int count, Object array) {
- copy1DRangeFromUnchecked(off, count, array,
- validateObjectIsPrimitiveArray(array, false),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFromUnchecked(int off, int count, int[] d) {
- copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFromUnchecked(int off, int count, short[] d) {
- copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFromUnchecked(int off, int count, byte[] d) {
- copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFromUnchecked(int off, int count, float[] d) {
- copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.FLOAT_32, d.length);
- }
-
-
- /**
- * Copy an array into a 1D region of this Allocation. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the component type
- * of the array passed in.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param array The source array.
- */
- public void copy1DRangeFrom(int off, int count, Object array) {
- copy1DRangeFromUnchecked(off, count, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not an 32 bit integer nor a vector of 32 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFrom(int off, int count, int[] d) {
- validateIsInt32();
- copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not an 16 bit integer nor a vector of 16 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFrom(int off, int count, short[] d) {
- validateIsInt16();
- copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not an 8 bit integer nor a vector of 8 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeFrom(int off, int count, byte[] d) {
- validateIsInt8();
- copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy an array into a 1D region of this Allocation. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector of
- * 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array.
- */
- public void copy1DRangeFrom(int off, int count, float[] d) {
- validateIsFloat32();
- copy1DRangeFromUnchecked(off, count, d, Element.DataType.FLOAT_32, d.length);
- }
-
- /**
- * Copy part of an Allocation into this Allocation.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param data the source data allocation.
- * @param dataOff off The offset of the first element in data to
- * be copied.
- */
- public void copy1DRangeFrom(int off, int count, Allocation data, int dataOff) {
- mRS.nAllocationData2D(getIDSafe(), off, 0,
- mSelectedLOD, mSelectedFace.mID,
- count, 1, data.getID(mRS), dataOff, 0,
- data.mSelectedLOD, data.mSelectedFace.mID);
- }
-
- private void validate2DRange(int xoff, int yoff, int w, int h) {
- if (mAdaptedAllocation != null) {
-
- } else {
-
- if (xoff < 0 || yoff < 0) {
- throw new RSIllegalArgumentException("Offset cannot be negative.");
- }
- if (h < 0 || w < 0) {
- throw new RSIllegalArgumentException("Height or width cannot be negative.");
- }
- if (((xoff + w) > mCurrentDimX) || ((yoff + h) > mCurrentDimY)) {
- throw new RSIllegalArgumentException("Updated region larger than allocation.");
- }
- }
- }
-
- void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, Object array,
- Element.DataType dt, int arrayLen) {
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- final int dataSize = mType.mElement.getBytesSize() * w * h;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- }
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
- array, sizeBytes, dt,
- mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy from an array into a rectangular region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the input data type.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param array Data to be placed into the Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h, Object array) {
- copy2DRangeFromUnchecked(xoff, yoff, w, h, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy from an array into a rectangular region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not an 8 bit integer nor a vector of 8 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param data to be placed into the Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h, byte[] data) {
- validateIsInt8();
- copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_8, data.length);
- }
-
- /**
- * Copy from an array into a rectangular region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 16 bit integer nor a vector of 16 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param data to be placed into the Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h, short[] data) {
- validateIsInt16();
- copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_16, data.length);
- }
-
- /**
- * Copy from an array into a rectangular region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 32 bit integer nor a vector of 32 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param data to be placed into the Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h, int[] data) {
- validateIsInt32();
- copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_32, data.length);
- }
-
- /**
- * Copy from an array into a rectangular region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector of
- * 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param data to be placed into the Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h, float[] data) {
- validateIsFloat32();
- copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
- Element.DataType.FLOAT_32, data.length);
- }
-
- /**
- * Copy a rectangular region from an Allocation into a rectangular region in
- * this Allocation.
- *
- * @param xoff X offset of the region in this Allocation
- * @param yoff Y offset of the region in this Allocation
- * @param w Width of the region to update.
- * @param h Height of the region to update.
- * @param data source Allocation.
- * @param dataXoff X offset in source Allocation
- * @param dataYoff Y offset in source Allocation
- */
- public void copy2DRangeFrom(int xoff, int yoff, int w, int h,
- Allocation data, int dataXoff, int dataYoff) {
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff,
- mSelectedLOD, mSelectedFace.mID,
- w, h, data.getID(mRS), dataXoff, dataYoff,
- data.mSelectedLOD, data.mSelectedFace.mID);
- }
-
- /**
- * Copy a {@link android.graphics.Bitmap} into an Allocation. The height
- * and width of the update will use the height and width of the {@link
- * android.graphics.Bitmap}.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param data the Bitmap to be copied
- */
- public void copy2DRangeFrom(int xoff, int yoff, Bitmap data) {
- mRS.validate();
- if (data.getConfig() == null) {
- Bitmap newBitmap = Bitmap.createBitmap(data.getWidth(), data.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(data, 0, 0, null);
- copy2DRangeFrom(xoff, yoff, newBitmap);
- return;
- }
- validateBitmapFormat(data);
- validate2DRange(xoff, yoff, data.getWidth(), data.getHeight());
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, data);
- }
-
- private void validate3DRange(int xoff, int yoff, int zoff, int w, int h, int d) {
- if (mAdaptedAllocation != null) {
-
- } else {
-
- if (xoff < 0 || yoff < 0 || zoff < 0) {
- throw new RSIllegalArgumentException("Offset cannot be negative.");
- }
- if (h < 0 || w < 0 || d < 0) {
- throw new RSIllegalArgumentException("Height or width cannot be negative.");
- }
- if (((xoff + w) > mCurrentDimX) || ((yoff + h) > mCurrentDimY) || ((zoff + d) > mCurrentDimZ)) {
- throw new RSIllegalArgumentException("Updated region larger than allocation.");
- }
- }
- }
-
- /**
- * Copy a rectangular region from the array into the allocation.
- * The array is assumed to be tightly packed.
- *
- * The data type of the array is not required to be the same as
- * the element data type.
- */
- private void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d,
- Object array, Element.DataType dt, int arrayLen) {
- mRS.validate();
- validate3DRange(xoff, yoff, zoff, w, h, d);
- final int dataSize = mType.mElement.getBytesSize() * w * h * d;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- }
- mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
- array, sizeBytes, dt,
- mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy from an array into a 3D region in this Allocation. The
- * array is assumed to be tightly packed. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the input data type.
- *
- * <p> The size of the region is: w * h * d * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param zoff Z offset of the region to update in this Allocation
- * @param w Width of the region to update
- * @param h Height of the region to update
- * @param d Depth of the region to update
- * @param array to be placed into the allocation
- */
- public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, Object array) {
- copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy a rectangular region into the allocation from another
- * allocation.
- *
- * @param xoff X offset of the region to update in this Allocation
- * @param yoff Y offset of the region to update in this Allocation
- * @param zoff Z offset of the region to update in this Allocation
- * @param w Width of the region to update.
- * @param h Height of the region to update.
- * @param d Depth of the region to update.
- * @param data source allocation.
- * @param dataXoff X offset of the region in the source Allocation
- * @param dataYoff Y offset of the region in the source Allocation
- * @param dataZoff Z offset of the region in the source Allocation
- */
- public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d,
- Allocation data, int dataXoff, int dataYoff, int dataZoff) {
- mRS.validate();
- validate3DRange(xoff, yoff, zoff, w, h, d);
- mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
- w, h, d, data.getID(mRS), dataXoff, dataYoff, dataZoff,
- data.mSelectedLOD);
- }
-
-
- /**
- * Copy from the Allocation into a {@link android.graphics.Bitmap}. The
- * bitmap must match the dimensions of the Allocation.
- *
- * @param b The bitmap to be set from the Allocation.
- */
- public void copyTo(Bitmap b) {
- mRS.validate();
- validateBitmapFormat(b);
- validateBitmapSize(b);
- mRS.nAllocationCopyToBitmap(getID(mRS), b);
- }
-
- private void copyTo(Object array, Element.DataType dt, int arrayLen) {
- mRS.validate();
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
- }
- if (usePadding) {
- if (dt.mSize * arrayLen < mSize / 4 * 3) {
- throw new RSIllegalArgumentException(
- "Size of output array cannot be smaller than size of allocation.");
- }
- } else {
- if (dt.mSize * arrayLen < mSize) {
- throw new RSIllegalArgumentException(
- "Size of output array cannot be smaller than size of allocation.");
- }
- }
- mRS.nAllocationRead(getID(mRS), array, dt, mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy from the Allocation into an array. The method is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the input data type.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells will be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param array The array to be set from the Allocation.
- */
- public void copyTo(Object array) {
- copyTo(array, validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy from the Allocation into a byte array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither an 8 bit integer nor a vector of 8 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells will be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d The array to be set from the Allocation.
- */
- public void copyTo(byte[] d) {
- validateIsInt8();
- copyTo(d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy from the Allocation into a short array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 16 bit integer nor a vector of 16 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells will be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d The array to be set from the Allocation.
- */
- public void copyTo(short[] d) {
- validateIsInt16();
- copyTo(d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy from the Allocation into a int array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is not a 32 bit integer nor a vector of 32 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells will be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d The array to be set from the Allocation.
- */
- public void copyTo(int[] d) {
- validateIsInt32();
- copyTo(d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy from the Allocation into a float array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector of
- * 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the Allocation {@link
- * #getBytesSize getBytesSize()}.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells will be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the Allocation {@link #getBytesSize getBytesSize()}. The padding bytes for
- * the cells must not be part of the array.
- *
- * @param d The array to be set from the Allocation.
- */
- public void copyTo(float[] d) {
- validateIsFloat32();
- copyTo(d, Element.DataType.FLOAT_32, d.length);
- }
-
- /**
- * @hide
- * This is only intended to be used by auto-generated code reflected from
- * the RenderScript script files and should not be used by developers.
- *
- * @param xoff
- * @param yoff
- * @param zoff
- * @param component_number
- * @param fp
- */
- /*
- public void copyToFieldPacker(int xoff, int yoff, int zoff, int component_number, FieldPacker fp) {
- mRS.validate();
- if (component_number >= mType.mElement.mElements.length) {
- throw new RSIllegalArgumentException("Component_number " + component_number + " out of range.");
- }
- if(xoff < 0) {
- throw new RSIllegalArgumentException("Offset x must be >= 0.");
- }
- if(yoff < 0) {
- throw new RSIllegalArgumentException("Offset y must be >= 0.");
- }
- if(zoff < 0) {
- throw new RSIllegalArgumentException("Offset z must be >= 0.");
- }
-
- final byte[] data = fp.getData();
- int data_length = data.length;
- int eSize = mType.mElement.mElements[component_number].getBytesSize();
- eSize *= mType.mElement.mArraySizes[component_number];
-
- if (data_length != eSize) {
- throw new RSIllegalArgumentException("Field packer sizelength " + data_length +
- " does not match component size " + eSize + ".");
- }
-
- mRS.nAllocationElementRead(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
- component_number, data, data_length);
- }
- */
-
- private void copy1DRangeToUnchecked(int off, int count, Object array,
- Element.DataType dt, int arrayLen) {
- final int dataSize = mType.mElement.getBytesSize() * count;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
- }
- data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
- mRS.nAllocationRead1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
- mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param array The dest array
- */
- public void copy1DRangeToUnchecked(int off, int count, Object array) {
- copy1DRangeToUnchecked(off, count, array,
- validateObjectIsPrimitiveArray(array, false),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeToUnchecked(int off, int count, int[] d) {
- copy1DRangeToUnchecked(off, count, (Object)d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeToUnchecked(int off, int count, short[] d) {
- copy1DRangeToUnchecked(off, count, (Object)d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeToUnchecked(int off, int count, byte[] d) {
- copy1DRangeToUnchecked(off, count, (Object)d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This method does not
- * guarantee that the Allocation is compatible with the input buffer.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeToUnchecked(int off, int count, float[] d) {
- copy1DRangeToUnchecked(off, count, (Object)d, Element.DataType.FLOAT_32, d.length);
- }
-
-
- /**
- * Copy a 1D region of this Allocation into an array. This method is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} does not match the component type
- * of the array passed in.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param array The source array.
- */
- public void copy1DRangeTo(int off, int count, Object array) {
- copy1DRangeToUnchecked(off, count, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit integer nor a vector of 32 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeTo(int off, int count, int[] d) {
- validateIsInt32();
- copy1DRangeToUnchecked(off, count, d, Element.DataType.SIGNED_32, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 16 bit integer nor a vector of 16 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeTo(int off, int count, short[] d) {
- validateIsInt16();
- copy1DRangeToUnchecked(off, count, d, Element.DataType.SIGNED_16, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither an 8 bit integer nor a vector of 8 bit
- * integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array
- */
- public void copy1DRangeTo(int off, int count, byte[] d) {
- validateIsInt8();
- copy1DRangeToUnchecked(off, count, d, Element.DataType.SIGNED_8, d.length);
- }
-
- /**
- * Copy a 1D region of this Allocation into an array. This variant is type checked
- * and will generate exceptions if the Allocation's {@link
- * android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector of
- * 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: count * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param off The offset of the first element to be copied.
- * @param count The number of elements to be copied.
- * @param d the source array.
- */
- public void copy1DRangeTo(int off, int count, float[] d) {
- validateIsFloat32();
- copy1DRangeToUnchecked(off, count, d, Element.DataType.FLOAT_32, d.length);
- }
-
-
- void copy2DRangeToUnchecked(int xoff, int yoff, int w, int h, Object array,
- Element.DataType dt, int arrayLen) {
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- final int dataSize = mType.mElement.getBytesSize() * w * h;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- }
- mRS.nAllocationRead2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
- array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
- }
-
- /**
- * Copy from a rectangular region in this Allocation into an array. This
- * method is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} does not match the component type
- * of the array passed in.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param array Dest Array to be copied into
- */
- public void copy2DRangeTo(int xoff, int yoff, int w, int h, Object array) {
- copy2DRangeToUnchecked(xoff, yoff, w, h, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
-
- /**
- * Copy from a rectangular region in this Allocation into an array. This
- * variant is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} is neither an 8 bit integer nor a vector
- * of 8 bit integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param data Dest Array to be copied into
- */
- public void copy2DRangeTo(int xoff, int yoff, int w, int h, byte[] data) {
- validateIsInt8();
- copy2DRangeToUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_8, data.length);
- }
-
- /**
- * Copy from a rectangular region in this Allocation into an array. This
- * variant is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} is neither a 16 bit integer nor a vector
- * of 16 bit integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param data Dest Array to be copied into
- */
- public void copy2DRangeTo(int xoff, int yoff, int w, int h, short[] data) {
- validateIsInt16();
- copy2DRangeToUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_16, data.length);
- }
-
- /**
- * Copy from a rectangular region in this Allocation into an array. This
- * variant is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} is neither a 32 bit integer nor a vector
- * of 32 bit integers {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param data Dest Array to be copied into
- */
- public void copy2DRangeTo(int xoff, int yoff, int w, int h, int[] data) {
- validateIsInt32();
- copy2DRangeToUnchecked(xoff, yoff, w, h, data,
- Element.DataType.SIGNED_32, data.length);
- }
-
- /**
- * Copy from a rectangular region in this Allocation into an array. This
- * variant is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} is neither a 32 bit float nor a vector
- * of 32 bit floats {@link android.support.v8.renderscript.Element.DataType}.
- *
- * <p> The size of the region is: w * h * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param data Dest Array to be copied into
- */
- public void copy2DRangeTo(int xoff, int yoff, int w, int h, float[] data) {
- validateIsFloat32();
- copy2DRangeToUnchecked(xoff, yoff, w, h, data,
- Element.DataType.FLOAT_32, data.length);
- }
-
-
- /**
- * Copy from a 3D region in this Allocation into an array. This method does
- * not guarantee that the Allocation is compatible with the input buffer.
- * The array is assumed to be tightly packed.
- *
- * The data type of the array is not required to be the same as
- * the element data type.
- */
- /*
- private void copy3DRangeToUnchecked(int xoff, int yoff, int zoff, int w, int h, int d,
- Object array, Element.DataType dt, int arrayLen) {
- mRS.validate();
- validate3DRange(xoff, yoff, zoff, w, h, d);
- final int dataSize = mType.mElement.getBytesSize() * w * h * d;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
- }
- mRS.nAllocationRead3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
- array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
- }
- */
-
- /**
- * @hide
- * Copy from a 3D region in this Allocation into an array. This
- * method is type checked and will generate exceptions if the Allocation's
- * {@link android.support.v8.renderscript.Element} does not match the component type
- * of the array passed in.
- *
- * <p> The size of the region is: w * h * d * {@link #getElement}.{@link
- * Element#getBytesSize}.
- *
- * <p> If the Allocation does not have Vec3 Elements, then the size of the
- * array in bytes must be at least the size of the region.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is disabled, then the size of the array in bytes must be at least the size
- * of the region. The padding bytes for the cells must be part of the array.
- *
- * <p> If the Allocation has Vec3 Elements and {@link #setAutoPadding AutoPadding}
- * is enabled, then the size of the array in bytes must be at least 3/4 the size
- * of the region. The padding bytes for the cells must not be part of the array.
- *
- * @param xoff X offset of the region to copy in this Allocation
- * @param yoff Y offset of the region to copy in this Allocation
- * @param zoff Z offset of the region to copy in this Allocation
- * @param w Width of the region to copy
- * @param h Height of the region to copy
- * @param d Depth of the region to copy
- * @param array Dest Array to be copied into
- */
- /*
- public void copy3DRangeTo(int xoff, int yoff, int zoff, int w, int h, int d, Object array) {
- copy3DRangeToUnchecked(xoff, yoff, zoff, w, h, d, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- }
- */
-
- // creation
-
- static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
- static {
- mBitmapOptions.inScaled = false;
- }
-
- /**
- * Creates a new Allocation with the given {@link
- * android.support.v8.renderscript.Type}, mipmap flag, and usage flags.
- *
- * @param type RenderScript type describing data layout
- * @param mips specifies desired mipmap behaviour for the
- * allocation
- * @param usage bit field specifying how the Allocation is
- * utilized
- */
- static public Allocation createTyped(RenderScript rs, Type type, MipmapControl mips, int usage) {
- rs.validate();
- if (type.getID(rs) == 0) {
- throw new RSInvalidStateException("Bad Type");
- }
-
- if(!rs.usingIO() && (usage & (USAGE_IO_INPUT | USAGE_IO_INPUT)) != 0) {
- throw new RSRuntimeException("USAGE_IO not supported, Allocation creation failed.");
- }
-
- long id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0);
- if (id == 0) {
- throw new RSRuntimeException("Allocation creation failed.");
- }
- return new Allocation(id, rs, type, usage);
- }
-
- /**
- * Creates an Allocation with the size specified by the type and no mipmaps
- * generated by default
- *
- * @param rs Context to which the allocation will belong.
- * @param type renderscript type describing data layout
- * @param usage bit field specifying how the allocation is
- * utilized
- *
- * @return allocation
- */
- static public Allocation createTyped(RenderScript rs, Type type, int usage) {
- return createTyped(rs, type, MipmapControl.MIPMAP_NONE, usage);
- }
-
- /**
- * Creates an Allocation for use by scripts with a given {@link
- * android.support.v8.renderscript.Type} and no mipmaps
- *
- * @param rs Context to which the Allocation will belong.
- * @param type RenderScript Type describing data layout
- *
- * @return allocation
- */
- static public Allocation createTyped(RenderScript rs, Type type) {
- return createTyped(rs, type, MipmapControl.MIPMAP_NONE, USAGE_SCRIPT);
- }
-
- /**
- * Creates an Allocation with a specified number of given elements
- *
- * @param rs Context to which the Allocation will belong.
- * @param e Element to use in the Allocation
- * @param count the number of Elements in the Allocation
- * @param usage bit field specifying how the Allocation is
- * utilized
- *
- * @return allocation
- */
- static public Allocation createSized(RenderScript rs, Element e,
- int count, int usage) {
- rs.validate();
- Type.Builder b = new Type.Builder(rs, e);
- b.setX(count);
- Type t = b.create();
-
- long id = rs.nAllocationCreateTyped(t.getID(rs), MipmapControl.MIPMAP_NONE.mID, usage, 0);
- if (id == 0) {
- throw new RSRuntimeException("Allocation creation failed.");
- }
- return new Allocation(id, rs, t, usage);
- }
-
- /**
- * Creates an Allocation with a specified number of given elements
- *
- * @param rs Context to which the Allocation will belong.
- * @param e Element to use in the Allocation
- * @param count the number of Elements in the Allocation
- *
- * @return allocation
- */
- static public Allocation createSized(RenderScript rs, Element e, int count) {
- return createSized(rs, e, count, USAGE_SCRIPT);
- }
-
- static Element elementFromBitmap(RenderScript rs, Bitmap b) {
- final Bitmap.Config bc = b.getConfig();
- if (bc == Bitmap.Config.ALPHA_8) {
- return Element.A_8(rs);
- }
- if (bc == Bitmap.Config.ARGB_4444) {
- return Element.RGBA_4444(rs);
- }
- if (bc == Bitmap.Config.ARGB_8888) {
- return Element.RGBA_8888(rs);
- }
- if (bc == Bitmap.Config.RGB_565) {
- return Element.RGB_565(rs);
- }
- throw new RSInvalidStateException("Bad bitmap type: " + bc);
- }
-
- static Type typeFromBitmap(RenderScript rs, Bitmap b,
- MipmapControl mip) {
- Element e = elementFromBitmap(rs, b);
- Type.Builder tb = new Type.Builder(rs, e);
- tb.setX(b.getWidth());
- tb.setY(b.getHeight());
- tb.setMipmaps(mip == MipmapControl.MIPMAP_FULL);
- return tb.create();
- }
-
- /**
- * Creates an Allocation from a {@link android.graphics.Bitmap}.
- *
- * @param rs Context to which the allocation will belong.
- * @param b Bitmap source for the allocation data
- * @param mips specifies desired mipmap behaviour for the
- * allocation
- * @param usage bit field specifying how the allocation is
- * utilized
- *
- * @return Allocation containing bitmap data
- *
- */
- static public Allocation createFromBitmap(RenderScript rs, Bitmap b,
- MipmapControl mips,
- int usage) {
- rs.validate();
-
- // WAR undocumented color formats
- if (b.getConfig() == null) {
- if ((usage & USAGE_SHARED) != 0) {
- throw new RSIllegalArgumentException("USAGE_SHARED cannot be used with a Bitmap that has a null config.");
- }
- Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(b, 0, 0, null);
- return createFromBitmap(rs, newBitmap, mips, usage);
- }
-
- Type t = typeFromBitmap(rs, b, mips);
-
- // enable optimized bitmap path only with no mipmap and script-only usage
- if (mips == MipmapControl.MIPMAP_NONE &&
- t.getElement().isCompatible(Element.RGBA_8888(rs)) &&
- usage == (USAGE_SHARED | USAGE_SCRIPT | USAGE_GRAPHICS_TEXTURE)) {
- long id = rs.nAllocationCreateBitmapBackedAllocation(t.getID(rs), mips.mID, b, usage);
- if (id == 0) {
- throw new RSRuntimeException("Load failed.");
- }
-
- // keep a reference to the Bitmap around to prevent GC
- Allocation alloc = new Allocation(id, rs, t, usage);
- alloc.setBitmap(b);
- return alloc;
- }
-
-
- long id = rs.nAllocationCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
- if (id == 0) {
- throw new RSRuntimeException("Load failed.");
- }
- return new Allocation(id, rs, t, usage);
- }
-
- /**
- * Associate a {@link android.view.Surface} with this Allocation. This
- * operation is only valid for Allocations with {@link #USAGE_IO_OUTPUT}.
- *
- * @param sur Surface to associate with allocation
- */
- public void setSurface(Surface sur) {
- mRS.validate();
- if ((mUsage & USAGE_IO_OUTPUT) == 0) {
- throw new RSInvalidStateException("Allocation is not USAGE_IO_OUTPUT.");
- }
-
- mRS.nAllocationSetSurface(getID(mRS), sur);
- }
-
- /**
- * Creates an Allocation from a {@link android.graphics.Bitmap}.
- *
- * <p>This Allocation will be created with {@link #USAGE_SHARED}, and
- * {@link #USAGE_SCRIPT}.</p>
- *
- * @param rs Context to which the allocation will belong.
- * @param b bitmap source for the allocation data
- *
- * @return Allocation containing bitmap data
- *
- */
- static public Allocation createFromBitmap(RenderScript rs, Bitmap b) {
- return createFromBitmap(rs, b, MipmapControl.MIPMAP_NONE,
- USAGE_SHARED | USAGE_SCRIPT | USAGE_GRAPHICS_TEXTURE);
- }
-
- /**
- * Creates a cubemap Allocation from a {@link android.graphics.Bitmap}
- * containing the horizontal list of cube faces. Each face must be a square,
- * have the same size as all other faces, and have a width that is a power
- * of 2.
- *
- * @param rs Context to which the allocation will belong.
- * @param b Bitmap with cubemap faces layed out in the following
- * format: right, left, top, bottom, front, back
- * @param mips specifies desired mipmap behaviour for the cubemap
- * @param usage bit field specifying how the cubemap is utilized
- *
- * @return allocation containing cubemap data
- *
- */
- static public Allocation createCubemapFromBitmap(RenderScript rs, Bitmap b,
- MipmapControl mips,
- int usage) {
- rs.validate();
-
- int height = b.getHeight();
- int width = b.getWidth();
-
- if (width % 6 != 0) {
- throw new RSIllegalArgumentException("Cubemap height must be multiple of 6");
- }
- if (width / 6 != height) {
- throw new RSIllegalArgumentException("Only square cube map faces supported");
- }
- boolean isPow2 = (height & (height - 1)) == 0;
- if (!isPow2) {
- throw new RSIllegalArgumentException("Only power of 2 cube faces supported");
- }
-
- Element e = elementFromBitmap(rs, b);
- Type.Builder tb = new Type.Builder(rs, e);
- tb.setX(height);
- tb.setY(height);
- tb.setFaces(true);
- tb.setMipmaps(mips == MipmapControl.MIPMAP_FULL);
- Type t = tb.create();
-
- long id = rs.nAllocationCubeCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
- if(id == 0) {
- throw new RSRuntimeException("Load failed for bitmap " + b + " element " + e);
- }
- return new Allocation(id, rs, t, usage);
- }
-
- /**
- * Creates a non-mipmapped cubemap Allocation for use as a graphics texture
- * from a {@link android.graphics.Bitmap} containing the horizontal list of
- * cube faces. Each face must be a square, have the same size as all other
- * faces, and have a width that is a power of 2.
- *
- * @param rs Context to which the allocation will belong.
- * @param b bitmap with cubemap faces layed out in the following
- * format: right, left, top, bottom, front, back
- *
- * @return allocation containing cubemap data
- *
- */
- static public Allocation createCubemapFromBitmap(RenderScript rs,
- Bitmap b) {
- return createCubemapFromBitmap(rs, b, MipmapControl.MIPMAP_NONE,
- USAGE_GRAPHICS_TEXTURE);
- }
-
- /**
- * Creates a cubemap Allocation from 6 {@link android.graphics.Bitmap}
- * objects containing the cube faces. Each face must be a square, have the
- * same size as all other faces, and have a width that is a power of 2.
- *
- * @param rs Context to which the allocation will belong.
- * @param xpos cubemap face in the positive x direction
- * @param xneg cubemap face in the negative x direction
- * @param ypos cubemap face in the positive y direction
- * @param yneg cubemap face in the negative y direction
- * @param zpos cubemap face in the positive z direction
- * @param zneg cubemap face in the negative z direction
- * @param mips specifies desired mipmap behaviour for the cubemap
- * @param usage bit field specifying how the cubemap is utilized
- *
- * @return allocation containing cubemap data
- *
- */
- static public Allocation createCubemapFromCubeFaces(RenderScript rs,
- Bitmap xpos,
- Bitmap xneg,
- Bitmap ypos,
- Bitmap yneg,
- Bitmap zpos,
- Bitmap zneg,
- MipmapControl mips,
- int usage) {
- /*
- int height = xpos.getHeight();
- if (xpos.getWidth() != height ||
- xneg.getWidth() != height || xneg.getHeight() != height ||
- ypos.getWidth() != height || ypos.getHeight() != height ||
- yneg.getWidth() != height || yneg.getHeight() != height ||
- zpos.getWidth() != height || zpos.getHeight() != height ||
- zneg.getWidth() != height || zneg.getHeight() != height) {
- throw new RSIllegalArgumentException("Only square cube map faces supported");
- }
- boolean isPow2 = (height & (height - 1)) == 0;
- if (!isPow2) {
- throw new RSIllegalArgumentException("Only power of 2 cube faces supported");
- }
-
- Element e = elementFromBitmap(rs, xpos);
- Type.Builder tb = new Type.Builder(rs, e);
- tb.setX(height);
- tb.setY(height);
- tb.setFaces(true);
- tb.setMipmaps(mips == MipmapControl.MIPMAP_FULL);
- Type t = tb.create();
- Allocation cubemap = Allocation.createTyped(rs, t, mips, usage);
-
- AllocationAdapter adapter = AllocationAdapter.create2D(rs, cubemap);
- adapter.setFace(Type.CubemapFace.POSITIVE_X);
- adapter.copyFrom(xpos);
- adapter.setFace(Type.CubemapFace.NEGATIVE_X);
- adapter.copyFrom(xneg);
- adapter.setFace(Type.CubemapFace.POSITIVE_Y);
- adapter.copyFrom(ypos);
- adapter.setFace(Type.CubemapFace.NEGATIVE_Y);
- adapter.copyFrom(yneg);
- adapter.setFace(Type.CubemapFace.POSITIVE_Z);
- adapter.copyFrom(zpos);
- adapter.setFace(Type.CubemapFace.NEGATIVE_Z);
- adapter.copyFrom(zneg);
-
- return cubemap;
- */
- return null;
- }
-
- /**
- * Creates a non-mipmapped cubemap Allocation for use as a sampler input
- * from 6 {@link android.graphics.Bitmap} objects containing the cube
- * faces. Each face must be a square, have the same size as all other faces,
- * and have a width that is a power of 2.
- *
- * @param rs Context to which the allocation will belong.
- * @param xpos cubemap face in the positive x direction
- * @param xneg cubemap face in the negative x direction
- * @param ypos cubemap face in the positive y direction
- * @param yneg cubemap face in the negative y direction
- * @param zpos cubemap face in the positive z direction
- * @param zneg cubemap face in the negative z direction
- *
- * @return allocation containing cubemap data
- *
- */
- static public Allocation createCubemapFromCubeFaces(RenderScript rs,
- Bitmap xpos,
- Bitmap xneg,
- Bitmap ypos,
- Bitmap yneg,
- Bitmap zpos,
- Bitmap zneg) {
- return createCubemapFromCubeFaces(rs, xpos, xneg, ypos, yneg,
- zpos, zneg, MipmapControl.MIPMAP_NONE,
- USAGE_GRAPHICS_TEXTURE);
- }
-
- /**
- * Creates an Allocation from the Bitmap referenced
- * by resource ID.
- *
- * @param rs Context to which the allocation will belong.
- * @param res application resources
- * @param id resource id to load the data from
- * @param mips specifies desired mipmap behaviour for the
- * allocation
- * @param usage bit field specifying how the allocation is
- * utilized
- *
- * @return Allocation containing resource data
- *
- */
- static public Allocation createFromBitmapResource(RenderScript rs,
- Resources res,
- int id,
- MipmapControl mips,
- int usage) {
-
- rs.validate();
- if ((usage & (USAGE_SHARED | USAGE_IO_INPUT | USAGE_IO_OUTPUT)) != 0) {
- throw new RSIllegalArgumentException("Unsupported usage specified.");
- }
- Bitmap b = BitmapFactory.decodeResource(res, id);
- Allocation alloc = createFromBitmap(rs, b, mips, usage);
- b.recycle();
- return alloc;
- }
-
- /**
- * Creates a non-mipmapped Allocation to use as a graphics texture from the
- * {@link android.graphics.Bitmap} referenced by resource ID.
- *
- * <p>This allocation will be created with {@link #USAGE_SCRIPT} and
- * {@link #USAGE_GRAPHICS_TEXTURE}.</p>
- *
- * @param rs Context to which the allocation will belong.
- * @param res application resources
- * @param id resource id to load the data from
- *
- * @return Allocation containing resource data
- *
- */
- static public Allocation createFromBitmapResource(RenderScript rs,
- Resources res,
- int id) {
- return createFromBitmapResource(rs, res, id,
- MipmapControl.MIPMAP_NONE,
- USAGE_SCRIPT | USAGE_GRAPHICS_TEXTURE);
- }
-
- /**
- * Creates an Allocation containing string data encoded in UTF-8 format.
- *
- * @param rs Context to which the allocation will belong.
- * @param str string to create the allocation from
- * @param usage bit field specifying how the allocaiton is
- * utilized
- *
- */
- static public Allocation createFromString(RenderScript rs,
- String str,
- int usage) {
- rs.validate();
- byte[] allocArray = null;
- try {
- allocArray = str.getBytes("UTF-8");
- Allocation alloc = Allocation.createSized(rs, Element.U8(rs), allocArray.length, usage);
- alloc.copyFrom(allocArray);
- return alloc;
- }
- catch (Exception e) {
- throw new RSRuntimeException("Could not convert string to utf-8.");
- }
- }
-
- /**
- * Frees any native resources associated with this object. The
- * primary use is to force immediate cleanup of resources when it is
- * believed the GC will not respond quickly enough.
- * For USAGE_IO_OUTPUT, destroy() implies setSurface(null).
- */
- @Override
- public void destroy() {
- if (mIncCompatAllocation != 0) {
- boolean shouldDestroy = false;
- synchronized(this) {
- if (!mIncAllocDestroyed) {
- shouldDestroy = true;
- mIncAllocDestroyed = true;
- }
- }
-
- if (shouldDestroy) {
- // must include nObjDestroy in the critical section
- ReentrantReadWriteLock.ReadLock rlock = mRS.mRWLock.readLock();
- rlock.lock();
- if(mRS.isAlive()) {
- mRS.nIncObjDestroy(mIncCompatAllocation);
- }
- rlock.unlock();
- mIncCompatAllocation = 0;
- }
- }
- if ((mUsage & (USAGE_IO_INPUT | USAGE_IO_OUTPUT)) != 0) {
- setSurface(null);
- }
- super.destroy();
- }
-
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java b/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
deleted file mode 100644
index bb49600..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- * BaseObj is the base class for all RenderScript objects owned by a RS context.
- * It is responsible for lifetime management and resource tracking. This class
- * should not be used by a user application.
- *
- **/
-public class BaseObj {
- BaseObj(long id, RenderScript rs) {
- rs.validate();
- mRS = rs;
- mID = id;
- mDestroyed = false;
- }
-
- void setID(long id) {
- if (mID != 0) {
- throw new RSRuntimeException("Internal Error, reset of object ID.");
- }
- mID = id;
- }
-
- /**
- * Lookup the native object ID for this object. Primarily used by the
- * generated reflected code.
- *
- * @param rs Context to verify against internal context for
- * match.
- *
- * @return long
- */
- long getID(RenderScript rs) {
- mRS.validate();
- if (mDestroyed) {
- throw new RSInvalidStateException("using a destroyed object.");
- }
- if (mID == 0) {
- throw new RSRuntimeException("Internal error: Object id 0.");
- }
- if ((rs != null) && (rs != mRS)) {
- throw new RSInvalidStateException("using object with mismatched context.");
- }
- return mID;
- }
-
- android.renderscript.BaseObj getNObj() {
- return null;
- }
-
- void checkValid() {
- if ((mID == 0) && (getNObj() == null)) {
- throw new RSIllegalArgumentException("Invalid object.");
- }
- }
-
- private long mID;
- private boolean mDestroyed;
- RenderScript mRS;
-
- private void helpDestroy() {
- boolean shouldDestroy = false;
- synchronized(this) {
- if (!mDestroyed) {
- shouldDestroy = true;
- mDestroyed = true;
- }
- }
-
- if (shouldDestroy) {
- // must include nObjDestroy in the critical section
- ReentrantReadWriteLock.ReadLock rlock = mRS.mRWLock.readLock();
- rlock.lock();
- if(mRS.isAlive()) {
- mRS.nObjDestroy(mID);
- }
- rlock.unlock();
- mRS = null;
- mID = 0;
- }
- }
-
-
- protected void finalize() throws Throwable {
- helpDestroy();
- super.finalize();
- }
-
- /**
- * Frees any native resources associated with this object. The
- * primary use is to force immediate cleanup of resources when it is
- * believed the GC will not respond quickly enough.
- */
- public void destroy() {
- if(mDestroyed) {
- throw new RSInvalidStateException("Object already destroyed.");
- }
- helpDestroy();
- }
-
- /**
- * Calculates the hash code value for a BaseObj.
- *
- * @return int
- */
- @Override
- public int hashCode() {
- return (int)((mID & 0xfffffff) ^ (mID >> 32));
- }
-
- /**
- * Compare the current BaseObj with another BaseObj for equality.
- *
- * @param obj The object to check equality with.
- *
- * @return boolean
- */
- @Override
- public boolean equals(Object obj) {
- // Early-out check to see if both BaseObjs are actually the same
- if (this == obj)
- return true;
-
- if (obj == null) {
- return false;
- }
-
- if (getClass() != obj.getClass()) {
- return false;
- }
-
- BaseObj b = (BaseObj) obj;
- return mID == b.mID;
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Byte2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Byte2.java
deleted file mode 100644
index 2371077..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Byte2.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript byte2 type back to the Android system.
- *
- **/
-public class Byte2 {
- public Byte2() {
- }
-
- public Byte2(byte initX, byte initY) {
- x = initX;
- y = initY;
- }
-
- public byte x;
- public byte y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Byte3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Byte3.java
deleted file mode 100644
index 4ed6af6..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Byte3.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript byte3 type back to the Android system.
- *
- **/
-public class Byte3 {
- public Byte3() {
- }
-
- public Byte3(byte initX, byte initY, byte initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public byte x;
- public byte y;
- public byte z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Byte4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Byte4.java
deleted file mode 100644
index 715a718..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Byte4.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript byte4 type back to the Android system.
- *
- **/
-public class Byte4 {
- public Byte4() {
- }
-
- public Byte4(byte initX, byte initY, byte initZ, byte initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public byte x;
- public byte y;
- public byte z;
- public byte w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Double2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Double2.java
deleted file mode 100644
index cd73363..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Double2.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript double2 type back
- * to the Android system.
- *
- **/
-public class Double2 {
- public Double2() {
- }
-
- public Double2(double initX, double initY) {
- x = initX;
- y = initY;
- }
-
- public double x;
- public double y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Double3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Double3.java
deleted file mode 100644
index 38a46a6..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Double3.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript double3 type back
- * to the Android system.
- *
- **/
-public class Double3 {
- public Double3() {
- }
-
- public Double3(double initX, double initY, double initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public double x;
- public double y;
- public double z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Double4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Double4.java
deleted file mode 100644
index 6de0fa8..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Double4.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript double4 type back
- * to the Android system.
- *
- **/
-public class Double4 {
- public Double4() {
- }
-
- public Double4(double initX, double initY, double initZ, double initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public double x;
- public double y;
- public double z;
- public double w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Element.java b/v8/renderscript/java/src/android/support/v8/renderscript/Element.java
deleted file mode 100644
index 135d854..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Element.java
+++ /dev/null
@@ -1,1020 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.reflect.Field;
-
-import android.util.Log;
-
-/**
- * <p>An Element represents one item within an {@link
- * android.support.v8.renderscript.Allocation}. An Element is roughly
- * equivalent to a C type in a RenderScript kernel. Elements may be basic or
- * complex. Some basic elements are</p> <ul> <li>A single float value
- * (equivalent to a float in a kernel)</li> <li>A four-element float vector
- * (equivalent to a float4 in a kernel)</li> <li>An unsigned 32-bit integer
- * (equivalent to an unsigned int in a kernel)</li> <li>A single signed 8-bit
- * integer (equivalent to a char in a kernel)</li> </ul> <p>A complex element is
- * roughly equivalent to a C struct and contains a number of basic or complex
- * Elements. From Java code, a complex element contains a list of sub-elements
- * and names that represents a particular data structure. Structs used in RS
- * scripts are available to Java code by using the
- * {@code ScriptField_structname} class that is reflected from a particular
- * script.</p>
- *
- * <p>Basic Elements are comprised of a {@link
- * android.support.v8.renderscript.Element.DataType} and a {@link
- * android.support.v8.renderscript.Element.DataKind}. The DataType encodes C
- * type information of an Element, while the DataKind encodes how that Element
- * should be interpreted by a {@link android.support.v8.renderscript.Sampler}.
- * Note that {@link android.support.v8.renderscript.Allocation} objects with
- * DataKind {@link android.support.v8.renderscript.Element.DataKind#USER} cannot
- * be used as input for a {@link android.support.v8.renderscript.Sampler}. In
- * general, {@link android.support.v8.renderscript.Allocation} objects that are
- * intended for use with a {@link android.support.v8.renderscript.Sampler}
- * should use bitmap-derived Elements such as
- * {@link android.support.v8.renderscript.Element#RGBA_8888} or {@link
- * android.support.v8.renderscript#Element.A_8}.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about creating an application that uses RenderScript,
- * read the
- * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a>
- * developer guide.</p>
- * </div>
- **/
-public class Element extends BaseObj {
- int mSize;
- Element[] mElements;
- String[] mElementNames;
- int[] mArraySizes;
- int[] mOffsetInBytes;
- int[] mVisibleElementMap;
-
- DataType mType;
- DataKind mKind;
- boolean mNormalized;
- int mVectorSize;
-
- private void updateVisibleSubElements() {
- if (mElements == null) {
- return;
- }
-
- int noPaddingFieldCount = 0;
- int fieldCount = mElementNames.length;
- // Find out how many elements are not padding
- for (int ct = 0; ct < fieldCount; ct ++) {
- if (mElementNames[ct].charAt(0) != '#') {
- noPaddingFieldCount ++;
- }
- }
- mVisibleElementMap = new int[noPaddingFieldCount];
-
- // Make a map that points us at non-padding elements
- for (int ct = 0, ctNoPadding = 0; ct < fieldCount; ct ++) {
- if (mElementNames[ct].charAt(0) != '#') {
- mVisibleElementMap[ctNoPadding ++] = ct;
- }
- }
- }
-
- /**
- * @return element size in bytes
- */
- public int getBytesSize() {
- return mSize;
- }
-
- /**
- * Returns the number of vector components. 2 for float2, 4 for
- * float4, etc.
- * @return element vector size
- */
- public int getVectorSize() {
- return mVectorSize;
- }
-
-
- /**
- * DataType represents the basic type information for a basic element. The
- * naming convention follows. For numeric types it is FLOAT,
- * SIGNED, or UNSIGNED followed by the _BITS where BITS is the
- * size of the data. BOOLEAN is a true / false (1,0)
- * represented in an 8 bit container. The UNSIGNED variants
- * with multiple bit definitions are for packed graphical data
- * formats and represent vectors with per vector member sizes
- * which are treated as a single unit for packing and alignment
- * purposes.
- *
- * MATRIX the three matrix types contain FLOAT_32 elements and are treated
- * as 32 bits for alignment purposes.
- *
- * RS_* objects. 32 bit opaque handles.
- */
- public enum DataType {
- NONE (0, 0),
- //FLOAT_16 (1, 2),
- FLOAT_32 (2, 4),
- FLOAT_64 (3, 8),
- SIGNED_8 (4, 1),
- SIGNED_16 (5, 2),
- SIGNED_32 (6, 4),
- SIGNED_64 (7, 8),
- UNSIGNED_8 (8, 1),
- UNSIGNED_16 (9, 2),
- UNSIGNED_32 (10, 4),
- UNSIGNED_64 (11, 8),
-
- BOOLEAN(12, 1),
-
- UNSIGNED_5_6_5 (13, 2),
- UNSIGNED_5_5_5_1 (14, 2),
- UNSIGNED_4_4_4_4 (15, 2),
-
- MATRIX_4X4 (16, 64),
- MATRIX_3X3 (17, 36),
- MATRIX_2X2 (18, 16),
-
- RS_ELEMENT (1000),
- RS_TYPE (1001),
- RS_ALLOCATION (1002),
- RS_SAMPLER (1003),
- RS_SCRIPT (1004);
-
- int mID;
- int mSize;
- DataType(int id, int size) {
- mID = id;
- mSize = size;
- }
-
- DataType(int id) {
- mID = id;
- mSize = 4;
- if (RenderScript.sPointerSize == 8) {
- mSize = 32;
- }
- }
- }
-
- /**
- * The special interpretation of the data if required. This is primarly
- * useful for graphical data. USER indicates no special interpretation is
- * expected. PIXEL is used in conjunction with the standard data types for
- * representing texture formats.
- */
- public enum DataKind {
- USER (0),
-
- PIXEL_L (7),
- PIXEL_A (8),
- PIXEL_LA (9),
- PIXEL_RGB (10),
- PIXEL_RGBA (11),
- PIXEL_DEPTH (12),
- PIXEL_YUV(13);
-
- int mID;
- DataKind(int id) {
- mID = id;
- }
- }
-
- /**
- * Return if a element is too complex for use as a data source for a Mesh or
- * a Program.
- *
- * @return boolean
- */
- public boolean isComplex() {
- if (mElements == null) {
- return false;
- }
- for (int ct=0; ct < mElements.length; ct++) {
- if (mElements[ct].mElements != null) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Elements could be simple, such as an int or a float, or a
- * structure with multiple sub elements, such as a collection of
- * floats, float2, float4. This function returns zero for simple
- * elements or the number of sub-elements otherwise.
- * @return number of sub-elements in this element
- */
- public int getSubElementCount() {
- if (mVisibleElementMap == null) {
- return 0;
- }
- return mVisibleElementMap.length;
- }
-
- /**
- * For complex elements, this function will return the
- * sub-element at index
- * @param index index of the sub-element to return
- * @return sub-element in this element at given index
- */
- public Element getSubElement(int index) {
- if (mVisibleElementMap == null) {
- throw new RSIllegalArgumentException("Element contains no sub-elements");
- }
- if (index < 0 || index >= mVisibleElementMap.length) {
- throw new RSIllegalArgumentException("Illegal sub-element index");
- }
- return mElements[mVisibleElementMap[index]];
- }
-
- /**
- * For complex elements, this function will return the
- * sub-element name at index
- * @param index index of the sub-element
- * @return sub-element in this element at given index
- */
- public String getSubElementName(int index) {
- if (mVisibleElementMap == null) {
- throw new RSIllegalArgumentException("Element contains no sub-elements");
- }
- if (index < 0 || index >= mVisibleElementMap.length) {
- throw new RSIllegalArgumentException("Illegal sub-element index");
- }
- return mElementNames[mVisibleElementMap[index]];
- }
-
- /**
- * For complex elements, some sub-elements could be statically
- * sized arrays. This function will return the array size for
- * sub-element at index
- * @param index index of the sub-element
- * @return array size of sub-element in this element at given index
- */
- public int getSubElementArraySize(int index) {
- if (mVisibleElementMap == null) {
- throw new RSIllegalArgumentException("Element contains no sub-elements");
- }
- if (index < 0 || index >= mVisibleElementMap.length) {
- throw new RSIllegalArgumentException("Illegal sub-element index");
- }
- return mArraySizes[mVisibleElementMap[index]];
- }
-
- /**
- * This function specifies the location of a sub-element within
- * the element
- * @param index index of the sub-element
- * @return offset in bytes of sub-element in this element at given index
- */
- public int getSubElementOffsetBytes(int index) {
- if (mVisibleElementMap == null) {
- throw new RSIllegalArgumentException("Element contains no sub-elements");
- }
- if (index < 0 || index >= mVisibleElementMap.length) {
- throw new RSIllegalArgumentException("Illegal sub-element index");
- }
- return mOffsetInBytes[mVisibleElementMap[index]];
- }
-
- /**
- * @return element data type
- */
- public DataType getDataType() {
- return mType;
- }
-
- /**
- * @return element data kind
- */
- public DataKind getDataKind() {
- return mKind;
- }
-
- /**
- * Utility function for returning an Element containing a single Boolean.
- *
- * @param rs Context to which the element will belong.
- *
- * @return Element
- */
- public static Element BOOLEAN(RenderScript rs) {
- if(rs.mElement_BOOLEAN == null) {
- rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN);
- }
- return rs.mElement_BOOLEAN;
- }
-
- /**
- * Utility function for returning an Element containing a single UNSIGNED_8.
- *
- * @param rs Context to which the element will belong.
- *
- * @return Element
- */
- public static Element U8(RenderScript rs) {
- if(rs.mElement_U8 == null) {
- rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8);
- }
- return rs.mElement_U8;
- }
-
- /**
- * Utility function for returning an Element containing a single SIGNED_8.
- *
- * @param rs Context to which the element will belong.
- *
- * @return Element
- */
- public static Element I8(RenderScript rs) {
- if(rs.mElement_I8 == null) {
- rs.mElement_I8 = createUser(rs, DataType.SIGNED_8);
- }
- return rs.mElement_I8;
- }
-
- public static Element U16(RenderScript rs) {
- if(rs.mElement_U16 == null) {
- rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16);
- }
- return rs.mElement_U16;
- }
-
- public static Element I16(RenderScript rs) {
- if(rs.mElement_I16 == null) {
- rs.mElement_I16 = createUser(rs, DataType.SIGNED_16);
- }
- return rs.mElement_I16;
- }
-
- public static Element U32(RenderScript rs) {
- if(rs.mElement_U32 == null) {
- rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32);
- }
- return rs.mElement_U32;
- }
-
- public static Element I32(RenderScript rs) {
- if(rs.mElement_I32 == null) {
- rs.mElement_I32 = createUser(rs, DataType.SIGNED_32);
- }
- return rs.mElement_I32;
- }
-
- public static Element U64(RenderScript rs) {
- if(rs.mElement_U64 == null) {
- rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64);
- }
- return rs.mElement_U64;
- }
-
- public static Element I64(RenderScript rs) {
- if(rs.mElement_I64 == null) {
- rs.mElement_I64 = createUser(rs, DataType.SIGNED_64);
- }
- return rs.mElement_I64;
- }
-
- public static Element F32(RenderScript rs) {
- if(rs.mElement_F32 == null) {
- rs.mElement_F32 = createUser(rs, DataType.FLOAT_32);
- }
- return rs.mElement_F32;
- }
-
- public static Element F64(RenderScript rs) {
- if(rs.mElement_F64 == null) {
- rs.mElement_F64 = createUser(rs, DataType.FLOAT_64);
- }
- return rs.mElement_F64;
- }
-
- public static Element ELEMENT(RenderScript rs) {
- if(rs.mElement_ELEMENT == null) {
- rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT);
- }
- return rs.mElement_ELEMENT;
- }
-
- public static Element TYPE(RenderScript rs) {
- if(rs.mElement_TYPE == null) {
- rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE);
- }
- return rs.mElement_TYPE;
- }
-
- public static Element ALLOCATION(RenderScript rs) {
- if(rs.mElement_ALLOCATION == null) {
- rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION);
- }
- return rs.mElement_ALLOCATION;
- }
-
- public static Element SAMPLER(RenderScript rs) {
- if(rs.mElement_SAMPLER == null) {
- rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER);
- }
- return rs.mElement_SAMPLER;
- }
-
- public static Element SCRIPT(RenderScript rs) {
- if(rs.mElement_SCRIPT == null) {
- rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT);
- }
- return rs.mElement_SCRIPT;
- }
-
-
- public static Element A_8(RenderScript rs) {
- if(rs.mElement_A_8 == null) {
- rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A);
- }
- return rs.mElement_A_8;
- }
-
- public static Element RGB_565(RenderScript rs) {
- if(rs.mElement_RGB_565 == null) {
- rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB);
- }
- return rs.mElement_RGB_565;
- }
-
- public static Element RGB_888(RenderScript rs) {
- if(rs.mElement_RGB_888 == null) {
- rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB);
- }
- return rs.mElement_RGB_888;
- }
-
- public static Element RGBA_5551(RenderScript rs) {
- if(rs.mElement_RGBA_5551 == null) {
- rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA);
- }
- return rs.mElement_RGBA_5551;
- }
-
- public static Element RGBA_4444(RenderScript rs) {
- if(rs.mElement_RGBA_4444 == null) {
- rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA);
- }
- return rs.mElement_RGBA_4444;
- }
-
- public static Element RGBA_8888(RenderScript rs) {
- if(rs.mElement_RGBA_8888 == null) {
- rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA);
- }
- return rs.mElement_RGBA_8888;
- }
-
- public static Element F32_2(RenderScript rs) {
- if(rs.mElement_FLOAT_2 == null) {
- rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2);
- }
- return rs.mElement_FLOAT_2;
- }
-
- public static Element F32_3(RenderScript rs) {
- if(rs.mElement_FLOAT_3 == null) {
- rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3);
- }
- return rs.mElement_FLOAT_3;
- }
-
- public static Element F32_4(RenderScript rs) {
- if(rs.mElement_FLOAT_4 == null) {
- rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4);
- }
- return rs.mElement_FLOAT_4;
- }
-
- public static Element F64_2(RenderScript rs) {
- if(rs.mElement_DOUBLE_2 == null) {
- rs.mElement_DOUBLE_2 = createVector(rs, DataType.FLOAT_64, 2);
- }
- return rs.mElement_DOUBLE_2;
- }
-
- public static Element F64_3(RenderScript rs) {
- if(rs.mElement_DOUBLE_3 == null) {
- rs.mElement_DOUBLE_3 = createVector(rs, DataType.FLOAT_64, 3);
- }
- return rs.mElement_DOUBLE_3;
- }
-
- public static Element F64_4(RenderScript rs) {
- if(rs.mElement_DOUBLE_4 == null) {
- rs.mElement_DOUBLE_4 = createVector(rs, DataType.FLOAT_64, 4);
- }
- return rs.mElement_DOUBLE_4;
- }
-
- public static Element U8_2(RenderScript rs) {
- if(rs.mElement_UCHAR_2 == null) {
- rs.mElement_UCHAR_2 = createVector(rs, DataType.UNSIGNED_8, 2);
- }
- return rs.mElement_UCHAR_2;
- }
-
- public static Element U8_3(RenderScript rs) {
- if(rs.mElement_UCHAR_3 == null) {
- rs.mElement_UCHAR_3 = createVector(rs, DataType.UNSIGNED_8, 3);
- }
- return rs.mElement_UCHAR_3;
- }
-
- public static Element U8_4(RenderScript rs) {
- if(rs.mElement_UCHAR_4 == null) {
- rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4);
- }
- return rs.mElement_UCHAR_4;
- }
-
- public static Element I8_2(RenderScript rs) {
- if(rs.mElement_CHAR_2 == null) {
- rs.mElement_CHAR_2 = createVector(rs, DataType.SIGNED_8, 2);
- }
- return rs.mElement_CHAR_2;
- }
-
- public static Element I8_3(RenderScript rs) {
- if(rs.mElement_CHAR_3 == null) {
- rs.mElement_CHAR_3 = createVector(rs, DataType.SIGNED_8, 3);
- }
- return rs.mElement_CHAR_3;
- }
-
- public static Element I8_4(RenderScript rs) {
- if(rs.mElement_CHAR_4 == null) {
- rs.mElement_CHAR_4 = createVector(rs, DataType.SIGNED_8, 4);
- }
- return rs.mElement_CHAR_4;
- }
-
- public static Element U16_2(RenderScript rs) {
- if(rs.mElement_USHORT_2 == null) {
- rs.mElement_USHORT_2 = createVector(rs, DataType.UNSIGNED_16, 2);
- }
- return rs.mElement_USHORT_2;
- }
-
- public static Element U16_3(RenderScript rs) {
- if(rs.mElement_USHORT_3 == null) {
- rs.mElement_USHORT_3 = createVector(rs, DataType.UNSIGNED_16, 3);
- }
- return rs.mElement_USHORT_3;
- }
-
- public static Element U16_4(RenderScript rs) {
- if(rs.mElement_USHORT_4 == null) {
- rs.mElement_USHORT_4 = createVector(rs, DataType.UNSIGNED_16, 4);
- }
- return rs.mElement_USHORT_4;
- }
-
- public static Element I16_2(RenderScript rs) {
- if(rs.mElement_SHORT_2 == null) {
- rs.mElement_SHORT_2 = createVector(rs, DataType.SIGNED_16, 2);
- }
- return rs.mElement_SHORT_2;
- }
-
- public static Element I16_3(RenderScript rs) {
- if(rs.mElement_SHORT_3 == null) {
- rs.mElement_SHORT_3 = createVector(rs, DataType.SIGNED_16, 3);
- }
- return rs.mElement_SHORT_3;
- }
-
- public static Element I16_4(RenderScript rs) {
- if(rs.mElement_SHORT_4 == null) {
- rs.mElement_SHORT_4 = createVector(rs, DataType.SIGNED_16, 4);
- }
- return rs.mElement_SHORT_4;
- }
-
- public static Element U32_2(RenderScript rs) {
- if(rs.mElement_UINT_2 == null) {
- rs.mElement_UINT_2 = createVector(rs, DataType.UNSIGNED_32, 2);
- }
- return rs.mElement_UINT_2;
- }
-
- public static Element U32_3(RenderScript rs) {
- if(rs.mElement_UINT_3 == null) {
- rs.mElement_UINT_3 = createVector(rs, DataType.UNSIGNED_32, 3);
- }
- return rs.mElement_UINT_3;
- }
-
- public static Element U32_4(RenderScript rs) {
- if(rs.mElement_UINT_4 == null) {
- rs.mElement_UINT_4 = createVector(rs, DataType.UNSIGNED_32, 4);
- }
- return rs.mElement_UINT_4;
- }
-
- public static Element I32_2(RenderScript rs) {
- if(rs.mElement_INT_2 == null) {
- rs.mElement_INT_2 = createVector(rs, DataType.SIGNED_32, 2);
- }
- return rs.mElement_INT_2;
- }
-
- public static Element I32_3(RenderScript rs) {
- if(rs.mElement_INT_3 == null) {
- rs.mElement_INT_3 = createVector(rs, DataType.SIGNED_32, 3);
- }
- return rs.mElement_INT_3;
- }
-
- public static Element I32_4(RenderScript rs) {
- if(rs.mElement_INT_4 == null) {
- rs.mElement_INT_4 = createVector(rs, DataType.SIGNED_32, 4);
- }
- return rs.mElement_INT_4;
- }
-
- public static Element U64_2(RenderScript rs) {
- if(rs.mElement_ULONG_2 == null) {
- rs.mElement_ULONG_2 = createVector(rs, DataType.UNSIGNED_64, 2);
- }
- return rs.mElement_ULONG_2;
- }
-
- public static Element U64_3(RenderScript rs) {
- if(rs.mElement_ULONG_3 == null) {
- rs.mElement_ULONG_3 = createVector(rs, DataType.UNSIGNED_64, 3);
- }
- return rs.mElement_ULONG_3;
- }
-
- public static Element U64_4(RenderScript rs) {
- if(rs.mElement_ULONG_4 == null) {
- rs.mElement_ULONG_4 = createVector(rs, DataType.UNSIGNED_64, 4);
- }
- return rs.mElement_ULONG_4;
- }
-
- public static Element I64_2(RenderScript rs) {
- if(rs.mElement_LONG_2 == null) {
- rs.mElement_LONG_2 = createVector(rs, DataType.SIGNED_64, 2);
- }
- return rs.mElement_LONG_2;
- }
-
- public static Element I64_3(RenderScript rs) {
- if(rs.mElement_LONG_3 == null) {
- rs.mElement_LONG_3 = createVector(rs, DataType.SIGNED_64, 3);
- }
- return rs.mElement_LONG_3;
- }
-
- public static Element I64_4(RenderScript rs) {
- if(rs.mElement_LONG_4 == null) {
- rs.mElement_LONG_4 = createVector(rs, DataType.SIGNED_64, 4);
- }
- return rs.mElement_LONG_4;
- }
-
- public static Element MATRIX_4X4(RenderScript rs) {
- if(rs.mElement_MATRIX_4X4 == null) {
- rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4);
- }
- return rs.mElement_MATRIX_4X4;
- }
-
- public static Element MATRIX_3X3(RenderScript rs) {
- if(rs.mElement_MATRIX_3X3 == null) {
- rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3);
- }
- return rs.mElement_MATRIX_3X3;
- }
-
- public static Element MATRIX_2X2(RenderScript rs) {
- if(rs.mElement_MATRIX_2X2 == null) {
- rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2);
- }
- return rs.mElement_MATRIX_2X2;
- }
-
- Element(long id, RenderScript rs, Element[] e, String[] n, int[] as) {
- super(id, rs);
- mSize = 0;
- mVectorSize = 1;
- mElements = e;
- mElementNames = n;
- mArraySizes = as;
- mType = DataType.NONE;
- mKind = DataKind.USER;
- mOffsetInBytes = new int[mElements.length];
- for (int ct = 0; ct < mElements.length; ct++ ) {
- mOffsetInBytes[ct] = mSize;
- mSize += mElements[ct].mSize * mArraySizes[ct];
- }
- updateVisibleSubElements();
- }
-
- Element(long id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) {
- super(id, rs);
- if ((dt != DataType.UNSIGNED_5_6_5) &&
- (dt != DataType.UNSIGNED_4_4_4_4) &&
- (dt != DataType.UNSIGNED_5_5_5_1)) {
- if (size == 3) {
- mSize = dt.mSize * 4;
- } else {
- mSize = dt.mSize * size;
- }
- } else {
- mSize = dt.mSize;
- }
- mType = dt;
- mKind = dk;
- mNormalized = norm;
- mVectorSize = size;
- }
-
- Element(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /*
- * Get an identical dummy Element for Compat Context
- *
- */
- public long getDummyElement(RenderScript mRS) {
- return mRS.nIncElementCreate(mType.mID, mKind.mID, mNormalized, mVectorSize);
- }
- /**
- * Create a custom Element of the specified DataType. The DataKind will be
- * set to USER and the vector size to 1 indicating non-vector.
- *
- * @param rs The context associated with the new Element.
- * @param dt The DataType for the new element.
- * @return Element
- */
- static Element createUser(RenderScript rs, DataType dt) {
- DataKind dk = DataKind.USER;
- boolean norm = false;
- int vecSize = 1;
- long id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize);
- return new Element(id, rs, dt, dk, norm, vecSize);
- }
-
- /**
- * Create a custom vector element of the specified DataType and vector size.
- * DataKind will be set to USER. Only primitive types (FLOAT_32, FLOAT_64,
- * SIGNED_8, SIGNED_16, SIGNED_32, SIGNED_64, UNSIGNED_8, UNSIGNED_16,
- * UNSIGNED_32, UNSIGNED_64, BOOLEAN) are supported.
- *
- * @param rs The context associated with the new Element.
- * @param dt The DataType for the new Element.
- * @param size Vector size for the new Element. Range 2-4 inclusive
- * supported.
- *
- * @return Element
- */
- public static Element createVector(RenderScript rs, DataType dt, int size) {
- if (size < 2 || size > 4) {
- throw new RSIllegalArgumentException("Vector size out of range 2-4.");
- }
-
- switch (dt) {
- // Support only primitive integer/float/boolean types as vectors.
- case FLOAT_32:
- case FLOAT_64:
- case SIGNED_8:
- case SIGNED_16:
- case SIGNED_32:
- case SIGNED_64:
- case UNSIGNED_8:
- case UNSIGNED_16:
- case UNSIGNED_32:
- case UNSIGNED_64:
- case BOOLEAN: {
- DataKind dk = DataKind.USER;
- boolean norm = false;
- long id = rs.nElementCreate(dt.mID, dk.mID, norm, size);
- return new Element(id, rs, dt, dk, norm, size);
- }
-
- default: {
- throw new RSIllegalArgumentException("Cannot create vector of " +
- "non-primitive type.");
- }
- }
- }
-
- /**
- * Create a new pixel Element type. A matching DataType and DataKind must
- * be provided. The DataType and DataKind must contain the same number of
- * components. Vector size will be set to 1.
- *
- * @param rs The context associated with the new Element.
- * @param dt The DataType for the new element.
- * @param dk The DataKind to specify the mapping of each component in the
- * DataType.
- *
- * @return Element
- */
- public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) {
- if (!(dk == DataKind.PIXEL_L ||
- dk == DataKind.PIXEL_A ||
- dk == DataKind.PIXEL_LA ||
- dk == DataKind.PIXEL_RGB ||
- dk == DataKind.PIXEL_RGBA ||
- dk == DataKind.PIXEL_DEPTH ||
- dk == DataKind.PIXEL_YUV)) {
- throw new RSIllegalArgumentException("Unsupported DataKind");
- }
- if (!(dt == DataType.UNSIGNED_8 ||
- dt == DataType.UNSIGNED_16 ||
- dt == DataType.UNSIGNED_5_6_5 ||
- dt == DataType.UNSIGNED_4_4_4_4 ||
- dt == DataType.UNSIGNED_5_5_5_1)) {
- throw new RSIllegalArgumentException("Unsupported DataType");
- }
- if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) {
- throw new RSIllegalArgumentException("Bad kind and type combo");
- }
- if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) {
- throw new RSIllegalArgumentException("Bad kind and type combo");
- }
- if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) {
- throw new RSIllegalArgumentException("Bad kind and type combo");
- }
- if (dt == DataType.UNSIGNED_16 &&
- dk != DataKind.PIXEL_DEPTH) {
- throw new RSIllegalArgumentException("Bad kind and type combo");
- }
-
- int size = 1;
- switch (dk) {
- case PIXEL_LA:
- size = 2;
- break;
- case PIXEL_RGB:
- size = 3;
- break;
- case PIXEL_RGBA:
- size = 4;
- break;
- }
-
- boolean norm = true;
- long id = rs.nElementCreate(dt.mID, dk.mID, norm, size);
- return new Element(id, rs, dt, dk, norm, size);
- }
-
- /**
- * Check if the current Element is compatible with another Element.
- * Primitive Elements are compatible if they share the same underlying
- * size and type (i.e. U8 is compatible with A_8). User-defined Elements
- * must be equal in order to be compatible. This requires strict name
- * equivalence for all sub-Elements (in addition to structural equivalence).
- *
- * @param e The Element to check compatibility with.
- *
- * @return boolean true if the Elements are compatible, otherwise false.
- */
- public boolean isCompatible(Element e) {
- // Try strict BaseObj equality to start with.
- if (this.equals(e)) {
- return true;
- }
-
- // Ignore mKind because it is allowed to be different (user vs. pixel).
- // We also ignore mNormalized because it can be different. The mType
- // field must not be NONE since we require name equivalence for
- // all user-created Elements.
- return ((mSize == e.mSize) &&
- (mType != DataType.NONE) &&
- (mType == e.mType) &&
- (mVectorSize == e.mVectorSize));
- }
-
- /**
- * Builder class for producing complex elements with matching field and name
- * pairs. The builder starts empty. The order in which elements are added
- * is retained for the layout in memory.
- *
- */
- public static class Builder {
-
- RenderScript mRS;
- Element[] mElements;
- String[] mElementNames;
- int[] mArraySizes;
- int mCount;
- int mSkipPadding;
-
- /**
- * Create a builder object.
- *
- * @param rs
- */
- public Builder(RenderScript rs) {
- mRS = rs;
- mCount = 0;
- mElements = new Element[8];
- mElementNames = new String[8];
- mArraySizes = new int[8];
- }
-
- /**
- * Add an array of elements to this element.
- *
- * @param element
- * @param name
- * @param arraySize
- */
- public Builder add(Element element, String name, int arraySize) {
- if (arraySize < 1) {
- throw new RSIllegalArgumentException("Array size cannot be less than 1.");
- }
-
- // Skip padding fields after a vector 3 type.
- if (mSkipPadding != 0) {
- if (name.startsWith("#padding_")) {
- mSkipPadding = 0;
- return this;
- }
- }
-
- if (element.mVectorSize == 3) {
- mSkipPadding = 1;
- } else {
- mSkipPadding = 0;
- }
-
- if(mCount == mElements.length) {
- Element[] e = new Element[mCount + 8];
- String[] s = new String[mCount + 8];
- int[] as = new int[mCount + 8];
- System.arraycopy(mElements, 0, e, 0, mCount);
- System.arraycopy(mElementNames, 0, s, 0, mCount);
- System.arraycopy(mArraySizes, 0, as, 0, mCount);
- mElements = e;
- mElementNames = s;
- mArraySizes = as;
- }
- mElements[mCount] = element;
- mElementNames[mCount] = name;
- mArraySizes[mCount] = arraySize;
- mCount++;
-
- return this;
- }
-
- /**
- * Add a single element to this Element.
- *
- * @param element
- * @param name
- */
- public Builder add(Element element, String name) {
- return add(element, name, 1);
- }
-
- /**
- * Create the element from this builder.
- *
- *
- * @return Element
- */
- public Element create() {
- mRS.validate();
- Element[] ein = new Element[mCount];
- String[] sin = new String[mCount];
- int[] asin = new int[mCount];
- java.lang.System.arraycopy(mElements, 0, ein, 0, mCount);
- java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount);
- java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount);
-
- long[] ids = new long[ein.length];
- for (int ct = 0; ct < ein.length; ct++ ) {
- ids[ct] = ein[ct].getID(mRS);
- }
-
- long id = mRS.nElementCreate2(ids, sin, asin);
- return new Element(id, mRS, ein, sin, asin);
- }
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
deleted file mode 100644
index 5f61920..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.support.v8.renderscript.RenderScript;
-import java.util.BitSet;
-
-/**
- * Utility class for packing arguments and structures from Android system objects to
- * RenderScript objects.
- *
- * This class is only intended to be used to support the
- * reflected code generated by the RS tool chain. It should not
- * be called directly.
- *
- **/
-public class FieldPacker {
- public FieldPacker(int len) {
- mPos = 0;
- mLen = len;
- mData = new byte[len];
- mAlignment = new BitSet();
- }
-
- public FieldPacker(byte[] data) {
- // Advance mPos to the end of the buffer, since we are copying in the
- // full data input.
- mPos = data.length;
- mLen = data.length;
- mData = data;
- mAlignment = new BitSet();
- // TODO: We should either have an actual FieldPacker copy constructor
- // or drop support for computing alignment like this. As it stands,
- // subAlign() can never work correctly for copied FieldPacker objects.
- }
-
- static FieldPacker createFromArray(Object[] args) {
- FieldPacker fp = new FieldPacker(RenderScript.sPointerSize * 8);
- for (Object arg : args) {
- fp.addSafely(arg);
- }
- fp.resize(fp.mPos);
- return fp;
- }
-
- public void align(int v) {
- if ((v <= 0) || ((v & (v - 1)) != 0)) {
- throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v);
- }
-
- while ((mPos & (v - 1)) != 0) {
- mAlignment.flip(mPos);
- mData[mPos++] = 0;
- }
- }
-
- public void subalign(int v) {
- if ((v & (v - 1)) != 0) {
- throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v);
- }
-
- while ((mPos & (v - 1)) != 0) {
- mPos--;
- }
-
- if (mPos > 0) {
- while (mAlignment.get(mPos - 1) == true) {
- mPos--;
- mAlignment.flip(mPos);
- }
- }
-
- }
-
- public void reset() {
- mPos = 0;
- }
- public void reset(int i) {
- if ((i < 0) || (i > mLen)) {
- throw new RSIllegalArgumentException("out of range argument: " + i);
- }
- mPos = i;
- }
-
- public void skip(int i) {
- int res = mPos + i;
- if ((res < 0) || (res > mLen)) {
- throw new RSIllegalArgumentException("out of range argument: " + i);
- }
- mPos = res;
- }
-
- public void addI8(byte v) {
- mData[mPos++] = v;
- }
-
- public byte subI8() {
- subalign(1);
- return mData[--mPos];
- }
-
- public void addI16(short v) {
- align(2);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)(v >> 8);
- }
-
- public short subI16() {
- subalign(2);
- short v = 0;
- v = (short)((mData[--mPos] & 0xff) << 8);
- v = (short)(v | (short)(mData[--mPos] & 0xff));
- return v;
- }
-
-
- public void addI32(int v) {
- align(4);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)((v >> 8) & 0xff);
- mData[mPos++] = (byte)((v >> 16) & 0xff);
- mData[mPos++] = (byte)((v >> 24) & 0xff);
- }
-
- public int subI32() {
- subalign(4);
- int v = 0;
- v = ((mData[--mPos] & 0xff) << 24);
- v = v | ((mData[--mPos] & 0xff) << 16);
- v = v | ((mData[--mPos] & 0xff) << 8);
- v = v | ((mData[--mPos] & 0xff));
- return v;
- }
-
-
- public void addI64(long v) {
- align(8);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)((v >> 8) & 0xff);
- mData[mPos++] = (byte)((v >> 16) & 0xff);
- mData[mPos++] = (byte)((v >> 24) & 0xff);
- mData[mPos++] = (byte)((v >> 32) & 0xff);
- mData[mPos++] = (byte)((v >> 40) & 0xff);
- mData[mPos++] = (byte)((v >> 48) & 0xff);
- mData[mPos++] = (byte)((v >> 56) & 0xff);
- }
-
- public long subI64() {
- subalign(8);
- long v = 0;
- byte x = 0;
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 56l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 48l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 40l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 32l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 24l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 16l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff) << 8l);
- x = ((mData[--mPos]));
- v = (long)(v | (((long)x) & 0xff));
- return v;
- }
-
- public void addU8(short v) {
- if ((v < 0) || (v > 0xff)) {
- android.util.Log.e("rs", "FieldPacker.addU8( " + v + " )");
- throw new IllegalArgumentException("Saving value out of range for type");
- }
- mData[mPos++] = (byte)v;
- }
-
- public void addU16(int v) {
- if ((v < 0) || (v > 0xffff)) {
- android.util.Log.e("rs", "FieldPacker.addU16( " + v + " )");
- throw new IllegalArgumentException("Saving value out of range for type");
- }
- align(2);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)(v >> 8);
- }
-
- public void addU32(long v) {
- if ((v < 0) || (v > 0xffffffffL)) {
- android.util.Log.e("rs", "FieldPacker.addU32( " + v + " )");
- throw new IllegalArgumentException("Saving value out of range for type");
- }
- align(4);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)((v >> 8) & 0xff);
- mData[mPos++] = (byte)((v >> 16) & 0xff);
- mData[mPos++] = (byte)((v >> 24) & 0xff);
- }
-
- public void addU64(long v) {
- if (v < 0) {
- android.util.Log.e("rs", "FieldPacker.addU64( " + v + " )");
- throw new IllegalArgumentException("Saving value out of range for type");
- }
- align(8);
- mData[mPos++] = (byte)(v & 0xff);
- mData[mPos++] = (byte)((v >> 8) & 0xff);
- mData[mPos++] = (byte)((v >> 16) & 0xff);
- mData[mPos++] = (byte)((v >> 24) & 0xff);
- mData[mPos++] = (byte)((v >> 32) & 0xff);
- mData[mPos++] = (byte)((v >> 40) & 0xff);
- mData[mPos++] = (byte)((v >> 48) & 0xff);
- mData[mPos++] = (byte)((v >> 56) & 0xff);
- }
-
- public void addF32(float v) {
- addI32(Float.floatToRawIntBits(v));
- }
-
- public float subF32() {
- return Float.intBitsToFloat(subI32());
- }
-
- public void addF64(double v) {
- addI64(Double.doubleToRawLongBits(v));
- }
-
- public double subF64() {
- return Double.longBitsToDouble(subI64());
- }
-
- public void addObj(BaseObj obj) {
- if (obj != null) {
- if (RenderScript.sPointerSize == 8) {
- addI64(obj.getID(null));
- addI64(0);
- addI64(0);
- addI64(0);
- } else {
- addI32((int)obj.getID(null));
- }
- } else {
- if (RenderScript.sPointerSize == 8) {
- addI64(0);
- addI64(0);
- addI64(0);
- addI64(0);
- } else {
- addI32(0);
- }
- }
- }
-
- public void addF32(Float2 v) {
- addF32(v.x);
- addF32(v.y);
- }
- public void addF32(Float3 v) {
- addF32(v.x);
- addF32(v.y);
- addF32(v.z);
- }
- public void addF32(Float4 v) {
- addF32(v.x);
- addF32(v.y);
- addF32(v.z);
- addF32(v.w);
- }
-
- public void addF64(Double2 v) {
- addF64(v.x);
- addF64(v.y);
- }
- public void addF64(Double3 v) {
- addF64(v.x);
- addF64(v.y);
- addF64(v.z);
- }
- public void addF64(Double4 v) {
- addF64(v.x);
- addF64(v.y);
- addF64(v.z);
- addF64(v.w);
- }
-
- public void addI8(Byte2 v) {
- addI8(v.x);
- addI8(v.y);
- }
- public void addI8(Byte3 v) {
- addI8(v.x);
- addI8(v.y);
- addI8(v.z);
- }
- public void addI8(Byte4 v) {
- addI8(v.x);
- addI8(v.y);
- addI8(v.z);
- addI8(v.w);
- }
-
- public void addU8(Short2 v) {
- addU8(v.x);
- addU8(v.y);
- }
- public void addU8(Short3 v) {
- addU8(v.x);
- addU8(v.y);
- addU8(v.z);
- }
- public void addU8(Short4 v) {
- addU8(v.x);
- addU8(v.y);
- addU8(v.z);
- addU8(v.w);
- }
-
- public void addI16(Short2 v) {
- addI16(v.x);
- addI16(v.y);
- }
- public void addI16(Short3 v) {
- addI16(v.x);
- addI16(v.y);
- addI16(v.z);
- }
- public void addI16(Short4 v) {
- addI16(v.x);
- addI16(v.y);
- addI16(v.z);
- addI16(v.w);
- }
-
- public void addU16(Int2 v) {
- addU16(v.x);
- addU16(v.y);
- }
- public void addU16(Int3 v) {
- addU16(v.x);
- addU16(v.y);
- addU16(v.z);
- }
- public void addU16(Int4 v) {
- addU16(v.x);
- addU16(v.y);
- addU16(v.z);
- addU16(v.w);
- }
-
- public void addI32(Int2 v) {
- addI32(v.x);
- addI32(v.y);
- }
- public void addI32(Int3 v) {
- addI32(v.x);
- addI32(v.y);
- addI32(v.z);
- }
- public void addI32(Int4 v) {
- addI32(v.x);
- addI32(v.y);
- addI32(v.z);
- addI32(v.w);
- }
-
- public void addU32(Long2 v) {
- addU32(v.x);
- addU32(v.y);
- }
- public void addU32(Long3 v) {
- addU32(v.x);
- addU32(v.y);
- addU32(v.z);
- }
- public void addU32(Long4 v) {
- addU32(v.x);
- addU32(v.y);
- addU32(v.z);
- addU32(v.w);
- }
-
- public void addI64(Long2 v) {
- addI64(v.x);
- addI64(v.y);
- }
- public void addI64(Long3 v) {
- addI64(v.x);
- addI64(v.y);
- addI64(v.z);
- }
- public void addI64(Long4 v) {
- addI64(v.x);
- addI64(v.y);
- addI64(v.z);
- addI64(v.w);
- }
-
- public void addU64(Long2 v) {
- addU64(v.x);
- addU64(v.y);
- }
- public void addU64(Long3 v) {
- addU64(v.x);
- addU64(v.y);
- addU64(v.z);
- }
- public void addU64(Long4 v) {
- addU64(v.x);
- addU64(v.y);
- addU64(v.z);
- addU64(v.w);
- }
-
-
- public Float2 subFloat2() {
- Float2 v = new Float2();
- v.y = subF32();
- v.x = subF32();
- return v;
- }
- public Float3 subFloat3() {
- Float3 v = new Float3();
- v.z = subF32();
- v.y = subF32();
- v.x = subF32();
- return v;
- }
- public Float4 subFloat4() {
- Float4 v = new Float4();
- v.w = subF32();
- v.z = subF32();
- v.y = subF32();
- v.x = subF32();
- return v;
- }
-
- public Double2 subDouble2() {
- Double2 v = new Double2();
- v.y = subF64();
- v.x = subF64();
- return v;
- }
- public Double3 subDouble3() {
- Double3 v = new Double3();
- v.z = subF64();
- v.y = subF64();
- v.x = subF64();
- return v;
- }
- public Double4 subDouble4() {
- Double4 v = new Double4();
- v.w = subF64();
- v.z = subF64();
- v.y = subF64();
- v.x = subF64();
- return v;
- }
-
- public Byte2 subByte2() {
- Byte2 v = new Byte2();
- v.y = subI8();
- v.x = subI8();
- return v;
- }
- public Byte3 subByte3() {
- Byte3 v = new Byte3();
- v.z = subI8();
- v.y = subI8();
- v.x = subI8();
- return v;
- }
- public Byte4 subByte4() {
- Byte4 v = new Byte4();
- v.w = subI8();
- v.z = subI8();
- v.y = subI8();
- v.x = subI8();
- return v;
- }
-
- public Short2 subShort2() {
- Short2 v = new Short2();
- v.y = subI16();
- v.x = subI16();
- return v;
- }
- public Short3 subShort3() {
- Short3 v = new Short3();
- v.z = subI16();
- v.y = subI16();
- v.x = subI16();
- return v;
- }
- public Short4 subShort4() {
- Short4 v = new Short4();
- v.w = subI16();
- v.z = subI16();
- v.y = subI16();
- v.x = subI16();
- return v;
- }
-
- public Int2 subInt2() {
- Int2 v = new Int2();
- v.y = subI32();
- v.x = subI32();
- return v;
- }
- public Int3 subInt3() {
- Int3 v = new Int3();
- v.z = subI32();
- v.y = subI32();
- v.x = subI32();
- return v;
- }
- public Int4 subInt4() {
- Int4 v = new Int4();
- v.w = subI32();
- v.z = subI32();
- v.y = subI32();
- v.x = subI32();
- return v;
- }
-
- public Long2 subLong2() {
- Long2 v = new Long2();
- v.y = subI64();
- v.x = subI64();
- return v;
- }
- public Long3 subLong3() {
- Long3 v = new Long3();
- v.z = subI64();
- v.y = subI64();
- v.x = subI64();
- return v;
- }
- public Long4 subLong4() {
- Long4 v = new Long4();
- v.w = subI64();
- v.z = subI64();
- v.y = subI64();
- v.x = subI64();
- return v;
- }
-
-
-
- public void addMatrix(Matrix4f v) {
- for (int i=0; i < v.mMat.length; i++) {
- addF32(v.mMat[i]);
- }
- }
-
- public Matrix4f subMatrix4f() {
- Matrix4f v = new Matrix4f();
- for (int i = v.mMat.length - 1; i >= 0; i--) {
- v.mMat[i] = subF32();
- }
- return v;
- }
-
- public void addMatrix(Matrix3f v) {
- for (int i=0; i < v.mMat.length; i++) {
- addF32(v.mMat[i]);
- }
- }
-
- public Matrix3f subMatrix3f() {
- Matrix3f v = new Matrix3f();
- for (int i = v.mMat.length - 1; i >= 0; i--) {
- v.mMat[i] = subF32();
- }
- return v;
- }
-
- public void addMatrix(Matrix2f v) {
- for (int i=0; i < v.mMat.length; i++) {
- addF32(v.mMat[i]);
- }
- }
-
- public Matrix2f subMatrix2f() {
- Matrix2f v = new Matrix2f();
- for (int i = v.mMat.length - 1; i >= 0; i--) {
- v.mMat[i] = subF32();
- }
- return v;
- }
-
- public void addBoolean(boolean v) {
- addI8((byte)(v ? 1 : 0));
- }
-
- public boolean subBoolean() {
- byte v = subI8();
- if (v == 1) {
- return true;
- }
- return false;
- }
-
- public final byte[] getData() {
- return mData;
- }
-
- /**
- * Get the actual length used for the FieldPacker.
- *
- * @hide
- */
- public int getPos() {
- return mPos;
- }
-
- private static void addToPack(FieldPacker fp, Object obj) {
- if (obj instanceof Boolean) {
- fp.addBoolean(((Boolean)obj).booleanValue());
- return;
- }
-
- if (obj instanceof Byte) {
- fp.addI8(((Byte)obj).byteValue());
- return;
- }
-
- if (obj instanceof Short) {
- fp.addI16(((Short)obj).shortValue());
- return;
- }
-
- if (obj instanceof Integer) {
- fp.addI32(((Integer)obj).intValue());
- return;
- }
-
- if (obj instanceof Long) {
- fp.addI64(((Long)obj).longValue());
- return;
- }
-
- if (obj instanceof Float) {
- fp.addF32(((Float)obj).floatValue());
- return;
- }
-
- if (obj instanceof Double) {
- fp.addF64(((Double)obj).doubleValue());
- return;
- }
-
- if (obj instanceof Byte2) {
- fp.addI8((Byte2)obj);
- return;
- }
-
- if (obj instanceof Byte3) {
- fp.addI8((Byte3)obj);
- return;
- }
-
- if (obj instanceof Byte4) {
- fp.addI8((Byte4)obj);
- return;
- }
-
- if (obj instanceof Short2) {
- fp.addI16((Short2)obj);
- return;
- }
-
- if (obj instanceof Short3) {
- fp.addI16((Short3)obj);
- return;
- }
-
- if (obj instanceof Short4) {
- fp.addI16((Short4)obj);
- return;
- }
-
- if (obj instanceof Int2) {
- fp.addI32((Int2)obj);
- return;
- }
-
- if (obj instanceof Int3) {
- fp.addI32((Int3)obj);
- return;
- }
-
- if (obj instanceof Int4) {
- fp.addI32((Int4)obj);
- return;
- }
-
- if (obj instanceof Long2) {
- fp.addI64((Long2)obj);
- return;
- }
-
- if (obj instanceof Long3) {
- fp.addI64((Long3)obj);
- return;
- }
-
- if (obj instanceof Long4) {
- fp.addI64((Long4)obj);
- return;
- }
-
- if (obj instanceof Float2) {
- fp.addF32((Float2)obj);
- return;
- }
-
- if (obj instanceof Float3) {
- fp.addF32((Float3)obj);
- return;
- }
-
- if (obj instanceof Float4) {
- fp.addF32((Float4)obj);
- return;
- }
-
- if (obj instanceof Double2) {
- fp.addF64((Double2)obj);
- return;
- }
-
- if (obj instanceof Double3) {
- fp.addF64((Double3)obj);
- return;
- }
-
- if (obj instanceof Double4) {
- fp.addF64((Double4)obj);
- return;
- }
-
- if (obj instanceof Matrix2f) {
- fp.addMatrix((Matrix2f)obj);
- return;
- }
-
- if (obj instanceof Matrix3f) {
- fp.addMatrix((Matrix3f)obj);
- return;
- }
-
- if (obj instanceof Matrix4f) {
- fp.addMatrix((Matrix4f)obj);
- return;
- }
-
- if (obj instanceof BaseObj) {
- fp.addObj((BaseObj)obj);
- return;
- }
- }
-
- private static int getPackedSize(Object obj) {
- if (obj instanceof Boolean) {
- return 1;
- }
-
- if (obj instanceof Byte) {
- return 1;
- }
-
- if (obj instanceof Short) {
- return 2;
- }
-
- if (obj instanceof Integer) {
- return 4;
- }
-
- if (obj instanceof Long) {
- return 8;
- }
-
- if (obj instanceof Float) {
- return 4;
- }
-
- if (obj instanceof Double) {
- return 8;
- }
-
- if (obj instanceof Byte2) {
- return 2;
- }
-
- if (obj instanceof Byte3) {
- return 3;
- }
-
- if (obj instanceof Byte4) {
- return 4;
- }
-
- if (obj instanceof Short2) {
- return 4;
- }
-
- if (obj instanceof Short3) {
- return 6;
- }
-
- if (obj instanceof Short4) {
- return 8;
- }
-
- if (obj instanceof Int2) {
- return 8;
- }
-
- if (obj instanceof Int3) {
- return 12;
- }
-
- if (obj instanceof Int4) {
- return 16;
- }
-
- if (obj instanceof Long2) {
- return 16;
- }
-
- if (obj instanceof Long3) {
- return 24;
- }
-
- if (obj instanceof Long4) {
- return 32;
- }
-
- if (obj instanceof Float2) {
- return 8;
- }
-
- if (obj instanceof Float3) {
- return 12;
- }
-
- if (obj instanceof Float4) {
- return 16;
- }
-
- if (obj instanceof Double2) {
- return 16;
- }
-
- if (obj instanceof Double3) {
- return 24;
- }
-
- if (obj instanceof Double4) {
- return 32;
- }
-
- if (obj instanceof Matrix2f) {
- return 16;
- }
-
- if (obj instanceof Matrix3f) {
- return 36;
- }
-
- if (obj instanceof Matrix4f) {
- return 64;
- }
-
- if (obj instanceof BaseObj) {
- if (RenderScript.sPointerSize == 8) {
- return 32;
- } else {
- return 4;
- }
- }
-
- return 0;
- }
-
- static FieldPacker createFieldPack(Object[] args) {
- int len = 0;
- for (Object arg : args) {
- len += getPackedSize(arg);
- }
- FieldPacker fp = new FieldPacker(len);
- for (Object arg : args) {
- addToPack(fp, arg);
- }
- return fp;
- }
-
-
- private boolean resize(int newSize) {
- if (newSize == mLen) {
- return false;
- }
-
- byte[] newData = new byte[newSize];
- System.arraycopy(mData, 0, newData, 0, mPos);
- mData = newData;
- mLen = newSize;
- return true;
- }
-
- private void addSafely(Object obj) {
- boolean retry;
- final int oldPos = mPos;
- do {
- retry = false;
- try {
- addToPack(this, obj);
- } catch (ArrayIndexOutOfBoundsException e) {
- mPos = oldPos;
- resize(mLen * 2);
- retry = true;
- }
- } while (retry);
- }
-
- private byte mData[];
- private int mPos;
- private int mLen;
- private BitSet mAlignment;
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Float2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Float2.java
deleted file mode 100644
index edbc5aa..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Float2.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript float2 type back to the Android system.
- *
- **/
-public class Float2 {
- public Float2() {
- }
-
- public Float2(float initX, float initY) {
- x = initX;
- y = initY;
- }
-
- public float x;
- public float y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Float3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Float3.java
deleted file mode 100644
index 90162a1..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Float3.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript float2 type back to the Android system.
- *
- **/
-public class Float3 {
- public Float3() {
- }
- public Float3(float initX, float initY, float initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public float x;
- public float y;
- public float z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Float4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Float4.java
deleted file mode 100644
index d0dc568..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Float4.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript float2 type back to the Android system.
- *
- **/
-public class Float4 {
- public Float4() {
- }
-
- public Float4(float initX, float initY, float initZ, float initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public float x;
- public float y;
- public float z;
- public float w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Int2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Int2.java
deleted file mode 100644
index e5d04b8..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Int2.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript int2 type back to the Android system.
- *
- **/
-public class Int2 {
- public Int2() {
- }
-
- public Int2(int initX, int initY) {
- x = initX;
- y = initY;
- }
-
- public int x;
- public int y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Int3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Int3.java
deleted file mode 100644
index 12f59e8..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Int3.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript int3 type back to the Android system.
- *
- **/
-public class Int3 {
- public Int3() {
- }
-
- public Int3(int initX, int initY, int initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public int x;
- public int y;
- public int z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Int4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Int4.java
deleted file mode 100644
index bb49fb1..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Int4.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript int4 type back to the Android system.
- *
- **/
-public class Int4 {
- public Int4() {
- }
-
- public Int4(int initX, int initY, int initZ, int initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public int x;
- public int y;
- public int z;
- public int w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Long2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Long2.java
deleted file mode 100644
index b3c95f2..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Long2.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript long2 type back to the Android system.
- **/
-public class Long2 {
- public Long2() {
- }
-
- public Long2(long initX, long initY) {
- x = initX;
- y = initY;
- }
-
- public long x;
- public long y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Long3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Long3.java
deleted file mode 100644
index 6ce0f83..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Long3.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript long3 type back to the Android system.
- **/
-public class Long3 {
- public Long3() {
- }
-
- public Long3(long initX, long initY, long initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public long x;
- public long y;
- public long z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Long4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Long4.java
deleted file mode 100644
index d44a321..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Long4.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript long4 type back to the Android system.
- **/
-public class Long4 {
- public Long4() {
- }
-
- public Long4(long initX, long initY, long initZ, long initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public long x;
- public long y;
- public long z;
- public long w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix2f.java b/v8/renderscript/java/src/android/support/v8/renderscript/Matrix2f.java
deleted file mode 100644
index 9a8b5bf..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix2f.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2009-2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript rs_matrix2x2 type back to the Android system.
- *
- **/
-public class Matrix2f {
-
- /**
- * Creates a new identity 2x2 matrix
- */
- public Matrix2f() {
- mMat = new float[4];
- loadIdentity();
- }
-
- /**
- * Creates a new matrix and sets its values from the given
- * parameter
- *
- * @param dataArray values to set the matrix to, must be 4
- * floats long
- */
- public Matrix2f(float[] dataArray) {
- mMat = new float[4];
- System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
- }
-
- /**
- * Return a reference to the internal array representing matrix
- * values. Modifying this array will also change the matrix
- *
- * @return internal array representing the matrix
- */
- public float[] getArray() {
- return mMat;
- }
-
- /**
- * Returns the value for a given row and column
- *
- * @param x column of the value to return
- * @param y row of the value to return
- *
- * @return value in the yth row and xth column
- */
- public float get(int x, int y) {
- return mMat[x*2 + y];
- }
-
- /**
- * Sets the value for a given row and column
- *
- * @param x column of the value to set
- * @param y row of the value to set
- */
- public void set(int x, int y, float v) {
- mMat[x*2 + y] = v;
- }
-
- /**
- * Sets the matrix values to identity
- */
- public void loadIdentity() {
- mMat[0] = 1;
- mMat[1] = 0;
-
- mMat[2] = 0;
- mMat[3] = 1;
- }
-
- /**
- * Sets the values of the matrix to those of the parameter
- *
- * @param src matrix to load the values from
- */
- public void load(Matrix2f src) {
- System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
- }
-
- /**
- * Sets current values to be a rotation matrix of given angle
- *
- * @param rot rotation angle
- */
- public void loadRotate(float rot) {
- float c, s;
- rot *= (float)(java.lang.Math.PI / 180.0f);
- c = (float)java.lang.Math.cos(rot);
- s = (float)java.lang.Math.sin(rot);
- mMat[0] = c;
- mMat[1] = -s;
- mMat[2] = s;
- mMat[3] = c;
- }
-
- /**
- * Sets current values to be a scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- */
- public void loadScale(float x, float y) {
- loadIdentity();
- mMat[0] = x;
- mMat[3] = y;
- }
-
- /**
- * Sets current values to be the result of multiplying two given
- * matrices
- *
- * @param lhs left hand side matrix
- * @param rhs right hand side matrix
- */
- public void loadMultiply(Matrix2f lhs, Matrix2f rhs) {
- for (int i=0 ; i<2 ; i++) {
- float ri0 = 0;
- float ri1 = 0;
- for (int j=0 ; j<2 ; j++) {
- float rhs_ij = rhs.get(i,j);
- ri0 += lhs.get(j,0) * rhs_ij;
- ri1 += lhs.get(j,1) * rhs_ij;
- }
- set(i,0, ri0);
- set(i,1, ri1);
- }
- }
-
- /**
- * Post-multiplies the current matrix by a given parameter
- *
- * @param rhs right hand side to multiply by
- */
- public void multiply(Matrix2f rhs) {
- Matrix2f tmp = new Matrix2f();
- tmp.loadMultiply(this, rhs);
- load(tmp);
- }
- /**
- * Modifies the current matrix by post-multiplying it with a
- * rotation matrix of given angle
- *
- * @param rot angle of rotation
- */
- public void rotate(float rot) {
- Matrix2f tmp = new Matrix2f();
- tmp.loadRotate(rot);
- multiply(tmp);
- }
- /**
- * Modifies the current matrix by post-multiplying it with a
- * scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- */
- public void scale(float x, float y) {
- Matrix2f tmp = new Matrix2f();
- tmp.loadScale(x, y);
- multiply(tmp);
- }
- /**
- * Sets the current matrix to its transpose
- */
- public void transpose() {
- float temp = mMat[1];
- mMat[1] = mMat[2];
- mMat[2] = temp;
- }
-
- final float[] mMat;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix3f.java b/v8/renderscript/java/src/android/support/v8/renderscript/Matrix3f.java
deleted file mode 100644
index 4528543..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix3f.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright (C) 2009-2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript rs_matrix3x3 type back to the Android system.
- *
- **/
-public class Matrix3f {
-
- /**
- * Creates a new identity 3x3 matrix
- */
- public Matrix3f() {
- mMat = new float[9];
- loadIdentity();
- }
-
- /**
- * Creates a new matrix and sets its values from the given
- * parameter
- *
- * @param dataArray values to set the matrix to, must be 9
- * floats long
- */
- public Matrix3f(float[] dataArray) {
- mMat = new float[9];
- System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
- }
-
- /**
- * Return a reference to the internal array representing matrix
- * values. Modifying this array will also change the matrix
- *
- * @return internal array representing the matrix
- */
- public float[] getArray() {
- return mMat;
- }
-
- /**
- * Returns the value for a given row and column
- *
- * @param x column of the value to return
- * @param y row of the value to return
- *
- * @return value in the yth row and xth column
- */
- public float get(int x, int y) {
- return mMat[x*3 + y];
- }
-
- /**
- * Sets the value for a given row and column
- *
- * @param x column of the value to set
- * @param y row of the value to set
- */
- public void set(int x, int y, float v) {
- mMat[x*3 + y] = v;
- }
-
- /**
- * Sets the matrix values to identity
- */
- public void loadIdentity() {
- mMat[0] = 1;
- mMat[1] = 0;
- mMat[2] = 0;
-
- mMat[3] = 0;
- mMat[4] = 1;
- mMat[5] = 0;
-
- mMat[6] = 0;
- mMat[7] = 0;
- mMat[8] = 1;
- }
-
- /**
- * Sets the values of the matrix to those of the parameter
- *
- * @param src matrix to load the values from
- */
- public void load(Matrix3f src) {
- System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
- }
-
- /**
- * Sets current values to be a rotation matrix of certain angle
- * about a given axis
- *
- * @param rot angle of rotation
- * @param x rotation axis x
- * @param y rotation axis y
- * @param z rotation axis z
- */
- public void loadRotate(float rot, float x, float y, float z) {
- float c, s;
- rot *= (float)(java.lang.Math.PI / 180.0f);
- c = (float)java.lang.Math.cos(rot);
- s = (float)java.lang.Math.sin(rot);
-
- float len = (float)java.lang.Math.sqrt(x*x + y*y + z*z);
- if (!(len != 1)) {
- float recipLen = 1.f / len;
- x *= recipLen;
- y *= recipLen;
- z *= recipLen;
- }
- float nc = 1.0f - c;
- float xy = x * y;
- float yz = y * z;
- float zx = z * x;
- float xs = x * s;
- float ys = y * s;
- float zs = z * s;
- mMat[0] = x*x*nc + c;
- mMat[3] = xy*nc - zs;
- mMat[6] = zx*nc + ys;
- mMat[1] = xy*nc + zs;
- mMat[4] = y*y*nc + c;
- mMat[7] = yz*nc - xs;
- mMat[2] = zx*nc - ys;
- mMat[5] = yz*nc + xs;
- mMat[8] = z*z*nc + c;
- }
-
- /**
- * Makes the upper 2x2 a rotation matrix of the given angle
- *
- * @param rot rotation angle
- */
- public void loadRotate(float rot) {
- loadIdentity();
- float c, s;
- rot *= (float)(java.lang.Math.PI / 180.0f);
- c = (float)java.lang.Math.cos(rot);
- s = (float)java.lang.Math.sin(rot);
- mMat[0] = c;
- mMat[1] = -s;
- mMat[3] = s;
- mMat[4] = c;
- }
-
- /**
- * Makes the upper 2x2 a scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- */
- public void loadScale(float x, float y) {
- loadIdentity();
- mMat[0] = x;
- mMat[4] = y;
- }
-
- /**
- * Sets current values to be a scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- * @param z scale component z
- */
- public void loadScale(float x, float y, float z) {
- loadIdentity();
- mMat[0] = x;
- mMat[4] = y;
- mMat[8] = z;
- }
-
- /**
- * Sets current values to be a translation matrix of given
- * dimensions
- *
- * @param x translation component x
- * @param y translation component y
- */
- public void loadTranslate(float x, float y) {
- loadIdentity();
- mMat[6] = x;
- mMat[7] = y;
- }
-
- /**
- * Sets current values to be the result of multiplying two given
- * matrices
- *
- * @param lhs left hand side matrix
- * @param rhs right hand side matrix
- */
- public void loadMultiply(Matrix3f lhs, Matrix3f rhs) {
- for (int i=0 ; i<3 ; i++) {
- float ri0 = 0;
- float ri1 = 0;
- float ri2 = 0;
- for (int j=0 ; j<3 ; j++) {
- float rhs_ij = rhs.get(i,j);
- ri0 += lhs.get(j,0) * rhs_ij;
- ri1 += lhs.get(j,1) * rhs_ij;
- ri2 += lhs.get(j,2) * rhs_ij;
- }
- set(i,0, ri0);
- set(i,1, ri1);
- set(i,2, ri2);
- }
- }
-
- /**
- * Post-multiplies the current matrix by a given parameter
- *
- * @param rhs right hand side to multiply by
- */
- public void multiply(Matrix3f rhs) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadMultiply(this, rhs);
- load(tmp);
- }
-
- /**
- * Modifies the current matrix by post-multiplying it with a
- * rotation matrix of certain angle about a given axis
- *
- * @param rot angle of rotation
- * @param x rotation axis x
- * @param y rotation axis y
- * @param z rotation axis z
- */
- public void rotate(float rot, float x, float y, float z) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadRotate(rot, x, y, z);
- multiply(tmp);
- }
-
- /**
- * Modifies the upper 2x2 of the current matrix by
- * post-multiplying it with a rotation matrix of given angle
- *
- * @param rot angle of rotation
- */
- public void rotate(float rot) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadRotate(rot);
- multiply(tmp);
- }
-
- /**
- * Modifies the upper 2x2 of the current matrix by
- * post-multiplying it with a scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- */
- public void scale(float x, float y) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadScale(x, y);
- multiply(tmp);
- }
-
- /**
- * Modifies the current matrix by post-multiplying it with a
- * scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- * @param z scale component z
- */
- public void scale(float x, float y, float z) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadScale(x, y, z);
- multiply(tmp);
- }
-
- /**
- * Modifies the current matrix by post-multiplying it with a
- * translation matrix of given dimensions
- *
- * @param x translation component x
- * @param y translation component y
- */
- public void translate(float x, float y) {
- Matrix3f tmp = new Matrix3f();
- tmp.loadTranslate(x, y);
- multiply(tmp);
- }
-
- /**
- * Sets the current matrix to its transpose
- */
- public void transpose() {
- for(int i = 0; i < 2; ++i) {
- for(int j = i + 1; j < 3; ++j) {
- float temp = mMat[i*3 + j];
- mMat[i*3 + j] = mMat[j*3 + i];
- mMat[j*3 + i] = temp;
- }
- }
- }
-
- final float[] mMat;
-}
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix4f.java b/v8/renderscript/java/src/android/support/v8/renderscript/Matrix4f.java
deleted file mode 100644
index b9e5636..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Matrix4f.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * Copyright (C) 2009-2012 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.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript rs_matrix4x4 type back to the Android system.
- *
- **/
-public class Matrix4f {
-
- /**
- * Creates a new identity 4x4 matrix
- */
- public Matrix4f() {
- mMat = new float[16];
- loadIdentity();
- }
-
- /**
- * Creates a new matrix and sets its values from the given
- * parameter
- *
- * @param dataArray values to set the matrix to, must be 16
- * floats long
- */
- public Matrix4f(float[] dataArray) {
- mMat = new float[16];
- System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
- }
-
- /**
- * Return a reference to the internal array representing matrix
- * values. Modifying this array will also change the matrix
- *
- * @return internal array representing the matrix
- */
- public float[] getArray() {
- return mMat;
- }
-
- /**
- * Returns the value for a given row and column
- *
- * @param x column of the value to return
- * @param y row of the value to return
- *
- * @return value in the yth row and xth column
- */
- public float get(int x, int y) {
- return mMat[x*4 + y];
- }
-
- /**
- * Sets the value for a given row and column
- *
- * @param x column of the value to set
- * @param y row of the value to set
- */
- public void set(int x, int y, float v) {
- mMat[x*4 + y] = v;
- }
-
- /**
- * Sets the matrix values to identity
- */
- public void loadIdentity() {
- mMat[0] = 1;
- mMat[1] = 0;
- mMat[2] = 0;
- mMat[3] = 0;
-
- mMat[4] = 0;
- mMat[5] = 1;
- mMat[6] = 0;
- mMat[7] = 0;
-
- mMat[8] = 0;
- mMat[9] = 0;
- mMat[10] = 1;
- mMat[11] = 0;
-
- mMat[12] = 0;
- mMat[13] = 0;
- mMat[14] = 0;
- mMat[15] = 1;
- }
-
- /**
- * Sets the values of the matrix to those of the parameter
- *
- * @param src matrix to load the values from
- */
- public void load(Matrix4f src) {
- System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
- }
-
- /**
- * Sets the values of the matrix to those of the parameter
- *
- * @param src matrix to load the values from
- * @hide
- */
- public void load(Matrix3f src) {
- mMat[0] = src.mMat[0];
- mMat[1] = src.mMat[1];
- mMat[2] = src.mMat[2];
- mMat[3] = 0;
-
- mMat[4] = src.mMat[3];
- mMat[5] = src.mMat[4];
- mMat[6] = src.mMat[5];
- mMat[7] = 0;
-
- mMat[8] = src.mMat[6];
- mMat[9] = src.mMat[7];
- mMat[10] = src.mMat[8];
- mMat[11] = 0;
-
- mMat[12] = 0;
- mMat[13] = 0;
- mMat[14] = 0;
- mMat[15] = 1;
- }
-
- /**
- * Sets current values to be a rotation matrix of certain angle
- * about a given axis
- *
- * @param rot angle of rotation
- * @param x rotation axis x
- * @param y rotation axis y
- * @param z rotation axis z
- */
- public void loadRotate(float rot, float x, float y, float z) {
- float c, s;
- mMat[3] = 0;
- mMat[7] = 0;
- mMat[11]= 0;
- mMat[12]= 0;
- mMat[13]= 0;
- mMat[14]= 0;
- mMat[15]= 1;
- rot *= (float)(java.lang.Math.PI / 180.0f);
- c = (float)java.lang.Math.cos(rot);
- s = (float)java.lang.Math.sin(rot);
-
- float len = (float)java.lang.Math.sqrt(x*x + y*y + z*z);
- if (!(len != 1)) {
- float recipLen = 1.f / len;
- x *= recipLen;
- y *= recipLen;
- z *= recipLen;
- }
- float nc = 1.0f - c;
- float xy = x * y;
- float yz = y * z;
- float zx = z * x;
- float xs = x * s;
- float ys = y * s;
- float zs = z * s;
- mMat[ 0] = x*x*nc + c;
- mMat[ 4] = xy*nc - zs;
- mMat[ 8] = zx*nc + ys;
- mMat[ 1] = xy*nc + zs;
- mMat[ 5] = y*y*nc + c;
- mMat[ 9] = yz*nc - xs;
- mMat[ 2] = zx*nc - ys;
- mMat[ 6] = yz*nc + xs;
- mMat[10] = z*z*nc + c;
- }
-
- /**
- * Sets current values to be a scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- * @param z scale component z
- */
- public void loadScale(float x, float y, float z) {
- loadIdentity();
- mMat[0] = x;
- mMat[5] = y;
- mMat[10] = z;
- }
-
- /**
- * Sets current values to be a translation matrix of given
- * dimensions
- *
- * @param x translation component x
- * @param y translation component y
- * @param z translation component z
- */
- public void loadTranslate(float x, float y, float z) {
- loadIdentity();
- mMat[12] = x;
- mMat[13] = y;
- mMat[14] = z;
- }
-
- /**
- * Sets current values to be the result of multiplying two given
- * matrices
- *
- * @param lhs left hand side matrix
- * @param rhs right hand side matrix
- */
- public void loadMultiply(Matrix4f lhs, Matrix4f rhs) {
- for (int i=0 ; i<4 ; i++) {
- float ri0 = 0;
- float ri1 = 0;
- float ri2 = 0;
- float ri3 = 0;
- for (int j=0 ; j<4 ; j++) {
- float rhs_ij = rhs.get(i,j);
- ri0 += lhs.get(j,0) * rhs_ij;
- ri1 += lhs.get(j,1) * rhs_ij;
- ri2 += lhs.get(j,2) * rhs_ij;
- ri3 += lhs.get(j,3) * rhs_ij;
- }
- set(i,0, ri0);
- set(i,1, ri1);
- set(i,2, ri2);
- set(i,3, ri3);
- }
- }
-
- /**
- * Set current values to be an orthographic projection matrix
- *
- * @param l location of the left vertical clipping plane
- * @param r location of the right vertical clipping plane
- * @param b location of the bottom horizontal clipping plane
- * @param t location of the top horizontal clipping plane
- * @param n location of the near clipping plane
- * @param f location of the far clipping plane
- */
- public void loadOrtho(float l, float r, float b, float t, float n, float f) {
- loadIdentity();
- mMat[0] = 2 / (r - l);
- mMat[5] = 2 / (t - b);
- mMat[10]= -2 / (f - n);
- mMat[12]= -(r + l) / (r - l);
- mMat[13]= -(t + b) / (t - b);
- mMat[14]= -(f + n) / (f - n);
- }
-
- /**
- * Set current values to be an orthographic projection matrix
- * with the right and bottom clipping planes set to the given
- * values. Left and top clipping planes are set to 0. Near and
- * far are set to -1, 1 respectively
- *
- * @param w location of the right vertical clipping plane
- * @param h location of the bottom horizontal clipping plane
- *
- */
- public void loadOrthoWindow(int w, int h) {
- loadOrtho(0,w, h,0, -1,1);
- }
-
- /**
- * Sets current values to be a perspective projection matrix
- *
- * @param l location of the left vertical clipping plane
- * @param r location of the right vertical clipping plane
- * @param b location of the bottom horizontal clipping plane
- * @param t location of the top horizontal clipping plane
- * @param n location of the near clipping plane, must be positive
- * @param f location of the far clipping plane, must be positive
- *
- */
- public void loadFrustum(float l, float r, float b, float t, float n, float f) {
- loadIdentity();
- mMat[0] = 2 * n / (r - l);
- mMat[5] = 2 * n / (t - b);
- mMat[8] = (r + l) / (r - l);
- mMat[9] = (t + b) / (t - b);
- mMat[10]= -(f + n) / (f - n);
- mMat[11]= -1;
- mMat[14]= -2*f*n / (f - n);
- mMat[15]= 0;
- }
-
- /**
- * Sets current values to be a perspective projection matrix
- *
- * @param fovy vertical field of view angle in degrees
- * @param aspect aspect ratio of the screen
- * @param near near cliping plane, must be positive
- * @param far far clipping plane, must be positive
- */
- public void loadPerspective(float fovy, float aspect, float near, float far) {
- float top = near * (float)Math.tan((float) (fovy * Math.PI / 360.0f));
- float bottom = -top;
- float left = bottom * aspect;
- float right = top * aspect;
- loadFrustum(left, right, bottom, top, near, far);
- }
-
- /**
- * Helper function to set the current values to a perspective
- * projection matrix with aspect ratio defined by the parameters
- * and (near, far), (bottom, top) mapping to (-1, 1) at z = 0
- *
- * @param w screen width
- * @param h screen height
- */
- public void loadProjectionNormalized(int w, int h) {
- // range -1,1 in the narrow axis at z = 0.
- Matrix4f m1 = new Matrix4f();
- Matrix4f m2 = new Matrix4f();
-
- if(w > h) {
- float aspect = ((float)w) / h;
- m1.loadFrustum(-aspect,aspect, -1,1, 1,100);
- } else {
- float aspect = ((float)h) / w;
- m1.loadFrustum(-1,1, -aspect,aspect, 1,100);
- }
-
- m2.loadRotate(180, 0, 1, 0);
- m1.loadMultiply(m1, m2);
-
- m2.loadScale(-2, 2, 1);
- m1.loadMultiply(m1, m2);
-
- m2.loadTranslate(0, 0, 2);
- m1.loadMultiply(m1, m2);
-
- load(m1);
- }
-
- /**
- * Post-multiplies the current matrix by a given parameter
- *
- * @param rhs right hand side to multiply by
- */
- public void multiply(Matrix4f rhs) {
- Matrix4f tmp = new Matrix4f();
- tmp.loadMultiply(this, rhs);
- load(tmp);
- }
- /**
- * Modifies the current matrix by post-multiplying it with a
- * rotation matrix of certain angle about a given axis
- *
- * @param rot angle of rotation
- * @param x rotation axis x
- * @param y rotation axis y
- * @param z rotation axis z
- */
- public void rotate(float rot, float x, float y, float z) {
- Matrix4f tmp = new Matrix4f();
- tmp.loadRotate(rot, x, y, z);
- multiply(tmp);
- }
-
- /**
- * Modifies the current matrix by post-multiplying it with a
- * scale matrix of given dimensions
- *
- * @param x scale component x
- * @param y scale component y
- * @param z scale component z
- */
- public void scale(float x, float y, float z) {
- Matrix4f tmp = new Matrix4f();
- tmp.loadScale(x, y, z);
- multiply(tmp);
- }
-
- /**
- * Modifies the current matrix by post-multiplying it with a
- * translation matrix of given dimensions
- *
- * @param x translation component x
- * @param y translation component y
- * @param z translation component z
- */
- public void translate(float x, float y, float z) {
- Matrix4f tmp = new Matrix4f();
- tmp.loadTranslate(x, y, z);
- multiply(tmp);
- }
- private float computeCofactor(int i, int j) {
- int c0 = (i+1) % 4;
- int c1 = (i+2) % 4;
- int c2 = (i+3) % 4;
- int r0 = (j+1) % 4;
- int r1 = (j+2) % 4;
- int r2 = (j+3) % 4;
-
- float minor = (mMat[c0 + 4*r0] * (mMat[c1 + 4*r1] * mMat[c2 + 4*r2] -
- mMat[c1 + 4*r2] * mMat[c2 + 4*r1]))
- - (mMat[c0 + 4*r1] * (mMat[c1 + 4*r0] * mMat[c2 + 4*r2] -
- mMat[c1 + 4*r2] * mMat[c2 + 4*r0]))
- + (mMat[c0 + 4*r2] * (mMat[c1 + 4*r0] * mMat[c2 + 4*r1] -
- mMat[c1 + 4*r1] * mMat[c2 + 4*r0]));
-
- float cofactor = ((i+j) & 1) != 0 ? -minor : minor;
- return cofactor;
- }
-
- /**
- * Sets the current matrix to its inverse
- */
- public boolean inverse() {
-
- Matrix4f result = new Matrix4f();
-
- for (int i = 0; i < 4; ++i) {
- for (int j = 0; j < 4; ++j) {
- result.mMat[4*i + j] = computeCofactor(i, j);
- }
- }
-
- // Dot product of 0th column of source and 0th row of result
- float det = mMat[0]*result.mMat[0] + mMat[4]*result.mMat[1] +
- mMat[8]*result.mMat[2] + mMat[12]*result.mMat[3];
-
- if (Math.abs(det) < 1e-6) {
- return false;
- }
-
- det = 1.0f / det;
- for (int i = 0; i < 16; ++i) {
- mMat[i] = result.mMat[i] * det;
- }
-
- return true;
- }
-
- /**
- * Sets the current matrix to its inverse transpose
- */
- public boolean inverseTranspose() {
-
- Matrix4f result = new Matrix4f();
-
- for (int i = 0; i < 4; ++i) {
- for (int j = 0; j < 4; ++j) {
- result.mMat[4*j + i] = computeCofactor(i, j);
- }
- }
-
- float det = mMat[0]*result.mMat[0] + mMat[4]*result.mMat[4] +
- mMat[8]*result.mMat[8] + mMat[12]*result.mMat[12];
-
- if (Math.abs(det) < 1e-6) {
- return false;
- }
-
- det = 1.0f / det;
- for (int i = 0; i < 16; ++i) {
- mMat[i] = result.mMat[i] * det;
- }
-
- return true;
- }
-
- /**
- * Sets the current matrix to its transpose
- */
- public void transpose() {
- for(int i = 0; i < 3; ++i) {
- for(int j = i + 1; j < 4; ++j) {
- float temp = mMat[i*4 + j];
- mMat[i*4 + j] = mMat[j*4 + i];
- mMat[j*4 + i] = temp;
- }
- }
- }
-
- final float[] mMat;
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RSDriverException.java b/v8/renderscript/java/src/android/support/v8/renderscript/RSDriverException.java
deleted file mode 100644
index d4ae341..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RSDriverException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2010 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.support.v8.renderscript;
-
-
-/**
- * Base class for all exceptions thrown by the Android
- * RenderScript
- */
-public class RSDriverException extends RSRuntimeException {
- public RSDriverException(String string) {
- super(string);
- }
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RSIllegalArgumentException.java b/v8/renderscript/java/src/android/support/v8/renderscript/RSIllegalArgumentException.java
deleted file mode 100644
index 378a49c..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RSIllegalArgumentException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2010 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.support.v8.renderscript;
-
-
-/**
- * Base class for all exceptions thrown by the Android
- * RenderScript
- */
-public class RSIllegalArgumentException extends RSRuntimeException {
- public RSIllegalArgumentException(String string) {
- super(string);
- }
-}
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RSInvalidStateException.java b/v8/renderscript/java/src/android/support/v8/renderscript/RSInvalidStateException.java
deleted file mode 100644
index a5676a3..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RSInvalidStateException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2010 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.support.v8.renderscript;
-
-
-/**
- * Base class for all exceptions thrown by the Android
- * RenderScript
- */
-public class RSInvalidStateException extends RSRuntimeException {
- public RSInvalidStateException(String string) {
- super(string);
- }
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RSRuntimeException.java b/v8/renderscript/java/src/android/support/v8/renderscript/RSRuntimeException.java
deleted file mode 100644
index ec83365..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RSRuntimeException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2010 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.support.v8.renderscript;
-
-
-/**
- * Base class for all exceptions thrown by the Android
- * RenderScript
- */
-public class RSRuntimeException
- extends java.lang.RuntimeException {
- public RSRuntimeException(String string) {
- super(string);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
deleted file mode 100644
index a5c6f93..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
+++ /dev/null
@@ -1,1721 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.ArrayList;
-import java.nio.ByteBuffer;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.res.AssetManager;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Process;
-import android.util.Log;
-import android.view.Surface;
-
-/**
- * This class provides access to a RenderScript context, which controls RenderScript
- * initialization, resource management, and teardown. An instance of the RenderScript
- * class must be created before any other RS objects can be created.
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about creating an application that uses RenderScript, read the
- * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
- * </div>
- **/
-public class RenderScript {
- static final String LOG_TAG = "RenderScript_jni";
- static final boolean DEBUG = false;
- @SuppressWarnings({"UnusedDeclaration", "deprecation"})
- static final boolean LOG_ENABLED = false;
- static final int SUPPORT_LIB_API = 23;
- static final int SUPPORT_LIB_VERSION = 2301;
-
- static private ArrayList<RenderScript> mProcessContextList = new ArrayList<RenderScript>();
- private boolean mIsProcessContext = false;
- private boolean mEnableMultiInput = false;
- private int mDispatchAPILevel = 0;
-
- private int mContextFlags = 0;
- private int mContextSdkVersion = 0;
-
- private Context mApplicationContext;
- private String mNativeLibDir;
-
- static private String mBlackList = "";
- /**
- * Sets the blackList of Models to only use support lib runtime.
- * Should be used before context create.
- *
- * @param blackList User provided black list string.
- *
- * Format: "(MANUFACTURER1:PRODUCT1:MODEL1), (MANUFACTURER2:PRODUCT2:MODEL2)..."
- * e.g. : To Blacklist Nexus 7(2013) and Nexus 5.
- * mBlackList = "(asus:razor:Nexus 7), (LGE:hammerhead:Nexus 5)";
- */
- static public void setBlackList(String blackList) {
- if (blackList != null) {
- mBlackList = blackList;
- }
- }
- /**
- * Force using support lib runtime.
- * Should be used before context create.
- *
- */
- static public void forceCompat() {
- sNative = 0;
- }
- /*
- * We use a class initializer to allow the native code to cache some
- * field offsets.
- */
- @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
- static boolean sInitialized;
- static boolean sUseGCHooks;
- static Object sRuntime;
- static Method registerNativeAllocation;
- static Method registerNativeFree;
-
- static Object lock = new Object();
-
- // Non-threadsafe functions.
- native boolean nLoadSO(boolean useNative, int deviceApi, String libPath);
- native boolean nLoadIOSO();
- native long nDeviceCreate();
- native void nDeviceDestroy(long dev);
- native void nDeviceSetConfig(long dev, int param, int value);
- native int nContextGetUserMessage(long con, int[] data);
- native String nContextGetErrorMessage(long con);
- native int nContextPeekMessage(long con, int[] subID);
- native void nContextInitToClient(long con);
- native void nContextDeinitToClient(long con);
-
- static private int sNative = -1;
- static private int sSdkVersion = -1;
- static private boolean useIOlib = false;
- static private boolean useNative;
-
- /*
- * Context creation flag that specifies a normal context.
- * RenderScript Support lib only support normal context.
- */
- public static final int CREATE_FLAG_NONE = 0x0000;
-
- int getDispatchAPILevel() {
- return mDispatchAPILevel;
- }
-
- boolean isUseNative() {
- return useNative;
- }
- /*
- * Detect the bitness of the VM to allow FieldPacker to do the right thing.
- */
- static native int rsnSystemGetPointerSize();
- static int sPointerSize;
-
- /**
- * Determines whether or not we should be thunking into the native
- * RenderScript layer or actually using the compatibility library.
- */
- static private boolean setupNative(int sdkVersion, Context ctx) {
- // if targetSdkVersion is higher than the device api version, always use compat mode.
- // Workaround for KK
- if (android.os.Build.VERSION.SDK_INT < sdkVersion &&
- android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
- sNative = 0;
- }
-
- if (sNative == -1) {
-
- // get the value of the debug.rs.forcecompat property
- int forcecompat = 0;
- try {
- Class<?> sysprop = Class.forName("android.os.SystemProperties");
- Class[] signature = {String.class, Integer.TYPE};
- Method getint = sysprop.getDeclaredMethod("getInt", signature);
- Object[] args = {"debug.rs.forcecompat", new Integer(0)};
- forcecompat = ((java.lang.Integer)getint.invoke(null, args)).intValue();
- } catch (Exception e) {
-
- }
-
- if ((android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)
- && forcecompat == 0) {
- sNative = 1;
- } else {
- sNative = 0;
- }
-
-
- if (sNative == 1) {
- // Workarounds that may disable thunking go here
- ApplicationInfo info;
- try {
- info = ctx.getPackageManager().getApplicationInfo(ctx.getPackageName(),
- PackageManager.GET_META_DATA);
- } catch (PackageManager.NameNotFoundException e) {
- // assume no workarounds needed
- return true;
- }
- long minorVersion = 0;
-
- // load minorID from reflection
- try {
- Class<?> javaRS = Class.forName("android.renderscript.RenderScript");
- Method getMinorID = javaRS.getDeclaredMethod("getMinorID");
- minorVersion = ((java.lang.Long)getMinorID.invoke(null)).longValue();
- } catch (Exception e) {
- // minor version remains 0 on devices with no possible WARs
- }
-
- if (info.metaData != null) {
- // asynchronous teardown: minor version 1+
- if (info.metaData.getBoolean("com.android.support.v8.renderscript.EnableAsyncTeardown") == true) {
- if (minorVersion == 0) {
- sNative = 0;
- }
- }
-
- // blur issues on some drivers with 4.4
- if (info.metaData.getBoolean("com.android.support.v8.renderscript.EnableBlurWorkaround") == true) {
- if (android.os.Build.VERSION.SDK_INT <= 19) {
- //android.util.Log.e("rs", "war on");
- sNative = 0;
- }
- }
- }
- // end of workarounds
- }
- }
-
- if (sNative == 1) {
- // check against the blacklist
- if (mBlackList.length() > 0) {
- String deviceInfo = '(' +
- android.os.Build.MANUFACTURER +
- ':' +
- android.os.Build.PRODUCT +
- ':' +
- android.os.Build.MODEL +
- ')';
- if (mBlackList.contains(deviceInfo)) {
- sNative = 0;
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- /**
- * Name of the file that holds the object cache.
- */
- private static final String CACHE_PATH = "com.android.renderscript.cache";
- static String mCachePath;
-
- /**
- * Sets the directory to use as a persistent storage for the
- * renderscript object file cache.
- *
- * @hide
- * @param cacheDir A directory the current process can write to
- */
- public static void setupDiskCache(File cacheDir) {
- File f = new File(cacheDir, CACHE_PATH);
- mCachePath = f.getAbsolutePath();
- f.mkdirs();
- }
-
- /**
- * ContextType specifies the specific type of context to be created.
- *
- */
- public enum ContextType {
- /**
- * NORMAL context, this is the default and what shipping apps should
- * use.
- */
- NORMAL (0),
-
- /**
- * DEBUG context, perform extra runtime checks to validate the
- * kernels and APIs are being used as intended. Get and SetElementAt
- * will be bounds checked in this mode.
- */
- DEBUG (1),
-
- /**
- * PROFILE context, Intended to be used once the first time an
- * application is run on a new device. This mode allows the runtime to
- * do additional testing and performance tuning.
- */
- PROFILE (2);
-
- int mID;
- ContextType(int id) {
- mID = id;
- }
- }
-
- ContextType mContextType;
- // Methods below are wrapped to protect the non-threadsafe
- // lockless fifo.
-
- native long rsnContextCreate(long dev, int ver, int sdkVer, int contextType, String nativeLibDir);
- synchronized long nContextCreate(long dev, int ver, int sdkVer, int contextType, String nativeLibDir) {
- return rsnContextCreate(dev, ver, sdkVer, contextType, nativeLibDir);
- }
- native void rsnContextDestroy(long con);
- synchronized void nContextDestroy() {
- validate();
-
- // take teardown lock
- // teardown lock can only be taken when no objects are being destroyed
- ReentrantReadWriteLock.WriteLock wlock = mRWLock.writeLock();
- wlock.lock();
-
- long curCon = mContext;
- // context is considered dead as of this point
- mContext = 0;
-
- wlock.unlock();
- rsnContextDestroy(curCon);
- }
- native void rsnContextSetPriority(long con, int p);
- synchronized void nContextSetPriority(int p) {
- validate();
- rsnContextSetPriority(mContext, p);
- }
- native void rsnContextDump(long con, int bits);
- synchronized void nContextDump(int bits) {
- validate();
- rsnContextDump(mContext, bits);
- }
- native void rsnContextFinish(long con);
- synchronized void nContextFinish() {
- validate();
- rsnContextFinish(mContext);
- }
-
- native void rsnContextSendMessage(long con, int id, int[] data);
- synchronized void nContextSendMessage(int id, int[] data) {
- validate();
- rsnContextSendMessage(mContext, id, data);
- }
-
- // nObjDestroy is explicitly _not_ synchronous to prevent crashes in finalizers
- native void rsnObjDestroy(long con, long id);
- void nObjDestroy(long id) {
- // There is a race condition here. The calling code may be run
- // by the gc while teardown is occuring. This protects againts
- // deleting dead objects.
- if (mContext != 0) {
- rsnObjDestroy(mContext, id);
- }
- }
-
- native long rsnElementCreate(long con, long type, int kind, boolean norm, int vecSize);
- synchronized long nElementCreate(long type, int kind, boolean norm, int vecSize) {
- validate();
- return rsnElementCreate(mContext, type, kind, norm, vecSize);
- }
- native long rsnElementCreate2(long con, long[] elements, String[] names, int[] arraySizes);
- synchronized long nElementCreate2(long[] elements, String[] names, int[] arraySizes) {
- validate();
- return rsnElementCreate2(mContext, elements, names, arraySizes);
- }
- native void rsnElementGetNativeData(long con, long id, int[] elementData);
- synchronized void nElementGetNativeData(long id, int[] elementData) {
- validate();
- rsnElementGetNativeData(mContext, id, elementData);
- }
- native void rsnElementGetSubElements(long con, long id,
- long[] IDs, String[] names, int[] arraySizes);
- synchronized void nElementGetSubElements(long id, long[] IDs, String[] names, int[] arraySizes) {
- validate();
- rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
- }
-
- native long rsnTypeCreate(long con, long eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
- synchronized long nTypeCreate(long eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
- validate();
- return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
- }
-
- native void rsnTypeGetNativeData(long con, long id, long[] typeData);
- synchronized void nTypeGetNativeData(long id, long[] typeData) {
- validate();
- rsnTypeGetNativeData(mContext, id, typeData);
- }
-
- native long rsnAllocationCreateTyped(long con, long type, int mip, int usage, long pointer);
- synchronized long nAllocationCreateTyped(long type, int mip, int usage, long pointer) {
- validate();
- return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
- }
- native long rsnAllocationCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
- synchronized long nAllocationCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
- validate();
- return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
- }
-
- native long rsnAllocationCreateBitmapBackedAllocation(long con, long type, int mip, Bitmap bmp, int usage);
- synchronized long nAllocationCreateBitmapBackedAllocation(long type, int mip, Bitmap bmp, int usage) {
- validate();
- return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
- }
-
-
- native long rsnAllocationCubeCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
- synchronized long nAllocationCubeCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
- validate();
- return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
- }
- native long rsnAllocationCreateBitmapRef(long con, long type, Bitmap bmp);
- synchronized long nAllocationCreateBitmapRef(long type, Bitmap bmp) {
- validate();
- return rsnAllocationCreateBitmapRef(mContext, type, bmp);
- }
- native long rsnAllocationCreateFromAssetStream(long con, int mips, int assetStream, int usage);
- synchronized long nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
- validate();
- return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
- }
-
- native void rsnAllocationCopyToBitmap(long con, long alloc, Bitmap bmp);
- synchronized void nAllocationCopyToBitmap(long alloc, Bitmap bmp) {
- validate();
- rsnAllocationCopyToBitmap(mContext, alloc, bmp);
- }
-
-
- native void rsnAllocationSyncAll(long con, long alloc, int src);
- synchronized void nAllocationSyncAll(long alloc, int src) {
- validate();
- rsnAllocationSyncAll(mContext, alloc, src);
- }
-
- native void rsnAllocationSetSurface(long con, long alloc, Surface sur);
- synchronized void nAllocationSetSurface(long alloc, Surface sur) {
- validate();
- rsnAllocationSetSurface(mContext, alloc, sur);
- }
-
- native void rsnAllocationIoSend(long con, long alloc);
- synchronized void nAllocationIoSend(long alloc) {
- validate();
- rsnAllocationIoSend(mContext, alloc);
- }
- native void rsnAllocationIoReceive(long con, long alloc);
- synchronized void nAllocationIoReceive(long alloc) {
- validate();
- rsnAllocationIoReceive(mContext, alloc);
- }
- native ByteBuffer rsnAllocationGetByteBuffer(long con, long alloc, int xBytesSize, int dimY, int dimZ);
- synchronized ByteBuffer nAllocationGetByteBuffer(long alloc, int xBytesSize, int dimY, int dimZ) {
- validate();
- return rsnAllocationGetByteBuffer(mContext, alloc, xBytesSize, dimY, dimZ);
- }
- native long rsnAllocationGetStride(long con, long alloc);
- synchronized long nAllocationGetStride(long alloc) {
- validate();
- return rsnAllocationGetStride(mContext, alloc);
- }
-
- native void rsnAllocationGenerateMipmaps(long con, long alloc);
- synchronized void nAllocationGenerateMipmaps(long alloc) {
- validate();
- rsnAllocationGenerateMipmaps(mContext, alloc);
- }
- native void rsnAllocationCopyFromBitmap(long con, long alloc, Bitmap bmp);
- synchronized void nAllocationCopyFromBitmap(long alloc, Bitmap bmp) {
- validate();
- rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
- }
-
-
- native void rsnAllocationData1D(long con, long id, int off, int mip, int count, Object d, int sizeBytes, int dt,
- int mSize, boolean usePadding);
- synchronized void nAllocationData1D(long id, int off, int mip, int count, Object d, int sizeBytes, Element.DataType dt,
- int mSize, boolean usePadding) {
- validate();
- rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
- }
-
- native void rsnAllocationElementData1D(long con,long id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
- synchronized void nAllocationElementData1D(long id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
- validate();
- rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
- }
- /*
- native void rsnAllocationElementData(long con,long id, int xoff, int yoff, int zoff, int mip, int compIdx, byte[] d, int sizeBytes);
- synchronized void nAllocationElementData(long id, int xoff, int yoff, int zoff, int mip, int compIdx, byte[] d, int sizeBytes) {
- validate();
- rsnAllocationElementData(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
- }
- */
-
- native void rsnAllocationData2D(long con,
- long dstAlloc, int dstXoff, int dstYoff,
- int dstMip, int dstFace,
- int width, int height,
- long srcAlloc, int srcXoff, int srcYoff,
- int srcMip, int srcFace);
- synchronized void nAllocationData2D(long dstAlloc, int dstXoff, int dstYoff,
- int dstMip, int dstFace,
- int width, int height,
- long srcAlloc, int srcXoff, int srcYoff,
- int srcMip, int srcFace) {
- validate();
- rsnAllocationData2D(mContext,
- dstAlloc, dstXoff, dstYoff,
- dstMip, dstFace,
- width, height,
- srcAlloc, srcXoff, srcYoff,
- srcMip, srcFace);
- }
-
- native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face,
- int w, int h, Object d, int sizeBytes, int dt,
- int mSize, boolean usePadding);
- synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face,
- int w, int h, Object d, int sizeBytes, Element.DataType dt,
- int mSize, boolean usePadding) {
- validate();
- rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
- }
-
- native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face, Bitmap b);
- synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face, Bitmap b) {
- validate();
- rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
- }
-
- native void rsnAllocationData3D(long con,
- long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
- int dstMip,
- int width, int height, int depth,
- long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
- int srcMip);
- synchronized void nAllocationData3D(long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
- int dstMip,
- int width, int height, int depth,
- long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
- int srcMip) {
- validate();
- rsnAllocationData3D(mContext,
- dstAlloc, dstXoff, dstYoff, dstZoff,
- dstMip, width, height, depth,
- srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
- }
-
-
- native void rsnAllocationData3D(long con, long id, int xoff, int yoff, int zoff, int mip,
- int w, int h, int depth, Object d, int sizeBytes, int dt,
- int mSize, boolean usePadding);
- synchronized void nAllocationData3D(long id, int xoff, int yoff, int zoff, int mip,
- int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
- int mSize, boolean usePadding) {
- validate();
- rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes,
- dt.mID, mSize, usePadding);
- }
-
- native void rsnAllocationRead(long con, long id, Object d, int dt, int mSize, boolean usePadding);
- synchronized void nAllocationRead(long id, Object d, Element.DataType dt, int mSize, boolean usePadding) {
- validate();
- rsnAllocationRead(mContext, id, d, dt.mID, mSize, usePadding);
- }
-
- native void rsnAllocationRead1D(long con, long id, int off, int mip, int count, Object d,
- int sizeBytes, int dt, int mSize, boolean usePadding);
- synchronized void nAllocationRead1D(long id, int off, int mip, int count, Object d,
- int sizeBytes, Element.DataType dt, int mSize, boolean usePadding) {
- validate();
- rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
- }
-
- /*
- native void rsnAllocationElementRead(long con,long id, int xoff, int yoff, int zoff,
- int mip, int compIdx, byte[] d, int sizeBytes);
- synchronized void nAllocationElementRead(long id, int xoff, int yoff, int zoff,
- int mip, int compIdx, byte[] d, int sizeBytes) {
- validate();
- rsnAllocationElementRead(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
- }
- */
-
- native void rsnAllocationRead2D(long con, long id, int xoff, int yoff, int mip, int face,
- int w, int h, Object d, int sizeBytes, int dt,
- int mSize, boolean usePadding);
- synchronized void nAllocationRead2D(long id, int xoff, int yoff, int mip, int face,
- int w, int h, Object d, int sizeBytes, Element.DataType dt,
- int mSize, boolean usePadding) {
- validate();
- rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
- }
-
- /*
- native void rsnAllocationRead3D(long con, long id, int xoff, int yoff, int zoff, int mip,
- int w, int h, int depth, Object d, int sizeBytes, int dt,
- int mSize, boolean usePadding);
- synchronized void nAllocationRead3D(long id, int xoff, int yoff, int zoff, int mip,
- int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
- int mSize, boolean usePadding) {
- validate();
- rsnAllocationRead3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID, mSize, usePadding);
- }
- */
-
- native long rsnAllocationGetType(long con, long id);
- synchronized long nAllocationGetType(long id) {
- validate();
- return rsnAllocationGetType(mContext, id);
- }
-
- native void rsnAllocationResize1D(long con, long id, int dimX);
- synchronized void nAllocationResize1D(long id, int dimX) {
- validate();
- rsnAllocationResize1D(mContext, id, dimX);
- }
- native void rsnAllocationResize2D(long con, long id, int dimX, int dimY);
- synchronized void nAllocationResize2D(long id, int dimX, int dimY) {
- validate();
- rsnAllocationResize2D(mContext, id, dimX, dimY);
- }
-
- native void rsnScriptBindAllocation(long con, long script, long alloc, int slot, boolean mUseInc);
- synchronized void nScriptBindAllocation(long script, long alloc, int slot, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptBindAllocation(curCon, script, alloc, slot, mUseInc);
- }
- native void rsnScriptSetTimeZone(long con, long script, byte[] timeZone, boolean mUseInc);
- synchronized void nScriptSetTimeZone(long script, byte[] timeZone, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetTimeZone(curCon, script, timeZone, mUseInc);
- }
- native void rsnScriptInvoke(long con, long id, int slot, boolean mUseInc);
- synchronized void nScriptInvoke(long id, int slot, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptInvoke(curCon, id, slot, mUseInc);
- }
- native void rsnScriptForEach(long con, long incCon, long id, int slot, long ain, long aout, byte[] params, boolean mUseInc);
- native void rsnScriptForEach(long con, long incCon, long id, int slot, long ain, long aout, boolean mUseInc);
- native void rsnScriptForEachClipped(long con, long incCon, long id, int slot, long ain, long aout, byte[] params,
- int xstart, int xend, int ystart, int yend, int zstart, int zend, boolean mUseInc);
- native void rsnScriptForEachClipped(long con, long incCon, long id, int slot, long ain, long aout,
- int xstart, int xend, int ystart, int yend, int zstart, int zend, boolean mUseInc);
- synchronized void nScriptForEach(long id, int slot, long ain, long aout, byte[] params, boolean mUseInc) {
- validate();
- if (params == null) {
- rsnScriptForEach(mContext, mIncCon, id, slot, ain, aout, mUseInc);
- } else {
- rsnScriptForEach(mContext, mIncCon, id, slot, ain, aout, params, mUseInc);
- }
- }
-
- synchronized void nScriptForEachClipped(long id, int slot, long ain, long aout, byte[] params,
- int xstart, int xend, int ystart, int yend, int zstart, int zend, boolean mUseInc) {
- validate();
- if (params == null) {
- rsnScriptForEachClipped(mContext, mIncCon, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend, mUseInc);
- } else {
- rsnScriptForEachClipped(mContext, mIncCon, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend, mUseInc);
- }
- }
-
- native void rsnScriptForEach(long con, long id, int slot, long[] ains,
- long aout, byte[] params, int[] limits);
-
- synchronized void nScriptForEach(long id, int slot, long[] ains, long aout,
- byte[] params, int[] limits) {
- if (!mEnableMultiInput) {
- Log.e(LOG_TAG, "Multi-input kernels are not supported, please change targetSdkVersion to >= 23");
- throw new RSRuntimeException("Multi-input kernels are not supported before API 23)");
- }
- validate();
- rsnScriptForEach(mContext, id, slot, ains, aout, params, limits);
- }
-
- native void rsnScriptReduce(long con, long id, int slot, long[] ains,
- long aout, int[] limits);
- synchronized void nScriptReduce(long id, int slot, long ains[], long aout,
- int[] limits) {
- validate();
- rsnScriptReduce(mContext, id, slot, ains, aout, limits);
- }
-
- native void rsnScriptInvokeV(long con, long id, int slot, byte[] params, boolean mUseInc);
- synchronized void nScriptInvokeV(long id, int slot, byte[] params, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptInvokeV(curCon, id, slot, params, mUseInc);
- }
- native void rsnScriptSetVarI(long con, long id, int slot, int val, boolean mUseInc);
- synchronized void nScriptSetVarI(long id, int slot, int val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarI(curCon, id, slot, val, mUseInc);
- }
- native void rsnScriptSetVarJ(long con, long id, int slot, long val, boolean mUseInc);
- synchronized void nScriptSetVarJ(long id, int slot, long val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarJ(curCon, id, slot, val, mUseInc);
- }
- native void rsnScriptSetVarF(long con, long id, int slot, float val, boolean mUseInc);
- synchronized void nScriptSetVarF(long id, int slot, float val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarF(curCon, id, slot, val, mUseInc);
- }
- native void rsnScriptSetVarD(long con, long id, int slot, double val, boolean mUseInc);
- synchronized void nScriptSetVarD(long id, int slot, double val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarD(curCon, id, slot, val, mUseInc);
- }
- native void rsnScriptSetVarV(long con, long id, int slot, byte[] val, boolean mUseInc);
- synchronized void nScriptSetVarV(long id, int slot, byte[] val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarV(curCon, id, slot, val, mUseInc);
- }
- native void rsnScriptSetVarVE(long con, long id, int slot, byte[] val,
- long e, int[] dims, boolean mUseInc);
- synchronized void nScriptSetVarVE(long id, int slot, byte[] val,
- long e, int[] dims, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarVE(curCon, id, slot, val, e, dims, mUseInc);
- }
- native void rsnScriptSetVarObj(long con, long id, int slot, long val, boolean mUseInc);
- synchronized void nScriptSetVarObj(long id, int slot, long val, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- rsnScriptSetVarObj(curCon, id, slot, val, mUseInc);
- }
-
- native long rsnScriptCCreate(long con, String resName, String cacheDir,
- byte[] script, int length);
- synchronized long nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
- validate();
- return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
- }
-
- native long rsnScriptIntrinsicCreate(long con, int id, long eid, boolean mUseInc);
- synchronized long nScriptIntrinsicCreate(int id, long eid, boolean mUseInc) {
- validate();
- if (mUseInc) {
- if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
- Log.e(LOG_TAG, "Incremental Intrinsics are not supported, please change targetSdkVersion to >= 21");
- throw new RSRuntimeException("Incremental Intrinsics are not supported before Lollipop (API 21)");
- }
-
- if (!mIncLoaded) {
- try {
- System.loadLibrary("RSSupport");
- } catch (UnsatisfiedLinkError e) {
- Log.e(LOG_TAG, "Error loading RS Compat library for Incremental Intrinsic Support: " + e);
- throw new RSRuntimeException("Error loading RS Compat library for Incremental Intrinsic Support: " + e);
- }
- if (!nIncLoadSO(SUPPORT_LIB_API, mNativeLibDir + "/libRSSupport.so")) {
- throw new RSRuntimeException("Error loading libRSSupport library for Incremental Intrinsic Support");
- }
- mIncLoaded = true;
- }
- if (mIncCon == 0) {
- //Create a dummy compat context (synchronous).
- long device = nIncDeviceCreate();
- mIncCon = nIncContextCreate(device, 0, 0, 0);
- }
- return rsnScriptIntrinsicCreate(mIncCon, id, eid, mUseInc);
- } else {
- return rsnScriptIntrinsicCreate(mContext, id, eid, mUseInc);
- }
- }
-
- native long rsnScriptKernelIDCreate(long con, long sid, int slot, int sig, boolean mUseInc);
- synchronized long nScriptKernelIDCreate(long sid, int slot, int sig, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- return rsnScriptKernelIDCreate(curCon, sid, slot, sig, mUseInc);
- }
-
- native long rsnScriptInvokeIDCreate(long con, long sid, int slot);
- synchronized long nScriptInvokeIDCreate(long sid, int slot) {
- validate();
- return rsnScriptInvokeIDCreate(mContext, sid, slot);
- }
-
- native long rsnScriptFieldIDCreate(long con, long sid, int slot, boolean mUseInc);
- synchronized long nScriptFieldIDCreate(long sid, int slot, boolean mUseInc) {
- validate();
- long curCon = mContext;
- if (mUseInc) {
- curCon = mIncCon;
- }
- return rsnScriptFieldIDCreate(curCon, sid, slot, mUseInc);
- }
-
- native long rsnScriptGroupCreate(long con, long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types);
- synchronized long nScriptGroupCreate(long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types) {
- validate();
- return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
- }
-
- native void rsnScriptGroupSetInput(long con, long group, long kernel, long alloc);
- synchronized void nScriptGroupSetInput(long group, long kernel, long alloc) {
- validate();
- rsnScriptGroupSetInput(mContext, group, kernel, alloc);
- }
-
- native void rsnScriptGroupSetOutput(long con, long group, long kernel, long alloc);
- synchronized void nScriptGroupSetOutput(long group, long kernel, long alloc) {
- validate();
- rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
- }
-
- native void rsnScriptGroupExecute(long con, long group);
- synchronized void nScriptGroupExecute(long group) {
- validate();
- rsnScriptGroupExecute(mContext, group);
- }
-
- native long rsnSamplerCreate(long con, int magFilter, int minFilter,
- int wrapS, int wrapT, int wrapR, float aniso);
- synchronized long nSamplerCreate(int magFilter, int minFilter,
- int wrapS, int wrapT, int wrapR, float aniso) {
- validate();
- return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
- }
-
-// entry points for ScriptGroup2
- native long rsnClosureCreate(long con, long kernelID, long returnValue,
- long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
- long[] depFieldIDs);
- synchronized long nClosureCreate(long kernelID, long returnValue,
- long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
- long[] depFieldIDs) {
- validate();
- long c = rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
- sizes, depClosures, depFieldIDs);
- if (c == 0) {
- throw new RSRuntimeException("Failed creating closure.");
- }
- return c;
- }
-
- native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
- long[] fieldIDs, long[] values, int[] sizes);
- synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
- long[] fieldIDs, long[] values, int[] sizes) {
- validate();
- long c = rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
- values, sizes);
- if (c == 0) {
- throw new RSRuntimeException("Failed creating closure.");
- }
- return c;
- }
-
- native void rsnClosureSetArg(long con, long closureID, int index,
- long value, int size);
- synchronized void nClosureSetArg(long closureID, int index, long value,
- int size) {
- validate();
- rsnClosureSetArg(mContext, closureID, index, value, size);
- }
-
- native void rsnClosureSetGlobal(long con, long closureID, long fieldID,
- long value, int size);
- // Does this have to be synchronized?
- synchronized void nClosureSetGlobal(long closureID, long fieldID,
- long value, int size) {
- validate(); // TODO: is this necessary?
- rsnClosureSetGlobal(mContext, closureID, fieldID, value, size);
- }
-
- native long rsnScriptGroup2Create(long con, String name, String cachePath,
- long[] closures);
- synchronized long nScriptGroup2Create(String name, String cachePath,
- long[] closures) {
- validate();
- return rsnScriptGroup2Create(mContext, name, cachePath, closures);
- }
-
- native void rsnScriptGroup2Execute(long con, long groupID);
- synchronized void nScriptGroup2Execute(long groupID) {
- validate();
- rsnScriptGroup2Execute(mContext, groupID);
- }
-
- native void rsnScriptIntrinsicBLAS_Single(long con, long incCon, long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- float alpha, long A, long B, float beta, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc);
- synchronized void nScriptIntrinsicBLAS_Single(long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- float alpha, long A, long B, float beta, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc) {
- validate();
- rsnScriptIntrinsicBLAS_Single(mContext, mIncCon, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU, mUseInc);
- }
-
- native void rsnScriptIntrinsicBLAS_Double(long con, long incCon, long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- double alpha, long A, long B, double beta, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc);
- synchronized void nScriptIntrinsicBLAS_Double(long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- double alpha, long A, long B, double beta, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc) {
- validate();
- rsnScriptIntrinsicBLAS_Double(mContext, mIncCon, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU, mUseInc);
- }
-
- native void rsnScriptIntrinsicBLAS_Complex(long con, long incCon, long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc);
- synchronized void nScriptIntrinsicBLAS_Complex(long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc) {
- validate();
- rsnScriptIntrinsicBLAS_Complex(mContext, mIncCon, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU, mUseInc);
- }
-
- native void rsnScriptIntrinsicBLAS_Z(long con, long incCon, long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc);
- synchronized void nScriptIntrinsicBLAS_Z(long id, int func, int TransA,
- int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
- double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
- int KL, int KU, boolean mUseInc) {
- validate();
- rsnScriptIntrinsicBLAS_Z(mContext, mIncCon, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU, mUseInc);
- }
-
- native void rsnScriptIntrinsicBLAS_BNNM(long con, long incCon, long id, int M, int N, int K,
- long A, int a_offset, long B, int b_offset, long C, int c_offset,
- int c_mult_int, boolean mUseInc);
- synchronized void nScriptIntrinsicBLAS_BNNM(long id, int M, int N, int K,
- long A, int a_offset, long B, int b_offset, long C, int c_offset,
- int c_mult_int, boolean mUseInc) {
- validate();
- rsnScriptIntrinsicBLAS_BNNM(mContext, mIncCon, id, M, N, K, A, a_offset, B, b_offset, C, c_offset, c_mult_int, mUseInc);
- }
-
-// Additional Entry points For inc libRSSupport
-
- native boolean nIncLoadSO(int deviceApi, String libPath);
- native long nIncDeviceCreate();
- native void nIncDeviceDestroy(long dev);
- // Methods below are wrapped to protect the non-threadsafe
- // lockless fifo.
- native long rsnIncContextCreate(long dev, int ver, int sdkVer, int contextType);
- synchronized long nIncContextCreate(long dev, int ver, int sdkVer, int contextType) {
- return rsnIncContextCreate(dev, ver, sdkVer, contextType);
- }
- native void rsnIncContextDestroy(long con);
- synchronized void nIncContextDestroy() {
- validate();
-
- // take teardown lock
- // teardown lock can only be taken when no objects are being destroyed
- ReentrantReadWriteLock.WriteLock wlock = mRWLock.writeLock();
- wlock.lock();
-
- long curCon = mIncCon;
- // context is considered dead as of this point
- mIncCon = 0;
-
- wlock.unlock();
- rsnIncContextDestroy(curCon);
- }
-
- native void rsnIncContextFinish(long con);
- synchronized void nIncContextFinish() {
- validate();
- rsnIncContextFinish(mIncCon);
- }
-
- native void rsnIncObjDestroy(long con, long id);
- void nIncObjDestroy(long id) {
- // There is a race condition here. The calling code may be run
- // by the gc while teardown is occuring. This protects againts
- // deleting dead objects.
- if (mIncCon != 0) {
- rsnIncObjDestroy(mIncCon, id);
- }
- }
- native long rsnIncElementCreate(long con, long type, int kind, boolean norm, int vecSize);
- synchronized long nIncElementCreate(long type, int kind, boolean norm, int vecSize) {
- validate();
- return rsnIncElementCreate(mIncCon, type, kind, norm, vecSize);
- }
- native long rsnIncTypeCreate(long con, long eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
- synchronized long nIncTypeCreate(long eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
- validate();
- return rsnIncTypeCreate(mIncCon, eid, x, y, z, mips, faces, yuv);
- }
- native long rsnIncAllocationCreateTyped(long con, long incCon, long alloc, long type, int xBytesSize);
- synchronized long nIncAllocationCreateTyped(long alloc, long type, int xBytesSize) {
- validate();
- return rsnIncAllocationCreateTyped(mContext, mIncCon, alloc, type, xBytesSize);
- }
-
- long mContext;
- private boolean mDestroyed = false;
- //Dummy device & context for Inc Support Lib
- long mIncCon;
- //indicator of whether inc support lib has been loaded or not.
- boolean mIncLoaded;
- ReentrantReadWriteLock mRWLock;
- @SuppressWarnings({"FieldCanBeLocal"})
- MessageThread mMessageThread;
-
- Element mElement_U8;
- Element mElement_I8;
- Element mElement_U16;
- Element mElement_I16;
- Element mElement_U32;
- Element mElement_I32;
- Element mElement_U64;
- Element mElement_I64;
- Element mElement_F32;
- Element mElement_F64;
- Element mElement_BOOLEAN;
-
- Element mElement_ELEMENT;
- Element mElement_TYPE;
- Element mElement_ALLOCATION;
- Element mElement_SAMPLER;
- Element mElement_SCRIPT;
-
- Element mElement_A_8;
- Element mElement_RGB_565;
- Element mElement_RGB_888;
- Element mElement_RGBA_5551;
- Element mElement_RGBA_4444;
- Element mElement_RGBA_8888;
-
- Element mElement_FLOAT_2;
- Element mElement_FLOAT_3;
- Element mElement_FLOAT_4;
-
- Element mElement_DOUBLE_2;
- Element mElement_DOUBLE_3;
- Element mElement_DOUBLE_4;
-
- Element mElement_UCHAR_2;
- Element mElement_UCHAR_3;
- Element mElement_UCHAR_4;
-
- Element mElement_CHAR_2;
- Element mElement_CHAR_3;
- Element mElement_CHAR_4;
-
- Element mElement_USHORT_2;
- Element mElement_USHORT_3;
- Element mElement_USHORT_4;
-
- Element mElement_SHORT_2;
- Element mElement_SHORT_3;
- Element mElement_SHORT_4;
-
- Element mElement_UINT_2;
- Element mElement_UINT_3;
- Element mElement_UINT_4;
-
- Element mElement_INT_2;
- Element mElement_INT_3;
- Element mElement_INT_4;
-
- Element mElement_ULONG_2;
- Element mElement_ULONG_3;
- Element mElement_ULONG_4;
-
- Element mElement_LONG_2;
- Element mElement_LONG_3;
- Element mElement_LONG_4;
-
- Element mElement_MATRIX_4X4;
- Element mElement_MATRIX_3X3;
- Element mElement_MATRIX_2X2;
-
- Sampler mSampler_CLAMP_NEAREST;
- Sampler mSampler_CLAMP_LINEAR;
- Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
- Sampler mSampler_WRAP_NEAREST;
- Sampler mSampler_WRAP_LINEAR;
- Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
- Sampler mSampler_MIRRORED_REPEAT_NEAREST;
- Sampler mSampler_MIRRORED_REPEAT_LINEAR;
- Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
-
-
- ///////////////////////////////////////////////////////////////////////////////////
- //
-
- /**
- * The base class from which an application should derive in order
- * to receive RS messages from scripts. When a script calls {@code
- * rsSendToClient}, the data fields will be filled, and the run
- * method will be called on a separate thread. This will occur
- * some time after {@code rsSendToClient} completes in the script,
- * as {@code rsSendToClient} is asynchronous. Message handlers are
- * not guaranteed to have completed when {@link
- * android.support.v8.renderscript.RenderScript#finish} returns.
- *
- */
- public static class RSMessageHandler implements Runnable {
- protected int[] mData;
- protected int mID;
- protected int mLength;
- public void run() {
- }
- }
- /**
- * If an application is expecting messages, it should set this
- * field to an instance of {@link RSMessageHandler}. This
- * instance will receive all the user messages sent from {@code
- * sendToClient} by scripts from this context.
- *
- */
- RSMessageHandler mMessageCallback = null;
-
- public void setMessageHandler(RSMessageHandler msg) {
- mMessageCallback = msg;
- }
- public RSMessageHandler getMessageHandler() {
- return mMessageCallback;
- }
-
- /**
- * Place a message into the message queue to be sent back to the message
- * handler once all previous commands have been executed.
- *
- * @param id
- * @param data
- */
- public void sendMessage(int id, int[] data) {
- nContextSendMessage(id, data);
- }
-
- /**
- * The runtime error handler base class. An application should derive from this class
- * if it wishes to install an error handler. When errors occur at runtime,
- * the fields in this class will be filled, and the run method will be called.
- *
- */
- public static class RSErrorHandler implements Runnable {
- protected String mErrorMessage;
- protected int mErrorNum;
- public void run() {
- }
- }
-
- /**
- * Application Error handler. All runtime errors will be dispatched to the
- * instance of RSAsyncError set here. If this field is null a
- * {@link RSRuntimeException} will instead be thrown with details about the error.
- * This will cause program termaination.
- *
- */
- RSErrorHandler mErrorCallback = null;
-
- public void setErrorHandler(RSErrorHandler msg) {
- mErrorCallback = msg;
- }
- public RSErrorHandler getErrorHandler() {
- return mErrorCallback;
- }
-
- /**
- * RenderScript worker thread priority enumeration. The default value is
- * NORMAL. Applications wishing to do background processing should set
- * their priority to LOW to avoid starving forground processes.
- */
- public enum Priority {
- LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
- NORMAL (Process.THREAD_PRIORITY_DISPLAY);
-
- int mID;
- Priority(int id) {
- mID = id;
- }
- }
-
- void validateObject(BaseObj o) {
- if (o != null) {
- if (o.mRS != this) {
- throw new RSIllegalArgumentException("Attempting to use an object across contexts.");
- }
- }
- }
-
- void validate() {
- if (mContext == 0) {
- throw new RSInvalidStateException("Calling RS with no Context active.");
- }
- }
-
- /**
- * check if IO support lib is available.
- */
- boolean usingIO() {
- return useIOlib;
- }
- /**
- * Change the priority of the worker threads for this context.
- *
- * @param p New priority to be set.
- */
- public void setPriority(Priority p) {
- validate();
- nContextSetPriority(p.mID);
- }
-
- static class MessageThread extends Thread {
- RenderScript mRS;
- boolean mRun = true;
- int[] mAuxData = new int[2];
-
- static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
- static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
- static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
- static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
-
- static final int RS_MESSAGE_TO_CLIENT_USER = 4;
- static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
-
- MessageThread(RenderScript rs) {
- super("RSMessageThread");
- mRS = rs;
-
- }
-
- public void run() {
- // This function is a temporary solution. The final solution will
- // used typed allocations where the message id is the type indicator.
- int[] rbuf = new int[16];
- mRS.nContextInitToClient(mRS.mContext);
- while(mRun) {
- rbuf[0] = 0;
- int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
- int size = mAuxData[1];
- int subID = mAuxData[0];
-
- if (msg == RS_MESSAGE_TO_CLIENT_USER) {
- if ((size>>2) >= rbuf.length) {
- rbuf = new int[(size + 3) >> 2];
- }
- if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
- RS_MESSAGE_TO_CLIENT_USER) {
- throw new RSDriverException("Error processing message from RenderScript.");
- }
-
- if(mRS.mMessageCallback != null) {
- mRS.mMessageCallback.mData = rbuf;
- mRS.mMessageCallback.mID = subID;
- mRS.mMessageCallback.mLength = size;
- mRS.mMessageCallback.run();
- } else {
- throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
- }
- continue;
- }
-
- if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
- String e = mRS.nContextGetErrorMessage(mRS.mContext);
-
- if (subID >= RS_ERROR_FATAL_UNKNOWN) {
- throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
- }
-
- if(mRS.mErrorCallback != null) {
- mRS.mErrorCallback.mErrorMessage = e;
- mRS.mErrorCallback.mErrorNum = subID;
- mRS.mErrorCallback.run();
- } else {
- android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
- // Do not throw here. In these cases, we do not have
- // a fatal error.
- }
- continue;
- }
-
- // 2: teardown.
- // But we want to avoid starving other threads during
- // teardown by yielding until the next line in the destructor
- // can execute to set mRun = false
- try {
- sleep(1, 0);
- } catch(InterruptedException e) {
- }
- }
- //Log.d(LOG_TAG, "MessageThread exiting.");
- }
- }
-
- RenderScript(Context ctx) {
- mContextType = ContextType.NORMAL;
- if (ctx != null) {
- mApplicationContext = ctx.getApplicationContext();
- // Only set mNativeLibDir for API 9+.
- mNativeLibDir = mApplicationContext.getApplicationInfo().nativeLibraryDir;
- }
- mIncCon = 0;
- mIncLoaded = false;
- mRWLock = new ReentrantReadWriteLock();
- }
-
- /**
- * Gets the application context associated with the RenderScript context.
- *
- * @return The application context.
- */
- public final Context getApplicationContext() {
- return mApplicationContext;
- }
-
- /**
- * Create a RenderScript context.
- *
- * @param ctx The context.
- * @return RenderScript
- */
- private static RenderScript internalCreate(Context ctx, int sdkVersion, ContextType ct, int flags) {
- RenderScript rs = new RenderScript(ctx);
-
- if (sSdkVersion == -1) {
- sSdkVersion = sdkVersion;
- } else if (sSdkVersion != sdkVersion) {
- throw new RSRuntimeException("Can't have two contexts with different SDK versions in support lib");
- }
- useNative = setupNative(sSdkVersion, ctx);
- synchronized(lock) {
- if (sInitialized == false) {
- try {
- Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
- Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
- sRuntime = get_runtime.invoke(null);
- registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
- registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
- sUseGCHooks = true;
- } catch (Exception e) {
- Log.e(LOG_TAG, "No GC methods");
- sUseGCHooks = false;
- }
- try {
- // For API 9 - 22, always use the absolute path of librsjni.so
- // http://b/25226912
- if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M &&
- rs.mNativeLibDir != null) {
- System.load(rs.mNativeLibDir + "/librsjni.so");
- } else {
- System.loadLibrary("rsjni");
- }
- sInitialized = true;
- sPointerSize = rsnSystemGetPointerSize();
- } catch (UnsatisfiedLinkError e) {
- Log.e(LOG_TAG, "Error loading RS jni library: " + e);
- throw new RSRuntimeException("Error loading RS jni library: " + e + " Support lib API: " + SUPPORT_LIB_VERSION);
- }
- }
- }
-
- if (useNative) {
- android.util.Log.v(LOG_TAG, "RS native mode");
- } else {
- android.util.Log.v(LOG_TAG, "RS compat mode");
- }
-
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- useIOlib = true;
- }
-
- // The target API level used to init dispatchTable.
- int dispatchAPI = sdkVersion;
- if (sdkVersion < android.os.Build.VERSION.SDK_INT) {
- // If the device API is higher than target API level, init dispatch table based on device API.
- dispatchAPI = android.os.Build.VERSION.SDK_INT;
- }
-
- String rssupportPath = null;
- // For API 9 - 22, always use the absolute path of libRSSupport.so
- // http://b/25226912
- if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M &&
- rs.mNativeLibDir != null) {
- rssupportPath = rs.mNativeLibDir + "/libRSSupport.so";
- }
- if (!rs.nLoadSO(useNative, dispatchAPI, rssupportPath)) {
- if (useNative) {
- android.util.Log.v(LOG_TAG, "Unable to load libRS.so, falling back to compat mode");
- useNative = false;
- }
- try {
- if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M &&
- rs.mNativeLibDir != null) {
- System.load(rssupportPath);
- } else {
- System.loadLibrary("RSSupport");
- }
- } catch (UnsatisfiedLinkError e) {
- Log.e(LOG_TAG, "Error loading RS Compat library: " + e + " Support lib version: " + SUPPORT_LIB_VERSION);
- throw new RSRuntimeException("Error loading RS Compat library: " + e + " Support lib version: " + SUPPORT_LIB_VERSION);
- }
- if (!rs.nLoadSO(false, dispatchAPI, rssupportPath)) {
- Log.e(LOG_TAG, "Error loading RS Compat library: nLoadSO() failed; Support lib version: " + SUPPORT_LIB_VERSION);
- throw new RSRuntimeException("Error loading libRSSupport library, Support lib version: " + SUPPORT_LIB_VERSION);
- }
- }
-
- if (useIOlib) {
- try {
- System.loadLibrary("RSSupportIO");
- } catch (UnsatisfiedLinkError e) {
- useIOlib = false;
- }
- if (!useIOlib || !rs.nLoadIOSO()) {
- android.util.Log.v(LOG_TAG, "Unable to load libRSSupportIO.so, USAGE_IO not supported");
- useIOlib = false;
- }
- }
-
- // For old APIs with dlopen bug, need to load blas lib in Java first.
- // Only try load to blasV8 when the desired API level includes IntrinsicBLAS.
- if (dispatchAPI >= 23) {
- // Enable multi-input kernels only when diapatchAPI is M+.
- rs.mEnableMultiInput = true;
- try {
- System.loadLibrary("blasV8");
- } catch (UnsatisfiedLinkError e) {
- Log.v(LOG_TAG, "Unable to load BLAS lib, ONLY BNNM will be supported: " + e);
- }
- }
-
- long device = rs.nDeviceCreate();
- rs.mContext = rs.nContextCreate(device, 0, sdkVersion, ct.mID, rs.mNativeLibDir);
- rs.mContextType = ct;
- rs.mContextFlags = flags;
- rs.mContextSdkVersion = sdkVersion;
- rs.mDispatchAPILevel = dispatchAPI;
- if (rs.mContext == 0) {
- throw new RSDriverException("Failed to create RS context.");
- }
- rs.mMessageThread = new MessageThread(rs);
- rs.mMessageThread.start();
- return rs;
- }
-
- /**
- * Create a RenderScript context.
- *
- * See documentation for @create for details
- *
- * @param ctx The context.
- * @return RenderScript
- */
- public static RenderScript create(Context ctx) {
- return create(ctx, ContextType.NORMAL);
- }
-
- /**
- * calls create(ctx, ct, CREATE_FLAG_NONE)
- *
- * See documentation for @create for details
- *
- * @param ctx The context.
- * @param ct The type of context to be created.
- * @return RenderScript
- */
- public static RenderScript create(Context ctx, ContextType ct) {
- return create(ctx, ct, CREATE_FLAG_NONE);
- }
-
- /**
- * Gets or creates a RenderScript context of the specified type.
- *
- * The returned context will be cached for future reuse within
- * the process. When an application is finished using
- * RenderScript it should call releaseAllContexts()
- *
- * A process context is a context designed for easy creation and
- * lifecycle management. Multiple calls to this function will
- * return the same object provided they are called with the same
- * options. This allows it to be used any time a RenderScript
- * context is needed.
- *
- *
- * @param ctx The context.
- * @param ct The type of context to be created.
- * @param flags The OR of the CREATE_FLAG_* options desired
- * @return RenderScript
- */
- public static RenderScript create(Context ctx, ContextType ct, int flags) {
- int v = ctx.getApplicationInfo().targetSdkVersion;
- return create(ctx, v, ct, flags);
- }
-
- /**
- * calls create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE)
- *
- * Used by the RenderScriptThunker to maintain backward compatibility.
- *
- * @hide
- * @param ctx The context.
- * @param sdkVersion The target SDK Version.
- * @return RenderScript
- */
- public static RenderScript create(Context ctx, int sdkVersion) {
- return create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE);
- }
-
-
- /**
- * calls create(ctx, sdkVersion, ct, CREATE_FLAG_NONE)
- * Create a RenderScript context.
- *
- * @hide
- * @param ctx The context.
- * @return RenderScript
- */
- public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
- return create(ctx, sdkVersion, ct, CREATE_FLAG_NONE);
- }
-
- /**
- * Gets or creates a RenderScript context of the specified type.
- *
- * @param ctx The context.
- * @param ct The type of context to be created.
- * @param sdkVersion The target SDK Version.
- * @param flags The OR of the CREATE_FLAG_* options desired
- * @return RenderScript
- */
- public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, int flags) {
- synchronized (mProcessContextList) {
- for (RenderScript prs : mProcessContextList) {
- if ((prs.mContextType == ct) &&
- (prs.mContextFlags == flags) &&
- (prs.mContextSdkVersion == sdkVersion)) {
-
- return prs;
- }
- }
-
- RenderScript prs = internalCreate(ctx, sdkVersion, ct, flags);
- prs.mIsProcessContext = true;
- mProcessContextList.add(prs);
- return prs;
- }
- }
-
- /**
- *
- * Releases all the process contexts. This is the same as
- * calling .destroy() on each unique context retreived with
- * create(...). If no contexts have been created this
- * function does nothing.
- *
- * Typically you call this when your application is losing focus
- * and will not be using a context for some time.
- *
- * This has no effect on a context created with
- * createMultiContext()
- */
- public static void releaseAllContexts() {
- ArrayList<RenderScript> oldList;
- synchronized (mProcessContextList) {
- oldList = mProcessContextList;
- mProcessContextList = new ArrayList<RenderScript>();
- }
-
- for (RenderScript prs : oldList) {
- prs.mIsProcessContext = false;
- prs.destroy();
- }
- oldList.clear();
- }
-
-
-
- /**
- * Create a RenderScript context.
- *
- * This is an advanced function intended for applications which
- * need to create more than one RenderScript context to be used
- * at the same time.
- *
- * If you need a single context please use create()
- *
- * @param ctx The context.
- * @return RenderScript
- */
- public static RenderScript createMultiContext(Context ctx, ContextType ct, int flags, int API_number) {
- return internalCreate(ctx, API_number, ct, flags);
- }
-
- /**
- * Print the currently available debugging information about the state of
- * the RS context to the log.
- *
- */
- public void contextDump() {
- validate();
- nContextDump(0);
- }
-
- /**
- * Wait for any pending asynchronous opeations (such as copies to a RS
- * allocation or RS script executions) to complete.
- *
- */
- public void finish() {
- nContextFinish();
- }
-
- private void helpDestroy() {
- boolean shouldDestroy = false;
- synchronized(this) {
- if (!mDestroyed) {
- shouldDestroy = true;
- mDestroyed = true;
- }
- }
-
- if (shouldDestroy) {
- nContextFinish();
- if (mIncCon != 0) {
- nIncContextFinish();
- nIncContextDestroy();
- mIncCon = 0;
- }
- nContextDeinitToClient(mContext);
- mMessageThread.mRun = false;
- // Interrupt mMessageThread so it gets to see immediately that mRun is false
- // and exit rightaway.
- mMessageThread.interrupt();
-
- // Wait for mMessageThread to join. Try in a loop, in case this thread gets interrupted
- // during the wait. If interrupted, set the "interrupted" status of the current thread.
- boolean hasJoined = false, interrupted = false;
- while (!hasJoined) {
- try {
- mMessageThread.join();
- hasJoined = true;
- } catch (InterruptedException e) {
- interrupted = true;
- }
- }
- if (interrupted) {
- Log.v(LOG_TAG, "Interrupted during wait for MessageThread to join");
- Thread.currentThread().interrupt();
- }
-
- nContextDestroy();
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- helpDestroy();
- super.finalize();
- }
-
- /**
- * Destroys this RenderScript context. Once this function is called,
- * using this context or any objects belonging to this context is
- * illegal.
- *
- * This function is a NOP if the context was created
- * with create(). Please use releaseAllContexts() to clean up
- * contexts created with the create function.
- */
- public void destroy() {
- if (mIsProcessContext) {
- // users cannot destroy a process context
- return;
- }
- validate();
- helpDestroy();
- }
-
- boolean isAlive() {
- return mContext != 0;
- }
-
- long safeID(BaseObj o) {
- if(o != null) {
- return o.getID(this);
- }
- return 0;
- }
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Sampler.java b/v8/renderscript/java/src/android/support/v8/renderscript/Sampler.java
deleted file mode 100644
index 7119e8c..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Sampler.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.util.Log;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-
-/**
- * Sampler object that defines how Allocations can be read as textures within a
- * kernel. Samplers are used in conjunction with the {@code rsSample} runtime
- * function to return values from normalized coordinates.
- *
- * Any Allocation used with a Sampler must have been created with {@link
- * android.support.v8.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE}; using a
- * Sampler on an {@link android.support.v8.renderscript.Allocation} that was not
- * created with
- * {@link android.support.v8.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} is
- * undefined.
- **/
-public class Sampler extends BaseObj {
- public enum Value {
- NEAREST (0),
- LINEAR (1),
- LINEAR_MIP_LINEAR (2),
- LINEAR_MIP_NEAREST (5),
- WRAP (3),
- CLAMP (4),
- MIRRORED_REPEAT (6);
-
- int mID;
- Value(int id) {
- mID = id;
- }
- }
-
- Value mMin;
- Value mMag;
- Value mWrapS;
- Value mWrapT;
- Value mWrapR;
- float mAniso;
-
- Sampler(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * @return minification setting for the sampler
- */
- public Value getMinification() {
- return mMin;
- }
-
- /**
- * @return magnification setting for the sampler
- */
- public Value getMagnification() {
- return mMag;
- }
-
- /**
- * @return S wrapping mode for the sampler
- */
- public Value getWrapS() {
- return mWrapS;
- }
-
- /**
- * @return T wrapping mode for the sampler
- */
- public Value getWrapT() {
- return mWrapT;
- }
-
- /**
- * @return anisotropy setting for the sampler
- */
- public float getAnisotropy() {
- return mAniso;
- }
-
- /**
- * Retrieve a sampler with min and mag set to nearest and wrap modes set to
- * clamp.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler CLAMP_NEAREST(RenderScript rs) {
- if(rs.mSampler_CLAMP_NEAREST == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.NEAREST);
- b.setMagnification(Value.NEAREST);
- b.setWrapS(Value.CLAMP);
- b.setWrapT(Value.CLAMP);
- rs.mSampler_CLAMP_NEAREST = b.create();
- }
- return rs.mSampler_CLAMP_NEAREST;
- }
-
- /**
- * Retrieve a sampler with min and mag set to linear and wrap modes set to
- * clamp.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler CLAMP_LINEAR(RenderScript rs) {
- if(rs.mSampler_CLAMP_LINEAR == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.LINEAR);
- b.setMagnification(Value.LINEAR);
- b.setWrapS(Value.CLAMP);
- b.setWrapT(Value.CLAMP);
- rs.mSampler_CLAMP_LINEAR = b.create();
- }
- return rs.mSampler_CLAMP_LINEAR;
- }
-
- /**
- * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
- * wrap modes set to clamp.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
- if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.LINEAR_MIP_LINEAR);
- b.setMagnification(Value.LINEAR);
- b.setWrapS(Value.CLAMP);
- b.setWrapT(Value.CLAMP);
- rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
- }
- return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
- }
-
- /**
- * Retrieve a sampler with min and mag set to nearest and wrap modes set to
- * wrap.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler WRAP_NEAREST(RenderScript rs) {
- if(rs.mSampler_WRAP_NEAREST == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.NEAREST);
- b.setMagnification(Value.NEAREST);
- b.setWrapS(Value.WRAP);
- b.setWrapT(Value.WRAP);
- rs.mSampler_WRAP_NEAREST = b.create();
- }
- return rs.mSampler_WRAP_NEAREST;
- }
-
- /**
- * Retrieve a sampler with min and mag set to linear and wrap modes set to
- * wrap.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler WRAP_LINEAR(RenderScript rs) {
- if(rs.mSampler_WRAP_LINEAR == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.LINEAR);
- b.setMagnification(Value.LINEAR);
- b.setWrapS(Value.WRAP);
- b.setWrapT(Value.WRAP);
- rs.mSampler_WRAP_LINEAR = b.create();
- }
- return rs.mSampler_WRAP_LINEAR;
- }
-
- /**
- * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
- * wrap modes set to wrap.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
- if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.LINEAR_MIP_LINEAR);
- b.setMagnification(Value.LINEAR);
- b.setWrapS(Value.WRAP);
- b.setWrapT(Value.WRAP);
- rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
- }
- return rs.mSampler_WRAP_LINEAR_MIP_LINEAR;
- }
-
- /**
- * Retrieve a sampler with min and mag set to nearest and wrap modes set to
- * mirrored repeat.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) {
- if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.NEAREST);
- b.setMagnification(Value.NEAREST);
- b.setWrapS(Value.MIRRORED_REPEAT);
- b.setWrapT(Value.MIRRORED_REPEAT);
- rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create();
- }
- return rs.mSampler_MIRRORED_REPEAT_NEAREST;
- }
-
- /**
- * Retrieve a sampler with min and mag set to linear and wrap modes set to
- * mirrored repeat.
- *
- * @param rs Context to which the sampler will belong.
- *
- * @return Sampler
- */
- public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) {
- if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
- Builder b = new Builder(rs);
- b.setMinification(Value.LINEAR);
- b.setMagnification(Value.LINEAR);
- b.setWrapS(Value.MIRRORED_REPEAT);
- b.setWrapT(Value.MIRRORED_REPEAT);
- rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create();
- }
- return rs.mSampler_MIRRORED_REPEAT_LINEAR;
- }
-
- /**
- * Builder for creating non-standard samplers. This is only necessary if
- * a Sampler with different min and mag modes is desired.
- */
- public static class Builder {
- RenderScript mRS;
- Value mMin;
- Value mMag;
- Value mWrapS;
- Value mWrapT;
- Value mWrapR;
- float mAniso;
-
- public Builder(RenderScript rs) {
- mRS = rs;
- mMin = Value.NEAREST;
- mMag = Value.NEAREST;
- mWrapS = Value.WRAP;
- mWrapT = Value.WRAP;
- mWrapR = Value.WRAP;
- mAniso = 1.0f;
- }
-
- public void setMinification(Value v) {
- if (v == Value.NEAREST ||
- v == Value.LINEAR ||
- v == Value.LINEAR_MIP_LINEAR ||
- v == Value.LINEAR_MIP_NEAREST) {
- mMin = v;
- } else {
- throw new IllegalArgumentException("Invalid value");
- }
- }
-
- public void setMagnification(Value v) {
- if (v == Value.NEAREST || v == Value.LINEAR) {
- mMag = v;
- } else {
- throw new IllegalArgumentException("Invalid value");
- }
- }
-
- public void setWrapS(Value v) {
- if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
- mWrapS = v;
- } else {
- throw new IllegalArgumentException("Invalid value");
- }
- }
-
- public void setWrapT(Value v) {
- if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
- mWrapT = v;
- } else {
- throw new IllegalArgumentException("Invalid value");
- }
- }
-
- public void setAnisotropy(float v) {
- if(v >= 0.0f) {
- mAniso = v;
- } else {
- throw new IllegalArgumentException("Invalid value");
- }
- }
-
- public Sampler create() {
- mRS.validate();
- long id = mRS.nSamplerCreate(mMag.mID, mMin.mID,
- mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
- Sampler sampler = new Sampler(id, mRS);
- sampler.mMin = mMin;
- sampler.mMag = mMag;
- sampler.mWrapS = mWrapS;
- sampler.mWrapT = mWrapT;
- sampler.mWrapR = mWrapR;
- sampler.mAniso = mAniso;
- return sampler;
- }
- }
-
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Script.java b/v8/renderscript/java/src/android/support/v8/renderscript/Script.java
deleted file mode 100644
index ec3a7a9..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Script.java
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.SparseArray;
-
-/**
- * The parent class for all executable scripts. This should not be used by
- * applications.
- **/
-public class Script extends BaseObj {
- /**
- * Determine if Incremental Intrinsic Support is needed
- *
- */
- private boolean mUseIncSupp;
- protected void setIncSupp(boolean useInc) {
- mUseIncSupp = useInc;
- }
- protected boolean isIncSupp() {
- return mUseIncSupp;
- }
- /**
- * An allocation for the compat context will be created when needed
- * e.g. foreach(ain, aout), setVar(ain);
- *
- */
- long getDummyAlloc(Allocation ain) {
- long dInElement = 0;
- long dInType = 0;
- long dummyAlloc = 0;
- if (ain != null) {
- Type inType = ain.getType();
- dInElement = inType.getElement().getDummyElement(mRS);
- dInType = inType.getDummyType(mRS, dInElement);
- int xBytesSize = inType.getX() * inType.getElement().getBytesSize();
- dummyAlloc = mRS.nIncAllocationCreateTyped(ain.getID(mRS), dInType, xBytesSize);
- ain.setIncAllocID(dummyAlloc);
- }
-
- return dummyAlloc;
- }
- /**
- * KernelID is an identifier for a Script + root function pair. It is used
- * as an identifier for ScriptGroup creation.
- *
- * This class should not be directly created. Instead use the method in the
- * reflected or intrinsic code "getKernelID_funcname()".
- *
- */
- public static final class KernelID extends BaseObj {
- android.renderscript.Script.KernelID mN;
- Script mScript;
- int mSlot;
- int mSig;
- KernelID(long id, RenderScript rs, Script s, int slot, int sig) {
- super(id, rs);
- mScript = s;
- mSlot = slot;
- mSig = sig;
- }
- }
-
- private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
- /**
- * Only to be used by generated reflected classes.
- *
- *
- * @param slot
- * @param sig
- * @param ein
- * @param eout
- *
- * @return KernelID
- */
- protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
- KernelID k = mKIDs.get(slot);
- if (k != null) {
- return k;
- }
-
- long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig, mUseIncSupp);
- if (id == 0) {
- throw new RSDriverException("Failed to create KernelID");
- }
-
- k = new KernelID(id, mRS, this, slot, sig);
-
- mKIDs.put(slot, k);
- return k;
- }
-
- /**
- * InvokeID is an identifier for a invoke function. It is used
- * as an identifier for ScriptGroup creation.
- *
- * This class should not be directly created. Instead use the method in the
- * reflected or intrinsic code "getInvokeID_funcname()".
- *
- */
- public static final class InvokeID extends BaseObj {
- Script mScript;
- int mSlot;
- InvokeID(long id, RenderScript rs, Script s, int slot) {
- super(id, rs);
- mScript = s;
- mSlot = slot;
- }
- }
-
- private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>();
- /**
- * Only to be used by generated reflected classes.
- */
- protected InvokeID createInvokeID(int slot) {
- InvokeID i = mIIDs.get(slot);
- if (i != null) {
- return i;
- }
-
- long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot);
- if (id == 0) {
- throw new RSDriverException("Failed to create KernelID");
- }
-
- i = new InvokeID(id, mRS, this, slot);
- mIIDs.put(slot, i);
- return i;
- }
-
- /**
- * FieldID is an identifier for a Script + exported field pair. It is used
- * as an identifier for ScriptGroup creation.
- *
- * This class should not be directly created. Instead use the method in the
- * reflected or intrinsic code "getFieldID_funcname()".
- *
- */
- public static final class FieldID extends BaseObj {
- android.renderscript.Script.FieldID mN;
- Script mScript;
- int mSlot;
- FieldID(long id, RenderScript rs, Script s, int slot) {
- super(id, rs);
- mScript = s;
- mSlot = slot;
- }
- }
-
- private final SparseArray<FieldID> mFIDs = new SparseArray();
- /**
- * Only to be used by generated reflected classes.
- *
- * @param slot
- * @param e
- *
- * @return FieldID
- */
- protected FieldID createFieldID(int slot, Element e) {
- FieldID f = mFIDs.get(slot);
- if (f != null) {
- return f;
- }
-
- long id = mRS.nScriptFieldIDCreate(getID(mRS), slot, mUseIncSupp);
- if (id == 0) {
- throw new RSDriverException("Failed to create FieldID");
- }
-
- f = new FieldID(id, mRS, this, slot);
- mFIDs.put(slot, f);
- return f;
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param slot
- */
- protected void invoke(int slot) {
- mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param slot
- * @param v
- */
- protected void invoke(int slot, FieldPacker v) {
- if (v != null) {
- mRS.nScriptInvokeV(getID(mRS), slot, v.getData(), mUseIncSupp);
- } else {
- mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp);
- }
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param va
- * @param slot
- */
- public void bindAllocation(Allocation va, int slot) {
- mRS.validate();
- if (va != null) {
- mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot, mUseIncSupp);
- } else {
- mRS.nScriptBindAllocation(getID(mRS), 0, slot, mUseIncSupp);
- }
- }
-
- public void setTimeZone(String timeZone) {
- mRS.validate();
- try {
- mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"), mUseIncSupp);
- } catch (java.io.UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- }
-
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param slot
- * @param ain
- * @param aout
- * @param v
- */
- protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
- if (ain == null && aout == null) {
- throw new RSIllegalArgumentException(
- "At least one of ain or aout is required to be non-null.");
- }
- long in_id = 0;
- long out_id = 0;
- if (ain != null) {
- in_id = ain.getID(mRS);
- }
- if (aout != null) {
- out_id = aout.getID(mRS);
- }
-
- byte[] params = null;
- if (v != null) {
- params = v.getData();
- }
-
- if (mUseIncSupp) {
- long ainInc = getDummyAlloc(ain);
- long aoutInc = getDummyAlloc(aout);
- mRS.nScriptForEach(getID(mRS), slot, ainInc, aoutInc, params, mUseIncSupp);
- } else {
- mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params, mUseIncSupp);
- }
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param slot
- * @param ain
- * @param aout
- * @param v
- * @param sc
- */
- protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) {
- if (ain == null && aout == null) {
- throw new RSIllegalArgumentException(
- "At least one of ain or aout is required to be non-null.");
- }
-
- if (sc == null) {
- forEach(slot, ain, aout, v);
- return;
- }
- long in_id = 0;
- long out_id = 0;
- if (ain != null) {
- in_id = ain.getID(mRS);
- }
- if (aout != null) {
- out_id = aout.getID(mRS);
- }
-
- byte[] params = null;
- if (v != null) {
- params = v.getData();
- }
- if (mUseIncSupp) {
- long ainInc = getDummyAlloc(ain);
- long aoutInc = getDummyAlloc(aout);
- mRS.nScriptForEachClipped(getID(mRS), slot, ainInc, aoutInc, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp);
- } else {
- mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp);
- }
- }
-
- Script(long id, RenderScript rs) {
- super(id, rs);
- mUseIncSupp = false;
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @hide
- */
- protected void forEach(int slot, Allocation[] ains, Allocation aout,
- FieldPacker v) {
- forEach(slot, ains, aout, v, null);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @hide
- */
- protected void forEach(int slot, Allocation[] ains, Allocation aout,
- FieldPacker v, LaunchOptions sc) {
- // TODO: Is this necessary if nScriptForEach calls validate as well?
- mRS.validate();
- if (ains != null) {
- for (Allocation ain : ains) {
- mRS.validateObject(ain);
- }
- }
- mRS.validateObject(aout);
-
- if (ains == null && aout == null) {
- throw new RSIllegalArgumentException(
- "At least one of ain or aout is required to be non-null.");
- }
-
- long[] in_ids;
- if (ains != null) {
- in_ids = new long[ains.length];
- for (int index = 0; index < ains.length; ++index) {
- in_ids[index] = ains[index].getID(mRS);
- }
- } else {
- in_ids = null;
- }
-
- long out_id = 0;
- if (aout != null) {
- out_id = aout.getID(mRS);
- }
-
- byte[] params = null;
- if (v != null) {
- params = v.getData();
- }
-
- int[] limits = null;
- if (sc != null) {
- limits = new int[6];
-
- limits[0] = sc.xstart;
- limits[1] = sc.xend;
- limits[2] = sc.ystart;
- limits[3] = sc.yend;
- limits[4] = sc.zstart;
- limits[5] = sc.zend;
- }
-
- mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits);
- }
-
- /**
- * Only intended for use by generated reflected code. (General reduction)
- *
- * @hide
- */
- protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) {
- mRS.validate();
- if (ains == null || ains.length < 1) {
- throw new RSIllegalArgumentException(
- "At least one input is required.");
- }
- if (aout == null) {
- throw new RSIllegalArgumentException(
- "aout is required to be non-null.");
- }
- for (Allocation ain : ains) {
- mRS.validateObject(ain);
- }
-
- long[] in_ids = new long[ains.length];
- for (int index = 0; index < ains.length; ++index) {
- in_ids[index] = ains[index].getID(mRS);
- }
- long out_id = aout.getID(mRS);
-
- int[] limits = null;
- if (sc != null) {
- limits = new int[6];
-
- limits[0] = sc.xstart;
- limits[1] = sc.xend;
- limits[2] = sc.ystart;
- limits[3] = sc.yend;
- limits[4] = sc.zstart;
- limits[5] = sc.zend;
- }
-
- mRS.nScriptReduce(getID(mRS), slot, in_ids, out_id, limits);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, float v) {
- mRS.nScriptSetVarF(getID(mRS), index, v, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, double v) {
- mRS.nScriptSetVarD(getID(mRS), index, v, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, int v) {
- mRS.nScriptSetVarI(getID(mRS), index, v, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, long v) {
- mRS.nScriptSetVarJ(getID(mRS), index, v, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, boolean v) {
- mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0, mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param o
- */
- public void setVar(int index, BaseObj o) {
- if (mUseIncSupp) {
- long oInc = getDummyAlloc((Allocation)o);
- mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : oInc, mUseIncSupp);
- } else {
- mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS), mUseIncSupp);
- }
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- */
- public void setVar(int index, FieldPacker v) {
- mRS.nScriptSetVarV(getID(mRS), index, v.getData(), mUseIncSupp);
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- * @param index
- * @param v
- * @param e
- * @param dims
- */
- public void setVar(int index, FieldPacker v, Element e, int[] dims) {
- if (mUseIncSupp) {
- long dElement = e.getDummyElement(mRS);
- mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), dElement, dims, mUseIncSupp);
- } else {
- mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims, mUseIncSupp);
- }
- }
-
- /**
- * Only intended for use by generated reflected code.
- *
- */
- public static class Builder {
- RenderScript mRS;
-
- Builder(RenderScript rs) {
- mRS = rs;
- }
- }
-
-
- /**
- * Only intended for use by generated reflected code.
- *
- */
- public static class FieldBase {
- protected Element mElement;
- protected Allocation mAllocation;
-
- protected void init(RenderScript rs, int dimx) {
- mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT);
- }
-
- protected void init(RenderScript rs, int dimx, int usages) {
- mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages);
- }
-
- protected FieldBase() {
- }
-
- public Element getElement() {
- return mElement;
- }
-
- public Type getType() {
- return mAllocation.getType();
- }
-
- public Allocation getAllocation() {
- return mAllocation;
- }
-
- //@Override
- public void updateAllocation() {
- }
- }
-
-
- /**
- * Class for specifying the specifics about how a kernel will be
- * launched.
- *
- * This class can specify a potential range of cells on which to
- * run a kernel. If no set is called for a dimension then this
- * class will have no impact on that dimension when the kernel
- * is executed.
- *
- * The forEach kernel launch will operate over the intersection of
- * the dimensions.
- *
- * Example:
- * LaunchOptions with setX(5, 15)
- * Allocation with dimension X=10, Y=10
- * The resulting forEach run would execute over:
- * x = 5 to 9 (inclusive) and
- * y = 0 to 9 (inclusive).
- *
- */
- public static final class LaunchOptions {
- private int xstart = 0;
- private int ystart = 0;
- private int xend = 0;
- private int yend = 0;
- private int zstart = 0;
- private int zend = 0;
- private int strategy;
-
- /**
- * Set the X range. xstartArg is the lowest coordinate of the range,
- * and xendArg-1 is the highest coordinate of the range.
- *
- * @param xstartArg Must be >= 0
- * @param xendArg Must be > xstartArg
- *
- * @return LaunchOptions
- */
- public LaunchOptions setX(int xstartArg, int xendArg) {
- if (xstartArg < 0 || xendArg <= xstartArg) {
- throw new RSIllegalArgumentException("Invalid dimensions");
- }
- xstart = xstartArg;
- xend = xendArg;
- return this;
- }
-
- /**
- * Set the Y range. ystartArg is the lowest coordinate of the range,
- * and yendArg-1 is the highest coordinate of the range.
- *
- * @param ystartArg Must be >= 0
- * @param yendArg Must be > ystartArg
- *
- * @return LaunchOptions
- */
- public LaunchOptions setY(int ystartArg, int yendArg) {
- if (ystartArg < 0 || yendArg <= ystartArg) {
- throw new RSIllegalArgumentException("Invalid dimensions");
- }
- ystart = ystartArg;
- yend = yendArg;
- return this;
- }
-
- /**
- * Set the Z range. zstartArg is the lowest coordinate of the range,
- * and zendArg-1 is the highest coordinate of the range.
- *
- * @param zstartArg Must be >= 0
- * @param zendArg Must be > zstartArg
- *
- * @return LaunchOptions
- */
- public LaunchOptions setZ(int zstartArg, int zendArg) {
- if (zstartArg < 0 || zendArg <= zstartArg) {
- throw new RSIllegalArgumentException("Invalid dimensions");
- }
- zstart = zstartArg;
- zend = zendArg;
- return this;
- }
-
-
- /**
- * Returns the current X start
- *
- * @return int current value
- */
- public int getXStart() {
- return xstart;
- }
- /**
- * Returns the current X end
- *
- * @return int current value
- */
- public int getXEnd() {
- return xend;
- }
- /**
- * Returns the current Y start
- *
- * @return int current value
- */
- public int getYStart() {
- return ystart;
- }
- /**
- * Returns the current Y end
- *
- * @return int current value
- */
- public int getYEnd() {
- return yend;
- }
- /**
- * Returns the current Z start
- *
- * @return int current value
- */
- public int getZStart() {
- return zstart;
- }
- /**
- * Returns the current Z end
- *
- * @return int current value
- */
- public int getZEnd() {
- return zend;
- }
-
- }
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptC.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptC.java
deleted file mode 100644
index 28e9613..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptC.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map.Entry;
-import java.util.HashMap;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-
-/**
- * The superclass for all user-defined scripts. This is only
- * intended to be used by the generated derived classes.
- **/
-public class ScriptC extends Script {
- private static final String TAG = "ScriptC";
-
- /**
- * Only intended for use by the generated derived classes.
- *
- * @param id
- * @param rs
- */
- protected ScriptC(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Only intended for use by the generated derived classes.
- *
- *
- * @param rs
- * @param resources
- * @param resourceID
- */
- protected ScriptC(RenderScript rs, Resources resources, int resourceID) {
- super(0, rs);
- long id = internalCreate(rs, resources, resourceID);
- if (id == 0) {
- throw new RSRuntimeException("Loading of ScriptC script failed.");
- }
- setID(id);
- }
-
- /**
- * Only intended for use by the generated derived classes.
- *
- * @param rs
- * @param resName
- * @param bitcode32
- * @param bitcode64
- */
- protected ScriptC(RenderScript rs, String resName, byte[] bitcode32, byte[] bitcode64) {
- super(0, rs);
- long id = 0;
- if (RenderScript.sPointerSize == 4) {
- id = internalStringCreate(rs, resName, bitcode32);
- } else {
- id = internalStringCreate(rs, resName, bitcode64);
- }
- if (id == 0) {
- throw new RSRuntimeException("Loading of ScriptC script failed.");
- }
- setID(id);
- }
-
- private static synchronized long internalCreate(RenderScript rs, Resources resources, int resourceID) {
- byte[] pgm;
- int pgmLength;
- InputStream is = resources.openRawResource(resourceID);
- try {
- try {
- pgm = new byte[1024];
- pgmLength = 0;
- while(true) {
- int bytesLeft = pgm.length - pgmLength;
- if (bytesLeft == 0) {
- byte[] buf2 = new byte[pgm.length * 2];
- System.arraycopy(pgm, 0, buf2, 0, pgm.length);
- pgm = buf2;
- bytesLeft = pgm.length - pgmLength;
- }
- int bytesRead = is.read(pgm, pgmLength, bytesLeft);
- if (bytesRead <= 0) {
- break;
- }
- pgmLength += bytesRead;
- }
- } finally {
- is.close();
- }
- } catch(IOException e) {
- throw new Resources.NotFoundException();
- }
-
- String resName = resources.getResourceEntryName(resourceID);
- String cachePath = rs.getApplicationContext().getCacheDir().toString();
-
- // Log.v(TAG, "Create script for resource = " + resName + ", " + pgmLength + ", " + pgm);
- //Log.v(TAG, " path = " + cachePath);
- return rs.nScriptCCreate(resName, cachePath, pgm, pgmLength);
- }
-
- private static synchronized long internalStringCreate(RenderScript rs, String resName, byte[] bitcode) {
- // Log.v(TAG, "Create script for resource = " + resName);
- String cachePath = rs.getApplicationContext().getCacheDir().toString();
- return rs.nScriptCCreate(resName, cachePath, bitcode, bitcode.length);
- }
-
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptGroup.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptGroup.java
deleted file mode 100644
index 139fde2..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptGroup.java
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-import android.util.Pair;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A group of kernels that are executed
- * together with one execution call as if they were a single kernel
- * <p>
- * In addition to kernels, a script group may contain invocable functions as well.
- * A script group may take inputs and generate outputs, which are consumed and
- * produced by its member kernels.
- * Inside a script group, outputs from one kernel can be passed to another kernel as inputs.
- * The API disallows cyclic dependencies among kernels in a script group,
- * effectively making it a directed acyclic graph (DAG) of kernels.
- * <p>
- * Grouping kernels together allows for more efficient execution. For example,
- * runtime and compiler optimization can be applied to reduce computation and
- * communication overhead, and to make better use of the CPU and the GPU.
- **/
-public final class ScriptGroup extends BaseObj {
- //FIXME: Change 23 to the codename when that is decided.
- private static final int MIN_API_VERSION = 23;
- private static final String TAG = "ScriptGroup";
- IO mOutputs[];
- IO mInputs[];
- private boolean mUseIncSupp = false;
- private ArrayList<Node> mNodes = new ArrayList<Node>();
-
- static class IO {
- Script.KernelID mKID;
- Allocation mAllocation;
-
- IO(Script.KernelID s) {
- mKID = s;
- }
- }
-
- static class ConnectLine {
- ConnectLine(Type t, Script.KernelID from, Script.KernelID to) {
- mFrom = from;
- mToK = to;
- mAllocationType = t;
- }
-
- ConnectLine(Type t, Script.KernelID from, Script.FieldID to) {
- mFrom = from;
- mToF = to;
- mAllocationType = t;
- }
-
- Script.FieldID mToF;
- Script.KernelID mToK;
- Script.KernelID mFrom;
- Type mAllocationType;
- Allocation mAllocation;
- }
-
- static class Node {
- Script mScript;
- ArrayList<Script.KernelID> mKernels = new ArrayList<Script.KernelID>();
- ArrayList<ConnectLine> mInputs = new ArrayList<ConnectLine>();
- ArrayList<ConnectLine> mOutputs = new ArrayList<ConnectLine>();
- int dagNumber;
- boolean mSeen;
- int mOrder;
-
- Node mNext;
-
- Node(Script s) {
- mScript = s;
- }
- }
-
- /**
- * An opaque class for closures
- * <p>
- * A closure represents a function call to a kernel or invocable function,
- * combined with arguments and values for global variables. A closure is
- * created using the {@link Builder2#addKernel} or
- * {@link Builder2#addInvoke}
- * method.
- */
-
- public static final class Closure extends BaseObj {
- private Object[] mArgs;
- private Allocation mReturnValue;
- private Map<Script.FieldID, Object> mBindings;
-
- private Future mReturnFuture;
- private Map<Script.FieldID, Future> mGlobalFuture;
-
- private FieldPacker mFP;
-
- private static final String TAG = "Closure";
-
- Closure(long id, RenderScript rs) {
- super(id, rs);
- }
-
- Closure(RenderScript rs, Script.KernelID kernelID, Type returnType,
- Object[] args, Map<Script.FieldID, Object> globals) {
- super(0, rs);
-
- if (android.os.Build.VERSION.SDK_INT < MIN_API_VERSION && rs.isUseNative()) {
- throw new RSRuntimeException("ScriptGroup2 not supported in this API level");
- }
-
- mArgs = args;
- mReturnValue = Allocation.createTyped(rs, returnType);
- mBindings = globals;
- mGlobalFuture = new HashMap<Script.FieldID, Future>();
-
- int numValues = args.length + globals.size();
-
- long[] fieldIDs = new long[numValues];
- long[] values = new long[numValues];
- int[] sizes = new int[numValues];
- long[] depClosures = new long[numValues];
- long[] depFieldIDs = new long[numValues];
-
- int i;
- for (i = 0; i < args.length; i++) {
- fieldIDs[i] = 0;
- retrieveValueAndDependenceInfo(rs, i, null, args[i],
- values, sizes, depClosures, depFieldIDs);
- }
- for (Map.Entry<Script.FieldID, Object> entry : globals.entrySet()) {
- Object obj = entry.getValue();
- Script.FieldID fieldID = entry.getKey();
- fieldIDs[i] = fieldID.getID(rs);
- retrieveValueAndDependenceInfo(rs, i, fieldID, obj,
- values, sizes, depClosures, depFieldIDs);
- i++;
- }
-
- long id = rs.nClosureCreate(kernelID.getID(rs), mReturnValue.getID(rs),
- fieldIDs, values, sizes, depClosures, depFieldIDs);
-
- setID(id);
- }
-
- Closure(RenderScript rs, Script.InvokeID invokeID,
- Object[] args, Map<Script.FieldID, Object> globals) {
- super(0, rs);
-
- if (android.os.Build.VERSION.SDK_INT < MIN_API_VERSION && rs.isUseNative()) {
- throw new RSRuntimeException("ScriptGroup2 not supported in this API level");
- }
-
- mFP = FieldPacker.createFromArray(args);
-
- mArgs = args;
- mBindings = globals;
- mGlobalFuture = new HashMap<Script.FieldID, Future>();
-
- int numValues = globals.size();
-
- long[] fieldIDs = new long[numValues];
- long[] values = new long[numValues];
- int[] sizes = new int[numValues];
- long[] depClosures = new long[numValues];
- long[] depFieldIDs = new long[numValues];
-
- int i = 0;
- for (Map.Entry<Script.FieldID, Object> entry : globals.entrySet()) {
- Object obj = entry.getValue();
- Script.FieldID fieldID = entry.getKey();
- fieldIDs[i] = fieldID.getID(rs);
- retrieveValueAndDependenceInfo(rs, i, fieldID, obj, values,
- sizes, depClosures, depFieldIDs);
- i++;
- }
-
- long id = rs.nInvokeClosureCreate(invokeID.getID(rs), mFP.getData(), fieldIDs,
- values, sizes);
-
- setID(id);
- }
-
- private void retrieveValueAndDependenceInfo(RenderScript rs,
- int index, Script.FieldID fid, Object obj,
- long[] values, int[] sizes,
- long[] depClosures,
- long[] depFieldIDs) {
-
- if (obj instanceof Future) {
- Future f = (Future)obj;
- obj = f.getValue();
- depClosures[index] = f.getClosure().getID(rs);
- Script.FieldID fieldID = f.getFieldID();
- depFieldIDs[index] = fieldID != null ? fieldID.getID(rs) : 0;
- } else {
- depClosures[index] = 0;
- depFieldIDs[index] = 0;
- }
-
- if (obj instanceof Input) {
- Input unbound = (Input)obj;
- if (index < mArgs.length) {
- unbound.addReference(this, index);
- } else {
- unbound.addReference(this, fid);
- }
- values[index] = 0;
- sizes[index] = 0;
- } else {
- ValueAndSize vs = new ValueAndSize(rs, obj);
- values[index] = vs.value;
- sizes[index] = vs.size;
- }
- }
-
- /**
- * Returns the future for the return value
- *
- * @return a future
- */
-
- public Future getReturn() {
- if (mReturnFuture == null) {
- mReturnFuture = new Future(this, null, mReturnValue);
- }
-
- return mReturnFuture;
- }
-
- /**
- * Returns the future for a global variable
- *
- * @param field the field ID for the global variable
- * @return a future
- */
-
- public Future getGlobal(Script.FieldID field) {
- Future f = mGlobalFuture.get(field);
-
- if (f == null) {
- // If the field is not bound to this closure, this will return a future
- // without an associated value (reference). So this is not working for
- // cross-module (cross-script) linking in this case where a field not
- // explicitly bound.
- Object obj = mBindings.get(field);
- if (obj instanceof Future) {
- obj = ((Future)obj).getValue();
- }
- f = new Future(this, field, obj);
- mGlobalFuture.put(field, f);
- }
-
- return f;
- }
-
- void setArg(int index, Object obj) {
- if (obj instanceof Future) {
- obj = ((Future)obj).getValue();
- }
- mArgs[index] = obj;
- ValueAndSize vs = new ValueAndSize(mRS, obj);
- mRS.nClosureSetArg(getID(mRS), index, vs.value, vs.size);
- }
-
- void setGlobal(Script.FieldID fieldID, Object obj) {
- if (obj instanceof Future) {
- obj = ((Future)obj).getValue();
- }
- mBindings.put(fieldID, obj);
- ValueAndSize vs = new ValueAndSize(mRS, obj);
- mRS.nClosureSetGlobal(getID(mRS), fieldID.getID(mRS), vs.value, vs.size);
- }
-
- private static final class ValueAndSize {
- public ValueAndSize(RenderScript rs, Object obj) {
- if (obj instanceof Allocation) {
- value = ((Allocation)obj).getID(rs);
- size = -1;
- } else if (obj instanceof Boolean) {
- value = ((Boolean)obj).booleanValue() ? 1 : 0;
- size = 4;
- } else if (obj instanceof Integer) {
- value = ((Integer)obj).longValue();
- size = 4;
- } else if (obj instanceof Long) {
- value = ((Long)obj).longValue();
- size = 8;
- } else if (obj instanceof Float) {
- value = Float.floatToRawIntBits(((Float)obj).floatValue());
- size = 4;
- } else if (obj instanceof Double) {
- value = Double.doubleToRawLongBits(((Double)obj).doubleValue());
- size = 8;
- }
- }
- public long value;
- public int size;
- }
- }
-
- /**
- * An opaque class for futures
- * <p>
- * A future represents an output of a closure, either the return value of
- * the function, or the value of a global variable written by the function.
- * A future is created by calling the {@link Closure#getReturn} or
- * {@link Closure#getGlobal} method.
- */
-
- public static final class Future {
- Closure mClosure;
- Script.FieldID mFieldID;
- Object mValue;
-
- Future(Closure closure, Script.FieldID fieldID, Object value) {
- mClosure = closure;
- mFieldID = fieldID;
- mValue = value;
- }
-
- Closure getClosure() { return mClosure; }
- Script.FieldID getFieldID() { return mFieldID; }
- Object getValue() { return mValue; }
- }
-
- /**
- * An opaque class for unbound values (used for script group inputs)
- * <p>
- * Created by calling the {@link Builder2#addInput} method. The value
- * is assigned in {@link ScriptGroup#execute(Object...)} method as
- * one of its arguments. Arguments to the execute method should be in
- * the same order as intputs are added using the addInput method.
- */
-
- public static final class Input {
- // Either mFieldID or mArgIndex should be set but not both.
- List<Pair<Closure, Script.FieldID>> mFieldID;
- // -1 means unset. Legal values are 0 .. n-1, where n is the number of
- // arguments for the referencing closure.
- List<Pair<Closure, Integer>> mArgIndex;
- Object mValue;
-
- Input() {
- mFieldID = new ArrayList<Pair<Closure, Script.FieldID>>();
- mArgIndex = new ArrayList<Pair<Closure, Integer>>();
- }
-
- void addReference(Closure closure, int index) {
- mArgIndex.add(Pair.create(closure, Integer.valueOf(index)));
- }
-
- void addReference(Closure closure, Script.FieldID fieldID) {
- mFieldID.add(Pair.create(closure, fieldID));
- }
-
- void set(Object value) {
- mValue = value;
- for (Pair<Closure, Integer> p : mArgIndex) {
- Closure closure = p.first;
- int index = p.second.intValue();
- closure.setArg(index, value);
- }
- for (Pair<Closure, Script.FieldID> p : mFieldID) {
- Closure closure = p.first;
- Script.FieldID fieldID = p.second;
- closure.setGlobal(fieldID, value);
- }
- }
-
- Object get() { return mValue; }
- }
-
- private String mName;
- private List<Closure> mClosures;
- private List<Input> mInputs2;
- private Future[] mOutputs2;
-
- ScriptGroup(long id, RenderScript rs) {
- super(id, rs);
- }
-
- ScriptGroup(RenderScript rs, String name, List<Closure> closures,
- List<Input> inputs, Future[] outputs) {
- super(0, rs);
-
- if (android.os.Build.VERSION.SDK_INT < MIN_API_VERSION && rs.isUseNative()) {
- throw new RSRuntimeException("ScriptGroup2 not supported in this API level");
- }
- mName = name;
- mClosures = closures;
- mInputs2 = inputs;
- mOutputs2 = outputs;
-
- long[] closureIDs = new long[closures.size()];
- for (int i = 0; i < closureIDs.length; i++) {
- closureIDs[i] = closures.get(i).getID(rs);
- }
- String cachePath = rs.getApplicationContext().getCacheDir().toString();
- long id = rs.nScriptGroup2Create(name, cachePath, closureIDs);
- setID(id);
- }
-
- /**
- * Executes a script group
- *
- * @param inputs inputs to the script group
- * @return outputs of the script group as an array of objects
- */
-
- public Object[] execute(Object... inputs) {
- if (inputs.length < mInputs2.size()) {
- Log.e(TAG, this.toString() + " receives " + inputs.length + " inputs, " +
- "less than expected " + mInputs2.size());
- return null;
- }
-
- if (inputs.length > mInputs2.size()) {
- Log.i(TAG, this.toString() + " receives " + inputs.length + " inputs, " +
- "more than expected " + mInputs2.size());
- }
-
- for (int i = 0; i < mInputs2.size(); i++) {
- Object obj = inputs[i];
- if (obj instanceof Future || obj instanceof Input) {
- Log.e(TAG, this.toString() + ": input " + i +
- " is a future or unbound value");
- return null;
- }
- Input unbound = mInputs2.get(i);
- unbound.set(obj);
- }
-
- mRS.nScriptGroup2Execute(getID(mRS));
-
- Object[] outputObjs = new Object[mOutputs2.length];
- int i = 0;
- for (Future f : mOutputs2) {
- Object output = f.getValue();
- if (output instanceof Input) {
- output = ((Input)output).get();
- }
- outputObjs[i++] = output;
- }
- return outputObjs;
- }
-
- /**
- * Sets an input of the ScriptGroup. This specifies an
- * Allocation to be used for kernels that require an input
- * Allocation provided from outside of the ScriptGroup.
- *
- * @deprecated Set arguments to {@link #execute(Object...)} instead.
- *
- * @param s The ID of the kernel where the allocation should be
- * connected.
- * @param a The allocation to connect.
- */
- @Deprecated
- public void setInput(Script.KernelID s, Allocation a) {
- for (int ct=0; ct < mInputs.length; ct++) {
- if (mInputs[ct].mKID == s) {
- mInputs[ct].mAllocation = a;
- if (!mUseIncSupp) {
- mRS.nScriptGroupSetInput(getID(mRS), s.getID(mRS), mRS.safeID(a));
- }
- return;
- }
- }
- throw new RSIllegalArgumentException("Script not found");
- }
-
- /**
- * Sets an output of the ScriptGroup. This specifies an
- * Allocation to be used for the kernels that require an output
- * Allocation visible after the ScriptGroup is executed.
- *
- * @deprecated Use return value of {@link #execute(Object...)} instead.
- *
- * @param s The ID of the kernel where the allocation should be
- * connected.
- * @param a The allocation to connect.
- */
- @Deprecated
- public void setOutput(Script.KernelID s, Allocation a) {
- for (int ct=0; ct < mOutputs.length; ct++) {
- if (mOutputs[ct].mKID == s) {
- mOutputs[ct].mAllocation = a;
- if (!mUseIncSupp) {
- mRS.nScriptGroupSetOutput(getID(mRS), s.getID(mRS), mRS.safeID(a));
- }
- return;
- }
- }
- throw new RSIllegalArgumentException("Script not found");
- }
-
- /**
- * Execute the ScriptGroup. This will run all the kernels in
- * the ScriptGroup. No internal connection results will be visible
- * after execution of the ScriptGroup.
- *
- * If Incremental Support for intrinsics is needed, the execution
- * will take the naive path: execute kernels one by one in the
- * correct order.
- *
- * @deprecated Use {@link #execute} instead.
- */
- @Deprecated
- public void execute() {
- if (!mUseIncSupp) {
- mRS.nScriptGroupExecute(getID(mRS));
- } else {
- // setup the allocations.
- for (int ct=0; ct < mNodes.size(); ct++) {
- Node n = mNodes.get(ct);
- for (int ct2=0; ct2 < n.mOutputs.size(); ct2++) {
- ConnectLine l = n.mOutputs.get(ct2);
- if (l.mAllocation !=null) {
- continue;
- }
-
- //create allocation here
- Allocation alloc = Allocation.createTyped(mRS, l.mAllocationType,
- Allocation.MipmapControl.MIPMAP_NONE,
- Allocation.USAGE_SCRIPT);
-
- l.mAllocation = alloc;
- for (int ct3=ct2+1; ct3 < n.mOutputs.size(); ct3++) {
- if (n.mOutputs.get(ct3).mFrom == l.mFrom) {
- n.mOutputs.get(ct3).mAllocation = alloc;
- }
- }
- }
- }
- for (Node node : mNodes) {
- for (Script.KernelID kernel : node.mKernels) {
- Allocation ain = null;
- Allocation aout = null;
-
- for (ConnectLine nodeInput : node.mInputs) {
- if (nodeInput.mToK == kernel) {
- ain = nodeInput.mAllocation;
- }
- }
-
- for (IO sgInput : mInputs) {
- if (sgInput.mKID == kernel) {
- ain = sgInput.mAllocation;
- }
- }
-
- for (ConnectLine nodeOutput : node.mOutputs) {
- if (nodeOutput.mFrom == kernel) {
- aout = nodeOutput.mAllocation;
- }
- }
-
- for (IO sgOutput : mOutputs) {
- if (sgOutput.mKID == kernel) {
- aout = sgOutput.mAllocation;
- }
- }
-
- kernel.mScript.forEach(kernel.mSlot, ain, aout, null);
- }
- }
- }
- }
-
-
- /**
- * Helper class to build a ScriptGroup. A ScriptGroup is
- * created in two steps.
- * <p>
- * First, all kernels to be used by the ScriptGroup should be added.
- * <p>
- * Second, add connections between kernels. There are two types
- * of connections: kernel to kernel and kernel to field.
- * Kernel to kernel allows a kernel's output to be passed to
- * another kernel as input. Kernel to field allows the output of
- * one kernel to be bound as a script global. Kernel to kernel is
- * higher performance and should be used where possible.
- * <p>
- * A ScriptGroup must contain a single directed acyclic graph (DAG); it
- * cannot contain cycles. Currently, all kernels used in a ScriptGroup
- * must come from different Script objects. Additionally, all kernels
- * in a ScriptGroup must have at least one input, output, or internal
- * connection.
- * <p>
- * Once all connections are made, a call to {@link #create} will
- * return the ScriptGroup object.
- *
- * @deprecated Use {@link Builder2} instead.
- *
- */
- @Deprecated
- public static final class Builder {
- private RenderScript mRS;
- private ArrayList<Node> mNodes = new ArrayList<Node>();
- private ArrayList<ConnectLine> mLines = new ArrayList<ConnectLine>();
- private int mKernelCount;
- private boolean mUseIncSupp = false;
-
- /**
- * Create a Builder for generating a ScriptGroup.
- *
- *
- * @param rs The RenderScript context.
- */
- public Builder(RenderScript rs) {
- mRS = rs;
- }
-
- // do a DFS from original node, looking for original node
- // any cycle that could be created must contain original node
- private void validateCycle(Node target, Node original) {
- for (int ct = 0; ct < target.mOutputs.size(); ct++) {
- final ConnectLine cl = target.mOutputs.get(ct);
- if (cl.mToK != null) {
- Node tn = findNode(cl.mToK.mScript);
- if (tn.equals(original)) {
- throw new RSInvalidStateException("Loops in group not allowed.");
- }
- validateCycle(tn, original);
- }
- if (cl.mToF != null) {
- Node tn = findNode(cl.mToF.mScript);
- if (tn.equals(original)) {
- throw new RSInvalidStateException("Loops in group not allowed.");
- }
- validateCycle(tn, original);
- }
- }
- }
-
- private void mergeDAGs(int valueUsed, int valueKilled) {
- for (int ct=0; ct < mNodes.size(); ct++) {
- if (mNodes.get(ct).dagNumber == valueKilled)
- mNodes.get(ct).dagNumber = valueUsed;
- }
- }
-
- private void validateDAGRecurse(Node n, int dagNumber) {
- // combine DAGs if this node has been seen already
- if (n.dagNumber != 0 && n.dagNumber != dagNumber) {
- mergeDAGs(n.dagNumber, dagNumber);
- return;
- }
-
- n.dagNumber = dagNumber;
- for (int ct=0; ct < n.mOutputs.size(); ct++) {
- final ConnectLine cl = n.mOutputs.get(ct);
- if (cl.mToK != null) {
- Node tn = findNode(cl.mToK.mScript);
- validateDAGRecurse(tn, dagNumber);
- }
- if (cl.mToF != null) {
- Node tn = findNode(cl.mToF.mScript);
- validateDAGRecurse(tn, dagNumber);
- }
- }
- }
-
- private void validateDAG() {
- for (int ct=0; ct < mNodes.size(); ct++) {
- Node n = mNodes.get(ct);
- if (n.mInputs.size() == 0) {
- if (n.mOutputs.size() == 0 && mNodes.size() > 1) {
- String msg = "Groups cannot contain unconnected scripts";
- throw new RSInvalidStateException(msg);
- }
- validateDAGRecurse(n, ct+1);
- }
- }
- int dagNumber = mNodes.get(0).dagNumber;
- for (int ct=0; ct < mNodes.size(); ct++) {
- if (mNodes.get(ct).dagNumber != dagNumber) {
- throw new RSInvalidStateException("Multiple DAGs in group not allowed.");
- }
- }
- }
-
- private Node findNode(Script s) {
- for (int ct=0; ct < mNodes.size(); ct++) {
- if (s == mNodes.get(ct).mScript) {
- return mNodes.get(ct);
- }
- }
- return null;
- }
-
- private Node findNode(Script.KernelID k) {
- for (int ct=0; ct < mNodes.size(); ct++) {
- Node n = mNodes.get(ct);
- for (int ct2=0; ct2 < n.mKernels.size(); ct2++) {
- if (k == n.mKernels.get(ct2)) {
- return n;
- }
- }
- }
- return null;
- }
-
- /**
- * Adds a Kernel to the group.
- *
- *
- * @param k The kernel to add.
- *
- * @return Builder Returns this.
- */
- public Builder addKernel(Script.KernelID k) {
- if (mLines.size() != 0) {
- throw new RSInvalidStateException(
- "Kernels may not be added once connections exist.");
- }
- if (k.mScript.isIncSupp()) {
- mUseIncSupp = true;
- }
- //android.util.Log.v("RSR", "addKernel 1 k=" + k);
- if (findNode(k) != null) {
- return this;
- }
- //android.util.Log.v("RSR", "addKernel 2 ");
- mKernelCount++;
- Node n = findNode(k.mScript);
- if (n == null) {
- //android.util.Log.v("RSR", "addKernel 3 ");
- n = new Node(k.mScript);
- mNodes.add(n);
- }
- n.mKernels.add(k);
- return this;
- }
-
- /**
- * Adds a connection to the group.
- *
- *
- * @param t The type of the connection. This is used to
- * determine the kernel launch sizes on the source side
- * of this connection.
- * @param from The source for the connection.
- * @param to The destination of the connection.
- *
- * @return Builder Returns this
- */
- public Builder addConnection(Type t, Script.KernelID from, Script.FieldID to) {
- //android.util.Log.v("RSR", "addConnection " + t +", " + from + ", " + to);
- Node nf = findNode(from);
- if (nf == null) {
- throw new RSInvalidStateException("From script not found.");
- }
-
- Node nt = findNode(to.mScript);
- if (nt == null) {
- throw new RSInvalidStateException("To script not found.");
- }
-
- ConnectLine cl = new ConnectLine(t, from, to);
- mLines.add(new ConnectLine(t, from, to));
-
- nf.mOutputs.add(cl);
- nt.mInputs.add(cl);
-
- validateCycle(nf, nf);
- return this;
- }
-
- /**
- * Adds a connection to the group.
- *
- *
- * @param t The type of the connection. This is used to
- * determine the kernel launch sizes for both sides of
- * this connection.
- * @param from The source for the connection.
- * @param to The destination of the connection.
- *
- * @return Builder Returns this
- */
- public Builder addConnection(Type t, Script.KernelID from, Script.KernelID to) {
- //android.util.Log.v("RSR", "addConnection " + t +", " + from + ", " + to);
- Node nf = findNode(from);
- if (nf == null) {
- throw new RSInvalidStateException("From script not found.");
- }
-
- Node nt = findNode(to);
- if (nt == null) {
- throw new RSInvalidStateException("To script not found.");
- }
-
- ConnectLine cl = new ConnectLine(t, from, to);
- mLines.add(new ConnectLine(t, from, to));
-
- nf.mOutputs.add(cl);
- nt.mInputs.add(cl);
-
- validateCycle(nf, nf);
- return this;
- }
-
- /**
- * Calculate the order of each node.
- *
- *
- * @return Success or Fail
- */
- private boolean calcOrderRecurse(Node node0, int depth) {
- node0.mSeen = true;
- if (node0.mOrder < depth) {
- node0.mOrder = depth;
- }
- boolean ret = true;
-
- for (ConnectLine link : node0.mOutputs) {
- Node node1 = null;
- if (link.mToF != null) {
- node1 = findNode(link.mToF.mScript);
- } else {
- node1 = findNode(link.mToK.mScript);
- }
- if (node1.mSeen) {
- return false;
- }
- ret &= calcOrderRecurse(node1, node0.mOrder + 1);
- }
-
- return ret;
- }
-
- private boolean calcOrder() {
- boolean ret = true;
- for (Node n0 : mNodes) {
- if (n0.mInputs.size() == 0) {
- for (Node n1 : mNodes) {
- n1.mSeen = false;
- }
- ret &= calcOrderRecurse(n0, 1);
- }
- }
-
- Collections.sort(mNodes, new Comparator<Node>() {
- public int compare(Node n1, Node n2) {
- return n1.mOrder - n2.mOrder;
- }
- });
-
- return ret;
- }
-
- /**
- * Creates the Script group.
- *
- *
- * @return ScriptGroup The new ScriptGroup
- */
- public ScriptGroup create() {
-
- if (mNodes.size() == 0) {
- throw new RSInvalidStateException("Empty script groups are not allowed");
- }
-
- // reset DAG numbers in case we're building a second group
- for (int ct=0; ct < mNodes.size(); ct++) {
- mNodes.get(ct).dagNumber = 0;
- }
- validateDAG();
-
- ArrayList<IO> inputs = new ArrayList<IO>();
- ArrayList<IO> outputs = new ArrayList<IO>();
-
- long[] kernels = new long[mKernelCount];
- int idx = 0;
- for (int ct=0; ct < mNodes.size(); ct++) {
- Node n = mNodes.get(ct);
- for (int ct2=0; ct2 < n.mKernels.size(); ct2++) {
- final Script.KernelID kid = n.mKernels.get(ct2);
- kernels[idx++] = kid.getID(mRS);
-
- boolean hasInput = false;
- boolean hasOutput = false;
- for (int ct3=0; ct3 < n.mInputs.size(); ct3++) {
- if (n.mInputs.get(ct3).mToK == kid) {
- hasInput = true;
- }
- }
- for (int ct3=0; ct3 < n.mOutputs.size(); ct3++) {
- if (n.mOutputs.get(ct3).mFrom == kid) {
- hasOutput = true;
- }
- }
- if (!hasInput) {
- inputs.add(new IO(kid));
- }
- if (!hasOutput) {
- outputs.add(new IO(kid));
- }
- }
- }
- if (idx != mKernelCount) {
- throw new RSRuntimeException("Count mismatch, should not happen.");
- }
-
- long id = 0;
- if (!mUseIncSupp) {
- long[] src = new long[mLines.size()];
- long[] dstk = new long[mLines.size()];
- long[] dstf = new long[mLines.size()];
- long[] types = new long[mLines.size()];
-
- for (int ct=0; ct < mLines.size(); ct++) {
- ConnectLine cl = mLines.get(ct);
- src[ct] = cl.mFrom.getID(mRS);
- if (cl.mToK != null) {
- dstk[ct] = cl.mToK.getID(mRS);
- }
- if (cl.mToF != null) {
- dstf[ct] = cl.mToF.getID(mRS);
- }
- types[ct] = cl.mAllocationType.getID(mRS);
- }
- id = mRS.nScriptGroupCreate(kernels, src, dstk, dstf, types);
- if (id == 0) {
- throw new RSRuntimeException("Object creation error, should not happen.");
- }
- } else {
- //Calculate the order of the DAG so that script can run one after another.
- calcOrder();
- }
-
- ScriptGroup sg = new ScriptGroup(id, mRS);
- sg.mOutputs = new IO[outputs.size()];
- for (int ct=0; ct < outputs.size(); ct++) {
- sg.mOutputs[ct] = outputs.get(ct);
- }
-
- sg.mInputs = new IO[inputs.size()];
- for (int ct=0; ct < inputs.size(); ct++) {
- sg.mInputs[ct] = inputs.get(ct);
- }
- sg.mNodes = mNodes;
- sg.mUseIncSupp = mUseIncSupp;
- return sg;
- }
-
- }
-
- /**
- * Represents a binding of a value to a global variable in a
- * kernel or invocable function. Used in closure creation.
- */
-
- public static final class Binding {
- private final Script.FieldID mField;
- private final Object mValue;
-
- /**
- * Returns a Binding object that binds value to field
- *
- * @param field the Script.FieldID of the global variable
- * @param value the value
- */
-
- public Binding(Script.FieldID field, Object value) {
- mField = field;
- mValue = value;
- }
-
- /**
- * Returns the field ID
- */
-
- public Script.FieldID getField() { return mField; }
-
- /**
- * Returns the value
- */
-
- public Object getValue() { return mValue; }
- }
-
- /**
- * The builder class for creating script groups
- * <p>
- * A script group is created using closures (see class {@link Closure}).
- * A closure is a function call to a kernel or
- * invocable function. Each function argument or global variable accessed inside
- * the function is bound to 1) a known value, 2) a script group input
- * (see class {@link Input}), or 3) a
- * future (see class {@link Future}).
- * A future is the output of a closure, either the return value of the
- * function or a global variable written by that function.
- * <p>
- * Closures are created using the {@link #addKernel} or {@link #addInvoke}
- * methods.
- * When a closure is created, futures from previously created closures
- * can be used as its inputs.
- * External script group inputs can be used as inputs to individual closures as well.
- * An external script group input is created using the {@link #addInput} method.
- * A script group is created by a call to the {@link #create} method, which
- * accepts an array of futures as the outputs for the script group.
- * <p>
- * Closures in a script group can be evaluated in any order as long as the
- * following conditions are met:
- * 1) a closure must be evaluated before any other closures that take its
- * futures as inputs;
- * 2) all closures added before an invoke closure must be evaluated
- * before it;
- * and 3) all closures added after an invoke closure must be evaluated after
- * it.
- * As a special case, the order that the closures are added is a legal
- * evaluation order. However, other evaluation orders are possible, including
- * concurrently evaluating independent closures.
- */
-
- public static final class Builder2 {
- RenderScript mRS;
- List<Closure> mClosures;
- List<Input> mInputs;
- private static final String TAG = "ScriptGroup.Builder2";
-
- /**
- * Returns a Builder object
- *
- * @param rs the RenderScript context
- */
- public Builder2(RenderScript rs) {
- mRS = rs;
- mClosures = new ArrayList<Closure>();
- mInputs = new ArrayList<Input>();
- }
-
- /**
- * Adds a closure for a kernel
- *
- * @param k Kernel ID for the kernel function
- * @param returnType Allocation type for the return value
- * @param args arguments to the kernel function
- * @param globalBindings bindings for global variables
- * @return a closure
- */
-
- private Closure addKernelInternal(Script.KernelID k, Type returnType, Object[] args,
- Map<Script.FieldID, Object> globalBindings) {
- Closure c = new Closure(mRS, k, returnType, args, globalBindings);
- mClosures.add(c);
- return c;
- }
-
- /**
- * Adds a closure for an invocable function
- *
- * @param invoke Invoke ID for the invocable function
- * @param args arguments to the invocable function
- * @param globalBindings bindings for global variables
- * @return a closure
- */
-
- private Closure addInvokeInternal(Script.InvokeID invoke, Object[] args,
- Map<Script.FieldID, Object> globalBindings) {
- Closure c = new Closure(mRS, invoke, args, globalBindings);
- mClosures.add(c);
- return c;
- }
-
- /**
- * Adds a script group input
- *
- * @return a script group input, which can be used as an argument or a value to
- * a global variable for creating closures
- */
-
- public Input addInput() {
- Input unbound = new Input();
- mInputs.add(unbound);
- return unbound;
- }
-
- /**
- * Adds a closure for a kernel
- *
- * @param k Kernel ID for the kernel function
- * @param argsAndBindings arguments followed by bindings for global variables
- * @return a closure
- */
-
- public Closure addKernel(Script.KernelID k, Type returnType, Object... argsAndBindings) {
- ArrayList<Object> args = new ArrayList<Object>();
- Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
- if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
- return null;
- }
- return addKernelInternal(k, returnType, args.toArray(), bindingMap);
- }
-
- /**
- * Adds a closure for an invocable function
- *
- * @param invoke Invoke ID for the invocable function
- * @param argsAndBindings arguments followed by bindings for global variables
- * @return a closure
- */
-
- public Closure addInvoke(Script.InvokeID invoke, Object... argsAndBindings) {
- ArrayList<Object> args = new ArrayList<Object>();
- Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
- if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
- return null;
- }
- return addInvokeInternal(invoke, args.toArray(), bindingMap);
- }
-
- /**
- * Creates a script group
- *
- * @param name name for the script group. Legal names can only contain letters, digits,
- * '-', or '_'. The name can be no longer than 100 characters.
- * @param outputs futures intended as outputs of the script group
- * @return a script group
- */
-
- public ScriptGroup create(String name, Future... outputs) {
- if (name == null || name.isEmpty() || name.length() > 100 ||
- !name.equals(name.replaceAll("[^a-zA-Z0-9-]", "_"))) {
- throw new RSIllegalArgumentException("invalid script group name");
- }
- ScriptGroup ret = new ScriptGroup(mRS, name, mClosures, mInputs, outputs);
- return ret;
- }
-
- private boolean seperateArgsAndBindings(Object[] argsAndBindings,
- ArrayList<Object> args,
- Map<Script.FieldID, Object> bindingMap) {
- int i;
- for (i = 0; i < argsAndBindings.length; i++) {
- if (argsAndBindings[i] instanceof Binding) {
- break;
- }
- args.add(argsAndBindings[i]);
- }
-
- for (; i < argsAndBindings.length; i++) {
- if (!(argsAndBindings[i] instanceof Binding)) {
- return false;
- }
- Binding b = (Binding)argsAndBindings[i];
- bindingMap.put(b.getField(), b.getValue());
- }
-
- return true;
- }
-
- }
-
-}
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic.java
deleted file mode 100644
index e59cf6d..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-/**
- * Base class for all Intrinsic scripts. An intrinsic a script
- * which implements a pre-defined function. Intrinsics are
- * provided to provide effecient implemtations of common
- * operations.
- *
- * Not intended for direct use.
- **/
-public abstract class ScriptIntrinsic extends Script {
- ScriptIntrinsic(long id, RenderScript rs) {
- super(id, rs);
- if (id == 0) {
- throw new RSRuntimeException("Loading of ScriptIntrinsic failed.");
- }
- }
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic3DLUT.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic3DLUT.java
deleted file mode 100644
index 7fc71f3..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsic3DLUT.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- *
- * Intrinsic for converting RGB to RGBA by using a 3D lookup table. The
- * incoming r,g,b values are use as normalized x,y,z coordinates into a 3D
- * allocation. The 8 nearest values are sampled and linearly interpolated. The
- * result is placed in the output.
- *
- **/
-public class ScriptIntrinsic3DLUT extends ScriptIntrinsic {
- private Allocation mLUT;
- private Element mElement;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- protected ScriptIntrinsic3DLUT(long id, RenderScript rs, Element e) {
- super(id, rs);
- mElement = e;
- }
-
- /**
- * Supported elements types are {@link Element#U8_4}
- *
- * The defaults tables are identity.
- *
- * @param rs The RenderScript context
- * @param e Element type for intputs and outputs
- *
- * @return ScriptIntrinsic3DLUT
- */
- public static ScriptIntrinsic3DLUT create(RenderScript rs, Element e) {
- if (!e.isCompatible(Element.U8_4(rs))) {
- throw new RSIllegalArgumentException("Element must be compatible with uchar4.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(8, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsic3DLUT si = new ScriptIntrinsic3DLUT(id, rs, e);
- si.setIncSupp(mUseIncSupp);
- return si;
- }
-
- /**
- * Sets the {@link android.support.v8.renderscript.Allocation} to be used as
- * the lookup table.
- *
- * The lookup table must use the same
- * {@link android.support.v8.renderscript.Element} as the intrinsic.
- *
- */
-
- public void setLUT(Allocation lut) {
- final Type t = lut.getType();
-
- if (t.getZ() == 0) {
- throw new RSIllegalArgumentException("LUT must be 3d.");
- }
-
- if (!t.getElement().isCompatible(mElement)) {
- throw new RSIllegalArgumentException("LUT element type must match.");
- }
-
- mLUT = lut;
- setVar(0, mLUT);
- }
-
-
- /**
- * Invoke the kernel and apply the lookup to each cell of ain
- * and copy to aout.
- *
- * @param ain Input allocation
- * @param aout Output allocation
- */
- public void forEach(Allocation ain, Allocation aout) {
- forEach(0, ain, aout, null);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 3, null, null);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBLAS.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBLAS.java
deleted file mode 100644
index fe32989..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBLAS.java
+++ /dev/null
@@ -1,4190 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import android.support.annotation.IntDef;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- *
- * ScriptIntrinsicBLAS class provides high performance RenderScript APIs to BLAS.
- *
- * The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard
- * building blocks for performing basic vector and matrix operations.
- *
- * For detailed description of BLAS, please refer to http://www.netlib.org/blas/
- *
- **/
-public final class ScriptIntrinsicBLAS extends ScriptIntrinsic {
- private Allocation mLUT;
- private static final int INTRINSIC_API_LEVEL = 23;
-
- private ScriptIntrinsicBLAS(long id, RenderScript rs) {
- super(id, rs);
- }
-
- private static final int RsBlas_sdsdot = 1;
- private static final int RsBlas_dsdot = 2;
- private static final int RsBlas_sdot = 3;
- private static final int RsBlas_ddot = 4;
- private static final int RsBlas_cdotu_sub = 5;
- private static final int RsBlas_cdotc_sub = 6;
- private static final int RsBlas_zdotu_sub = 7;
- private static final int RsBlas_zdotc_sub = 8;
- private static final int RsBlas_snrm2 = 9;
- private static final int RsBlas_sasum = 10;
- private static final int RsBlas_dnrm2 = 11;
- private static final int RsBlas_dasum = 12;
- private static final int RsBlas_scnrm2 = 13;
- private static final int RsBlas_scasum = 14;
- private static final int RsBlas_dznrm2 = 15;
- private static final int RsBlas_dzasum = 16;
- private static final int RsBlas_isamax = 17;
- private static final int RsBlas_idamax = 18;
- private static final int RsBlas_icamax = 19;
- private static final int RsBlas_izamax = 20;
- private static final int RsBlas_sswap = 21;
- private static final int RsBlas_scopy = 22;
- private static final int RsBlas_saxpy = 23;
- private static final int RsBlas_dswap = 24;
- private static final int RsBlas_dcopy = 25;
- private static final int RsBlas_daxpy = 26;
- private static final int RsBlas_cswap = 27;
- private static final int RsBlas_ccopy = 28;
- private static final int RsBlas_caxpy = 29;
- private static final int RsBlas_zswap = 30;
- private static final int RsBlas_zcopy = 31;
- private static final int RsBlas_zaxpy = 32;
- private static final int RsBlas_srotg = 33;
- private static final int RsBlas_srotmg = 34;
- private static final int RsBlas_srot = 35;
- private static final int RsBlas_srotm = 36;
- private static final int RsBlas_drotg = 37;
- private static final int RsBlas_drotmg = 38;
- private static final int RsBlas_drot = 39;
- private static final int RsBlas_drotm = 40;
- private static final int RsBlas_sscal = 41;
- private static final int RsBlas_dscal = 42;
- private static final int RsBlas_cscal = 43;
- private static final int RsBlas_zscal = 44;
- private static final int RsBlas_csscal = 45;
- private static final int RsBlas_zdscal = 46;
- private static final int RsBlas_sgemv = 47;
- private static final int RsBlas_sgbmv = 48;
- private static final int RsBlas_strmv = 49;
- private static final int RsBlas_stbmv = 50;
- private static final int RsBlas_stpmv = 51;
- private static final int RsBlas_strsv = 52;
- private static final int RsBlas_stbsv = 53;
- private static final int RsBlas_stpsv = 54;
- private static final int RsBlas_dgemv = 55;
- private static final int RsBlas_dgbmv = 56;
- private static final int RsBlas_dtrmv = 57;
- private static final int RsBlas_dtbmv = 58;
- private static final int RsBlas_dtpmv = 59;
- private static final int RsBlas_dtrsv = 60;
- private static final int RsBlas_dtbsv = 61;
- private static final int RsBlas_dtpsv = 62;
- private static final int RsBlas_cgemv = 63;
- private static final int RsBlas_cgbmv = 64;
- private static final int RsBlas_ctrmv = 65;
- private static final int RsBlas_ctbmv = 66;
- private static final int RsBlas_ctpmv = 67;
- private static final int RsBlas_ctrsv = 68;
- private static final int RsBlas_ctbsv = 69;
- private static final int RsBlas_ctpsv = 70;
- private static final int RsBlas_zgemv = 71;
- private static final int RsBlas_zgbmv = 72;
- private static final int RsBlas_ztrmv = 73;
- private static final int RsBlas_ztbmv = 74;
- private static final int RsBlas_ztpmv = 75;
- private static final int RsBlas_ztrsv = 76;
- private static final int RsBlas_ztbsv = 77;
- private static final int RsBlas_ztpsv = 78;
- private static final int RsBlas_ssymv = 79;
- private static final int RsBlas_ssbmv = 80;
- private static final int RsBlas_sspmv = 81;
- private static final int RsBlas_sger = 82;
- private static final int RsBlas_ssyr = 83;
- private static final int RsBlas_sspr = 84;
- private static final int RsBlas_ssyr2 = 85;
- private static final int RsBlas_sspr2 = 86;
- private static final int RsBlas_dsymv = 87;
- private static final int RsBlas_dsbmv = 88;
- private static final int RsBlas_dspmv = 89;
- private static final int RsBlas_dger = 90;
- private static final int RsBlas_dsyr = 91;
- private static final int RsBlas_dspr = 92;
- private static final int RsBlas_dsyr2 = 93;
- private static final int RsBlas_dspr2 = 94;
- private static final int RsBlas_chemv = 95;
- private static final int RsBlas_chbmv = 96;
- private static final int RsBlas_chpmv = 97;
- private static final int RsBlas_cgeru = 98;
- private static final int RsBlas_cgerc = 99;
- private static final int RsBlas_cher = 100;
- private static final int RsBlas_chpr = 101;
- private static final int RsBlas_cher2 = 102;
- private static final int RsBlas_chpr2 = 103;
- private static final int RsBlas_zhemv = 104;
- private static final int RsBlas_zhbmv = 105;
- private static final int RsBlas_zhpmv = 106;
- private static final int RsBlas_zgeru = 107;
- private static final int RsBlas_zgerc = 108;
- private static final int RsBlas_zher = 109;
- private static final int RsBlas_zhpr = 110;
- private static final int RsBlas_zher2 = 111;
- private static final int RsBlas_zhpr2 = 112;
- private static final int RsBlas_sgemm = 113;
- private static final int RsBlas_ssymm = 114;
- private static final int RsBlas_ssyrk = 115;
- private static final int RsBlas_ssyr2k = 116;
- private static final int RsBlas_strmm = 117;
- private static final int RsBlas_strsm = 118;
- private static final int RsBlas_dgemm = 119;
- private static final int RsBlas_dsymm = 120;
- private static final int RsBlas_dsyrk = 121;
- private static final int RsBlas_dsyr2k = 122;
- private static final int RsBlas_dtrmm = 123;
- private static final int RsBlas_dtrsm = 124;
- private static final int RsBlas_cgemm = 125;
- private static final int RsBlas_csymm = 126;
- private static final int RsBlas_csyrk = 127;
- private static final int RsBlas_csyr2k = 128;
- private static final int RsBlas_ctrmm = 129;
- private static final int RsBlas_ctrsm = 130;
- private static final int RsBlas_zgemm = 131;
- private static final int RsBlas_zsymm = 132;
- private static final int RsBlas_zsyrk = 133;
- private static final int RsBlas_zsyr2k = 134;
- private static final int RsBlas_ztrmm = 135;
- private static final int RsBlas_ztrsm = 136;
- private static final int RsBlas_chemm = 137;
- private static final int RsBlas_cherk = 138;
- private static final int RsBlas_cher2k = 139;
- private static final int RsBlas_zhemm = 140;
- private static final int RsBlas_zherk = 141;
- private static final int RsBlas_zher2k = 142;
-
- // BLAS extensions start here
- private static final int RsBlas_bnnm = 1000;
-
- /**
- * Create an intrinsic to access BLAS subroutines.
- *
- * @param rs The RenderScript context
- * @return ScriptIntrinsicBLAS
- */
- public static ScriptIntrinsicBLAS create(RenderScript rs) {
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(13, Element.U32(rs).getID(rs), mUseIncSupp);
- ScriptIntrinsicBLAS si = new ScriptIntrinsicBLAS(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
- }
-
- /**
- * @hide
- */
- @IntDef({NO_TRANSPOSE, TRANSPOSE, CONJ_TRANSPOSE})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Transpose {}
-
- /**
- * @hide
- */
- @IntDef({UPPER, LOWER})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Uplo {}
-
- /**
- * @hide
- */
- @IntDef({NON_UNIT, UNIT})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Diag {}
-
- /**
- * @hide
- */
- @IntDef({LEFT, RIGHT})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Side {}
-
- public static final int NO_TRANSPOSE = 111;
- public static final int TRANSPOSE = 112;
- public static final int CONJ_TRANSPOSE = 113;
-
- public static final int UPPER = 121;
- public static final int LOWER = 122;
-
- public static final int NON_UNIT = 131;
- public static final int UNIT = 132;
-
- public static final int LEFT = 141;
- public static final int RIGHT = 142;
-
- static void validateSide(@Side int Side) {
- if (Side != LEFT && Side != RIGHT) {
- throw new RSRuntimeException("Invalid side passed to BLAS");
- }
- }
-
- static void validateTranspose(@Transpose int Trans) {
- if (Trans != NO_TRANSPOSE && Trans != TRANSPOSE &&
- Trans != CONJ_TRANSPOSE) {
- throw new RSRuntimeException("Invalid transpose passed to BLAS");
- }
- }
-
- static void validateConjTranspose(@Transpose int Trans) {
- if (Trans != NO_TRANSPOSE &&
- Trans != CONJ_TRANSPOSE) {
- throw new RSRuntimeException("Invalid transpose passed to BLAS");
- }
- }
-
- static void validateDiag(@Diag int Diag) {
- if (Diag != NON_UNIT && Diag != UNIT) {
- throw new RSRuntimeException("Invalid diag passed to BLAS");
- }
- }
-
- static void validateUplo(@Uplo int Uplo) {
- if (Uplo != UPPER && Uplo != LOWER) {
- throw new RSRuntimeException("Invalid uplo passed to BLAS");
- }
- }
-
-
- /**
- * Level 2 BLAS
- */
-
- static void validateGEMV(Element e, int TransA, Allocation A, Allocation X, int incX, Allocation Y, int incY) {
- validateTranspose(TransA);
- int M = A.getType().getY();
- int N = A.getType().getX();
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = -1, expectedYDim = -1;
- if (TransA == NO_TRANSPOSE) {
- expectedXDim = 1 + (N - 1) * incX;
- expectedYDim = 1 + (M - 1) * incY;
- } else {
- expectedXDim = 1 + (M - 1) * incX;
- expectedYDim = 1 + (N - 1) * incY;
- }
- if (X.getType().getX() != expectedXDim ||
- Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for GEMV");
- }
- }
-
- /**
- * SGEMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d58/sgemv_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void SGEMV(@Transpose int TransA, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
- validateGEMV(Element.F32(mRS), TransA, A, X, incX, Y, incY);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DGEMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/dc/da8/dgemv_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void DGEMV(@Transpose int TransA, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
- validateGEMV(Element.F64(mRS), TransA, A, X, incX, Y, incY);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CGEMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/d8a/cgemv_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void CGEMV(@Transpose int TransA, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
- validateGEMV(Element.F32_2(mRS), TransA, A, X, incX, Y, incY);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZGEMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d40/zgemv_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void ZGEMV(@Transpose int TransA, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
- validateGEMV(Element.F64_2(mRS), TransA, A, X, incX, Y, incY);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SGBMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d46/sgbmv_8f.html
- *
- * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N),
- * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an
- * example showing how to convert the original matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, m):
- * for j in range(max(0, i-kl), min(i+ku+1, n)):
- * b[i, j-i+kl] = a[i, j]
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param KL The number of sub-diagonals of the matrix A.
- * @param KU The number of super-diagonals of the matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains the band matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void SGBMV(@Transpose int TransA, int KL, int KU, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
- // GBMV has the same validation requirements as GEMV + KL and KU >= 0
- validateGEMV(Element.F32(mRS), TransA, A, X, incX, Y, incY);
- if (KL < 0 || KU < 0) {
- throw new RSRuntimeException("KL and KU must be greater than or equal to 0");
- }
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha, aID, xID, beta, yID, incX, incY, KL, KU, mUseIncSupp);
- }
-
- /**
- * DGBMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d3f/dgbmv_8f.html
- *
- * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N),
- * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an
- * example showing how to convert the original matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, m):
- * for j in range(max(0, i-kl), min(i+ku+1, n)):
- * b[i, j-i+kl] = a[i, j]
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param KL The number of sub-diagonals of the matrix A.
- * @param KU The number of super-diagonals of the matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains the band matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void DGBMV(@Transpose int TransA, int KL, int KU, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
- // GBMV has the same validation requirements as GEMV + KL and KU >= 0
- validateGEMV(Element.F64(mRS), TransA, A, X, incX, Y, incY);
- if (KL < 0 || KU < 0) {
- throw new RSRuntimeException("KL and KU must be greater than or equal to 0");
- }
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha, aID, xID, beta, yID, incX, incY, KL, KU, mUseIncSupp);
- }
-
- /**
- * CGBMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d75/cgbmv_8f.html
- *
- * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N),
- * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an
- * example showing how to convert the original matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, m):
- * for j in range(max(0, i-kl), min(i+ku+1, n)):
- * b[i, j-i+kl] = a[i, j]
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param KL The number of sub-diagonals of the matrix A.
- * @param KU The number of super-diagonals of the matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains the band matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void CGBMV(@Transpose int TransA, int KL, int KU, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
- // GBMV has the same validation requirements as GEMV + KL and KU >= 0
- validateGEMV(Element.F32_2(mRS), TransA, A, X, incX, Y, incY);
- if (KL < 0 || KU < 0) {
- throw new RSRuntimeException("KL and KU must be greater than or equal to 0");
- }
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, KL, KU, mUseIncSupp);
- }
-
- /**
- * ZGBMV performs one of the matrix-vector operations
- * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d9/d46/zgbmv_8f.html
- *
- * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N),
- * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an
- * example showing how to convert the original matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, m):
- * for j in range(max(0, i-kl), min(i+ku+1, n)):
- * b[i, j-i+kl] = a[i, j]
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param KL The number of sub-diagonals of the matrix A.
- * @param KU The number of super-diagonals of the matrix A.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains the band matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void ZGBMV(@Transpose int TransA, int KL, int KU, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
- // GBMV has the same validation requirements as GEMV + KL and KU >= 0
- validateGEMV(Element.F64_2(mRS), TransA, A, X, incX, Y, incY);
- if (KL < 0 || KU < 0) {
- throw new RSRuntimeException("KL and KU must be greater than or equal to 0");
- }
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, KL, KU, mUseIncSupp);
- }
-
- static void validateTRMV(Element e, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTranspose(TransA);
- validateUplo(Uplo);
- validateDiag(Diag);
- int N = A.getType().getY();
- if (A.getType().getX() != N) {
- throw new RSRuntimeException("A must be a square matrix for TRMV");
- }
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (incX <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for TRMV");
- }
- }
-
- static int validateTPMV(Element e, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- validateTranspose(TransA);
- validateUplo(Uplo);
- validateDiag(Diag);
- if (!Ap.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (Ap.getType().getY() > 1) {
- throw new RSRuntimeException("Ap must have a Y dimension of 0 or 1");
- }
-
- int N = (int)Math.sqrt((double)Ap.getType().getX() * 2);
- //is it really doing anything?
- if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
- throw new RSRuntimeException("Invalid dimension for Ap");
- }
- if (incX <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for TPMV");
- }
-
- return N;
- }
-
- /**
- * STRMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d45/strmv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTRMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/dc/d7e/dtrmv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTRMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d78/ctrmv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTRMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/dd1/ztrmv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * STBMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d7d/stbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTBMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d29/dtbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTBMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/dcd/ctbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTBMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d39/ztbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * STPMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/db1/stpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- int N = validateTPMV(Element.F32(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, apID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTPMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/dc/dcd/dtpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- int N = validateTPMV(Element.F64(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, apID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTPMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/dbb/ctpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- int N = validateTPMV(Element.F32_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, apID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTPMV performs one of the matrix-vector operations
- * x := A*x or x := A**T*x or x := A**H*x
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d9e/ztpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- int N = validateTPMV(Element.F64_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, apID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * STRSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d2a/strsv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- // TRSV is the same as TRMV
- validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
-
- }
-
- /**
- * DTRSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d96/dtrsv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- // TRSV is the same as TRMV
- validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
-
- }
-
- /**
- * CTRSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/dc8/ctrsv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- // TRSV is the same as TRMV
- validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
-
- }
-
- /**
- * ZTRSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d1/d2f/ztrsv_8f.html
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- // TRSV is the same as TRMV
- validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
-
- }
-
- /**
- * STBSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d1f/stbsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV + K >= 0
- validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
- if (K < 0) {
- throw new RSRuntimeException("Number of diagonals must be positive");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTBSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/dcf/dtbsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV + K >= 0
- validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
- if (K < 0) {
- throw new RSRuntimeException("Number of diagonals must be positive");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, aID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTBSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d9/d5f/ctbsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV + K >= 0
- validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
- if (K < 0) {
- throw new RSRuntimeException("Number of diagonals must be positive");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTBSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/d5a/ztbsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param K The number of off-diagonals of the matrix A
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV + K >= 0
- validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
- int N = A.getType().getY();
- if (K < 0) {
- throw new RSRuntimeException("Number of diagonals must be positive");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, aID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * STPSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d7c/stpsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void STPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- // TPSV is same as TPMV
- int N = validateTPMV(Element.F32(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, apID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTPSV solves one of the systems of equations
- * A*x = b or A**T*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d9/d84/dtpsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void DTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- // TPSV is same as TPMV
- int N = validateTPMV(Element.F64(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, apID, xID, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTPSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/d56/ctpsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void CTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- // TPSV is same as TPMV
- int N = validateTPMV(Element.F32_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, apID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTPSV solves one of the systems of equations
- * A*x = b or A**T*x = b or A**H*x = b
- *
- * Details: http://www.netlib.org/lapack/explore-html/da/d57/ztpsv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param Ap The input allocation contains packed matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- */
- public void ZTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
- // TPSV is same as TPMV
- int N = validateTPMV(Element.F64_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, apID, xID, 0, 0, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * Level 2, S and D only
- */
- static int validateSYMV(Element e, @Uplo int Uplo, Allocation A, Allocation X, Allocation Y, int incX, int incY) {
- validateUplo(Uplo);
- int N = A.getType().getY();
- if (A.getType().getX() != N) {
- throw new RSRuntimeException("A must be a square matrix for SYMV");
- }
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e) ) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SYMV");
- }
- int expectedYDim = 1 + (N - 1) * incY;
- if (Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SYMV");
- }
- return N;
- }
- static int validateSPMV(Element e, @Uplo int Uplo, Allocation Ap, Allocation X, int incX, Allocation Y, int incY) {
- validateUplo(Uplo);
- if (!Ap.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (Ap.getType().getY() > 1) {
- throw new RSRuntimeException("Ap must have a Y dimension of 0 or 1");
- }
-
- int N = (int)Math.sqrt((double)Ap.getType().getX() * 2);
- if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
- throw new RSRuntimeException("Invalid dimension for Ap");
- }
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPMV");
- }
- int expectedYDim = 1 + (N - 1) * incY;
- if (Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPMV");
- }
-
- return N;
- }
- static void validateGER(Element e, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e) ) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
-
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- if (N < 1 || M < 1) {
- throw new RSRuntimeException("M and N must be 1 or greater for GER");
- }
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (M - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for GER");
- }
- int expectedYDim = 1 + (N - 1) * incY;
- if (Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for GER");
- }
-
-
- }
- static int validateSYR(Element e, @Uplo int Uplo, Allocation X, int incX, Allocation A) {
- validateUplo(Uplo);
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
-
- int N = A.getType().getX();
-
- if (X.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
- if (N != A.getType().getY()) {
- throw new RSRuntimeException("A must be a symmetric matrix");
- }
- if (incX <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SYR");
- }
- return N;
- }
- static int validateSPR(Element e, @Uplo int Uplo, Allocation X, int incX, Allocation Ap) {
- validateUplo(Uplo);
- if (!Ap.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (Ap.getType().getY() > 1) {
- throw new RSRuntimeException("Ap must have a Y dimension of 0 or 1");
- }
-
- int N = (int)Math.sqrt((double)Ap.getType().getX() * 2);
- if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
- throw new RSRuntimeException("Invalid dimension for Ap");
- }
- if (incX <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPR");
- }
-
- return N;
- }
-
- static int validateSYR2(Element e, @Uplo int Uplo, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- validateUplo(Uplo);
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
-
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- int N = A.getType().getX();
-
- if (N != A.getType().getY()) {
- throw new RSRuntimeException("A must be a symmetric matrix");
- }
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- int expectedYDim = 1 + (N - 1) * incY;
- if (X.getType().getX() != expectedXDim || Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SYR");
- }
- return N;
-
- }
- static int validateSPR2(Element e, @Uplo int Uplo, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
- validateUplo(Uplo);
- if (!Ap.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- if (Ap.getType().getY() > 1) {
- throw new RSRuntimeException("Ap must have a Y dimension of 0 or 1");
- }
-
- int N = (int)Math.sqrt((double)Ap.getType().getX() * 2);
- if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
- throw new RSRuntimeException("Invalid dimension for Ap");
- }
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (N - 1) * incX;
- int expectedYDim = 1 + (N - 1) * incY;
- if (X.getType().getX() != expectedXDim || Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPR2");
- }
-
- return N;
- }
-
- /**
- * SSYMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d94/ssymv_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void SSYMV(@Uplo int Uplo, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
- int N = validateSYMV(Element.F32(mRS), Uplo, A, X, Y, incX, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssymv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSBMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/da1/ssbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied.
- * @param K The number of off-diagonals of the matrix A
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void SSBMV(@Uplo int Uplo, int K, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
- // SBMV is the same as SYMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- int N = validateSYMV(Element.F32(mRS), Uplo, A, X, Y, incX, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSPMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/d68/sspmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form.
- * @param alpha The scalar alpha.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void SSPMV(@Uplo int Uplo, float alpha, Allocation Ap, Allocation X, int incX, float beta, Allocation Y, int incY) {
- int N = validateSPMV(Element.F32(mRS), Uplo, Ap, X, incX, Y, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, apID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SGER performs the rank 1 operation
- * A := alpha*x*y**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d5c/sger_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- */
- public void SGER(float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- int M = A.getType().getY();
- int N = A.getType().getX();
- validateGER(Element.F32(mRS), X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sger, 0, 0, 0, 0, 0, M, N, 0, alpha, xID, yID, 0.f, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSYR performs the rank 1 operation
- * A := alpha*x*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/dac/ssyr_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- */
- public void SSYR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
- int N = validateSYR(Element.F32(mRS), Uplo, X, incX, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, aID, 0.f, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSPR performs the rank 1 operation
- * A := alpha*x*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d9b/sspr_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32}.
- */
- public void SSPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
- int N = validateSPR(Element.F32(mRS), Uplo, X, incX, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, apID, 0.f, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSYR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**T + alpha*y*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d99/ssyr2_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- */
- public void SSYR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- int N = validateSYR2(Element.F32(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, yID, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSPR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**T + alpha*y*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d3e/sspr2_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32}.
- */
- public void SSPR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
- int N = validateSPR2(Element.F32(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, yID, 0, apID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/dbe/dsymv_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void DSYMV(@Uplo int Uplo, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
- int N = validateSYMV(Element.F64(mRS), Uplo, A, X, Y, incX, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsymv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSBMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/d1e/dsbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied.
- * @param K The number of off-diagonals of the matrix A
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void DSBMV(@Uplo int Uplo, int K, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
- // SBMV is the same as SYMV + K >= 0
- if (K < 0) {
- throw new RSRuntimeException("K must be greater than or equal to 0");
- }
- int N = validateSYMV(Element.F64(mRS), Uplo, A, X, Y, incX, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha, aID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSPMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/d85/dspmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form.
- * @param alpha The scalar alpha.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void DSPMV(@Uplo int Uplo, double alpha, Allocation Ap, Allocation X, int incX, double beta, Allocation Y, int incY) {
- int N = validateSPMV(Element.F64(mRS), Uplo, Ap, X, incX, Y, incY);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, apID, xID, beta, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DGER performs the rank 1 operation
- * A := alpha*x*y**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/dc/da8/dger_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- */
- public void DGER(double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- int M = A.getType().getY();
- int N = A.getType().getX();
- validateGER(Element.F64(mRS), X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dger, 0, 0, 0, 0, 0, M, N, 0, alpha, xID, yID, 0.f, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYR performs the rank 1 operation
- * A := alpha*x*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d60/dsyr_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- */
- public void DSYR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
- int N = validateSYR(Element.F64(mRS), Uplo, X, incX, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, aID, 0.f, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSPR performs the rank 1 operation
- * A := alpha*x*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/dd/dba/dspr_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64}.
- */
- public void DSPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
- int N = validateSPR(Element.F64(mRS), Uplo, X, incX, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, apID, 0.f, 0, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**T + alpha*y*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d41/dsyr2_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- */
- public void DSYR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- int N = validateSYR2(Element.F64(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, yID, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSPR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**T + alpha*y*x**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/dd/d9e/dspr2_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64}.
- */
- public void DSPR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
- int N = validateSPR2(Element.F64(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, xID, yID, 0, apID, incX, incY, 0, 0, mUseIncSupp);
- }
-
-
- /**
- * Level 2, C and Z only
- */
-
- static void validateGERU(Element e, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- if (!A.getType().getElement().isCompatible(e) ||
- !X.getType().getElement().isCompatible(e) ||
- !Y.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (X.getType().getY() > 1 || Y.getType().getY() > 1) {
- throw new RSRuntimeException("BLAS vectors must have Y dimension of 0 or 1");
- }
-
- int M = A.getType().getY();
- int N = A.getType().getX();
- if (incX <= 0 || incY <= 0) {
- throw new RSRuntimeException("Vector increments must be greater than 0");
- }
- int expectedXDim = 1 + (M - 1) * incX;
- if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for GERU");
- }
- int expectedYDim = 1 + (N - 1) * incY;
- if (Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for GERU");
- }
-
- }
-
- /**
- * CHEMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/d51/chemv_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void CHEMV(@Uplo int Uplo, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
- // HEMV is the same as SYR2 validation-wise
- int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chemv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHBMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/dc2/chbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied.
- * @param K The number of off-diagonals of the matrix A
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void CHBMV(@Uplo int Uplo, int K, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
- // HBMV is the same as SYR2 validation-wise
- int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
- if (K < 0) {
- throw new RSRuntimeException("K must be 0 or greater for HBMV");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHPMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d06/chpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form.
- * @param alpha The scalar alpha.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void CHPMV(@Uplo int Uplo, Float2 alpha, Allocation Ap, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
- // HPMV is the same as SPR2
- int N = validateSPR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, apID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CGERU performs the rank 1 operation
- * A := alpha*x*y**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d5f/cgeru_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CGERU(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- validateGERU(Element.F32_2(mRS), X, incX, Y, incY, A);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgeru, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CGERC performs the rank 1 operation
- * A := alpha*x*y**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/dd/d84/cgerc_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CGERC(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- // same as GERU
- validateGERU(Element.F32_2(mRS), X, incX, Y, incY, A);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgerc, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHER performs the rank 1 operation
- * A := alpha*x*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d6d/cher_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CHER(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
- // same as SYR
- int N = validateSYR(Element.F32_2(mRS), Uplo, X, incX, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cher, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, xID, 0, 0, 0, aID, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHPR performs the rank 1 operation
- * A := alpha*x*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/dcd/chpr_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CHPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
- // equivalent to SPR for validation
- int N = validateSPR(Element.F32_2(mRS), Uplo, X, incX, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, xID, 0, 0, 0, apID, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHER2 performs the symmetric rank 2 operation
- * A := alpha*x*y**H + alpha*y*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d87/cher2_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CHER2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- // same as SYR2
- int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cher2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * CHPR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**H + alpha*y*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d44/chpr2_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F32_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F32_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- */
- public void CHPR2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
- // same as SPR2
- int N = validateSPR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, apID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHEMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/ddd/zhemv_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void ZHEMV(@Uplo int Uplo, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
- // HEMV is the same as SYR2 validation-wise
- int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhemv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHBMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d1a/zhbmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N),
- * but only the region N*(K+1) will be referenced. The following subroutine can is an
- * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'.
- * for i in range(0, n):
- * for j in range(i, min(i+k+1, n)):
- * b[i, j-i] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied.
- * @param K The number of off-diagonals of the matrix A
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void ZHBMV(@Uplo int Uplo, int K, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
- // HBMV is the same as SYR2 validation-wise
- int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
- if (K < 0) {
- throw new RSRuntimeException("K must be 0 or greater for HBMV");
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha.x, alpha.y, aID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHPMV performs the matrix-vector operation
- * y := alpha*A*x + beta*y
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d60/zhpmv_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form.
- * @param alpha The scalar alpha.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param beta The scalar beta.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- */
- public void ZHPMV(@Uplo int Uplo, Double2 alpha, Allocation Ap, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
- // HPMV is the same as SPR2
- int N = validateSPR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, apID, xID, beta.x, beta.y, yID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZGERU performs the rank 1 operation
- * A := alpha*x*y**T + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/d12/zgeru_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZGERU(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- validateGERU(Element.F64_2(mRS), X, incX, Y, incY, A);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgeru, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZGERC performs the rank 1 operation
- * A := alpha*x*y**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/dad/zgerc_8f.html
- *
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZGERC(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- // same as GERU
- validateGERU(Element.F64_2(mRS), X, incX, Y, incY, A);
- int M = A.getType().getY();
- int N = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgerc, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHER performs the rank 1 operation
- * A := alpha*x*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d0e/zher_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZHER(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
- // same as SYR
- int N = validateSYR(Element.F64_2(mRS), Uplo, X, incX, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zher, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, xID, 0, 0, 0, aID, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHPR performs the rank 1 operation
- * A := alpha*x*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/de1/zhpr_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZHPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
- // equivalent to SPR for validation
- int N = validateSPR(Element.F64_2(mRS), Uplo, X, incX, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, xID, 0, 0, 0, apID, incX, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHER2 performs the symmetric rank 2 operation
- * A := alpha*x*y**H + alpha*y*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/da/d8a/zher2_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZHER2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
- // same as SYR2
- int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zher2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, aID, incX, incY, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHPR2 performs the symmetric rank 2 operation
- * A := alpha*x*y**H + alpha*y*x**H + A
- *
- * Details: http://www.netlib.org/lapack/explore-html/d5/d52/zhpr2_8f.html
- *
- * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2,
- * The following subroutine can is an example showing how to convert a UPPER trianglar matrix
- * 'a' to packed matrix 'b'.
- * k = 0
- * for i in range(0, n):
- * for j in range(i, n):
- * b[k++] = a[i, j]
- *
- * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form.
- * @param alpha The scalar alpha.
- * @param X The input allocation contains vector x, supported elements type {@link Element#F64_2}.
- * @param incX The increment for the elements of vector x, must be larger than zero.
- * @param Y The input allocation contains vector y, supported elements type {@link Element#F64_2}.
- * @param incY The increment for the elements of vector y, must be larger than zero.
- * @param Ap The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- */
- public void ZHPR2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
- // same as SPR2
- int N = validateSPR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, Ap);
-
- boolean mUseIncSupp = isIncSupp();
- long apID = Ap.getID(mRS);
- long xID = X.getID(mRS);
- long yID = Y.getID(mRS);
- if (mUseIncSupp) {
- apID = getDummyAlloc(Ap);
- xID = getDummyAlloc(X);
- yID = getDummyAlloc(Y);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, xID, yID, 0, 0, apID, incX, incY, 0, 0, mUseIncSupp);
- }
-
-
- /**
- * Level 3 BLAS
- */
-
- static void validateL3(Element e, int TransA, int TransB, int Side, Allocation A, Allocation B, Allocation C) {
- int aM = -1, aN = -1, bM = -1, bN = -1, cM = -1, cN = -1;
- if ((A != null && !A.getType().getElement().isCompatible(e)) ||
- (B != null && !B.getType().getElement().isCompatible(e)) ||
- (C != null && !C.getType().getElement().isCompatible(e))) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- if (C == null) {
- //since matrix C is used to store the result, it cannot be null.
- throw new RSRuntimeException("Allocation C cannot be null");
- }
- cM = C.getType().getY();
- cN = C.getType().getX();
-
- if (Side == RIGHT) {
- if ((A == null && B != null) || (A != null && B == null)) {
- throw new RSRuntimeException("Provided Matrix A without Matrix B, or vice versa");
- }
- if (B != null) {
- bM = A.getType().getY();
- bN = A.getType().getX();
- }
- if (A != null) {
- aM = B.getType().getY();
- aN = B.getType().getX();
- }
- } else {
- if (A != null) {
- if (TransA == TRANSPOSE || TransA == CONJ_TRANSPOSE) {
- aN = A.getType().getY();
- aM = A.getType().getX();
- } else {
- aM = A.getType().getY();
- aN = A.getType().getX();
- }
- }
- if (B != null) {
- if (TransB == TRANSPOSE || TransB == CONJ_TRANSPOSE) {
- bN = B.getType().getY();
- bM = B.getType().getX();
- } else {
- bM = B.getType().getY();
- bN = B.getType().getX();
- }
- }
- }
- if (A != null && B != null && C != null) {
- if (aN != bM || aM != cM || bN != cN) {
- throw new RSRuntimeException("Called BLAS with invalid dimensions");
- }
- } else if (A != null && C != null) {
- // A and C only, for SYRK
- if (cM != cN) {
- throw new RSRuntimeException("Matrix C is not symmetric");
- }
- if (aM != cM) {
- throw new RSRuntimeException("Called BLAS with invalid dimensions");
- }
- } else if (A != null && B != null) {
- // A and B only
- if (aN != bM) {
- throw new RSRuntimeException("Called BLAS with invalid dimensions");
- }
- }
-
- }
-
- /**
- * SGEMM performs one of the matrix-matrix operations
- * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/de2/sgemm_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param TransB The type of transpose applied to matrix B.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32}.
- */
- public void SGEMM(@Transpose int TransA, @Transpose int TransB, float alpha, Allocation A,
- Allocation B, float beta, Allocation C) {
- validateTranspose(TransA);
- validateTranspose(TransB);
- validateL3(Element.F32(mRS), TransA, TransB, 0, A, B, C);
-
- int M = -1, N = -1, K = -1;
- if (TransA != NO_TRANSPOSE) {
- M = A.getType().getX();
- K = A.getType().getY();
- } else {
- M = A.getType().getY();
- K = A.getType().getX();
- }
- if (TransB != NO_TRANSPOSE) {
- N = B.getType().getY();
- } else {
- N = B.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sgemm, TransA, TransB, 0, 0, 0, M, N, K, alpha, aID, bID,
- beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DGEMM performs one of the matrix-matrix operations
- * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param TransB The type of transpose applied to matrix B.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64}.
- */
- public void DGEMM(@Transpose int TransA, @Transpose int TransB, double alpha, Allocation A,
- Allocation B, double beta, Allocation C) {
- validateTranspose(TransA);
- validateTranspose(TransB);
- validateL3(Element.F64(mRS), TransA, TransB, 0, A, B, C);
- int M = -1, N = -1, K = -1;
- if (TransA != NO_TRANSPOSE) {
- M = A.getType().getX();
- K = A.getType().getY();
- } else {
- M = A.getType().getY();
- K = A.getType().getX();
- }
- if (TransB != NO_TRANSPOSE) {
- N = B.getType().getY();
- } else {
- N = B.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dgemm, TransA, TransB, 0, 0, 0, M, N, K, alpha, aID, bID,
- beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CGEMM performs one of the matrix-matrix operations
- * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T or op(X) = X**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d5b/cgemm_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param TransB The type of transpose applied to matrix B.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CGEMM(@Transpose int TransA, @Transpose int TransB, Float2 alpha, Allocation A,
- Allocation B, Float2 beta, Allocation C) {
- validateTranspose(TransA);
- validateTranspose(TransB);
- validateL3(Element.F32_2(mRS), TransA, TransB, 0, A, B, C);
- int M = -1, N = -1, K = -1;
- if (TransA != NO_TRANSPOSE) {
- M = A.getType().getX();
- K = A.getType().getY();
- } else {
- M = A.getType().getY();
- K = A.getType().getX();
- }
- if (TransB != NO_TRANSPOSE) {
- N = B.getType().getY();
- } else {
- N = B.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgemm, TransA, TransB, 0, 0, 0, M, N, K, alpha.x, alpha.y, aID, bID,
- beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZGEMM performs one of the matrix-matrix operations
- * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T or op(X) = X**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/d76/zgemm_8f.html
- *
- * @param TransA The type of transpose applied to matrix A.
- * @param TransB The type of transpose applied to matrix B.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2
- */
- public void ZGEMM(@Transpose int TransA, @Transpose int TransB, Double2 alpha, Allocation A,
- Allocation B, Double2 beta, Allocation C) {
- validateTranspose(TransA);
- validateTranspose(TransB);
- validateL3(Element.F64_2(mRS), TransA, TransB, 0, A, B, C);
- int M = -1, N = -1, K = -1;
- if (TransA != NO_TRANSPOSE) {
- M = A.getType().getX();
- K = A.getType().getY();
- } else {
- M = A.getType().getY();
- K = A.getType().getX();
- }
- if (TransB != NO_TRANSPOSE) {
- N = B.getType().getY();
- } else {
- N = B.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgemm, TransA, TransB, 0, 0, 0, M, N, K, alpha.x, alpha.y, aID, bID,
- beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSYMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/d42/ssymm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32}.
- */
- public void SSYMM(@Side int Side, @Uplo int Uplo, float alpha, Allocation A,
- Allocation B, float beta, Allocation C) {
- validateSide(Side);
- validateUplo(Uplo);
- //For SYMM, Matrix A should be symmetric
- if (A.getType().getX() != A.getType().getY()) {
- throw new RSRuntimeException("Matrix A is not symmetric");
- }
- validateL3(Element.F32(mRS), 0, 0, Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha, aID, bID,
- beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/db0/dsymm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64}.
- */
- public void DSYMM(@Side int Side, @Uplo int Uplo, double alpha, Allocation A,
- Allocation B, double beta, Allocation C) {
- validateSide(Side);
- validateUplo(Uplo);
- if (A.getType().getX() != A.getType().getY()) {
- throw new RSRuntimeException("Matrix A is not symmetric");
- }
- validateL3(Element.F64(mRS), 0, 0, Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha, aID, bID,
- beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CSYMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/db/d59/csymm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CSYMM(@Side int Side, @Uplo int Uplo, Float2 alpha, Allocation A,
- Allocation B, Float2 beta, Allocation C) {
- validateSide(Side);
- validateUplo(Uplo);
- if (A.getType().getX() != A.getType().getY()) {
- throw new RSRuntimeException("Matrix A is not symmetric");
- }
- validateL3(Element.F32_2(mRS), 0, 0, Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha.x, alpha.y, aID, bID,
- beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZSYMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d51/zsymm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZSYMM(@Side int Side, @Uplo int Uplo, Double2 alpha, Allocation A,
- Allocation B, Double2 beta, Allocation C) {
- validateSide(Side);
- validateUplo(Uplo);
- if (A.getType().getX() != A.getType().getY()) {
- throw new RSRuntimeException("Matrix A is not symmetric");
- }
- validateL3(Element.F64_2(mRS), 0, 0, Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha.x, alpha.y, aID, bID,
- beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * SSYRK performs one of the symmetric rank k operations
- * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d0/d40/ssyrk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32}.
- */
- public void SSYRK(@Uplo int Uplo, @Transpose int Trans, float alpha, Allocation A, float beta, Allocation C) {
- validateTranspose(Trans);
- validateUplo(Uplo);
- validateL3(Element.F32(mRS), Trans, 0, 0, A, null, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, aID, 0, beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYRK performs one of the symmetric rank k operations
- * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/dc/d05/dsyrk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64}.
- */
- public void DSYRK(@Uplo int Uplo, @Transpose int Trans, double alpha, Allocation A, double beta, Allocation C) {
- validateTranspose(Trans);
- validateUplo(Uplo);
- validateL3(Element.F64(mRS), Trans, 0, 0, A, null, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, aID, 0, beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CSYRK performs one of the symmetric rank k operations
- * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d6a/csyrk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CSYRK(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Float2 beta, Allocation C) {
- validateTranspose(Trans);
- validateUplo(Uplo);
- validateL3(Element.F32_2(mRS), Trans, 0, 0, A, null, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, aID, 0, beta.x, beta.y,
- C.getID(mRS), 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZSYRK performs one of the symmetric rank k operations
- * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d54/zsyrk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZSYRK(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Double2 beta, Allocation C) {
- validateTranspose(Trans);
- validateUplo(Uplo);
- validateL3(Element.F64_2(mRS), Trans, 0, 0, A, null, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, aID, 0, beta.x, beta.y,
- C.getID(mRS), 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateSYR2K(Element e, @Transpose int Trans, Allocation A, Allocation B, Allocation C) {
- validateTranspose(Trans);
- if (!A.getType().getElement().isCompatible(e) ||
- !B.getType().getElement().isCompatible(e) ||
- !C.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- int Cdim = -1;
- // A is n x k if no transpose, k x n if transpose
- // C is n x n
- if (Trans == TRANSPOSE) {
- // check columns versus C
- Cdim = A.getType().getX();
- } else {
- // check rows versus C
- Cdim = A.getType().getY();
- }
- if (C.getType().getX() != Cdim || C.getType().getY() != Cdim) {
- throw new RSRuntimeException("Invalid symmetric matrix in SYR2K");
- }
- // A dims == B dims
- if (A.getType().getX() != B.getType().getX() || A.getType().getY() != B.getType().getY()) {
- throw new RSRuntimeException("Invalid A and B in SYR2K");
- }
- }
-
- /**
- * SSYR2K performs one of the symmetric rank 2k operations
- * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d3d/ssyr2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32}.
- */
- public void SSYR2K(@Uplo int Uplo, @Transpose int Trans, float alpha, Allocation A, Allocation B, float beta, Allocation C) {
- validateUplo(Uplo);
- validateSYR2K(Element.F32(mRS), Trans, A, B, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, aID, bID, beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DSYR2K performs one of the symmetric rank 2k operations
- * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d1/dec/dsyr2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64}.
- */
- public void DSYR2K(@Uplo int Uplo, @Transpose int Trans, double alpha, Allocation A, Allocation B, double beta, Allocation C) {
- validateUplo(Uplo);
- validateSYR2K(Element.F64(mRS), Trans, A, B, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, aID, bID, beta, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CSYR2K performs one of the symmetric rank 2k operations
- * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d7e/csyr2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CSYR2K(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Allocation B, Float2 beta, Allocation C) {
- validateUplo(Uplo);
- validateSYR2K(Element.F32_2(mRS), Trans, A, B, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, aID, bID, beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZSYR2K performs one of the symmetric rank 2k operations
- * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d20/zsyr2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZSYR2K(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Allocation B, Double2 beta, Allocation C) {
- validateUplo(Uplo);
- validateSYR2K(Element.F64_2(mRS), Trans, A, B, C);
- int K = -1;
- if (Trans != NO_TRANSPOSE) {
- K = A.getType().getY();
- } else {
- K = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, aID, bID, beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateTRMM(Element e, @Side int Side, @Transpose int TransA, Allocation A, Allocation B) {
- validateSide(Side);
- validateTranspose(TransA);
- int aM = -1, aN = -1, bM = -1, bN = -1;
- if (!A.getType().getElement().isCompatible(e) ||
- !B.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
-
- aM = A.getType().getY();
- aN = A.getType().getX();
- if (aM != aN) {
- throw new RSRuntimeException("Called TRMM with a non-symmetric matrix A");
- }
-
- bM = B.getType().getY();
- bN = B.getType().getX();
- if (Side == LEFT) {
- if (aN != bM) {
- throw new RSRuntimeException("Called TRMM with invalid matrices");
- }
- } else {
- if (bN != aM) {
- throw new RSRuntimeException("Called TRMM with invalid matrices");
- }
- }
- }
-
- /**
- * STRMM performs one of the matrix-matrix operations
- * B := alpha*op(A)*B or B := alpha*B*op(A)
- * op(A) is one of op(A) = A or op(A) = A**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/df/d01/strmm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32}.
- */
- public void STRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, float alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRMM(Element.F32(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha, aID, bID, 0.f, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTRMM performs one of the matrix-matrix operations
- * B := alpha*op(A)*B or B := alpha*B*op(A)
- * op(A) is one of op(A) = A or op(A) = A**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/dd/d19/dtrmm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64}.
- */
- public void DTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, double alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRMM(Element.F64(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha, aID, bID, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTRMM performs one of the matrix-matrix operations
- * B := alpha*op(A)*B or B := alpha*B*op(A)
- * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/d4/d9b/ctrmm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- */
- public void CTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRMM(Element.F32_2(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, 0, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTRMM performs one of the matrix-matrix operations
- * B := alpha*op(A)*B or B := alpha*B*op(A)
- * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/de1/ztrmm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- */
- public void ZTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRMM(Element.F64_2(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, 0, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateTRSM(Element e, @Side int Side, @Transpose int TransA, Allocation A, Allocation B) {
- int adim = -1, bM = -1, bN = -1;
- validateSide(Side);
- validateTranspose(TransA);
- if (!A.getType().getElement().isCompatible(e) ||
- !B.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- adim = A.getType().getX();
- if (adim != A.getType().getY()) {
- // this may be unnecessary, the restriction could potentially be relaxed
- // A needs to contain at least that symmetric matrix but could theoretically be larger
- // for now we assume adapters are sufficient, will reevaluate in the future
- throw new RSRuntimeException("Called TRSM with a non-symmetric matrix A");
- }
- bM = B.getType().getY();
- bN = B.getType().getX();
- if (Side == LEFT) {
- // A is M*M
- if (adim != bM) {
- throw new RSRuntimeException("Called TRSM with invalid matrix dimensions");
- }
- } else {
- // A is N*N
- if (adim != bN) {
- throw new RSRuntimeException("Called TRSM with invalid matrix dimensions");
- }
- }
- }
-
- /**
- * STRSM solves one of the matrix equations
- * op(A)*X := alpha*B or X*op(A) := alpha*B
- * op(A) is one of op(A) = A or op(A) = A**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/d2/d8b/strsm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32}.
- */
- public void STRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, float alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRSM(Element.F32(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha, aID, bID, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * DTRSM solves one of the matrix equations
- * op(A)*X := alpha*B or X*op(A) := alpha*B
- * op(A) is one of op(A) = A or op(A) = A**T
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/da7/dtrsm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64}.
- */
- public void DTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, double alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRSM(Element.F64(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha, aID, bID, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * CTRSM solves one of the matrix equations
- * op(A)*X := alpha*B or X*op(A) := alpha*B
- * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/de/d30/ctrsm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- */
- public void CTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRSM(Element.F32_2(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, 0, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZTRSM solves one of the matrix equations
- * op(A)*X := alpha*B or X*op(A) := alpha*B
- * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H
- *
- * Details: http://www.netlib.org/lapack/explore-html/d1/d39/ztrsm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether matrix A is upper or lower triangular.
- * @param TransA The type of transpose applied to matrix A.
- * @param Diag Specifies whether or not A is unit triangular.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- */
- public void ZTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
- validateUplo(Uplo);
- validateDiag(Diag);
- validateTRSM(Element.F64_2(mRS), Side, TransA, A, B);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, 0, 0, 0, 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateHEMM(Element e, @Side int Side, Allocation A, Allocation B, Allocation C) {
- validateSide(Side);
-
- if (!A.getType().getElement().isCompatible(e) ||
- !B.getType().getElement().isCompatible(e) ||
- !C.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
-
- // A must be square; can potentially be relaxed similar to TRSM
- int adim = A.getType().getX();
- if (adim != A.getType().getY()) {
- throw new RSRuntimeException("Called HEMM with non-square A");
- }
- if ((Side == LEFT && adim != B.getType().getY()) ||
- (Side == RIGHT && adim != B.getType().getX())) {
- throw new RSRuntimeException("Called HEMM with invalid B");
- }
- if (B.getType().getX() != C.getType().getX() ||
- B.getType().getY() != C.getType().getY()) {
- throw new RSRuntimeException("Called HEMM with mismatched B and C");
- }
- }
-
- /**
- * CHEMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d3/d66/chemm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CHEMM(@Side int Side, @Uplo int Uplo, Float2 alpha, Allocation A, Allocation B, Float2 beta, Allocation C) {
- validateUplo(Uplo);
- validateHEMM(Element.F32_2(mRS), Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chemm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHEMM performs one of the matrix-matrix operations
- * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d6/d3e/zhemm_8f.html
- *
- * @param Side Specifies whether the symmetric matrix A appears on the left or right.
- * @param Uplo Specifies whether the upper or lower triangular part is to be referenced.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZHEMM(@Side int Side, @Uplo int Uplo, Double2 alpha, Allocation A, Allocation B, Double2 beta, Allocation C) {
- validateUplo(Uplo);
- validateHEMM(Element.F64_2(mRS), Side, A, B, C);
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhemm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0,
- alpha.x, alpha.y, aID, bID, beta.x, beta.y, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateHERK(Element e, @Transpose int Trans, Allocation A, Allocation C) {
- if (!A.getType().getElement().isCompatible(e) ||
- !C.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- validateConjTranspose(Trans);
- int cdim = C.getType().getX();
- if (cdim != C.getType().getY()) {
- throw new RSRuntimeException("Called HERK with non-square C");
- }
- if (Trans == NO_TRANSPOSE) {
- if (cdim != A.getType().getY()) {
- throw new RSRuntimeException("Called HERK with invalid A");
- }
- } else {
- if (cdim != A.getType().getX()) {
- throw new RSRuntimeException("Called HERK with invalid A");
- }
- }
- }
-
- /**
- * CHERK performs one of the hermitian rank k operations
- * C := alpha*A*A**H + beta*C or C := alpha*A**H*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d8/d52/cherk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CHERK(@Uplo int Uplo, @Transpose int Trans, float alpha, Allocation A, float beta, Allocation C) {
- validateUplo(Uplo);
- validateHERK(Element.F32_2(mRS), Trans, A, C);
- int k = 0;
- if (Trans == CONJ_TRANSPOSE) {
- k = A.getType().getY();
- } else {
- k = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cherk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), k,
- alpha, 0, aID, 0, beta, 0, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHERK performs one of the hermitian rank k operations
- * C := alpha*A*A**H + beta*C or C := alpha*A**H*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d1/db1/zherk_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZHERK(@Uplo int Uplo, @Transpose int Trans, double alpha, Allocation A, double beta, Allocation C) {
- validateUplo(Uplo);
- validateHERK(Element.F64_2(mRS), Trans, A, C);
- int k = 0;
- if (Trans == CONJ_TRANSPOSE) {
- k = A.getType().getY();
- } else {
- k = A.getType().getX();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zherk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), k,
- alpha, 0, aID, 0, beta, 0, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- static void validateHER2K(Element e, @Transpose int Trans, Allocation A, Allocation B, Allocation C) {
- if (!A.getType().getElement().isCompatible(e) ||
- !B.getType().getElement().isCompatible(e) ||
- !C.getType().getElement().isCompatible(e)) {
- throw new RSRuntimeException("Called BLAS with wrong Element type");
- }
- validateConjTranspose(Trans);
- int cdim = C.getType().getX();
- if (cdim != C.getType().getY()) {
- throw new RSRuntimeException("Called HER2K with non-square C");
- }
- if (Trans == NO_TRANSPOSE) {
- if (A.getType().getY() != cdim) {
- throw new RSRuntimeException("Called HER2K with invalid matrices");
- }
- } else {
- if (A.getType().getX() != cdim) {
- throw new RSRuntimeException("Called HER2K with invalid matrices");
- }
- }
- if (A.getType().getX() != B.getType().getX() || A.getType().getY() != B.getType().getY()) {
- throw new RSRuntimeException("Called HER2K with invalid A and B matrices");
- }
- }
-
- /**
- * CHER2K performs one of the hermitian rank 2k operations
- * C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C or C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d1/d82/cher2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F32_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F32_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F32_2}.
- */
- public void CHER2K(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Allocation B, float beta, Allocation C) {
- validateUplo(Uplo);
- validateHER2K(Element.F32_2(mRS), Trans, A, B, C);
- int k = 0;
- if (Trans == NO_TRANSPOSE) {
- k = A.getType().getX();
- } else {
- k = A.getType().getY();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cher2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), k, alpha.x, alpha.y,
- A.getID(mRS), bID, beta, 0, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
- /**
- * ZHER2K performs one of the hermitian rank 2k operations
- * C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C or C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C
- *
- * Details: http://www.netlib.org/lapack/explore-html/d7/dfa/zher2k_8f.html
- *
- * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced.
- * @param Trans The type of transpose applied to the operation.
- * @param alpha The scalar alpha.
- * @param A The input allocation contains matrix A, supported elements type {@link Element#F64_2}.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#F64_2}.
- * @param beta The scalar beta.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#F64_2}.
- */
- public void ZHER2K(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Allocation B, double beta, Allocation C) {
- validateUplo(Uplo);
- validateHER2K(Element.F64_2(mRS), Trans, A, B, C);
- int k = 0;
- if (Trans == NO_TRANSPOSE) {
- k = A.getType().getX();
- } else {
- k = A.getType().getY();
- }
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zher2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), k, alpha.x, alpha.y,
- A.getID(mRS), bID, beta, 0, cID, 0, 0, 0, 0, mUseIncSupp);
- }
-
-
- /**
- * 8-bit GEMM-like operation for neural networks: C = A * Transpose(B)
- * Calculations are done in 1.10.21 fixed-point format for the final output,
- * just before there's a shift down to drop the fractional parts. The output
- * values are gated to 0 to 255 to fit in a byte, but the 10-bit format
- * gives some headroom to avoid wrapping around on small overflows.
- *
- * @param A The input allocation contains matrix A, supported elements type {@link Element#U8}.
- * @param a_offset The offset for all values in matrix A, e.g A[i,j] = A[i,j] - a_offset. Value should be from 0 to 255.
- * @param B The input allocation contains matrix B, supported elements type {@link Element#U8}.
- * @param b_offset The offset for all values in matrix B, e.g B[i,j] = B[i,j] - b_offset. Value should be from 0 to 255.
- * @param C The input allocation contains matrix C, supported elements type {@link Element#U8}.
- * @param c_offset The offset for all values in matrix C.
- * @param c_mult The multiplier for all values in matrix C, e.g C[i,j] = (C[i,j] + c_offset) * c_mult.
- **/
- public void BNNM(Allocation A, int a_offset, Allocation B, int b_offset, Allocation C, int c_offset, int c_mult) {
- validateL3(Element.U8(mRS), NO_TRANSPOSE, TRANSPOSE, 0, A, B, C);
-
- if (a_offset < 0 || a_offset > 255) {
- throw new RSRuntimeException("Invalid a_offset passed to BNNM");
- }
- if (b_offset < 0 || b_offset > 255) {
- throw new RSRuntimeException("Invalid b_offset passed to BNNM");
- }
- int M = -1, N = -1, K = -1;
- M = A.getType().getY();
- N = B.getType().getY();
- K = A.getType().getX();
-
- boolean mUseIncSupp = isIncSupp();
- long aID = A.getID(mRS);
- long bID = B.getID(mRS);
- long cID = C.getID(mRS);
- if (mUseIncSupp) {
- aID = getDummyAlloc(A);
- bID = getDummyAlloc(B);
- cID = getDummyAlloc(C);
- }
- mRS.nScriptIntrinsicBLAS_BNNM(getID(mRS), M, N, K, aID, a_offset, bID, b_offset, cID, c_offset, c_mult, mUseIncSupp);
-
- }
-
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlend.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlend.java
deleted file mode 100644
index eef581e..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlend.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-
-/**
- * Intrinsic kernels for blending two
- * {@link android.support.v8.renderscript.Allocation} objects.
- **/
-public class ScriptIntrinsicBlend extends ScriptIntrinsic {
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- ScriptIntrinsicBlend(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Supported elements types are {@link Element#U8_4}
- *
- * @param rs The RenderScript context
- * @param e Element type for inputs and outputs
- *
- * @return ScriptIntrinsicBlend
- */
- public static ScriptIntrinsicBlend create(RenderScript rs, Element e) {
- // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(7, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicBlend si = new ScriptIntrinsicBlend(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
-
- }
-
- private void blend(int id, Allocation ain, Allocation aout) {
- if (!ain.getElement().isCompatible(Element.U8_4(mRS))) {
- throw new RSIllegalArgumentException("Input is not of expected format.");
- }
- if (!aout.getElement().isCompatible(Element.U8_4(mRS))) {
- throw new RSIllegalArgumentException("Output is not of expected format.");
- }
- forEach(id, ain, aout, null);
- }
-
- /**
- * Sets dst = {0, 0, 0, 0}
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachClear(Allocation ain, Allocation aout) {
- blend(0, ain, aout);
- }
-
- /**
- * Get a KernelID for the Clear kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDClear() {
- return createKernelID(0, 3, null, null);
- }
-
-
- /**
- * Sets dst = src
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSrc(Allocation ain, Allocation aout) {
- blend(1, ain, aout);
- }
-
- /**
- * Get a KernelID for the Src kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSrc() {
- return createKernelID(1, 3, null, null);
- }
-
- /**
- * Sets dst = dst
- *
- * This is a NOP.
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachDst(Allocation ain, Allocation aout) {
- // NOP
- }
-
- /**
- * Get a KernelID for the Dst kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDDst() {
- return createKernelID(2, 3, null, null);
- }
-
- /**
- * Sets dst = src + dst * (1.0 - src.a)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSrcOver(Allocation ain, Allocation aout) {
- blend(3, ain, aout);
- }
-
- /**
- * Get a KernelID for the SrcOver kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSrcOver() {
- return createKernelID(3, 3, null, null);
- }
-
- /**
- * Sets dst = dst + src * (1.0 - dst.a)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachDstOver(Allocation ain, Allocation aout) {
- blend(4, ain, aout);
- }
-
- /**
- * Get a KernelID for the DstOver kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDDstOver() {
- return createKernelID(4, 3, null, null);
- }
-
- /**
- * Sets dst = src * dst.a
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSrcIn(Allocation ain, Allocation aout) {
- blend(5, ain, aout);
- }
-
- /**
- * Get a KernelID for the SrcIn kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSrcIn() {
- return createKernelID(5, 3, null, null);
- }
-
- /**
- * Sets dst = dst * src.a
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachDstIn(Allocation ain, Allocation aout) {
- blend(6, ain, aout);
- }
-
- /**
- * Get a KernelID for the DstIn kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDDstIn() {
- return createKernelID(6, 3, null, null);
- }
-
- /**
- * Sets dst = src * (1.0 - dst.a)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSrcOut(Allocation ain, Allocation aout) {
- blend(7, ain, aout);
- }
-
- /**
- * Get a KernelID for the SrcOut kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSrcOut() {
- return createKernelID(7, 3, null, null);
- }
-
- /**
- * Sets dst = dst * (1.0 - src.a)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachDstOut(Allocation ain, Allocation aout) {
- blend(8, ain, aout);
- }
-
- /**
- * Get a KernelID for the DstOut kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDDstOut() {
- return createKernelID(8, 3, null, null);
- }
-
- /**
- * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
- * dst.a = dst.a
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSrcAtop(Allocation ain, Allocation aout) {
- blend(9, ain, aout);
- }
-
- /**
- * Get a KernelID for the SrcAtop kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSrcAtop() {
- return createKernelID(9, 3, null, null);
- }
-
- /**
- * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
- * dst.a = src.a
- * Note: Before API 23, the alpha channel was not correctly set.
- * Please use with caution when targeting older APIs.
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachDstAtop(Allocation ain, Allocation aout) {
- blend(10, ain, aout);
- }
-
- /**
- * Get a KernelID for the DstAtop kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDDstAtop() {
- return createKernelID(10, 3, null, null);
- }
-
- /**
- * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachXor(Allocation ain, Allocation aout) {
- blend(11, ain, aout);
- }
-
- /**
- * Get a KernelID for the Xor kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDXor() {
- return createKernelID(11, 3, null, null);
- }
-
- ////////
-/*
- public void forEachNormal(Allocation ain, Allocation aout) {
- blend(12, ain, aout);
- }
-
- public void forEachAverage(Allocation ain, Allocation aout) {
- blend(13, ain, aout);
- }
-*/
- /**
- * Sets dst = src * dst
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachMultiply(Allocation ain, Allocation aout) {
- blend(14, ain, aout);
- }
-
- /**
- * Get a KernelID for the Multiply kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDMultiply() {
- return createKernelID(14, 3, null, null);
- }
-
-/*
- public void forEachScreen(Allocation ain, Allocation aout) {
- blend(15, ain, aout);
- }
-
- public void forEachDarken(Allocation ain, Allocation aout) {
- blend(16, ain, aout);
- }
-
- public void forEachLighten(Allocation ain, Allocation aout) {
- blend(17, ain, aout);
- }
-
- public void forEachOverlay(Allocation ain, Allocation aout) {
- blend(18, ain, aout);
- }
-
- public void forEachHardlight(Allocation ain, Allocation aout) {
- blend(19, ain, aout);
- }
-
- public void forEachSoftlight(Allocation ain, Allocation aout) {
- blend(20, ain, aout);
- }
-
- public void forEachDifference(Allocation ain, Allocation aout) {
- blend(21, ain, aout);
- }
-
- public void forEachNegation(Allocation ain, Allocation aout) {
- blend(22, ain, aout);
- }
-
- public void forEachExclusion(Allocation ain, Allocation aout) {
- blend(23, ain, aout);
- }
-
- public void forEachColorDodge(Allocation ain, Allocation aout) {
- blend(24, ain, aout);
- }
-
- public void forEachInverseColorDodge(Allocation ain, Allocation aout) {
- blend(25, ain, aout);
- }
-
- public void forEachSoftDodge(Allocation ain, Allocation aout) {
- blend(26, ain, aout);
- }
-
- public void forEachColorBurn(Allocation ain, Allocation aout) {
- blend(27, ain, aout);
- }
-
- public void forEachInverseColorBurn(Allocation ain, Allocation aout) {
- blend(28, ain, aout);
- }
-
- public void forEachSoftBurn(Allocation ain, Allocation aout) {
- blend(29, ain, aout);
- }
-
- public void forEachReflect(Allocation ain, Allocation aout) {
- blend(30, ain, aout);
- }
-
- public void forEachGlow(Allocation ain, Allocation aout) {
- blend(31, ain, aout);
- }
-
- public void forEachFreeze(Allocation ain, Allocation aout) {
- blend(32, ain, aout);
- }
-
- public void forEachHeat(Allocation ain, Allocation aout) {
- blend(33, ain, aout);
- }
-*/
- /**
- * Sets dst = min(src + dst, 1.0)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachAdd(Allocation ain, Allocation aout) {
- blend(34, ain, aout);
- }
-
- /**
- * Get a KernelID for the Add kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDAdd() {
- return createKernelID(34, 3, null, null);
- }
-
- /**
- * Sets dst = max(dst - src, 0.0)
- *
- * @param ain The source buffer
- * @param aout The destination buffer
- */
- public void forEachSubtract(Allocation ain, Allocation aout) {
- blend(35, ain, aout);
- }
-
- /**
- * Get a KernelID for the Subtract kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelIDSubtract() {
- return createKernelID(35, 3, null, null);
- }
-
-/*
- public void forEachStamp(Allocation ain, Allocation aout) {
- blend(36, ain, aout);
- }
-
- public void forEachRed(Allocation ain, Allocation aout) {
- blend(37, ain, aout);
- }
-
- public void forEachGreen(Allocation ain, Allocation aout) {
- blend(38, ain, aout);
- }
-
- public void forEachBlue(Allocation ain, Allocation aout) {
- blend(39, ain, aout);
- }
-
- public void forEachHue(Allocation ain, Allocation aout) {
- blend(40, ain, aout);
- }
-
- public void forEachSaturation(Allocation ain, Allocation aout) {
- blend(41, ain, aout);
- }
-
- public void forEachColor(Allocation ain, Allocation aout) {
- blend(42, ain, aout);
- }
-
- public void forEachLuminosity(Allocation ain, Allocation aout) {
- blend(43, ain, aout);
- }
-*/
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlur.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlur.java
deleted file mode 100644
index e1a134a..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicBlur.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-
-/**
- * Intrinsic Gausian blur filter. Applies a gaussian blur of the
- * specified radius to all elements of an allocation.
- *
- *
- **/
-public class ScriptIntrinsicBlur extends ScriptIntrinsic {
- private final float[] mValues = new float[9];
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- protected ScriptIntrinsicBlur(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Create an intrinsic for applying a blur to an allocation. The
- * default radius is 5.0.
- *
- * Supported elements types are {@link Element#U8},
- * {@link Element#U8_4}.
- *
- * @param rs The RenderScript context
- * @param e Element type for inputs and outputs
- *
- * @return ScriptIntrinsicBlur
- */
- public static ScriptIntrinsicBlur create(RenderScript rs, Element e) {
- if ((!e.isCompatible(Element.U8_4(rs))) && (!e.isCompatible(Element.U8(rs)))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(5, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicBlur si = new ScriptIntrinsicBlur(id, rs);
- si.setIncSupp(mUseIncSupp);
- si.setRadius(5.f);
-
- return si;
- }
-
- /**
- * Set the input of the blur.
- * Must match the element type supplied during create.
- *
- * @param ain The input allocation
- */
- public void setInput(Allocation ain) {
- mInput = ain;
- setVar(1, ain);
- }
-
- /**
- * Set the radius of the Blur.
- *
- * Supported range 0 < radius <= 25
- *
- * @param radius The radius of the blur
- */
- public void setRadius(float radius) {
- if (radius <= 0 || radius > 25) {
- throw new RSIllegalArgumentException("Radius out of range (0 < r <= 25).");
- }
- setVar(0, radius);
- }
-
- /**
- * Apply the filter to the input and save to the specified
- * allocation.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- */
- public void forEach(Allocation aout) {
- forEach(0, (Allocation) null, aout, null);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 2, null, null);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(1, null);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicColorMatrix.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicColorMatrix.java
deleted file mode 100644
index f03526e..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicColorMatrix.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic for applying a color matrix to allocations.
- *
- * This has the same effect as loading each element and
- * converting it to a {@link Element#F32_4}, multiplying the
- * result by the 4x4 color matrix as performed by
- * rsMatrixMultiply() and writing it to the output after
- * conversion back to {@link Element#U8_4}.
- **/
-public class ScriptIntrinsicColorMatrix extends ScriptIntrinsic {
- private final Matrix4f mMatrix = new Matrix4f();
- private final Float4 mAdd = new Float4();
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- protected ScriptIntrinsicColorMatrix(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Create an intrinsic for applying a color matrix to an
- * allocation.
- *
- * Supported elements types are {@link Element#U8_4}
- *
- * @param rs The RenderScript context
- * @param e Element type for intputs and outputs
- *
- * @return ScriptIntrinsicColorMatrix
- */
- public static ScriptIntrinsicColorMatrix create(RenderScript rs, Element e) {
- if (!e.isCompatible(Element.U8_4(rs))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(2, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicColorMatrix si = new ScriptIntrinsicColorMatrix(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
-
- }
-
- private void setMatrix() {
- FieldPacker fp = new FieldPacker(16*4);
- fp.addMatrix(mMatrix);
- setVar(0, fp);
- }
-
- /**
- * Set the color matrix which will be applied to each cell of
- * the image.
- *
- * @param m The 4x4 matrix to set.
- */
- public void setColorMatrix(Matrix4f m) {
- mMatrix.load(m);
- setMatrix();
- }
-
- /**
- * Set the color matrix which will be applied to each cell of the image.
- * This will set the alpha channel to be a copy.
- *
- * @param m The 3x3 matrix to set.
- */
- public void setColorMatrix(Matrix3f m) {
- mMatrix.load(m);
- setMatrix();
- }
-
- /**
- * Set the value to be added after the color matrix has been
- * applied. The default value is {0, 0, 0, 0}
- *
- * @param f The float4 value to be added.
- */
- public void setAdd(Float4 f) {
- mAdd.x = f.x;
- mAdd.y = f.y;
- mAdd.z = f.z;
- mAdd.w = f.w;
-
- FieldPacker fp = new FieldPacker(4*4);
- fp.addF32(f.x);
- fp.addF32(f.y);
- fp.addF32(f.z);
- fp.addF32(f.w);
- setVar(1, fp);
- }
-
- /**
- * Set the value to be added after the color matrix has been
- * applied. The default value is {0, 0, 0, 0}
- *
- * @param r The red add value.
- * @param g The green add value.
- * @param b The blue add value.
- * @param a The alpha add value.
- */
- public void setAdd(float r, float g, float b, float a) {
- mAdd.x = r;
- mAdd.y = g;
- mAdd.z = b;
- mAdd.w = a;
-
- FieldPacker fp = new FieldPacker(4*4);
- fp.addF32(mAdd.x);
- fp.addF32(mAdd.y);
- fp.addF32(mAdd.z);
- fp.addF32(mAdd.w);
- setVar(1, fp);
- }
-
- /**
- * Set a color matrix to convert from RGB to luminance. The alpha channel
- * will be a copy.
- *
- */
- public void setGreyscale() {
- mMatrix.loadIdentity();
- mMatrix.set(0, 0, 0.299f);
- mMatrix.set(1, 0, 0.587f);
- mMatrix.set(2, 0, 0.114f);
- mMatrix.set(0, 1, 0.299f);
- mMatrix.set(1, 1, 0.587f);
- mMatrix.set(2, 1, 0.114f);
- mMatrix.set(0, 2, 0.299f);
- mMatrix.set(1, 2, 0.587f);
- mMatrix.set(2, 2, 0.114f);
- setMatrix();
- }
-
- /**
- * Set the matrix to convert from YUV to RGB with a direct copy of the 4th
- * channel.
- *
- */
- public void setYUVtoRGB() {
- mMatrix.loadIdentity();
- mMatrix.set(0, 0, 1.f);
- mMatrix.set(1, 0, 0.f);
- mMatrix.set(2, 0, 1.13983f);
- mMatrix.set(0, 1, 1.f);
- mMatrix.set(1, 1, -0.39465f);
- mMatrix.set(2, 1, -0.5806f);
- mMatrix.set(0, 2, 1.f);
- mMatrix.set(1, 2, 2.03211f);
- mMatrix.set(2, 2, 0.f);
- setMatrix();
- }
-
- /**
- * Set the matrix to convert from RGB to YUV with a direct copy of the 4th
- * channel.
- *
- */
- public void setRGBtoYUV() {
- mMatrix.loadIdentity();
- mMatrix.set(0, 0, 0.299f);
- mMatrix.set(1, 0, 0.587f);
- mMatrix.set(2, 0, 0.114f);
- mMatrix.set(0, 1, -0.14713f);
- mMatrix.set(1, 1, -0.28886f);
- mMatrix.set(2, 1, 0.436f);
- mMatrix.set(0, 2, 0.615f);
- mMatrix.set(1, 2, -0.51499f);
- mMatrix.set(2, 2, -0.10001f);
- setMatrix();
- }
-
-
- /**
- * Invoke the kernel and apply the matrix to each cell of ain and copy to
- * aout.
- *
- * @param ain Input allocation
- * @param aout Output allocation
- */
- public void forEach(Allocation ain, Allocation aout) {
- forEach(0, ain, aout, null);
- }
-
- /**
- * Invoke the kernel and apply the matrix to each cell of input
- * {@link Allocation} and copy to the output {@link Allocation}.
- *
- * If the vector size of the input is less than four, the
- * remaining components are treated as zero for the matrix
- * multiply.
- *
- * If the output vector size is less than four, the unused
- * vector components are discarded.
- *
- *
- * @param ain Input allocation
- * @param aout Output allocation
- * @param opt LaunchOptions for clipping
- */
- public void forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
- if (!ain.getElement().isCompatible(Element.U8(mRS)) &&
- !ain.getElement().isCompatible(Element.U8_2(mRS)) &&
- !ain.getElement().isCompatible(Element.U8_3(mRS)) &&
- !ain.getElement().isCompatible(Element.U8_4(mRS)) &&
- !ain.getElement().isCompatible(Element.F32(mRS)) &&
- !ain.getElement().isCompatible(Element.F32_2(mRS)) &&
- !ain.getElement().isCompatible(Element.F32_3(mRS)) &&
- !ain.getElement().isCompatible(Element.F32_4(mRS))) {
-
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
-
- if (!aout.getElement().isCompatible(Element.U8(mRS)) &&
- !aout.getElement().isCompatible(Element.U8_2(mRS)) &&
- !aout.getElement().isCompatible(Element.U8_3(mRS)) &&
- !aout.getElement().isCompatible(Element.U8_4(mRS)) &&
- !aout.getElement().isCompatible(Element.F32(mRS)) &&
- !aout.getElement().isCompatible(Element.F32_2(mRS)) &&
- !aout.getElement().isCompatible(Element.F32_3(mRS)) &&
- !aout.getElement().isCompatible(Element.F32_4(mRS))) {
-
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
-
- forEach(0, ain, aout, null, opt);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 3, null, null);
- }
-
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve3x3.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve3x3.java
deleted file mode 100644
index 17889aa..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve3x3.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic for applying a 3x3 convolve to an allocation.
- *
- **/
-public class ScriptIntrinsicConvolve3x3 extends ScriptIntrinsic {
- private final float[] mValues = new float[9];
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- ScriptIntrinsicConvolve3x3(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Supported elements types are {@link Element#U8}, {@link
- * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4},
- * {@link Element#F32}, {@link Element#F32_2}, {@link
- * Element#F32_3}, and {@link Element#F32_4}.
- *
- * <p> The default coefficients are:
- * <code>
- * <p> [ 0, 0, 0 ]
- * <p> [ 0, 1, 0 ]
- * <p> [ 0, 0, 0 ]
- * </code>
- *
- * @param rs The RenderScript context
- * @param e Element type for intputs and outputs
- *
- * @return ScriptIntrinsicConvolve3x3
- */
- public static ScriptIntrinsicConvolve3x3 create(RenderScript rs, Element e) {
- float f[] = { 0, 0, 0, 0, 1, 0, 0, 0, 0};
- if (!e.isCompatible(Element.U8(rs)) &&
- !e.isCompatible(Element.U8_2(rs)) &&
- !e.isCompatible(Element.U8_3(rs)) &&
- !e.isCompatible(Element.U8_4(rs)) &&
- !e.isCompatible(Element.F32(rs)) &&
- !e.isCompatible(Element.F32_2(rs)) &&
- !e.isCompatible(Element.F32_3(rs)) &&
- !e.isCompatible(Element.F32_4(rs))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(1, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicConvolve3x3 si = new ScriptIntrinsicConvolve3x3(id, rs);
- si.setIncSupp(mUseIncSupp);
- si.setCoefficients(f);
- return si;
- }
-
- /**
- * Set the input of the 3x3 convolve.
- * Must match the element type supplied during create.
- *
- * @param ain The input allocation.
- */
- public void setInput(Allocation ain) {
- mInput = ain;
- setVar(1, ain);
- }
-
- /**
- * Set the coefficients for the convolve.
- *
- * <p> The convolve layout is:
- * <code>
- * <p> [ 0, 1, 2 ]
- * <p> [ 3, 4, 5 ]
- * <p> [ 6, 7, 8 ]
- * </code>
- *
- * @param v The array of coefficients to set
- */
- public void setCoefficients(float v[]) {
- FieldPacker fp = new FieldPacker(9*4);
- for (int ct=0; ct < mValues.length; ct++) {
- mValues[ct] = v[ct];
- fp.addF32(mValues[ct]);
- }
- setVar(0, fp);
- }
-
- /**
- * Apply the filter to the input and save to the specified
- * allocation.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- */
- public void forEach(Allocation aout) {
- forEach(0, (Allocation) null, aout, null);
- }
-
- /**
- * Apply the filter to the input and save to the specified
- * allocation.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- * @param opt LaunchOptions for clipping
- */
- public void forEach(Allocation aout, Script.LaunchOptions opt) {
- forEach(0, (Allocation) null, aout, null, opt);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 2, null, null);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(1, null);
- }
-
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve5x5.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve5x5.java
deleted file mode 100644
index 2c591ba..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicConvolve5x5.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic for applying a 5x5 convolve to an allocation.
- *
- **/
-public class ScriptIntrinsicConvolve5x5 extends ScriptIntrinsic {
- private final float[] mValues = new float[25];
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- ScriptIntrinsicConvolve5x5(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Supported elements types are {@link Element#U8}, {@link
- * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4},
- * {@link Element#F32}, {@link Element#F32_2}, {@link
- * Element#F32_3}, and {@link Element#F32_4}.
- *
- * <p> The default coefficients are:
- * <code>
- * <p> [ 0, 0, 0, 0, 0 ]
- * <p> [ 0, 0, 0, 0, 0 ]
- * <p> [ 0, 0, 1, 0, 0 ]
- * <p> [ 0, 0, 0, 0, 0 ]
- * <p> [ 0, 0, 0, 0, 0 ]
- * </code>
- *
- * @param rs The RenderScript context
- * @param e Element type for intputs and outputs
- *
- * @return ScriptIntrinsicConvolve5x5
- */
- public static ScriptIntrinsicConvolve5x5 create(RenderScript rs, Element e) {
- if (!e.isCompatible(Element.U8(rs)) &&
- !e.isCompatible(Element.U8_2(rs)) &&
- !e.isCompatible(Element.U8_3(rs)) &&
- !e.isCompatible(Element.U8_4(rs)) &&
- !e.isCompatible(Element.F32(rs)) &&
- !e.isCompatible(Element.F32_2(rs)) &&
- !e.isCompatible(Element.F32_3(rs)) &&
- !e.isCompatible(Element.F32_4(rs))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(4, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicConvolve5x5 si = new ScriptIntrinsicConvolve5x5(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
-
- }
-
- /**
- * Set the input of the 5x5 convolve.
- * Must match the element type supplied during create.
- *
- * @param ain The input allocation.
- */
- public void setInput(Allocation ain) {
- mInput = ain;
- setVar(1, ain);
- }
-
- /**
- * Set the coefficients for the convolve.
- *
- * <p> The convolve layout is:
- * <code>
- * <p> [ 0, 1, 2, 3, 4 ]
- * <p> [ 5, 6, 7, 8, 9 ]
- * <p> [ 10, 11, 12, 13, 14 ]
- * <p> [ 15, 16, 17, 18, 19 ]
- * <p> [ 20, 21, 22, 23, 24 ]
- * </code>
- *
- * @param v The array of coefficients to set
- */
- public void setCoefficients(float v[]) {
- FieldPacker fp = new FieldPacker(25*4);
- for (int ct=0; ct < mValues.length; ct++) {
- mValues[ct] = v[ct];
- fp.addF32(mValues[ct]);
- }
- setVar(0, fp);
- }
-
- /**
- * Apply the filter to the input and save to the specified
- * allocation.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- */
- public void forEach(Allocation aout) {
- forEach(0, (Allocation) null, aout, null);
- }
-
- /**
- * Apply the filter to the input and save to the specified
- * allocation.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- * @param opt LaunchOptions for clipping
- */
- public void forEach(Allocation aout, Script.LaunchOptions opt) {
- forEach(0, (Allocation) null, aout, null, opt);
- }
-
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 2, null, null);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(1, null);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicHistogram.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicHistogram.java
deleted file mode 100644
index e3e6406..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicHistogram.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic Histogram filter.
- *
- *
- **/
-public class ScriptIntrinsicHistogram extends ScriptIntrinsic {
- private Allocation mOut;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- protected ScriptIntrinsicHistogram(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Create an intrinsic for calculating the histogram of an uchar
- * or uchar4 image.
- *
- * Supported elements types are
- * {@link Element#U8_4}, {@link Element#U8_3},
- * {@link Element#U8_2}, {@link Element#U8}
- *
- * @param rs The RenderScript context
- * @param e Element type for inputs
- *
- * @return ScriptIntrinsicHistogram
- */
- public static ScriptIntrinsicHistogram create(RenderScript rs, Element e) {
- if ((!e.isCompatible(Element.U8_4(rs))) &&
- (!e.isCompatible(Element.U8_3(rs))) &&
- (!e.isCompatible(Element.U8_2(rs))) &&
- (!e.isCompatible(Element.U8(rs)))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(9, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicHistogram si = new ScriptIntrinsicHistogram(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
- }
-
- /**
- * Process an input buffer and place the histogram into the
- * output allocation. The output allocation may be a narrower
- * vector size than the input. In this case the vector size of
- * the output is used to determine how many of the input
- * channels are used in the computation. This is useful if you
- * have an RGBA input buffer but only want the histogram for
- * RGB.
- *
- * 1D and 2D input allocations are supported.
- *
- * @param ain The input image
- */
- public void forEach(Allocation ain) {
- forEach(ain, null);
- }
-
- /**
- * Process an input buffer and place the histogram into the
- * output allocation. The output allocation may be a narrower
- * vector size than the input. In this case the vector size of
- * the output is used to determine how many of the input
- * channels are used in the computation. This is useful if you
- * have an RGBA input buffer but only want the histogram for
- * RGB.
- *
- * 1D and 2D input allocations are supported.
- *
- * @param ain The input image
- * @param opt LaunchOptions for clipping
- */
- public void forEach(Allocation ain, Script.LaunchOptions opt) {
- if (ain.getType().getElement().getVectorSize() <
- mOut.getType().getElement().getVectorSize()) {
-
- throw new RSIllegalArgumentException(
- "Input vector size must be >= output vector size.");
- }
- if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_2(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_3(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_4(mRS))) {
- throw new RSIllegalArgumentException("Input type must be U8, U8_1, U8_2 or U8_4.");
- }
-
- forEach(0, ain, null, null, opt);
- }
-
-
-
- /**
- * Set the coefficients used for the RGBA to Luminocity
- * calculation. The default is {0.299f, 0.587f, 0.114f, 0.f}.
- *
- * Coefficients must be >= 0 and sum to 1.0 or less.
- *
- * @param r Red coefficient
- * @param g Green coefficient
- * @param b Blue coefficient
- * @param a Alpha coefficient
- */
- public void setDotCoefficients(float r, float g, float b, float a) {
- if ((r < 0.f) || (g < 0.f) || (b < 0.f) || (a < 0.f)) {
- throw new RSIllegalArgumentException("Coefficient may not be negative.");
- }
- if ((r + g + b + a) > 1.f) {
- throw new RSIllegalArgumentException("Sum of coefficients must be 1.0 or less.");
- }
-
- FieldPacker fp = new FieldPacker(16);
- fp.addF32(r);
- fp.addF32(g);
- fp.addF32(b);
- fp.addF32(a);
- setVar(0, fp);
- }
-
- /**
- * Set the output of the histogram. 32 bit integer types are
- * supported.
- *
- * @param aout The output allocation
- */
- public void setOutput(Allocation aout) {
- mOut = aout;
- if (mOut.getType().getElement() != Element.U32(mRS) &&
- mOut.getType().getElement() != Element.U32_2(mRS) &&
- mOut.getType().getElement() != Element.U32_3(mRS) &&
- mOut.getType().getElement() != Element.U32_4(mRS) &&
- mOut.getType().getElement() != Element.I32(mRS) &&
- mOut.getType().getElement() != Element.I32_2(mRS) &&
- mOut.getType().getElement() != Element.I32_3(mRS) &&
- mOut.getType().getElement() != Element.I32_4(mRS)) {
-
- throw new RSIllegalArgumentException("Output type must be U32 or I32.");
- }
- if ((mOut.getType().getX() != 256) ||
- (mOut.getType().getY() != 0) ||
- mOut.getType().hasMipmaps() ||
- (mOut.getType().getYuv() != 0)) {
-
- throw new RSIllegalArgumentException("Output must be 1D, 256 elements.");
- }
- setVar(1, aout);
- }
-
-
- /**
- * Process an input buffer and place the histogram into the
- * output allocation. The dot product of the input channel and
- * the coefficients from 'setDotCoefficients' are used to
- * calculate the output values.
- *
- * 1D and 2D input allocations are supported.
- *
- * @param ain The input image
- */
- public void forEach_Dot(Allocation ain) {
- forEach_Dot(ain, null);
- }
-
- /**
- * Process an input buffer and place the histogram into the
- * output allocation. The dot product of the input channel and
- * the coefficients from 'setDotCoefficients' are used to
- * calculate the output values.
- *
- * 1D and 2D input allocations are supported.
- *
- * @param ain The input image
- * @param opt LaunchOptions for clipping
- */
- public void forEach_Dot(Allocation ain, Script.LaunchOptions opt) {
- if (mOut.getType().getElement().getVectorSize() != 1) {
- throw new RSIllegalArgumentException("Output vector size must be one.");
- }
- if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_2(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_3(mRS)) &&
- !ain.getType().getElement().isCompatible(Element.U8_4(mRS))) {
- throw new RSIllegalArgumentException("Input type must be U8, U8_1, U8_2 or U8_4.");
- }
-
- forEach(1, ain, null, null, opt);
- }
-
-
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID_Separate() {
- return createKernelID(0, 3, null, null);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(1, null);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicLUT.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicLUT.java
deleted file mode 100644
index 0b905ba..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicLUT.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic for applying a per-channel lookup table. Each
- * channel of the input has an independant lookup table. The
- * tables are 256 entries in size and can cover the full value
- * range of {@link Element#U8_4}.
- **/
-public class ScriptIntrinsicLUT extends ScriptIntrinsic {
- private final Matrix4f mMatrix = new Matrix4f();
- private Allocation mTables;
- private final byte mCache[] = new byte[1024];
- private boolean mDirty = true;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- protected ScriptIntrinsicLUT(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Supported elements types are {@link Element#U8_4}
- *
- * The defaults tables are identity.
- *
- * @param rs The RenderScript context
- * @param e Element type for intputs and outputs
- *
- * @return ScriptIntrinsicLUT
- */
- public static ScriptIntrinsicLUT create(RenderScript rs, Element e) {
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(3, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicLUT si = new ScriptIntrinsicLUT(id, rs);
- si.setIncSupp(mUseIncSupp);
- si.mTables = Allocation.createSized(rs, Element.U8(rs), 1024);
- for (int ct=0; ct < 256; ct++) {
- si.mCache[ct] = (byte)ct;
- si.mCache[ct + 256] = (byte)ct;
- si.mCache[ct + 512] = (byte)ct;
- si.mCache[ct + 768] = (byte)ct;
- }
- si.setVar(0, si.mTables);
- return si;
- }
-
-
- private void validate(int index, int value) {
- if (index < 0 || index > 255) {
- throw new RSIllegalArgumentException("Index out of range (0-255).");
- }
- if (value < 0 || value > 255) {
- throw new RSIllegalArgumentException("Value out of range (0-255).");
- }
- }
-
- /**
- * Set an entry in the red channel lookup table
- *
- * @param index Must be 0-255
- * @param value Must be 0-255
- */
- public void setRed(int index, int value) {
- validate(index, value);
- mCache[index] = (byte)value;
- mDirty = true;
- }
-
- /**
- * Set an entry in the green channel lookup table
- *
- * @param index Must be 0-255
- * @param value Must be 0-255
- */
- public void setGreen(int index, int value) {
- validate(index, value);
- mCache[index+256] = (byte)value;
- mDirty = true;
- }
-
- /**
- * Set an entry in the blue channel lookup table
- *
- * @param index Must be 0-255
- * @param value Must be 0-255
- */
- public void setBlue(int index, int value) {
- validate(index, value);
- mCache[index+512] = (byte)value;
- mDirty = true;
- }
-
- /**
- * Set an entry in the alpha channel lookup table
- *
- * @param index Must be 0-255
- * @param value Must be 0-255
- */
- public void setAlpha(int index, int value) {
- validate(index, value);
- mCache[index+768] = (byte)value;
- mDirty = true;
- }
-
-
- /**
- * Invoke the kernel and apply the lookup to each cell of ain
- * and copy to aout.
- *
- * @param ain Input allocation
- * @param aout Output allocation
- */
- public void forEach(Allocation ain, Allocation aout) {
- if (mDirty) {
- mDirty = false;
- mTables.copyFromUnchecked(mCache);
- }
- forEach(0, ain, aout, null);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 3, null, null);
- }
-}
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicResize.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicResize.java
deleted file mode 100644
index 61c169c..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicResize.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import android.util.Log;
-
-/**
- * Intrinsic for performing a resize of a 2D allocation.
- */
-public class ScriptIntrinsicResize extends ScriptIntrinsic {
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 21;
-
- protected ScriptIntrinsicResize(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Supported elements types are {@link Element#U8}, {@link
- * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4}
- * {@link Element#F32}, {@link Element#F32_2}, {@link
- * Element#F32_3}, {@link Element#F32_4}
- *
- * @param rs The RenderScript context
- *
- * @return ScriptIntrinsicResize
- */
- public static ScriptIntrinsicResize create(RenderScript rs) {
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(12, 0, mUseIncSupp);
-
- ScriptIntrinsicResize si = new ScriptIntrinsicResize(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
-
- }
-
- /**
- * Set the input of the resize.
- * Must match the element type supplied during create.
- *
- * @param ain The input allocation.
- */
- public void setInput(Allocation ain) {
- Element e = ain.getElement();
- if (!e.isCompatible(Element.U8(mRS)) &&
- !e.isCompatible(Element.U8_2(mRS)) &&
- !e.isCompatible(Element.U8_3(mRS)) &&
- !e.isCompatible(Element.U8_4(mRS)) &&
- !e.isCompatible(Element.F32(mRS)) &&
- !e.isCompatible(Element.F32_2(mRS)) &&
- !e.isCompatible(Element.F32_3(mRS)) &&
- !e.isCompatible(Element.F32_4(mRS))) {
- throw new RSIllegalArgumentException("Unsupported element type.");
- }
-
- mInput = ain;
- setVar(0, ain);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(0, null);
- }
-
-
- /**
- * Resize copy the input allocation to the output specified. The
- * Allocation is rescaled if necessary using bi-cubic
- * interpolation.
- *
- * @param aout Output allocation. Element type must match
- * current input. Must not be same as input.
- */
- public void forEach_bicubic(Allocation aout) {
- if (aout == mInput) {
- throw new RSIllegalArgumentException("Output cannot be same as Input.");
- }
- forEach_bicubic(aout, null);
- }
-
- /**
- * Resize copy the input allocation to the output specified. The
- * Allocation is rescaled if necessary using bi-cubic
- * interpolation.
- *
- * @param aout Output allocation. Element type must match
- * current input.
- * @param opt LaunchOptions for clipping
- */
- public void forEach_bicubic(Allocation aout, Script.LaunchOptions opt) {
- forEach(0, (Allocation) null, aout, null, opt);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID_bicubic() {
- return createKernelID(0, 2, null, null);
- }
-
-
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicYuvToRGB.java b/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicYuvToRGB.java
deleted file mode 100644
index 6c84020..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/ScriptIntrinsicYuvToRGB.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2012 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.support.v8.renderscript;
-
-
-/**
- * Intrinsic for converting an Android YUV buffer to RGB.
- *
- * The input allocation is supplied in NV21 format as a U8
- * element type. The output is RGBA, the alpha channel will be
- * set to 255.
- */
-public class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic {
- private Allocation mInput;
- // API level for the intrinsic
- private static final int INTRINSIC_API_LEVEL = 19;
-
- ScriptIntrinsicYuvToRGB(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /**
- * Create an intrinsic for converting YUV to RGB.
- *
- * Supported elements types are {@link Element#U8_4}
- *
- * @param rs The RenderScript context
- * @param e Element type for output
- *
- * @return ScriptIntrinsicYuvToRGB
- */
- public static ScriptIntrinsicYuvToRGB create(RenderScript rs, Element e) {
- // 6 comes from RS_SCRIPT_INTRINSIC_YUV_TO_RGB in rsDefines.h
- long id;
- boolean mUseIncSupp = rs.isUseNative() &&
- android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL;
-
- id = rs.nScriptIntrinsicCreate(6, e.getID(rs), mUseIncSupp);
-
- ScriptIntrinsicYuvToRGB si = new ScriptIntrinsicYuvToRGB(id, rs);
- si.setIncSupp(mUseIncSupp);
- return si;
- }
-
-
- /**
- * Set the input yuv allocation, must be {@link Element#U8}.
- *
- * @param ain The input allocation.
- */
- public void setInput(Allocation ain) {
- mInput = ain;
- setVar(0, ain);
- }
-
- /**
- * Convert the image to RGB.
- *
- * @param aout Output allocation. Must match creation element
- * type.
- */
- public void forEach(Allocation aout) {
- forEach(0, (Allocation) null, aout, null);
- }
-
- /**
- * Get a KernelID for this intrinsic kernel.
- *
- * @return Script.KernelID The KernelID object.
- */
- public Script.KernelID getKernelID() {
- return createKernelID(0, 2, null, null);
- }
-
- /**
- * Get a FieldID for the input field of this intrinsic.
- *
- * @return Script.FieldID The FieldID object.
- */
- public Script.FieldID getFieldID_Input() {
- return createFieldID(0, null);
- }
-}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Short2.java b/v8/renderscript/java/src/android/support/v8/renderscript/Short2.java
deleted file mode 100644
index 365b319..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Short2.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript Short2 type back to the Android system.
- *
- **/
-public class Short2 {
- public Short2() {
- }
-
- public Short2(short initX, short initY) {
- x = initX;
- y = initY;
- }
-
- public short x;
- public short y;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Short3.java b/v8/renderscript/java/src/android/support/v8/renderscript/Short3.java
deleted file mode 100644
index abf8196..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Short3.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript short3 type back to the Android system.
- *
- **/
-public class Short3 {
- public Short3() {
- }
-
- public Short3(short initX, short initY, short initZ) {
- x = initX;
- y = initY;
- z = initZ;
- }
-
- public short x;
- public short y;
- public short z;
-}
-
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Short4.java b/v8/renderscript/java/src/android/support/v8/renderscript/Short4.java
deleted file mode 100644
index d2108e4..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Short4.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-import java.lang.Math;
-import android.util.Log;
-
-
-/**
- * Class for exposing the native RenderScript short4 type back to the Android system.
- *
- **/
-public class Short4 {
- public Short4() {
- }
-
- public Short4(short initX, short initY, short initZ, short initW) {
- x = initX;
- y = initY;
- z = initZ;
- w = initW;
- }
-
- public short x;
- public short y;
- public short z;
- public short w;
-}
-
-
-
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Type.java b/v8/renderscript/java/src/android/support/v8/renderscript/Type.java
deleted file mode 100644
index 6aeb9ea..0000000
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Type.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * 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 android.support.v8.renderscript;
-
-
-import java.lang.reflect.Field;
-
-import android.graphics.ImageFormat;
-import android.util.Log;
-
-/**
- * <p>A Type describes the {@link android.support.v8.renderscript.Element} and
- * dimensions used for an {@link android.support.v8.renderscript.Allocation} or
- * a parallel operation. Types are created through
- * {@link android.support.v8.renderscript.Type.Builder}.</p>
- *
- * <p>A Type always includes an {@link android.support.v8.renderscript.Element}
- * and an X dimension. A Type may be multidimensional, up to three dimensions.
- * A nonzero value in the Y or Z dimensions indicates that the dimension is
- * present. Note that a Type with only a given X dimension and a Type with the
- * same X dimension but Y = 1 are not equivalent.</p>
- *
- * <p>A Type also supports inclusion of level of detail (LOD) or cube map
- * faces. LOD and cube map faces are booleans to indicate present or not
- * present. </p>
- *
- * <p>A Type also supports YUV format information to support an {@link
- * android.support.v8.renderscript.Allocation} in a YUV format. The YUV formats
- * supported are {@link android.graphics.ImageFormat#YV12} and {@link
- * android.graphics.ImageFormat#NV21}.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about creating an application that uses RenderScript,
- * read the
- * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a>
- * developer guide.</p>
- * </div>
- **/
-public class Type extends BaseObj {
- int mDimX;
- int mDimY;
- int mDimZ;
- boolean mDimMipmaps;
- boolean mDimFaces;
- int mDimYuv;
- int mElementCount;
- Element mElement;
-
- public enum CubemapFace {
- POSITIVE_X (0),
- NEGATIVE_X (1),
- POSITIVE_Y (2),
- NEGATIVE_Y (3),
- POSITIVE_Z (4),
- NEGATIVE_Z (5);
-
- int mID;
- CubemapFace(int id) {
- mID = id;
- }
- }
-
- /**
- * Return the element associated with this Type.
- *
- * @return Element
- */
- public Element getElement() {
- return mElement;
- }
-
- /**
- * Return the value of the X dimension.
- *
- * @return int
- */
- public int getX() {
- return mDimX;
- }
-
- /**
- * Return the value of the Y dimension or 0 for a 1D allocation.
- *
- * @return int
- */
- public int getY() {
- return mDimY;
- }
-
- /**
- * Return the value of the Z dimension or 0 for a 1D or 2D allocation.
- *
- * @return int
- */
- public int getZ() {
- return mDimZ;
- }
-
- /**
- * Get the YUV format
- *
- * @return int
- */
- public int getYuv() {
- return mDimYuv;
- }
-
- /**
- * Return if the Type has a mipmap chain.
- *
- * @return boolean
- */
- public boolean hasMipmaps() {
- return mDimMipmaps;
- }
-
- /**
- * Return if the Type is a cube map.
- *
- * @return boolean
- */
- public boolean hasFaces() {
- return mDimFaces;
- }
-
- /**
- * Return the total number of accessable cells in the Type.
- *
- * @return int
- */
- public int getCount() {
- return mElementCount;
- }
-
- void calcElementCount() {
- boolean hasLod = hasMipmaps();
- int x = getX();
- int y = getY();
- int z = getZ();
- int faces = 1;
- if (hasFaces()) {
- faces = 6;
- }
- if (x == 0) {
- x = 1;
- }
- if (y == 0) {
- y = 1;
- }
- if (z == 0) {
- z = 1;
- }
-
- int count = x * y * z * faces;
-
- while (hasLod && ((x > 1) || (y > 1) || (z > 1))) {
- if(x > 1) {
- x >>= 1;
- }
- if(y > 1) {
- y >>= 1;
- }
- if(z > 1) {
- z >>= 1;
- }
-
- count += x * y * z * faces;
- }
- mElementCount = count;
- }
-
-
- Type(long id, RenderScript rs) {
- super(id, rs);
- }
-
- /*
- * Get an identical dummy Type for Compat Context
- *
- */
- public long getDummyType(RenderScript mRS, long eid) {
- return mRS.nIncTypeCreate(eid, mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces, mDimYuv);
- }
-
- /**
- * Utility function for creating basic 1D types. The type is
- * created without mipmaps enabled.
- *
- * @param rs The RenderScript context
- * @param e The Element for the Type
- * @param dimX The X dimension, must be > 0
- *
- * @return Type
- */
- static public Type createX(RenderScript rs, Element e, int dimX) {
- if (dimX < 1) {
- throw new RSInvalidStateException("Dimension must be >= 1.");
- }
-
- long id = rs.nTypeCreate(e.getID(rs), dimX, 0, 0, false, false, 0);
- Type t = new Type(id, rs);
- t.mElement = e;
- t.mDimX = dimX;
- t.calcElementCount();
- return t;
- }
-
- /**
- * Utility function for creating basic 2D types. The type is
- * created without mipmaps or cubemaps.
- *
- * @param rs The RenderScript context
- * @param e The Element for the Type
- * @param dimX The X dimension, must be > 0
- * @param dimY The Y dimension, must be > 0
- *
- * @return Type
- */
- static public Type createXY(RenderScript rs, Element e, int dimX, int dimY) {
- if ((dimX < 1) || (dimY < 1)) {
- throw new RSInvalidStateException("Dimension must be >= 1.");
- }
-
- long id = rs.nTypeCreate(e.getID(rs), dimX, dimY, 0, false, false, 0);
- Type t = new Type(id, rs);
- t.mElement = e;
- t.mDimX = dimX;
- t.mDimY = dimY;
- t.calcElementCount();
- return t;
- }
-
- /**
- * Utility function for creating basic 3D types. The type is
- * created without mipmaps.
- *
- * @param rs The RenderScript context
- * @param e The Element for the Type
- * @param dimX The X dimension, must be > 0
- * @param dimY The Y dimension, must be > 0
- * @param dimZ The Z dimension, must be > 0
- *
- * @return Type
- */
- static public Type createXYZ(RenderScript rs, Element e, int dimX, int dimY, int dimZ) {
- if ((dimX < 1) || (dimY < 1) || (dimZ < 1)) {
- throw new RSInvalidStateException("Dimension must be >= 1.");
- }
-
- long id = rs.nTypeCreate(e.getID(rs), dimX, dimY, dimZ, false, false, 0);
- Type t = new Type(id, rs);
- t.mElement = e;
- t.mDimX = dimX;
- t.mDimY = dimY;
- t.mDimZ = dimZ;
- t.calcElementCount();
- return t;
- }
-
- /**
- * Builder class for Type.
- *
- */
- public static class Builder {
- RenderScript mRS;
- int mDimX = 1;
- int mDimY;
- int mDimZ;
- boolean mDimMipmaps;
- boolean mDimFaces;
- int mYuv;
-
- Element mElement;
-
- /**
- * Create a new builder object.
- *
- * @param rs
- * @param e The element for the type to be created.
- */
- public Builder(RenderScript rs, Element e) {
- e.checkValid();
- mRS = rs;
- mElement = e;
- }
-
- /**
- * Add a dimension to the Type.
- *
- *
- * @param value
- */
- public Builder setX(int value) {
- if(value < 1) {
- throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid.");
- }
- mDimX = value;
- return this;
- }
-
- public Builder setY(int value) {
- if(value < 1) {
- throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid.");
- }
- mDimY = value;
- return this;
- }
-
- public Builder setZ(int value) {
- if(value < 1) {
- throw new RSIllegalArgumentException("Values of less than 1 for Dimension Z are not valid.");
- }
- mDimZ = value;
- return this;
- }
-
- public Builder setMipmaps(boolean value) {
- mDimMipmaps = value;
- return this;
- }
-
- public Builder setFaces(boolean value) {
- mDimFaces = value;
- return this;
- }
-
- /**
- * Set the YUV layout for a Type.
- *
- * @param yuvFormat {@link android.graphics.ImageFormat#YV12} or {@link android.graphics.ImageFormat#NV21}
- */
- public Builder setYuvFormat(int yuvFormat) {
- switch (yuvFormat) {
- case android.graphics.ImageFormat.NV21:
- case android.graphics.ImageFormat.YV12:
- break;
-
- default:
- throw new RSIllegalArgumentException("Only NV21 and YV12 are supported..");
- }
-
- mYuv = yuvFormat;
- return this;
- }
-
-
- /**
- * Validate structure and create a new Type.
- *
- * @return Type
- */
- public Type create() {
- if (mDimZ > 0) {
- if ((mDimX < 1) || (mDimY < 1)) {
- throw new RSInvalidStateException("Both X and Y dimension required when Z is present.");
- }
- if (mDimFaces) {
- throw new RSInvalidStateException("Cube maps not supported with 3D types.");
- }
- }
- if (mDimY > 0) {
- if (mDimX < 1) {
- throw new RSInvalidStateException("X dimension required when Y is present.");
- }
- }
- if (mDimFaces) {
- if (mDimY < 1) {
- throw new RSInvalidStateException("Cube maps require 2D Types.");
- }
- }
-
- if (mYuv != 0) {
- if ((mDimZ != 0) || mDimFaces || mDimMipmaps) {
- throw new RSInvalidStateException("YUV only supports basic 2D.");
- }
- }
-
- Type t;
- long id = mRS.nTypeCreate(mElement.getID(mRS),
- mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces, mYuv);
- t = new Type(id, mRS);
-
- t.mElement = mElement;
- t.mDimX = mDimX;
- t.mDimY = mDimY;
- t.mDimZ = mDimZ;
- t.mDimMipmaps = mDimMipmaps;
- t.mDimFaces = mDimFaces;
- t.mDimYuv = mYuv;
-
- t.calcElementCount();
- return t;
- }
- }
-
-}
diff --git a/v8/renderscript/jni/Android.mk b/v8/renderscript/jni/Android.mk
deleted file mode 100644
index d6a800d..0000000
--- a/v8/renderscript/jni/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_CLANG := true
-LOCAL_SDK_VERSION := 14
-
-LOCAL_SRC_FILES:= \
- android_rscompat_usage_io.cpp \
- android_rscompat_usage_io_driver.cpp
-
-LOCAL_C_INCLUDES += \
- $(JNI_H_INCLUDE) \
- frameworks/rs \
- frameworks/rs/cpp \
- frameworks/rs/driver
-
-LOCAL_CFLAGS += -Wno-unused-parameter -Werror
-LOCAL_CFLAGS += -DRS_COMPATIBILITY_LIB -std=c++11
-
-LOCAL_MODULE:= libRSSupportIO
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_LDLIBS += -landroid
-LOCAL_LDFLAGS += -ldl -Wl,--exclude-libs,libc++_static.a
-LOCAL_NDK_STL_VARIANT := c++_static
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_CLANG := true
-LOCAL_SDK_VERSION := 9
-
-LOCAL_SRC_FILES:= \
- android_renderscript_RenderScript.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libjnigraphics
-
-LOCAL_STATIC_LIBRARIES := \
- libRSDispatch
-
-LOCAL_C_INCLUDES += \
- $(JNI_H_INCLUDE) \
- frameworks/rs \
- frameworks/rs/cpp
-
-LOCAL_CFLAGS += -Wno-unused-parameter -Werror -std=c++11
-
-LOCAL_MODULE:= librsjni
-LOCAL_MODULE_TAGS := optional
-LOCAL_REQUIRED_MODULES := libRSSupport
-
-LOCAL_LDFLAGS += -ldl -llog -Wl,--exclude-libs,libc++_static.a
-LOCAL_NDK_STL_VARIANT := c++_static
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/v8/renderscript/jni/android_renderscript_RenderScript.cpp b/v8/renderscript/jni/android_renderscript_RenderScript.cpp
deleted file mode 100644
index 5642835..0000000
--- a/v8/renderscript/jni/android_renderscript_RenderScript.cpp
+++ /dev/null
@@ -1,2431 +0,0 @@
-/*
- * Copyright (C) 2011-2012 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.
- */
-
-#define LOG_TAG "libRS_jni"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <math.h>
-#include <android/bitmap.h>
-#include <android/log.h>
-
-#include <rsEnv.h>
-#include "rsDispatch.h"
-#include <dlfcn.h>
-
-//#define LOG_API ALOG
-#define LOG_API(...)
-#define LOG_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "RenderScript JNI", __VA_ARGS__);
-#define RS_JNI_VERSION 2301
-
-#define NELEM(m) (sizeof(m) / sizeof((m)[0]))
-
-template <typename... T>
-void UNUSED(T... t) {}
-#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \
- jint len = 0; \
- void *ptr = nullptr; \
- void *srcPtr = nullptr; \
- size_t typeBytes = 0; \
- jint relFlag = 0; \
- if (readonly) { \
- /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \
- /* readonly = true, also indicates we are copying to the allocation . */ \
- relFlag = JNI_ABORT; \
- } \
- switch(dataType) { \
- case RS_TYPE_FLOAT_32: \
- len = _env->GetArrayLength((jfloatArray)data); \
- ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \
- typeBytes = 4; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \
- return; \
- case RS_TYPE_FLOAT_64: \
- len = _env->GetArrayLength((jdoubleArray)data); \
- ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \
- typeBytes = 8; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \
- return; \
- case RS_TYPE_SIGNED_8: \
- case RS_TYPE_UNSIGNED_8: \
- len = _env->GetArrayLength((jbyteArray)data); \
- ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \
- typeBytes = 1; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \
- return; \
- case RS_TYPE_SIGNED_16: \
- case RS_TYPE_UNSIGNED_16: \
- len = _env->GetArrayLength((jshortArray)data); \
- ptr = _env->GetShortArrayElements((jshortArray)data, flag); \
- typeBytes = 2; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \
- return; \
- case RS_TYPE_SIGNED_32: \
- case RS_TYPE_UNSIGNED_32: \
- len = _env->GetArrayLength((jintArray)data); \
- ptr = _env->GetIntArrayElements((jintArray)data, flag); \
- typeBytes = 4; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \
- return; \
- case RS_TYPE_SIGNED_64: \
- case RS_TYPE_UNSIGNED_64: \
- len = _env->GetArrayLength((jlongArray)data); \
- ptr = _env->GetLongArrayElements((jlongArray)data, flag); \
- typeBytes = 8; \
- if (usePadding) { \
- srcPtr = ptr; \
- len = len / 3 * 4; \
- if (count == 0) { \
- count = len / 4; \
- } \
- ptr = malloc (len * typeBytes); \
- if (readonly) { \
- copyWithPadding(ptr, srcPtr, mSize, count); \
- fnc(__VA_ARGS__); \
- } else { \
- fnc(__VA_ARGS__); \
- copyWithUnPadding(srcPtr, ptr, mSize, count); \
- } \
- free(ptr); \
- ptr = srcPtr; \
- } else { \
- fnc(__VA_ARGS__); \
- } \
- _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \
- return; \
- default: \
- break; \
- } \
- UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \
-}
-
-
-class AutoJavaStringToUTF8 {
-public:
- AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
- fCStr = env->GetStringUTFChars(str, NULL);
- fLength = env->GetStringUTFLength(str);
- }
- ~AutoJavaStringToUTF8() {
- fEnv->ReleaseStringUTFChars(fJStr, fCStr);
- }
- const char* c_str() const { return fCStr; }
- jsize length() const { return fLength; }
-
-private:
- JNIEnv* fEnv;
- jstring fJStr;
- const char* fCStr;
- jsize fLength;
-};
-
-class AutoJavaStringArrayToUTF8 {
-public:
- AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
- : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
- mCStrings = NULL;
- mSizeArray = NULL;
- if (stringsLength > 0) {
- mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
- mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
- for (jsize ct = 0; ct < stringsLength; ct ++) {
- jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
- mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
- mSizeArray[ct] = mEnv->GetStringUTFLength(s);
- }
- }
- }
- ~AutoJavaStringArrayToUTF8() {
- for (jsize ct=0; ct < mStringsLength; ct++) {
- jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
- mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
- }
- free(mCStrings);
- free(mSizeArray);
- }
- const char **c_str() const { return mCStrings; }
- size_t *c_str_len() const { return mSizeArray; }
- jsize length() const { return mStringsLength; }
-
-private:
- JNIEnv *mEnv;
- jobjectArray mStrings;
- const char **mCStrings;
- size_t *mSizeArray;
- jsize mStringsLength;
-};
-
-
-// ---------------------------------------------------------------------------
-static dispatchTable dispatchTab;
-// Incremental Support lib
-static dispatchTable dispatchTabInc;
-
-static jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint targetApi, jstring libPath) {
- void* handle = NULL;
- if (useNative) {
- handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL);
- } else {
- // For API 9+, dlopen the full path of libRSSupport.
- if (libPath != NULL) {
- const char * libPathJni = _env->GetStringUTFChars(libPath, JNI_FALSE);
- handle = dlopen(libPathJni, RTLD_LAZY | RTLD_LOCAL);
- _env->ReleaseStringUTFChars(libPath, libPathJni);
- } else {
- handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL);
- }
- }
- if (handle == NULL) {
- LOG_ERR("couldn't dlopen %s; librsjni version: %d", dlerror(), RS_JNI_VERSION);
- return false;
- }
-
- if (loadSymbols(handle, dispatchTab, targetApi) == false) {
- LOG_ERR("Dispatch table init failed! librsjni version: %d", RS_JNI_VERSION);
- dlclose(handle);
- return false;
- }
- LOG_API("Successfully loaded runtime");
- return true;
-}
-
-static ioSuppDT ioDispatch;
-static jboolean nLoadIOSO(JNIEnv *_env, jobject _this) {
- void* handleIO = NULL;
- handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL);
- if (handleIO == NULL) {
- LOG_ERR("Couldn't load libRSSupportIO.so, librsjni version: %d", RS_JNI_VERSION);
- return false;
- }
- if (loadIOSuppSyms(handleIO, ioDispatch) == false) {
- LOG_ERR("libRSSupportIO init failed! librsjni version: %d", RS_JNI_VERSION);
- return false;
- }
- return true;
-}
-
-// ---------------------------------------------------------------------------
-
-static void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) {
- int sizeBytesPad = mSize * 4;
- int sizeBytes = mSize * 3;
- uint8_t *dst = static_cast<uint8_t *>(ptr);
- uint8_t *src = static_cast<uint8_t *>(srcPtr);
- for (int i = 0; i < count; i++) {
- memcpy(dst, src, sizeBytes);
- dst += sizeBytesPad;
- src += sizeBytes;
- }
-}
-
-static void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) {
- int sizeBytesPad = mSize * 4;
- int sizeBytes = mSize * 3;
- uint8_t *dst = static_cast<uint8_t *>(ptr);
- uint8_t *src = static_cast<uint8_t *>(srcPtr);
- for (int i = 0; i < count; i++) {
- memcpy(dst, src, sizeBytes);
- dst += sizeBytes;
- src += sizeBytesPad;
- }
-}
-
-
-// ---------------------------------------------------------------------------
-
-static void
-nContextFinish(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextFinish, con(%p)", (RsContext)con);
- dispatchTab.ContextFinish((RsContext)con);
-}
-
-static jlong
-nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
- jlong returnValue, jlongArray fieldIDArray,
- jlongArray valueArray, jintArray sizeArray,
- jlongArray depClosureArray, jlongArray depFieldIDArray) {
- jlong ret = 0;
-
- jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
- jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
- jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
- jsize values_length = _env->GetArrayLength(valueArray);
- jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
- jsize sizes_length = _env->GetArrayLength(sizeArray);
- jlong* jDepClosures =
- _env->GetLongArrayElements(depClosureArray, nullptr);
- jsize depClosures_length = _env->GetArrayLength(depClosureArray);
- jlong* jDepFieldIDs =
- _env->GetLongArrayElements(depFieldIDArray, nullptr);
- jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
-
- size_t numValues, numDependencies;
- RsScriptFieldID* fieldIDs;
- RsClosure* depClosures;
- RsScriptFieldID* depFieldIDs;
-
- if (fieldIDs_length != values_length || values_length != sizes_length) {
- LOG_ERR("Unmatched field IDs, values, and sizes in closure creation.");
- goto exit;
- }
-
- numValues = (size_t)fieldIDs_length;
-
- if (depClosures_length != depFieldIDs_length) {
- LOG_ERR("Unmatched closures and field IDs for dependencies in closure creation.");
- goto exit;
- }
-
- numDependencies = (size_t)depClosures_length;
-
- if (numDependencies > numValues) {
- LOG_ERR("Unexpected number of dependencies in closure creation");
- goto exit;
- }
-
- if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
- LOG_ERR("Too many arguments or globals in closure creation");
- goto exit;
- }
-
- if (numValues > 0) {
- fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
- if (fieldIDs == nullptr) {
- goto exit;
- }
- } else {
- // numValues == 0
- // alloca(0) implementation is platform dependent
- fieldIDs = nullptr;
- }
-
- for (size_t i = 0; i < numValues; i++) {
- fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
- }
-
- if (numDependencies > 0) {
- depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies);
- if (depClosures == nullptr) {
- goto exit;
- }
-
- for (size_t i = 0; i < numDependencies; i++) {
- depClosures[i] = (RsClosure)jDepClosures[i];
- }
-
- depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies);
- if (depFieldIDs == nullptr) {
- goto exit;
- }
-
- for (size_t i = 0; i < numDependencies; i++) {
- depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
- }
- } else {
- // numDependencies == 0
- // alloca(0) implementation is platform dependent
- depClosures = nullptr;
- depFieldIDs = nullptr;
- }
-
- ret = (jlong)(uintptr_t)dispatchTab.ClosureCreate(
- (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
- fieldIDs, numValues, jValues, numValues,
- (int*)jSizes, numValues,
- depClosures, numDependencies,
- depFieldIDs, numDependencies);
-
-exit:
-
- _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT);
- _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT);
- _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT);
- _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT);
- _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT);
-
- return ret;
-}
-
-static jlong
-nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
- jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
- jintArray sizeArray) {
- jlong ret = 0;
-
- jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
- jsize jParamLength = _env->GetArrayLength(paramArray);
- jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
- jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
- jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
- jsize values_length = _env->GetArrayLength(valueArray);
- jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
- jsize sizes_length = _env->GetArrayLength(sizeArray);
-
- size_t numValues;
- RsScriptFieldID* fieldIDs;
-
- if (fieldIDs_length != values_length || values_length != sizes_length) {
- LOG_ERR("Unmatched field IDs, values, and sizes in closure creation.");
- goto exit;
- }
-
- numValues = (size_t) fieldIDs_length;
-
- if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
- LOG_ERR("Too many arguments or globals in closure creation");
- goto exit;
- }
-
- fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
- if (fieldIDs == nullptr) {
- goto exit;
- }
-
- for (size_t i = 0; i < numValues; i++) {
- fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
- }
-
- ret = (jlong)(uintptr_t)dispatchTab.InvokeClosureCreate(
- (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
- fieldIDs, numValues, jValues, numValues,
- (int*)jSizes, numValues);
-
-exit:
-
- _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT);
- _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT);
- _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT);
- _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT);
-
- return ret;
-}
-
-static void
-nClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
- jint index, jlong value, jint size) {
- // Size is signed with -1 indicating the values is an Allocation
- dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index,
- (uintptr_t)value, size);
-}
-
-static void
-nClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
- jlong fieldID, jlong value, jint size) {
- // Size is signed with -1 indicating the values is an Allocation
- dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID,
- (RsScriptFieldID)fieldID, (int64_t)value, size);
-}
-
-static long
-nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name,
- jstring cacheDir, jlongArray closureArray) {
- jlong ret = 0;
-
- AutoJavaStringToUTF8 nameUTF(_env, name);
- AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
-
- jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
- jsize numClosures = _env->GetArrayLength(closureArray);
-
- RsClosure* closures;
-
- if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) {
- LOG_ERR("Too many closures in script group");
- goto exit;
- }
-
- closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
- if (closures == nullptr) {
- goto exit;
- }
-
- for (int i = 0; i < numClosures; i++) {
- closures[i] = (RsClosure)jClosures[i];
- }
-
- ret = (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create(
- (RsContext)con, nameUTF.c_str(), nameUTF.length(),
- cacheDirUTF.c_str(), cacheDirUTF.length(),
- closures, numClosures);
-
-exit:
-
- _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT);
-
- return ret;
-}
-
-static void
-nScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) {
- dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID);
-}
-
-static void
-nObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
-{
- LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
- dispatchTab.ObjDestroy((RsContext)con, (void *)obj);
-}
-
-
-static void
-nScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA,
- jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
- jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY,
- jint KL, jint KU, jboolean mUseInc) {
- RsBlasCall call;
- memset(&call, 0, sizeof(call));
- call.func = (RsBlasFunction)func;
- call.transA = (RsBlasTranspose)TransA;
- call.transB = (RsBlasTranspose)TransB;
- call.side = (RsBlasSide)Side;
- call.uplo = (RsBlasUplo)Uplo;
- call.diag = (RsBlasDiag)Diag;
- call.M = M;
- call.N = N;
- call.K = K;
- call.alpha.f = alpha;
- call.beta.f = beta;
- call.incX = incX;
- call.incY = incY;
- call.KL = KL;
- call.KU = KU;
-
- RsAllocation in_allocs[3];
- in_allocs[0] = (RsAllocation)A;
- in_allocs[1] = (RsAllocation)B;
- in_allocs[2] = (RsAllocation)C;
-
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- } else {
- dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- }
-}
-
-static void
-nScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA,
- jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
- jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY,
- jint KL, jint KU, jboolean mUseInc) {
- RsBlasCall call;
- memset(&call, 0, sizeof(call));
- call.func = (RsBlasFunction)func;
- call.transA = (RsBlasTranspose)TransA;
- call.transB = (RsBlasTranspose)TransB;
- call.side = (RsBlasSide)Side;
- call.uplo = (RsBlasUplo)Uplo;
- call.diag = (RsBlasDiag)Diag;
- call.M = M;
- call.N = N;
- call.K = K;
- call.alpha.d = alpha;
- call.beta.d = beta;
- call.incX = incX;
- call.incY = incY;
- call.KL = KL;
- call.KU = KU;
-
- RsAllocation in_allocs[3];
- in_allocs[0] = (RsAllocation)A;
- in_allocs[1] = (RsAllocation)B;
- in_allocs[2] = (RsAllocation)C;
-
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- } else {
- dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- }
-}
-
-static void
-nScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA,
- jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
- jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX,
- jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) {
- RsBlasCall call;
- memset(&call, 0, sizeof(call));
- call.func = (RsBlasFunction)func;
- call.transA = (RsBlasTranspose)TransA;
- call.transB = (RsBlasTranspose)TransB;
- call.side = (RsBlasSide)Side;
- call.uplo = (RsBlasUplo)Uplo;
- call.diag = (RsBlasDiag)Diag;
- call.M = M;
- call.N = N;
- call.K = K;
- call.alpha.c.r = alphaX;
- call.alpha.c.i = alphaY;
- call.beta.c.r = betaX;
- call.beta.c.i = betaY;
- call.incX = incX;
- call.incY = incY;
- call.KL = KL;
- call.KU = KU;
-
- RsAllocation in_allocs[3];
- in_allocs[0] = (RsAllocation)A;
- in_allocs[1] = (RsAllocation)B;
- in_allocs[2] = (RsAllocation)C;
-
-
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- } else {
- dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- }
-}
-
-static void
-nScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA,
- jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
- jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX,
- jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) {
- RsBlasCall call;
- memset(&call, 0, sizeof(call));
- call.func = (RsBlasFunction)func;
- call.transA = (RsBlasTranspose)TransA;
- call.transB = (RsBlasTranspose)TransB;
- call.side = (RsBlasSide)Side;
- call.uplo = (RsBlasUplo)Uplo;
- call.diag = (RsBlasDiag)Diag;
- call.M = M;
- call.N = N;
- call.K = K;
- call.alpha.z.r = alphaX;
- call.alpha.z.i = alphaY;
- call.beta.z.r = betaX;
- call.beta.z.i = betaY;
- call.incX = incX;
- call.incY = incY;
- call.KL = KL;
- call.KU = KU;
-
- RsAllocation in_allocs[3];
- in_allocs[0] = (RsAllocation)A;
- in_allocs[1] = (RsAllocation)B;
- in_allocs[2] = (RsAllocation)C;
-
-
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- } else {
- dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- }
-}
-
-
-static void
-nScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint M, jint N, jint K,
- jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset,
- jint c_mult_int, jboolean mUseInc) {
- RsBlasCall call;
- memset(&call, 0, sizeof(call));
- call.func = RsBlas_bnnm;
- call.M = M;
- call.N = N;
- call.K = K;
- call.a_offset = a_offset & 0xFF;
- call.b_offset = b_offset & 0xFF;
- call.c_offset = c_offset;
- call.c_mult_int = c_mult_int;
-
- RsAllocation in_allocs[3];
- in_allocs[0] = (RsAllocation)A;
- in_allocs[1] = (RsAllocation)B;
- in_allocs[2] = (RsAllocation)C;
-
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- } else {
- dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0,
- in_allocs, NELEM(in_allocs), nullptr,
- &call, sizeof(call), nullptr, 0);
- }
-}
-// ---------------------------------------------------------------------------
-static jlong
-nDeviceCreate(JNIEnv *_env, jobject _this)
-{
- LOG_API("nDeviceCreate");
- return (jlong)(uintptr_t)dispatchTab.DeviceCreate();
-}
-
-static void
-nDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
-{
- LOG_API("nDeviceDestroy");
- return dispatchTab.DeviceDestroy((RsDevice)dev);
-}
-
-static void
-nDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
-{
- LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
- return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
-}
-
-static jlong
-nContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
- jint ct, jstring nativeLibDirJava)
-{
- LOG_API("nContextCreate");
- // Access the NativeLibDir in the Java Context.
- const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE);
- size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava);
-
- jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver,
- sdkVer,
- (RsContextType)ct, 0);
- if (dispatchTab.SetNativeLibDir) {
- dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length);
- }
-
- _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir);
- return id;
-}
-
-
-static void
-nContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
-{
- LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
- dispatchTab.ContextSetPriority((RsContext)con, p);
-}
-
-
-
-static void
-nContextDestroy(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextDestroy, con(%p)", (RsContext)con);
- dispatchTab.ContextDestroy((RsContext)con);
-}
-
-static void
-nContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
-{
- LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
- dispatchTab.ContextDump((RsContext)con, bits);
-}
-
-
-static jstring
-nContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
- char buf[1024];
-
- size_t receiveLen;
- uint32_t subID;
- int id = dispatchTab.ContextGetMessage((RsContext)con,
- buf, sizeof(buf),
- &receiveLen, sizeof(receiveLen),
- &subID, sizeof(subID));
- if (!id && receiveLen) {
- // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
- // "message receive buffer too small. %zu", receiveLen);
- }
- return _env->NewStringUTF(buf);
-}
-
-static jint
-nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
-{
- jint len = _env->GetArrayLength(data);
- LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
- jint *ptr = _env->GetIntArrayElements(data, NULL);
- size_t receiveLen;
- uint32_t subID;
- int id = dispatchTab.ContextGetMessage((RsContext)con,
- ptr, len * 4,
- &receiveLen, sizeof(receiveLen),
- &subID, sizeof(subID));
- if (!id && receiveLen) {
- // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
- // "message receive buffer too small. %zu", receiveLen);
- }
- _env->ReleaseIntArrayElements(data, ptr, 0);
- return (jint)id;
-}
-
-static jint
-nContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
-{
- LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
- jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
- size_t receiveLen;
- uint32_t subID;
- int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
- &subID, sizeof(subID));
- auxDataPtr[0] = (jint)subID;
- auxDataPtr[1] = (jint)receiveLen;
- _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
- return (jint)id;
-}
-
-static void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
- dispatchTab.ContextInitToClient((RsContext)con);
-}
-
-static void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
- dispatchTab.ContextDeinitToClient((RsContext)con);
-}
-
-static void
-nContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
-{
- jint *ptr = NULL;
- jint len = 0;
- if (data) {
- len = _env->GetArrayLength(data);
- ptr = _env->GetIntArrayElements(data, NULL);
- }
- LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
- dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
- if (data) {
- _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
- }
-}
-
-
-
-static jlong
-nElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind,
- jboolean norm, jint size)
-{
- LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con,
- type, kind, norm, size);
- return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con,
- (RsDataType)type,
- (RsDataKind)kind,
- norm, size);
-}
-
-static jlong
-nElementCreate2(JNIEnv *_env, jobject _this, jlong con,
- jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
-{
- int fieldCount = _env->GetArrayLength(_ids);
- LOG_API("nElementCreate2, con(%p)", (RsContext)con);
-
- jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
- jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
-
- RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
- uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
-
- for(int i = 0; i < fieldCount; i ++) {
- ids[i] = (RsElement)jIds[i];
- arraySizes[i] = (uint32_t)jArraySizes[i];
- }
-
- AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
-
- const char **nameArray = names.c_str();
- size_t *sizeArray = names.c_str_len();
-
- jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids,
- fieldCount, nameArray,
- fieldCount * sizeof(size_t), sizeArray,
- (const uint32_t *)arraySizes, fieldCount);
-
- free(ids);
- free(arraySizes);
- _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
- _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
- return id;
-}
-
-
-
-
-static void
-nElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
- jlongArray _IDs,
- jobjectArray _names,
- jintArray _arraySizes)
-{
- uint32_t dataSize = _env->GetArrayLength(_IDs);
- LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
-
- uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t));
- const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
- uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
-
- dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
- (uint32_t)dataSize);
-
- for(uint32_t i = 0; i < dataSize; i++) {
- const jlong id = (jlong)(uintptr_t)ids[i];
- const jint arraySize = (jint)arraySizes[i];
- _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
- _env->SetLongArrayRegion(_IDs, i, 1, &id);
- _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
- }
-
- free(ids);
- free(names);
- free(arraySizes);
-}
-
-// -----------------------------------
-
-static jlong
-nTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
- jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
-{
- LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
- (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
-
- return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy,
- dimz, mips, faces, yuv);
-}
-
-// -----------------------------------
-
-static jlong
-nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
- jlong pointer)
-{
- LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
- (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
- return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type,
- (RsAllocationMipmapControl)mips,
- (uint32_t)usage, (uintptr_t)pointer);
-}
-
-static void
-nAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
-{
- LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
- dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
-}
-
-static void
-nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
-{
- ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab);
-}
-
-static void
-nAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
-{
- dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc);
-}
-
-static void
-nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
-{
- LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
- dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
-}
-
-static size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) {
- AndroidBitmapInfo info;
- memset(&info, 0, sizeof(info));
- AndroidBitmap_getInfo(env, jbitmap, &info);
- size_t s = info.width * info.height;
- switch (info.format) {
- case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break;
- case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break;
- case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break;
- }
- return s;
-}
-
-static jlong
-nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
- jobject jbitmap, jint usage)
-{
- jlong id = 0;
- void *pixels = NULL;
- AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
-
- if (pixels != NULL) {
- id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con,
- (RsType)type,
- (RsAllocationMipmapControl)mip,
- pixels,
- GetBitmapSize(_env, jbitmap),
- usage);
- AndroidBitmap_unlockPixels(_env, jbitmap);
- }
- return id;
-}
-
-static jlong
-nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
- jint mip, jobject jbitmap, jint usage)
-{
- jlong id = 0;
- void *pixels = NULL;
- AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
-
- if (pixels != NULL) {
- id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con,
- (RsType)type,
- (RsAllocationMipmapControl)mip,
- (uint32_t)usage,
- (uintptr_t)pixels);
- AndroidBitmap_unlockPixels(_env, jbitmap);
- }
- return id;
-}
-
-static jlong
-nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type,
- jint mip, jobject jbitmap, jint usage)
-{
- void *pixels = NULL;
- AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
-
- jlong id = 0;
- if (pixels != NULL) {
- id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con,
- (RsType)type,
- (RsAllocationMipmapControl)mip,
- pixels,
- GetBitmapSize(_env, jbitmap),
- usage);
- AndroidBitmap_unlockPixels(_env, jbitmap);
- }
- return id;
-}
-
-static void
-nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
-{
- AndroidBitmapInfo info;
- memset(&info, 0, sizeof(info));
- AndroidBitmap_getInfo(_env, jbitmap, &info);
-
- void *pixels = NULL;
- AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
-
- if (pixels != NULL) {
- dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0,
- RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width,
- info.height, pixels, GetBitmapSize(_env, jbitmap), 0);
- AndroidBitmap_unlockPixels(_env, jbitmap);
- }
-}
-
-static void
-nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
-{
- AndroidBitmapInfo info;
- memset(&info, 0, sizeof(info));
- AndroidBitmap_getInfo(_env, jbitmap, &info);
-
- void *pixels = NULL;
- AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
-
- if (pixels != NULL) {
- dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels,
- GetBitmapSize(_env, jbitmap));
- AndroidBitmap_unlockPixels(_env, jbitmap);
- }
- //bitmap.notifyPixelsChanged();
-}
-
-// Copies from the Java object data into the Allocation pointed to by _alloc.
-static void
-nAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
- jint count, jobject data, jint sizeBytes, jint dataType, jint mSize,
- jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
- "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
- dataType);
- PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true,
- (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
-}
-
-
-static void
-nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff,
- jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
-{
- LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), "
- "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx,
- _env->GetArrayLength(data),
- sizeBytes);
- jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
- dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff,
- lod, ptr, sizeBytes, compIdx);
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
-}
-
-/*
-static void
-nAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
- jint xoff, jint yoff, jint zoff,
- jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
-{
- jint len = _env->GetArrayLength(data);
- LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), "
- "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len,
- sizeBytes);
- jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
- dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc,
- xoff, yoff, zoff,
- lod, ptr, sizeBytes, compIdx);
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
-}
-*/
-
-// Copies from the Java object data into the Allocation pointed to by _alloc.
-static void
-nAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
- jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize,
- jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
- LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
- "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
- int count = w * h;
- PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true,
- (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
-}
-
-static void
-nAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
- jlong dstAlloc, jint dstXoff, jint dstYoff,
- jint dstMip, jint dstFace,
- jint width, jint height,
- jlong srcAlloc, jint srcXoff, jint srcYoff,
- jint srcMip, jint srcFace)
-{
- LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
- " dstMip(%i), dstFace(%i), width(%i), height(%i),"
- " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
- (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
- width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
-
- dispatchTab.AllocationCopy2DRange((RsContext)con,
- (RsAllocation)dstAlloc,
- dstXoff, dstYoff,
- dstMip, dstFace,
- width, height,
- (RsAllocation)srcAlloc,
- srcXoff, srcYoff,
- srcMip, srcFace);
-}
-
-// Copies from the Java object data into the Allocation pointed to by _alloc.
-static void
-nAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
- jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType,
- jint mSize, jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
- " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
- lod, w, h, d, sizeBytes);
- int count = w * h * d;
- PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true,
- (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
-}
-
-static void
-nAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
- jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
- jint dstMip,
- jint width, jint height, jint depth,
- jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
- jint srcMip)
-{
- LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
- " dstMip(%i), width(%i), height(%i),"
- " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
- (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
- width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
-
- dispatchTab.AllocationCopy3DRange((RsContext)con,
- (RsAllocation)dstAlloc,
- dstXoff, dstYoff, dstZoff, dstMip,
- width, height, depth,
- (RsAllocation)srcAlloc,
- srcXoff, srcYoff, srcZoff, srcMip);
-}
-
-// Copies from the Allocation pointed to by _alloc into the Java object data.
-static void
-nAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType,
- jint mSize, jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
- int count = 0;
- PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false,
- (RsContext)con, alloc, ptr, len * typeBytes);
-}
-
-// Copies from the Allocation pointed to by _alloc into the Java object data.
-static void
-nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
- jint count, jobject data, jint sizeBytes, jint dataType,
- jint mSize, jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
- "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
- PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false,
- (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
-}
-
-// Copies from the Element in the Allocation pointed to by _alloc into the Java array data.
-/*
-static void
-nAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc,
- jint xoff, jint yoff, jint zoff,
- jint lod, jint compIdx, jobject data, jint sizeBytes)
-{
- jint len = _env->GetArrayLength(data);
- LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), "
- "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len,
- sizeBytes);
- jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
- dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc,
- xoff, yoff, zoff,
- lod, ptr, sizeBytes, compIdx);
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
-}
-*/
-
-// Copies from the Allocation pointed to by _alloc into the Java object data.
-static void
-nAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
- jint w, jint h, jobject data, jint sizeBytes, jint dataType,
- jint mSize, jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
- LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
- "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
- int count = w * h;
- PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false,
- (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
-}
-
-// Copies from the Allocation pointed to by _alloc into the Java object data.
-/*
-static void
-nAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
- jint w, jint h, jint d, jobject data, int sizeBytes, int dataType,
- jint mSize, jboolean usePadding)
-{
- RsAllocation *alloc = (RsAllocation *)_alloc;
- LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
- " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
- lod, w, h, d, sizeBytes);
- int count = w * h * d;
- PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false,
- (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
-}
-*/
-
-static jlong
-nAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
-{
- LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
- return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a);
-}
-
-static void
-nAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
-{
- LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
- (RsAllocation)alloc, dimX);
- dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
-}
-
-// -----------------------------------
-
-static void
-nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc)
-{
- LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)",
- (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
- if (mUseInc) {
- dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
- } else {
- dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
- }
-}
-
-static void
-nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
- (void *)script, slot, val);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
- } else {
- dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
- }
-}
-
-static void
-nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
- (void *)script, slot, val);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
- } else {
- dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
- }
-}
-
-static void
-nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con,
- (void *)script, slot, val);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
- } else {
- dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
- }
-}
-
-static void
-nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con,
- (void *)script, slot, val);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
- } else {
- dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
- }
-}
-
-static void
-nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con,
- (void *)script, slot, val);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
- } else {
- dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
- }
-}
-
-static void
-nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- jint len = _env->GetArrayLength(data);
- jbyte *ptr = _env->GetByteArrayElements(data, NULL);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
- } else {
- dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
- }
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
-}
-
-static void
-nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
- jlong elem, jintArray dims, jboolean mUseInc)
-{
- LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- jint len = _env->GetArrayLength(data);
- jbyte *ptr = _env->GetByteArrayElements(data, NULL);
- jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
- jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
- if (mUseInc) {
- dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
- (const uint32_t *)dimsPtr, dimsLen);
- } else {
- dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
- (const uint32_t *)dimsPtr, dimsLen);
- }
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
- _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
-}
-
-
-static void
-nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc)
-{
- LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con,
- (void *)script, (const char *)timeZone);
-
- jint length = _env->GetArrayLength(timeZone);
- jbyte* timeZone_ptr;
- timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
- if (mUseInc) {
- dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
- } else {
- dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
- }
-
- if (timeZone_ptr) {
- _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
- }
-}
-
-static void
-nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc)
-{
- LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
- if (mUseInc) {
- dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot);
- } else {
- dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot);
- }
-}
-
-static void
-nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc)
-{
- LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- jint len = _env->GetArrayLength(data);
- jbyte *ptr = _env->GetByteArrayElements(data, NULL);
- if (mUseInc) {
- dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
- } else {
- dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
- }
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
-}
-
-static void
-nScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon,
- jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc)
-{
- LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- NULL, 0, NULL, 0);
- } else {
- dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- NULL, 0, NULL, 0);
- }
-}
-
-static void
-nScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon,
- jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc)
-{
- LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- jint len = _env->GetArrayLength(params);
- jbyte *ptr = _env->GetByteArrayElements(params, NULL);
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- ptr, len, NULL, 0);
- } else {
- dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- ptr, len, NULL, 0);
- }
- _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
-}
-
-static void
-nScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon,
- jlong script, jint slot, jlong ain, jlong aout,
- jint xstart, jint xend,
- jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc)
-{
- LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- RsScriptCall sc;
- sc.xStart = xstart;
- sc.xEnd = xend;
- sc.yStart = ystart;
- sc.yEnd = yend;
- sc.zStart = zstart;
- sc.zEnd = zend;
- sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
- sc.arrayStart = 0;
- sc.arrayEnd = 0;
- sc.array2Start = 0;
- sc.array2End = 0;
- sc.array3Start = 0;
- sc.array3End = 0;
- sc.array4Start = 0;
- sc.array4End = 0;
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- NULL, 0, &sc, sizeof(sc));
- } else {
- dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- NULL, 0, &sc, sizeof(sc));
- }
-}
-
-static void
-nScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon,
- jlong script, jint slot, jlong ain, jlong aout,
- jbyteArray params, jint xstart, jint xend,
- jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc)
-{
- LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
- jint len = _env->GetArrayLength(params);
- jbyte *ptr = _env->GetByteArrayElements(params, NULL);
- RsScriptCall sc;
- sc.xStart = xstart;
- sc.xEnd = xend;
- sc.yStart = ystart;
- sc.yEnd = yend;
- sc.zStart = zstart;
- sc.zEnd = zend;
- sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
- sc.arrayStart = 0;
- sc.arrayEnd = 0;
- sc.array2Start = 0;
- sc.array2End = 0;
- sc.array3Start = 0;
- sc.array3End = 0;
- sc.array4Start = 0;
- sc.array4End = 0;
- if (mUseInc) {
- dispatchTab.ContextFinish((RsContext)con);
- dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- ptr, len, &sc, sizeof(sc));
- } else {
- dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
- (RsAllocation)ain, (RsAllocation)aout,
- ptr, len, &sc, sizeof(sc));
- }
- _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
-}
-
-static void
-nScriptForEachMulti(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
- jlongArray ains, jlong aout, jbyteArray params,
- jintArray limits)
-{
- LOG_API("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout);
-
- jint in_len = 0;
- jlong *in_ptr = nullptr;
-
- RsAllocation *in_allocs = nullptr;
-
- if (ains != nullptr) {
- in_len = _env->GetArrayLength(ains);
- if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) {
- LOG_ERR("Too many arguments in kernel launch.");
- // TODO (b/20758983): Report back to Java and throw an exception
- return;
- }
-
- // TODO (b/20760800): Check in_ptr is not null
- in_ptr = _env->GetLongArrayElements(ains, nullptr);
- if (sizeof(RsAllocation) == sizeof(jlong)) {
- in_allocs = (RsAllocation*)in_ptr;
-
- } else {
- // Convert from 64-bit jlong types to the native pointer type.
-
- in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
- if (in_allocs == nullptr) {
- LOG_ERR("Failed launching kernel for lack of memory.");
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
- return;
- }
-
- for (int index = in_len; --index >= 0;) {
- in_allocs[index] = (RsAllocation)in_ptr[index];
- }
- }
- }
-
- jint param_len = 0;
- jbyte *param_ptr = nullptr;
-
- if (params != nullptr) {
- param_len = _env->GetArrayLength(params);
- param_ptr = _env->GetByteArrayElements(params, nullptr);
- }
-
- RsScriptCall sc, *sca = nullptr;
- uint32_t sc_size = 0;
-
- jint limit_len = 0;
- jint *limit_ptr = nullptr;
-
- if (limits != nullptr) {
- limit_len = _env->GetArrayLength(limits);
- limit_ptr = _env->GetIntArrayElements(limits, nullptr);
-
- if (limit_len != 6) {
- LOG_ERR("LaunchOptions cannot be recognized.");
- goto exit;
- }
-
- sc.xStart = limit_ptr[0];
- sc.xEnd = limit_ptr[1];
- sc.yStart = limit_ptr[2];
- sc.yEnd = limit_ptr[3];
- sc.zStart = limit_ptr[4];
- sc.zEnd = limit_ptr[5];
- sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
- sc.arrayStart = 0;
- sc.arrayEnd = 0;
- sc.array2Start = 0;
- sc.array2End = 0;
- sc.array3Start = 0;
- sc.array3End = 0;
- sc.array4Start = 0;
- sc.array4End = 0;
-
- sca = ≻
- }
-
- dispatchTabInc.ScriptForEachMulti((RsContext)con, (RsScript)script, slot,
- in_allocs, in_len, (RsAllocation)aout,
- param_ptr, param_len, sca, sc_size);
-
-exit:
-
- if (ains != nullptr) {
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
- }
-
- if (params != nullptr) {
- _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
- }
-
- if (limits != nullptr) {
- _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
- }
-}
-
-static void
-nScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
- jlongArray ains, jlong aout, jintArray limits)
-{
- LOG_API("nScriptReduce, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout);
-
- if (ains == nullptr) {
- LOG_ERR("At least one input required.");
- // TODO (b/20758983): Report back to Java and throw an exception
- return;
- }
- jint in_len = _env->GetArrayLength(ains);
- if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) {
- LOG_ERR("Too many arguments in kernel launch.");
- // TODO (b/20758983): Report back to Java and throw an exception
- return;
- }
-
- jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr);
- if (in_ptr == nullptr) {
- LOG_ERR("Failed to get Java array elements");
- // TODO (b/20758983): Report back to Java and throw an exception
- return;
- }
-
- RsAllocation *in_allocs = nullptr;
- if (sizeof(RsAllocation) == sizeof(jlong)) {
- in_allocs = (RsAllocation*)in_ptr;
- } else {
- // Convert from 64-bit jlong types to the native pointer type.
-
- in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
- if (in_allocs == nullptr) {
- LOG_ERR("Failed launching kernel for lack of memory.");
- // TODO (b/20758983): Report back to Java and throw an exception
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
- return;
- }
-
- for (int index = in_len; --index >= 0;) {
- in_allocs[index] = (RsAllocation)in_ptr[index];
- }
- }
-
- RsScriptCall sc, *sca = nullptr;
- uint32_t sc_size = 0;
-
- jint limit_len = 0;
- jint *limit_ptr = nullptr;
-
- if (limits != nullptr) {
- limit_len = _env->GetArrayLength(limits);
- limit_ptr = _env->GetIntArrayElements(limits, nullptr);
- if (limit_ptr == nullptr) {
- LOG_ERR("Failed to get Java array elements");
- // TODO (b/20758983): Report back to Java and throw an exception
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
- return;
- }
-
- if (limit_len != 6) {
- LOG_ERR("LaunchOptions cannot be recognized");
- // TODO (b/20758983): Report back to Java and throw an exception
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
- return;
- }
-
- sc.xStart = limit_ptr[0];
- sc.xEnd = limit_ptr[1];
- sc.yStart = limit_ptr[2];
- sc.yEnd = limit_ptr[3];
- sc.zStart = limit_ptr[4];
- sc.zEnd = limit_ptr[5];
- sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
- sc.arrayStart = 0;
- sc.arrayEnd = 0;
- sc.array2Start = 0;
- sc.array2End = 0;
- sc.array3Start = 0;
- sc.array3End = 0;
- sc.array4Start = 0;
- sc.array4End = 0;
-
- sca = ≻
- sc_size = sizeof(sc);
- }
-
- dispatchTab.ScriptReduce((RsContext)con, (RsScript)script, slot,
- in_allocs, in_len, (RsAllocation)aout,
- sca, sc_size);
-
- _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
-
- if (limits != nullptr) {
- _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
- }
-}
-
-// -----------------------------------
-
-static jlong
-nScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
- jstring resName, jstring cacheDir,
- jbyteArray scriptRef, jint length)
-{
- LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
-
- AutoJavaStringToUTF8 resNameUTF(_env, resName);
- AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
- jlong ret = 0;
- jbyte* script_ptr = NULL;
- jint _exception = 0;
- jint remaining;
- if (!scriptRef) {
- _exception = 1;
- //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
- goto exit;
- }
- if (length < 0) {
- _exception = 1;
- //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
- goto exit;
- }
- remaining = _env->GetArrayLength(scriptRef);
- if (remaining < length) {
- _exception = 1;
- //jniThrowException(_env, "java/lang/IllegalArgumentException",
- // "length > script.length - offset");
- goto exit;
- }
- script_ptr = (jbyte *)
- _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
-
- //rsScriptCSetText(con, (const char *)script_ptr, length);
-
- ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con,
- resNameUTF.c_str(), resNameUTF.length(),
- cacheDirUTF.c_str(), cacheDirUTF.length(),
- (const char *)script_ptr, length);
-
-exit:
- if (script_ptr) {
- _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
- _exception ? JNI_ABORT: 0);
- }
-
- return (jlong)(uintptr_t)ret;
-}
-
-static jlong
-nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc)
-{
- LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
- if (mUseInc) {
- return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
- } else {
- return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
- }
-}
-
-static jlong
-nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc)
-{
- LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
- (void *)sid, slot, sig);
- if (mUseInc) {
- return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid,
- slot, sig);
- } else {
- return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid,
- slot, sig);
- }
-}
-
-static jlong
-nScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
-{
- LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con,
- (void *)sid, slot);
- return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
-}
-
-static jlong
-nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc)
-{
- LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
- if (mUseInc) {
- return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
- } else {
- return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
- }
-}
-
-static jlong
-nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
- jlongArray _dstk, jlongArray _dstf, jlongArray _types)
-{
- LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
-
- jlong id = 0;
-
- RsScriptKernelID* kernelsPtr;
- jint kernelsLen = _env->GetArrayLength(_kernels);
- jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
-
- RsScriptKernelID* srcPtr;
- jint srcLen = _env->GetArrayLength(_src);
- jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
-
- RsScriptKernelID* dstkPtr;
- jint dstkLen = _env->GetArrayLength(_dstk);
- jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
-
- RsScriptKernelID* dstfPtr;
- jint dstfLen = _env->GetArrayLength(_dstf);
- jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
-
- RsType* typesPtr;
- jint typesLen = _env->GetArrayLength(_types);
- jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
-
- if (jKernelsPtr == nullptr) {
- LOG_ERR("Failed to get Java array elements: kernels");
- goto cleanup;
- }
- if (jSrcPtr == nullptr) {
- LOG_ERR("Failed to get Java array elements: src");
- goto cleanup;
- }
- if (jDstkPtr == nullptr) {
- LOG_ERR("Failed to get Java array elements: dstk");
- goto cleanup;
- }
- if (jDstfPtr == nullptr) {
- LOG_ERR("Failed to get Java array elements: dstf");
- goto cleanup;
- }
- if (jTypesPtr == nullptr) {
- LOG_ERR("Failed to get Java array elements: types");
- goto cleanup;
- }
-
- kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
- for(int i = 0; i < kernelsLen; ++i) {
- kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
- }
-
- srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
- for(int i = 0; i < srcLen; ++i) {
- srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
- }
-
- dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
- for(int i = 0; i < dstkLen; ++i) {
- dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
- }
-
- dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
- for(int i = 0; i < dstfLen; ++i) {
- dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
- }
-
- typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
- for(int i = 0; i < typesLen; ++i) {
- typesPtr[i] = (RsType)jTypesPtr[i];
- }
-
- id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con,
- (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
- (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
- (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
- (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
- (RsType *)typesPtr, typesLen * sizeof(RsType));
-
- free(kernelsPtr);
- free(srcPtr);
- free(dstkPtr);
- free(dstfPtr);
- free(typesPtr);
-
-cleanup:
- if (jKernelsPtr != nullptr) {
- _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
- }
- if (jSrcPtr != nullptr) {
- _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
- }
- if (jDstkPtr != nullptr) {
- _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
- }
- if (jDstfPtr != nullptr) {
- _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
- }
- if (jTypesPtr != nullptr) {
- _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
- }
-
- return id;
-}
-
-static void
-nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
-{
- LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
- (void *)gid, (void *)kid, (void *)alloc);
- dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
- (RsAllocation)alloc);
-}
-
-static void
-nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
-{
- LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
- (void *)gid, (void *)kid, (void *)alloc);
- dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
- (RsAllocation)alloc);
-}
-
-static void
-nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
-{
- LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
- dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
-}
-
-// ---------------------------------------------------------------------------
-
-static jlong
-nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
- jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
-{
- LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
- return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con,
- (RsSamplerValue)magFilter,
- (RsSamplerValue)minFilter,
- (RsSamplerValue)wrapS,
- (RsSamplerValue)wrapT,
- (RsSamplerValue)wrapR,
- aniso);
-}
-
-static jint
-nSystemGetPointerSize(JNIEnv *_env, jobject _this) {
- return (jint)sizeof(void*);
-}
-
-// ---------------------------------------------------------------------------
-// For Incremental Intrinsic Support
-static jboolean nIncLoadSO(JNIEnv *_env, jobject _this, jint deviceApi, jstring libPath) {
- void* handle = NULL;
- // For API 9+, dlopen the full path of libRSSupport.
- if (libPath != NULL) {
- const char * libPathJni = _env->GetStringUTFChars(libPath, JNI_FALSE);
- handle = dlopen(libPathJni, RTLD_LAZY | RTLD_LOCAL);
- _env->ReleaseStringUTFChars(libPath, libPathJni);
- } else {
- handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL);
- }
-
- if (handle == NULL) {
- LOG_ERR("couldn't dlopen %s; librsjni version: %d", dlerror(), RS_JNI_VERSION);
- return false;
- }
-
- if (loadSymbols(handle, dispatchTabInc, deviceApi) == false) {
- LOG_ERR("Dispatch Table init failed! librsjni version: %d", RS_JNI_VERSION);
- dlclose(handle);
- return false;
- }
- dispatchTabInc.AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided");
- if (dispatchTabInc.AllocationCreateStrided == NULL) {
- LOG_ERR("Couldn't initialize dispatchTabInc.AllocationCreateStrided");
- dlclose(handle);
- return false;
- }
- LOG_API("Successfully loaded compat runtime");
- return true;
-}
-
-// -----------------------------------
-// To create/destroy a dummy context
-static void
-nIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
-{
- LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
- dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj);
-}
-
-
-static jlong
-nIncDeviceCreate(JNIEnv *_env, jobject _this)
-{
- LOG_API("nDeviceCreate");
- return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate();
-}
-
-static void
-nIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
-{
- LOG_API("nDeviceDestroy");
- return dispatchTabInc.DeviceDestroy((RsDevice)dev);
-}
-
-static jlong
-nIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct)
-{
- LOG_API("nContextCreate");
- //The compat context for incremental support will be synchronous.
- return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer,
- (RsContextType)ct,
- RS_CONTEXT_SYNCHRONOUS);
-}
-
-static void
-nIncContextFinish(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextFinish, con(%p)", (RsContext)con);
- dispatchTabInc.ContextFinish((RsContext)con);
-}
-
-static void
-nIncContextDestroy(JNIEnv *_env, jobject _this, jlong con)
-{
- LOG_API("nContextDestroy, con(%p)", (RsContext)con);
- dispatchTabInc.ContextDestroy((RsContext)con);
-}
-
-// -----------------------------------
-// Create dummy Element
-static jlong
-nIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
-{
- LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con,
- type, kind, norm, size);
- return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type,
- (RsDataKind)kind, norm, size);
-}
-// -----------------------------------
-// Create dummy Type
-static jlong
-nIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
- jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
-{
- LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
- incCon, eid, dimx, dimy, dimz, mips, faces, yuv);
-
- return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy,
- dimz, mips, faces, yuv);
-}
-
-// -----------------------------------
-// Create Allocation from pointer
-static jlong
-nIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type, jint xBytesSize)
-{
- LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
- incCon, (RsElement)type, mips, usage, (void *)pointer);
- size_t strideIn;
- void* pIn = NULL;
- RsAllocation ainI = NULL;
- if (alloc != 0) {
- pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0,
- RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0,
- &strideIn, sizeof(size_t));
- /*
- * By definition stride is a roundup of xBytesSize with requiredAlignment, so requiredAlignment must
- * be strictly larger than the difference of (stride - xBytesSize).
- *
- * We can prove that as long as requiredAlignment satisfies the following two conditions, the
- * memory layout will be identical :
- * 1. Smaller or equal than stride;
- * 2. Larger than minRequiredAlignment.
- *
- * In this case we can simply choose the first power of 2 that satisfies both conditions.
- */
- size_t requiredAlignment = 16;
- size_t minRequiredAlignment = strideIn - xBytesSize;
- while (requiredAlignment <= minRequiredAlignment) {
- requiredAlignment <<= 1;
- }
- ainI = dispatchTabInc.AllocationCreateStrided((RsContext)incCon, (RsType)type,
- RS_ALLOCATION_MIPMAP_NONE,
- RS_ALLOCATION_USAGE_INCREMENTAL_SUPPORT | RS_ALLOCATION_USAGE_SHARED,
- (uintptr_t)pIn, requiredAlignment);
- }
- return (jlong)(uintptr_t) ainI;
-}
-
-static jobject
-nAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xBytesSize, jint dimY, jint dimZ)
-{
- LOG_API("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
- size_t strideIn = xBytesSize;
- void* ptr = NULL;
- if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) {
- ptr = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0,
- RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, dimZ, 0,
- &strideIn, sizeof(size_t));
- }
- if (ptr != NULL) {
- size_t bufferSize = strideIn;
- if (dimY > 0) {
- bufferSize *= dimY;
- }
- if (dimZ > 0) {
- bufferSize *= dimZ;
- }
- jobject byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize);
- return byteBuffer;
- } else {
- return NULL;
- }
-}
-
-static jlong
-nAllocationGetStride(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
-{
- LOG_API("nAllocationGetStride, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
- size_t strideIn = 0;
- if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) {
- dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0,
- RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0,
- &strideIn, sizeof(size_t));
- }
- return (jlong)strideIn;
-}
-
-// ---------------------------------------------------------------------------
-
-
-static const char *classPathName = "android/support/v8/renderscript/RenderScript";
-
-static JNINativeMethod methods[] = {
-{"nLoadSO", "(ZILjava/lang/String;)Z", (bool*)nLoadSO },
-{"nLoadIOSO", "()Z", (bool*)nLoadIOSO },
-{"nDeviceCreate", "()J", (void*)nDeviceCreate },
-{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy },
-{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig },
-{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage },
-{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage },
-{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage },
-{"nContextInitToClient", "(J)V", (void*)nContextInitToClient },
-{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient },
-
-
-// All methods below are thread protected in java.
-{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate },
-{"rsnContextFinish", "(J)V", (void*)nContextFinish },
-{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority },
-{"rsnContextDestroy", "(J)V", (void*)nContextDestroy },
-{"rsnContextDump", "(JI)V", (void*)nContextDump },
-{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage },
-{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate },
-{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate },
-{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg },
-{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal },
-{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy },
-
-{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate },
-{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 },
-{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
-
-{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate },
-
-{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped },
-{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap },
-{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation },
-{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap },
-
-{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
-{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
-
-{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll },
-{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface },
-{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend },
-{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D },
-{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D },
-//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData },
-{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D },
-{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc },
-{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D },
-{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc },
-{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead },
-{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D },
-//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead },
-{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D },
-//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D },
-{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType},
-{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D },
-{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps },
-
-{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation },
-{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone },
-{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke },
-{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV },
-{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach },
-{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV },
-{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEachMulti },
-{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped },
-{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV },
-{"rsnScriptReduce", "(JJI[JJ[I)V", (void*)nScriptReduce },
-{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI },
-{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ },
-{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF },
-{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD },
-{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV },
-{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE },
-{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj },
-
-{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate },
-{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate },
-{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate },
-{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate },
-{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate },
-{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate },
-{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create },
-{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
-{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
-{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
-{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute },
-
-{"rsnScriptIntrinsicBLAS_Single", "(JJJIIIIIIIIIFJJFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Single },
-{"rsnScriptIntrinsicBLAS_Double", "(JJJIIIIIIIIIDJJDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Double },
-{"rsnScriptIntrinsicBLAS_Complex", "(JJJIIIIIIIIIFFJJFFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Complex },
-{"rsnScriptIntrinsicBLAS_Z", "(JJJIIIIIIIIIDDJJDDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Z },
-
-{"rsnScriptIntrinsicBLAS_BNNM", "(JJJIIIJIJIJIIZ)V", (void*)nScriptIntrinsicBLAS_BNNM },
-
-{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate },
-
-{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize },
-
-// Entry points for Inc libRSSupport
-{"nIncLoadSO", "(ILjava/lang/String;)Z", (bool*)nIncLoadSO },
-{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate },
-{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy },
-{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate },
-{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish },
-{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy },
-{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy },
-{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate },
-{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate },
-{"rsnIncAllocationCreateTyped", "(JJJJI)J", (void*)nIncAllocationCreateTyped },
-{"rsnAllocationGetByteBuffer", "(JJIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer },
-{"rsnAllocationGetStride", "(JJ)J", (void*)nAllocationGetStride },
-};
-
-// ---------------------------------------------------------------------------
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jclass clazz = NULL;
- jint result = -1;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
- // "ERROR: GetEnv failed\n");
- goto bail;
- }
- if (env == NULL) {
- // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL");
- goto bail;
- }
-
- clazz = env->FindClass(classPathName);
- if (clazz == NULL) {
- goto bail;
- }
-
- if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) {
- // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
- // "ERROR: MediaPlayer native registration failed\n");
- goto bail;
- }
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-
-bail:
- return result;
-}
diff --git a/v8/renderscript/jni/android_rscompat_usage_io.cpp b/v8/renderscript/jni/android_rscompat_usage_io.cpp
deleted file mode 100644
index e29be1a..0000000
--- a/v8/renderscript/jni/android_rscompat_usage_io.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <android/log.h>
-#include <android/native_window.h>
-#include <android/native_window_jni.h>
-
-#include <rsEnv.h>
-#include "rsDispatch.h"
-#define LOG_API(...)
-
-extern "C" void AllocationSetSurface(JNIEnv *_env, jobject _this, RsContext con, RsAllocation alloc, jobject sur, dispatchTable dispatchTab)
-{
- LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
- con, alloc, sur);
-
- ANativeWindow* s = NULL;
- if (sur != 0) {
- s = ANativeWindow_fromSurface(_env, sur);
- }
- dispatchTab.AllocationSetSurface(con, alloc, s);
-}
-
diff --git a/v8/renderscript/jni/android_rscompat_usage_io_driver.cpp b/v8/renderscript/jni/android_rscompat_usage_io_driver.cpp
deleted file mode 100644
index 96eb19a..0000000
--- a/v8/renderscript/jni/android_rscompat_usage_io_driver.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <android/native_window.h>
-#include <android/log.h>
-
-#include "rsCompatibilityLib.h"
-
-#include "rsdCore.h"
-#include "rsdAllocation.h"
-#include "rsAllocation.h"
-
-#define LOG_API(...)
-
-using namespace android;
-using namespace android::renderscript;
-
-static bool IoGetBuffer(const Context *rsc, Allocation *alloc, ANativeWindow *nw) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- // Must lock the whole surface
- if(drv->wndBuffer == NULL) {
- drv->wndBuffer = new ANativeWindow_Buffer;
- }
- int32_t r = ANativeWindow_lock(nw, drv->wndBuffer, NULL);
- if (r) {
- LOG_API("Error Locking IO output buffer.");
- return false;
- }
-
- void *dst = drv->wndBuffer->bits;
- alloc->mHal.drvState.lod[0].mallocPtr = dst;
- alloc->mHal.drvState.lod[0].stride = drv->wndBuffer->stride * alloc->mHal.state.elementSizeBytes;
- return true;
-}
-
-extern "C" void rscAllocationSetSurface(RsContext rscR, RsAllocation allocR, ANativeWindow *nw) {
- Context *rsc = (Context *)rscR;
- Allocation *alloc = (Allocation *)allocR;
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
-
- // Cleanup old surface if there is one.
- if (drv->wndSurface) {
- ANativeWindow *old = drv->wndSurface;
- ANativeWindow_unlockAndPost(old);
- drv->wndSurface = NULL;
- ANativeWindow_release(old);
- old = NULL;
- }
-
- if (nw != NULL) {
- int32_t r;
- r = ANativeWindow_setBuffersGeometry(nw, alloc->mHal.drvState.lod[0].dimX,
- alloc->mHal.drvState.lod[0].dimY,
- WINDOW_FORMAT_RGBA_8888);
- if (r) {
- LOG_API("Error setting IO output buffer geometry.");
- goto errorcmp;
- }
-
- IoGetBuffer(rsc, alloc, nw);
- drv->wndSurface = nw;
- }
-
- return;
-
- errorcmp:
-
- if (nw) {
- nw = NULL;
- }
-
-}
-
-extern "C" void rscAllocationDestroy(const Context *rsc, Allocation *alloc) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- if (alloc->mHal.drvState.lod[0].mallocPtr) {
- // don't free user-allocated ptrs or IO_OUTPUT buffers
- if (!(drv->useUserProvidedPtr) &&
- !(alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_IO_INPUT) &&
- !(alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_IO_OUTPUT)) {
- free(alloc->mHal.drvState.lod[0].mallocPtr);
- }
- alloc->mHal.drvState.lod[0].mallocPtr = NULL;
- }
-
- if ((alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_IO_OUTPUT) &&
- (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT)) {
- ANativeWindow *nw = drv->wndSurface;
- if (nw) {
- //If we have an attached surface, need to release it.
- ANativeWindow_unlockAndPost(nw);
- drv->wndSurface = NULL;
- ANativeWindow_release(nw);
- nw = NULL;
- }
- }
-}
-
-extern "C" void rscAllocationIoSend(const Context *rsc, Allocation *alloc) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- ANativeWindow *nw = drv->wndSurface;
- if (nw) {
- if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT) {
- int32_t r = ANativeWindow_unlockAndPost(nw);
- if (r) {
- LOG_API("Error sending IO output buffer.");
- return;
- }
- IoGetBuffer(rsc, alloc, nw);
- }
- } else {
- LOG_API("Sent IO buffer with no attached surface.");
- return;
- }
-}
-
diff --git a/v8/renderscript/rs_support/Android.mk b/v8/renderscript/rs_support/Android.mk
deleted file mode 100644
index de8fae0..0000000
--- a/v8/renderscript/rs_support/Android.mk
+++ /dev/null
@@ -1,189 +0,0 @@
-
-LOCAL_PATH:=frameworks/rs
-rs_base_CFLAGS := -Werror -Wall -Wno-unused-parameter -Wno-unused-variable \
- -Wno-overloaded-virtual -DRS_COMPATIBILITY_LIB -std=c++11
-
-ifeq ($(ARCH_ARM_HAVE_NEON),true)
-rs_base_CFLAGS += -DARCH_ARM_HAVE_NEON
-endif
-
-ifeq ($(TARGET_BUILD_PDK), true)
- rs_base_CFLAGS += -D__RS_PDK__
-endif
-
-# Build rsg-generator ====================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := rsg-generator_support
-
-# These symbols are normally defined by BUILD_XXX, but we need to define them
-# here so that local-intermediates-dir works.
-
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE_CLASS := EXECUTABLES
-intermediates := $(local-intermediates-dir)
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES:= \
- spec.l \
- rsg_generator.c
-
-LOCAL_CXX_STL := none
-LOCAL_SANITIZE := never
-
-include $(BUILD_HOST_EXECUTABLE)
-
-# TODO: This should go into build/core/config.mk
-RSG_GENERATOR_SUPPORT:=$(LOCAL_BUILT_MODULE)
-
-include $(CLEAR_VARS)
-LOCAL_CLANG := true
-LOCAL_MODULE := libRSSupport
-LOCAL_SDK_VERSION := 9
-
-
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-generated_sources_dir := $(call local-generated-sources-dir)
-
-# Generate custom headers
-
-GEN := $(addprefix $(generated_sources_dir)/, \
- rsgApiStructs.h \
- rsgApiFuncDecl.h \
- )
-
-$(GEN) : PRIVATE_PATH := $(LOCAL_PATH)
-$(GEN) : PRIVATE_CUSTOM_TOOL = cat $(PRIVATE_PATH)/rs.spec $(PRIVATE_PATH)/rs_compat.spec | $(RSG_GENERATOR_SUPPORT) $< $@
-$(GEN) : $(RSG_GENERATOR_SUPPORT) $(LOCAL_PATH)/rs.spec $(LOCAL_PATH)/rs_compat.spec
-$(GEN): $(generated_sources_dir)/%.h : $(LOCAL_PATH)/%.h.rsg
- $(transform-generated-source)
-
-# used in jni/Android.mk
-rs_generated_source += $(GEN)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-# Generate custom source files
-
-GEN := $(addprefix $(generated_sources_dir)/, \
- rsgApi.cpp \
- rsgApiReplay.cpp \
- )
-
-$(GEN) : PRIVATE_PATH := $(LOCAL_PATH)
-$(GEN) : PRIVATE_CUSTOM_TOOL = cat $(PRIVATE_PATH)/rs.spec $(PRIVATE_PATH)/rs_compat.spec | $(RSG_GENERATOR_SUPPORT) $< $@
-$(GEN) : $(RSG_GENERATOR_SUPPORT) $(LOCAL_PATH)/rs.spec $(LOCAL_PATH)/rs_compat.spec
-$(GEN): $(generated_sources_dir)/%.cpp : $(LOCAL_PATH)/%.cpp.rsg
- $(transform-generated-source)
-
-# used in jni/Android.mk
-rs_generated_source += $(GEN)
-
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-LOCAL_SRC_FILES:= \
- rsAllocation.cpp \
- rsApiAllocation.cpp \
- rsApiContext.cpp \
- rsApiDevice.cpp \
- rsApiElement.cpp \
- rsApiType.cpp \
- rsClosure.cpp \
- rsCompatibilityLib.cpp \
- rsComponent.cpp \
- rsContext.cpp \
- rsCppUtils.cpp \
- rsDevice.cpp \
- rsDriverLoader.cpp \
- rsElement.cpp \
- rsFifoSocket.cpp \
- rsObjectBase.cpp \
- rsMatrix2x2.cpp \
- rsMatrix3x3.cpp \
- rsMatrix4x4.cpp \
- rsMutex.cpp \
- rsSampler.cpp \
- rsScript.cpp \
- rsScriptC.cpp \
- rsScriptC_Lib.cpp \
- rsScriptGroup.cpp \
- rsScriptGroup2.cpp \
- rsScriptIntrinsic.cpp \
- rsSignal.cpp \
- rsStream.cpp \
- rsThreadIO.cpp \
- rsType.cpp \
- driver/rsdAllocation.cpp \
- driver/rsdBcc.cpp \
- driver/rsdCore.cpp \
- driver/rsdElement.cpp \
- driver/rsdRuntimeStubs.cpp \
- driver/rsdSampler.cpp \
- driver/rsdScriptGroup.cpp \
- driver/rsdType.cpp \
- cpu_ref/rsCpuCore.cpp \
- cpu_ref/rsCpuExecutable.cpp \
- cpu_ref/rsCpuScript.cpp \
- cpu_ref/rsCpuRuntimeMath.cpp \
- cpu_ref/rsCpuScriptGroup.cpp \
- cpu_ref/rsCpuScriptGroup2.cpp \
- cpu_ref/rsCpuIntrinsic.cpp \
- cpu_ref/rsCpuIntrinsic3DLUT.cpp \
- cpu_ref/rsCpuIntrinsicBlend.cpp \
- cpu_ref/rsCpuIntrinsicBlur.cpp \
- cpu_ref/rsCpuIntrinsicBLAS.cpp \
- cpu_ref/rsCpuIntrinsicColorMatrix.cpp \
- cpu_ref/rsCpuIntrinsicConvolve3x3.cpp \
- cpu_ref/rsCpuIntrinsicConvolve5x5.cpp \
- cpu_ref/rsCpuIntrinsicHistogram.cpp \
- cpu_ref/rsCpuIntrinsicLUT.cpp \
- cpu_ref/rsCpuIntrinsicResize.cpp \
- cpu_ref/rsCpuIntrinsicYuvToRGB.cpp
-
-ifeq ($(ARCH_ARM_HAVE_ARMV7A),true)
-LOCAL_CFLAGS_arm := -DARCH_ARM_HAVE_VFP -DARCH_ARM_USE_INTRINSICS
-LOCAL_ASFLAGS_arm := -mfpu=neon
-LOCAL_SRC_FILES_arm := \
- cpu_ref/rsCpuIntrinsics_neon_3DLUT.S \
- cpu_ref/rsCpuIntrinsics_neon_Blend.S \
- cpu_ref/rsCpuIntrinsics_neon_Blur.S \
- cpu_ref/rsCpuIntrinsics_neon_ColorMatrix.S \
- cpu_ref/rsCpuIntrinsics_neon_Convolve.S \
- cpu_ref/rsCpuIntrinsics_neon_Resize.S \
- cpu_ref/rsCpuIntrinsics_neon_YuvToRGB.S
-endif
-
-LOCAL_CFLAGS_arm64 += \
- -DARCH_ARM_USE_INTRINSICS \
- -DARCH_ARM64_USE_INTRINSICS \
- -DARCH_ARM64_HAVE_NEON
-LOCAL_SRC_FILES_arm64 += \
- cpu_ref/rsCpuIntrinsics_advsimd_3DLUT.S \
- cpu_ref/rsCpuIntrinsics_advsimd_Blend.S \
- cpu_ref/rsCpuIntrinsics_advsimd_Blur.S \
- cpu_ref/rsCpuIntrinsics_advsimd_ColorMatrix.S \
- cpu_ref/rsCpuIntrinsics_advsimd_Convolve.S \
- cpu_ref/rsCpuIntrinsics_advsimd_Resize.S \
- cpu_ref/rsCpuIntrinsics_advsimd_YuvToRGB.S
-
-LOCAL_CFLAGS_x86 += -DARCH_X86_HAVE_SSSE3
-LOCAL_SRC_FILES_x86 += cpu_ref/rsCpuIntrinsics_x86.cpp
-LOCAL_CFLAGS_x86_64 += -DARCH_X86_HAVE_SSSE3
-LOCAL_SRC_FILES_x86_64 += cpu_ref/rsCpuIntrinsics_x86.cpp
-
-LOCAL_REQUIRED_MODULES := libblasV8
-LOCAL_STATIC_LIBRARIES := libbnnmlowpV8
-LOCAL_LDFLAGS += -llog -ldl -Wl,--exclude-libs,libc++_static.a
-LOCAL_NDK_STL_VARIANT := c++_static
-
-LOCAL_C_INCLUDES += external/cblas/include
-LOCAL_C_INCLUDES += external/gemmlowp/eight_bit_int_gemm
-
-LOCAL_CFLAGS += $(rs_base_CFLAGS) -DGEMMLOWP_USE_STLPORT
-
-LOCAL_MODULE:= libRSSupport
-LOCAL_MODULE_TAGS := optional
-
-# TODO: why isn't this picked up from the host GLOBAL_CFLAGS?
-LOCAL_CFLAGS += -D__STDC_FORMAT_MACROS
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/documents-archive/Android.mk b/wearable/Android.mk
similarity index 75%
rename from documents-archive/Android.mk
rename to wearable/Android.mk
index 32ec7d6..56a7b91 100644
--- a/documents-archive/Android.mk
+++ b/wearable/Android.mk
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Android Open Source Project
+# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -18,21 +18,19 @@
# Applications that use this library must specify
#
# LOCAL_STATIC_ANDROID_LIBRARIES := \
-# android-support-documents-archive \
-# android-support-v4 \
-# android-support-annotations
+# android-support-wearable \
+# android-support-core-ui
#
# in their makefiles to include the resources and their dependencies in their package.
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-documents-archive
+LOCAL_MODULE := android-support-wearable
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
- android-support-annotations \
- android-support-v4
+ android-support-core-ui \
+ android-support-annotations
LOCAL_JAR_EXCLUDE_FILES := none
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
diff --git a/documents-archive/AndroidManifest.xml b/wearable/AndroidManifest.xml
similarity index 80%
rename from documents-archive/AndroidManifest.xml
rename to wearable/AndroidManifest.xml
index 2cd0f7a..712dd4e 100644
--- a/documents-archive/AndroidManifest.xml
+++ b/wearable/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,7 +14,6 @@
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.support.provider">
- <uses-sdk android:minSdkVersion="19"/>
- <application />
+ package="android.support.wearable">
+ <uses-sdk android:minSdkVersion="20"/>
</manifest>
diff --git a/wearable/README.txt b/wearable/README.txt
new file mode 100644
index 0000000..58f2168
--- /dev/null
+++ b/wearable/README.txt
@@ -0,0 +1 @@
+Library Project including Wearable Support UI Components and associated utilities.
diff --git a/wearable/build.gradle b/wearable/build.gradle
new file mode 100644
index 0000000..666770f
--- /dev/null
+++ b/wearable/build.gradle
@@ -0,0 +1,126 @@
+apply plugin: 'com.android.library'
+
+archivesBaseName = 'wearable'
+
+dependencies {
+ compile project(':support-annotations')
+ compile project(':support-core-ui')
+ androidTestCompile ("com.android.support.test:runner:${project.rootProject.ext.testRunnerVersion}") {
+ exclude module: 'support-annotations'
+ }
+ androidTestCompile ("com.android.support.test.espresso:espresso-core:${project.rootProject.ext.espressoVersion}") {
+ exclude module: 'support-annotations'
+ }
+ testCompile 'junit:junit:4.12'
+ testCompile "org.mockito:mockito-core:1.9.5"
+ testCompile ("com.android.support.test:runner:${project.rootProject.ext.testRunnerVersion}") {
+ exclude module: 'support-annotations'
+ }
+ androidTestCompile "org.mockito:mockito-core:1.9.5"
+ androidTestCompile "com.google.dexmaker:dexmaker:1.2"
+ androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2"
+}
+
+android {
+ compileSdkVersion project.ext.currentSdk
+
+ defaultConfig {
+ minSdkVersion 20
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+
+ sourceSets {
+ main.manifest.srcFile 'AndroidManifest.xml'
+ main.java.srcDir 'src'
+ main.res.srcDirs 'res', 'res-public'
+
+ androidTest.setRoot('tests')
+ androidTest.java.srcDir 'tests/src'
+ androidTest.res.srcDir 'tests/res'
+ androidTest.manifest.srcFile 'tests/AndroidManifest.xml'
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_7
+ targetCompatibility JavaVersion.VERSION_1_7
+ }
+
+ packagingOptions {
+ exclude 'LICENSE.txt'
+ }
+
+ testOptions {
+ unitTests.returnDefaultValues = true
+ }
+
+ buildTypes.all {
+ consumerProguardFiles 'proguard-rules.pro'
+ }
+}
+
+android.libraryVariants.all { variant ->
+ def name = variant.buildType.name
+
+ if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
+ return; // Skip debug builds.
+ }
+ def suffix = name.capitalize()
+
+ def jarTask = project.tasks.create(name: "jar${suffix}", type: Jar){
+ dependsOn variant.javaCompile
+ from variant.javaCompile.destinationDir
+ from 'LICENSE.txt'
+ }
+ def javadocTask = project.tasks.create(name: "javadoc${suffix}", type: Javadoc) {
+ source android.sourceSets.main.java
+ classpath = files(variant.javaCompile.classpath.files) + files(
+ "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar")
+ }
+
+ def javadocJarTask = project.tasks.create(name: "javadocJar${suffix}", type: Jar) {
+ classifier = 'javadoc'
+ from 'build/docs/javadoc'
+ }
+
+ def sourcesJarTask = project.tasks.create(name: "sourceJar${suffix}", type: Jar) {
+ classifier = 'sources'
+ from android.sourceSets.main.java.srcDirs
+ }
+
+ artifacts.add('archives', javadocJarTask);
+ artifacts.add('archives', sourcesJarTask);
+}
+
+uploadArchives {
+ repositories {
+ mavenDeployer {
+ repository(url: uri(rootProject.ext.supportRepoOut)) {
+ }
+
+ pom.project {
+ name 'Android Wear Support UI'
+ description "Android Wear Support UI"
+ url 'http://developer.android.com/tools/extras/support-library.html'
+ inceptionYear '2016'
+
+ licenses {
+ license {
+ name 'The Apache Software License, Version 2.0'
+ url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ distribution 'repo'
+ }
+ }
+
+ scm {
+ url "http://source.android.com"
+ connection "scm:git:https://android.googlesource.com/platform/frameworks/support"
+ }
+ developers {
+ developer {
+ name 'The Android Open Source Project'
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/wearable/proguard-rules.pro b/wearable/proguard-rules.pro
new file mode 100644
index 0000000..c6cd374
--- /dev/null
+++ b/wearable/proguard-rules.pro
@@ -0,0 +1,19 @@
+# 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.
+
+# When layoutManager xml attribute is used, RecyclerView inflates
+# LayoutManagers' constructors using reflection.
+-keep public class * extends android.support.v7.widget.RecyclerView$LayoutManager {
+ public <init>(...);
+}
diff --git a/documents-archive/AndroidManifest.xml b/wearable/res-public/values/public_attrs.xml
similarity index 70%
copy from documents-archive/AndroidManifest.xml
copy to wearable/res-public/values/public_attrs.xml
index 2cd0f7a..afb7bfe 100644
--- a/documents-archive/AndroidManifest.xml
+++ b/wearable/res-public/values/public_attrs.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -13,8 +13,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.support.provider">
- <uses-sdk android:minSdkVersion="19"/>
- <application />
-</manifest>
+
+<!-- Definitions of attributes to be exposed as public -->
+<resources>
+ <public type="attr" name="boxedEdges" />
+</resources>
\ No newline at end of file
diff --git a/wearable/res/values/attrs.xml b/wearable/res/values/attrs.xml
new file mode 100644
index 0000000..e52dee9
--- /dev/null
+++ b/wearable/res/values/attrs.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Formatting note: terminate all comments with a period, to avoid breaking
+ the documentation output. To suppress comment lines from the documentation
+ output, insert an eat-comment element after the comment lines.
+-->
+
+<resources>
+ <!-- Attributes that can be used with any member view of
+ {@link android.support.wearable.view.BoxInsetLayout}.
+ These attributes are specified with the rest of a view's normal attributes
+ (such as {@link android.R.attr#background}, but will be parsed by the view's parent and
+ ignored by the child.
+ <p>The values defined here correspond to the base layout attribute
+ class {@link android.support.wearable.view.BoxInsetLayout.LayoutParams}. -->
+ <declare-styleable name="BoxInsetLayout_Layout">
+ <!-- The types of insets this view can force on its children. The view will respect the
+ defined values of other child attributes such as ones provided by
+ {@link android.view.ViewGroup.MarginLayoutParams}, but it will add an additional inset
+ as requested -->
+ <attr name="boxedEdges">
+ <!-- Default boxing setting. There are no insets forced on the child views. -->
+ <flag name="none" value="0x00" />
+ <!-- The view will force an inset on the left edge of the children. -->
+ <flag name="left" value="0x01" />
+ <!-- The view will force an inset on the top edge of the children. -->
+ <flag name="top" value="0x02" />
+ <!-- The view will force an inset on the right edge of the children. -->
+ <flag name="right" value="0x04" />
+ <!-- The view will force an inset on the bottom edge of the children. -->
+ <flag name="bottom" value="0x08" />
+ <!-- The view will force an inset on all of the edges of the children. -->
+ <flag name="all" value="0x0F" />
+ </attr>
+ </declare-styleable>
+</resources>
diff --git a/wearable/src/android/support/wearable/view/BoxInsetLayout.java b/wearable/src/android/support/wearable/view/BoxInsetLayout.java
new file mode 100644
index 0000000..ef8e96e
--- /dev/null
+++ b/wearable/src/android/support/wearable/view/BoxInsetLayout.java
@@ -0,0 +1,531 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wearable.view;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StyleRes;
+import android.support.annotation.UiThread;
+import android.support.wearable.R;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
+import android.widget.FrameLayout;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * BoxInsetLayout is a screen shape-aware ViewGroup that can box its children in the center
+ * square of a round screen by using the {@code boxedEdges} attribute. The values for this attribute
+ * specify the child's edges to be boxed in: {@code left|top|right|bottom} or {@code all}. The
+ * {@code boxedEdges} attribute is ignored on a device with a rectangular screen.
+ */
+@UiThread
+public class BoxInsetLayout extends ViewGroup {
+
+ private static final float FACTOR = 0.146467f; //(1 - sqrt(2)/2)/2
+ private static final int DEFAULT_CHILD_GRAVITY = Gravity.TOP | Gravity.START;
+
+ private final int mScreenHeight;
+ private final int mScreenWidth;
+
+ private boolean mIsRound;
+ private Rect mForegroundPadding;
+ private Rect mInsets;
+ private Drawable mForegroundDrawable;
+
+ /**
+ * Simple constructor to use when creating a view from code.
+ *
+ * @param context The {@link Context} the view is running in, through which it can access
+ * the
+ * current theme, resources, etc.
+ */
+ public BoxInsetLayout(@NonNull Context context) {
+ this(context, null);
+ }
+
+ /**
+ * Constructor that is called when inflating a view from XML. This is called when a view is
+ * being constructed from an XML file, supplying attributes that were specified in the XML
+ * file.
+ * This version uses a default style of 0, so the only attribute values applied are those in
+ * the
+ * Context's Theme and the given AttributeSet.
+ * <p>
+ * <p>
+ * The method onFinishInflate() will be called after all children have been added.
+ *
+ * @param context The {@link Context} the view is running in, through which it can access
+ * the
+ * current theme, resources, etc.
+ * @param attrs The attributes of the XML tag that is inflating the view.
+ */
+ public BoxInsetLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ /**
+ * Perform inflation from XML and apply a class-specific base style from a theme attribute.
+ * This constructor allows subclasses to use their own base style when they are inflating.
+ *
+ * @param context The {@link Context} the view is running in, through which it can
+ * access the
+ * current theme, resources, etc.
+ * @param attrs The attributes of the XML tag that is inflating the view.
+ * @param defStyle An attribute in the current theme that contains a reference to a style
+ * resource that supplies default values for the view. Can be 0 to not look for
+ * defaults.
+ */
+ public BoxInsetLayout(@NonNull Context context, @Nullable AttributeSet attrs, @StyleRes int
+ defStyle) {
+ super(context, attrs, defStyle);
+ // make sure we have a foreground padding object
+ if (mForegroundPadding == null) {
+ mForegroundPadding = new Rect();
+ }
+ if (mInsets == null) {
+ mInsets = new Rect();
+ }
+ mScreenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
+ mScreenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ insets = super.onApplyWindowInsets(insets);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ final boolean round = insets.isRound();
+ if (round != mIsRound) {
+ mIsRound = round;
+ requestLayout();
+ }
+ mInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(),
+ insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
+ }
+ return insets;
+ }
+
+ @Override
+ public void setForeground(Drawable drawable) {
+ super.setForeground(drawable);
+ mForegroundDrawable = drawable;
+ if (mForegroundPadding == null) {
+ mForegroundPadding = new Rect();
+ }
+ if (mForegroundDrawable != null) {
+ drawable.getPadding(mForegroundPadding);
+ }
+ }
+
+ @Override
+ public LayoutParams generateLayoutParams(AttributeSet attrs) {
+ return new BoxInsetLayout.LayoutParams(getContext(), attrs);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ requestApplyInsets();
+ } else {
+ mIsRound = getResources().getConfiguration().isScreenRound();
+ WindowInsets insets = getRootWindowInsets();
+ mInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(),
+ insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int count = getChildCount();
+ // find max size
+ int maxWidth = 0;
+ int maxHeight = 0;
+ int childState = 0;
+ for (int i = 0; i < count; i++) {
+ final View child = getChildAt(i);
+ if (child.getVisibility() != GONE) {
+ LayoutParams lp = (BoxInsetLayout.LayoutParams) child.getLayoutParams();
+ int marginLeft = 0;
+ int marginRight = 0;
+ int marginTop = 0;
+ int marginBottom = 0;
+ if (mIsRound) {
+ // round screen, check boxed, don't use margins on boxed
+ if ((lp.boxedEdges & LayoutParams.BOX_LEFT) == 0) {
+ marginLeft = lp.leftMargin;
+ }
+ if ((lp.boxedEdges & LayoutParams.BOX_RIGHT) == 0) {
+ marginRight = lp.rightMargin;
+ }
+ if ((lp.boxedEdges & LayoutParams.BOX_TOP) == 0) {
+ marginTop = lp.topMargin;
+ }
+ if ((lp.boxedEdges & LayoutParams.BOX_BOTTOM) == 0) {
+ marginBottom = lp.bottomMargin;
+ }
+ } else {
+ // rectangular, ignore boxed, use margins
+ marginLeft = lp.leftMargin;
+ marginTop = lp.topMargin;
+ marginRight = lp.rightMargin;
+ marginBottom = lp.bottomMargin;
+ }
+ measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);
+ maxWidth = Math.max(maxWidth, child.getMeasuredWidth() + marginLeft + marginRight);
+ maxHeight = Math.max(maxHeight,
+ child.getMeasuredHeight() + marginTop + marginBottom);
+ childState = combineMeasuredStates(childState, child.getMeasuredState());
+ }
+ }
+ // Account for padding too
+ maxWidth += getPaddingLeft() + mForegroundPadding.left + getPaddingRight()
+ + mForegroundPadding.right;
+ maxHeight += getPaddingTop() + mForegroundPadding.top + getPaddingBottom()
+ + mForegroundPadding.bottom;
+
+ // Check against our minimum height and width
+ maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight());
+ maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth());
+
+ // Check against our foreground's minimum height and width
+ if (mForegroundDrawable != null) {
+ maxHeight = Math.max(maxHeight, mForegroundDrawable.getMinimumHeight());
+ maxWidth = Math.max(maxWidth, mForegroundDrawable.getMinimumWidth());
+ }
+
+ int measuredWidth = resolveSizeAndState(maxWidth, widthMeasureSpec, childState);
+ int measuredHeight = resolveSizeAndState(maxHeight, heightMeasureSpec,
+ childState << MEASURED_HEIGHT_STATE_SHIFT);
+ setMeasuredDimension(measuredWidth, measuredHeight);
+
+ // determine boxed inset
+ int boxInset = calculateInset();
+ // adjust the the children measures, if necessary
+ for (int i = 0; i < count; i++) {
+ measureChild(widthMeasureSpec, heightMeasureSpec, boxInset, i);
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ final int count = getChildCount();
+
+ final int parentLeft = getPaddingLeft() + mForegroundPadding.left;
+ final int parentRight = right - left - getPaddingRight() - mForegroundPadding.right;
+
+ final int parentTop = getPaddingTop() + mForegroundPadding.top;
+ final int parentBottom = bottom - top - getPaddingBottom() - mForegroundPadding.bottom;
+
+ for (int i = 0; i < count; i++) {
+ final View child = getChildAt(i);
+ if (child.getVisibility() != GONE) {
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+ final int width = child.getMeasuredWidth();
+ final int height = child.getMeasuredHeight();
+
+ int childLeft;
+ int childTop;
+
+ int gravity = lp.gravity;
+ if (gravity == -1) {
+ gravity = DEFAULT_CHILD_GRAVITY;
+ }
+
+ final int layoutDirection = getLayoutDirection();
+ final int absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection);
+ final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
+ final int horizontalGravity = gravity & Gravity.HORIZONTAL_GRAVITY_MASK;
+ int desiredInset = calculateInset();
+
+ // If the child's width is match_parent then we can ignore gravity.
+ int leftChildMargin = calculateChildLeftMargin(lp, horizontalGravity, desiredInset);
+ int rightChildMargin = calculateChildRightMargin(lp, horizontalGravity,
+ desiredInset);
+ if (lp.width == LayoutParams.MATCH_PARENT) {
+ childLeft = parentLeft + leftChildMargin;
+ } else {
+ switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+ case Gravity.CENTER_HORIZONTAL:
+ childLeft = parentLeft + (parentRight - parentLeft - width) / 2
+ + leftChildMargin - rightChildMargin;
+ break;
+ case Gravity.RIGHT:
+ childLeft = parentRight - width - rightChildMargin;
+ break;
+ case Gravity.LEFT:
+ default:
+ childLeft = parentLeft + leftChildMargin;
+ }
+ }
+
+ // If the child's height is match_parent then we can ignore gravity.
+ int topChildMargin = calculateChildTopMargin(lp, verticalGravity, desiredInset);
+ int bottomChildMargin = calculateChildBottomMargin(lp, verticalGravity,
+ desiredInset);
+ if (lp.height == LayoutParams.MATCH_PARENT) {
+ childTop = parentTop + topChildMargin;
+ } else {
+ switch (verticalGravity) {
+ case Gravity.CENTER_VERTICAL:
+ childTop = parentTop + (parentBottom - parentTop - height) / 2
+ + topChildMargin - bottomChildMargin;
+ break;
+ case Gravity.BOTTOM:
+ childTop = parentBottom - height - bottomChildMargin;
+ break;
+ case Gravity.TOP:
+ default:
+ childTop = parentTop + topChildMargin;
+ }
+ }
+ child.layout(childLeft, childTop, childLeft + width, childTop + height);
+ }
+ }
+ }
+
+ @Override
+ protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+ return p instanceof LayoutParams;
+ }
+
+ @Override
+ protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+ return new LayoutParams(p);
+ }
+
+ private void measureChild(int widthMeasureSpec, int heightMeasureSpec, int desiredMinInset,
+ int i) {
+ final View child = getChildAt(i);
+ final LayoutParams childLayoutParams = (LayoutParams) child.getLayoutParams();
+
+ int gravity = childLayoutParams.gravity;
+ if (gravity == -1) {
+ gravity = DEFAULT_CHILD_GRAVITY;
+ }
+ final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
+ final int horizontalGravity = gravity & Gravity.HORIZONTAL_GRAVITY_MASK;
+
+ int childWidthMeasureSpec;
+ int childHeightMeasureSpec;
+
+ int leftParentPadding = getPaddingLeft() + mForegroundPadding.left;
+ int rightParentPadding = getPaddingRight() + mForegroundPadding.right;
+ int topParentPadding = getPaddingTop() + mForegroundPadding.top;
+ int bottomParentPadding = getPaddingBottom() + mForegroundPadding.bottom;
+
+ // adjust width
+ int totalWidthMargin = leftParentPadding + rightParentPadding + calculateChildLeftMargin(
+ childLayoutParams, horizontalGravity, desiredMinInset) + calculateChildRightMargin(
+ childLayoutParams, horizontalGravity, desiredMinInset);
+
+ // adjust height
+ int totalHeightMargin = topParentPadding + bottomParentPadding + calculateChildTopMargin(
+ childLayoutParams, verticalGravity, desiredMinInset) + calculateChildBottomMargin(
+ childLayoutParams, verticalGravity, desiredMinInset);
+
+ childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, totalWidthMargin,
+ childLayoutParams.width);
+ childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, totalHeightMargin,
+ childLayoutParams.height);
+
+ int maxAllowedWidth = getMeasuredWidth() - totalWidthMargin;
+ int maxAllowedHeight = getMeasuredHeight() - totalHeightMargin;
+ if (child.getMeasuredWidth() > maxAllowedWidth
+ || child.getMeasuredHeight() > maxAllowedHeight) {
+ child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+ }
+ }
+
+ private int calculateChildLeftMargin(LayoutParams lp, int horizontalGravity, int
+ desiredMinInset) {
+ if (mIsRound && ((lp.boxedEdges & LayoutParams.BOX_LEFT) != 0)) {
+ if (lp.width == LayoutParams.MATCH_PARENT || horizontalGravity == Gravity.LEFT) {
+ return lp.leftMargin + desiredMinInset;
+ }
+ }
+ return lp.leftMargin;
+ }
+
+ private int calculateChildRightMargin(LayoutParams lp, int horizontalGravity, int
+ desiredMinInset) {
+ if (mIsRound && ((lp.boxedEdges & LayoutParams.BOX_RIGHT) != 0)) {
+ if (lp.width == LayoutParams.MATCH_PARENT || horizontalGravity == Gravity.RIGHT) {
+ return lp.rightMargin + desiredMinInset;
+ }
+ }
+ return lp.rightMargin;
+ }
+
+ private int calculateChildTopMargin(LayoutParams lp, int verticalGravity, int desiredMinInset) {
+ if (mIsRound && ((lp.boxedEdges & LayoutParams.BOX_TOP) != 0)) {
+ if (lp.height == LayoutParams.MATCH_PARENT || verticalGravity == Gravity.TOP) {
+ return lp.topMargin + desiredMinInset;
+ }
+ }
+ return lp.topMargin;
+ }
+
+ private int calculateChildBottomMargin(LayoutParams lp, int verticalGravity, int
+ desiredMinInset) {
+ if (mIsRound && ((lp.boxedEdges & LayoutParams.BOX_BOTTOM) != 0)) {
+ if (lp.height == LayoutParams.MATCH_PARENT || verticalGravity == Gravity.BOTTOM) {
+ return lp.bottomMargin + desiredMinInset;
+ }
+ }
+ return lp.bottomMargin;
+ }
+
+ private int calculateInset() {
+ int rightEdge = Math.min(getMeasuredWidth(), mScreenWidth);
+ int bottomEdge = Math.min(getMeasuredHeight(), mScreenHeight);
+ return (int) (FACTOR * Math.max(rightEdge, bottomEdge));
+ }
+
+ /**
+ * Per-child layout information for layouts that support margins, gravity and boxedEdges.
+ * See {@link R.styleable#BoxInsetLayout_Layout BoxInsetLayout Layout Attributes} for a list
+ * of all child view attributes that this class supports.
+ *
+ * @attr ref R.styleable#BoxInsetLayout_Layout_boxedEdges
+ */
+ public static class LayoutParams extends FrameLayout.LayoutParams {
+
+ /** @hide */
+ @IntDef({BOX_NONE, BOX_LEFT, BOX_TOP, BOX_RIGHT, BOX_BOTTOM, BOX_ALL})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface BoxedEdges {}
+
+ /** Default boxing setting. There are no insets forced on the child views. */
+ public static final int BOX_NONE = 0x0;
+ /** The view will force an inset on the left edge of the children. */
+ public static final int BOX_LEFT = 0x01;
+ /** The view will force an inset on the top edge of the children. */
+ public static final int BOX_TOP = 0x02;
+ /** The view will force an inset on the right edge of the children. */
+ public static final int BOX_RIGHT = 0x04;
+ /** The view will force an inset on the bottom edge of the children. */
+ public static final int BOX_BOTTOM = 0x08;
+ /** The view will force an inset on all of the edges of the children. */
+ public static final int BOX_ALL = 0x0F;
+
+ /** Specifies the screen-specific insets for each of the child edges. */
+ @BoxedEdges
+ public int boxedEdges = BOX_NONE;
+
+ /**
+ * Creates a new set of layout parameters. The values are extracted from the supplied
+ * attributes set and context.
+ *
+ * @param context the application environment
+ * @param attrs the set of attributes from which to extract the layout parameters' values
+ */
+ @SuppressWarnings("ResourceType")
+ public LayoutParams(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoxInsetLayout_Layout,
+ 0, 0);
+ boxedEdges = a.getInt(R.styleable.BoxInsetLayout_Layout_boxedEdges, BOX_NONE);
+ a.recycle();
+ }
+
+ /**
+ * Creates a new set of layout parameters with the specified width and height.
+ *
+ * @param width the width, either {@link #MATCH_PARENT},
+ * {@link #WRAP_CONTENT} or a fixed size in pixels
+ * @param height the height, either {@link #MATCH_PARENT},
+ * {@link #WRAP_CONTENT} or a fixed size in pixelsy
+ */
+ public LayoutParams(int width, int height) {
+ super(width, height);
+ }
+
+ /**
+ * Creates a new set of layout parameters with the specified width, height
+ * and gravity.
+ *
+ * @param width the width, either {@link #MATCH_PARENT},
+ * {@link #WRAP_CONTENT} or a fixed size in pixels
+ * @param height the height, either {@link #MATCH_PARENT},
+ * {@link #WRAP_CONTENT} or a fixed size in pixels
+ * @param gravity the gravity
+ *
+ * @see android.view.Gravity
+ */
+ public LayoutParams(int width, int height, int gravity) {
+ super(width, height, gravity);
+ }
+
+
+ public LayoutParams(int width, int height, int gravity, @BoxedEdges int boxed) {
+ super(width, height, gravity);
+ boxedEdges = boxed;
+ }
+
+ /**
+ * Copy constructor. Clones the width and height of the source.
+ *
+ * @param source The layout params to copy from.
+ */
+ public LayoutParams(@NonNull ViewGroup.LayoutParams source) {
+ super(source);
+ }
+
+ /**
+ * Copy constructor. Clones the width, height and margin values.
+ *
+ * @param source The layout params to copy from.
+ */
+ public LayoutParams(@NonNull ViewGroup.MarginLayoutParams source) {
+ super(source);
+ }
+
+ /**
+ * Copy constructor. Clones the width, height, margin values, and
+ * gravity of the source.
+ *
+ * @param source The layout params to copy from.
+ */
+ public LayoutParams(@NonNull FrameLayout.LayoutParams source) {
+ super(source);
+ }
+
+ /**
+ * Copy constructor. Clones the width, height, margin values, boxedEdges and
+ * gravity of the source.
+ *
+ * @param source The layout params to copy from.
+ */
+ public LayoutParams(@NonNull LayoutParams source) {
+ super(source);
+ this.boxedEdges = source.boxedEdges;
+ this.gravity = source.gravity;
+ }
+ }
+}
diff --git a/documents-archive/tests/Android.mk b/wearable/tests/Android.mk
similarity index 71%
rename from documents-archive/tests/Android.mk
rename to wearable/tests/Android.mk
index 84cc3c3..41e00fb 100644
--- a/documents-archive/tests/Android.mk
+++ b/wearable/tests/Android.mk
@@ -17,13 +17,22 @@
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := tests
+
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
+
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_STATIC_JAVA_LIBRARIES := \
- android-support-test \
- android-support-documents-archive
-LOCAL_AAPT_FLAGS := --auto-add-overlay -0 zip
-LOCAL_PACKAGE_NAME := AndroidSupportDocumentsArchiveTests
+
+LOCAL_RESOURCE_DIR := \
+ $(LOCAL_PATH)/res \
+ $(LOCAL_PATH)/../res
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android-support-wearable \
+ android-support-annotations
+
+LOCAL_PACKAGE_NAME := WearableViewTests
+LOCAL_AAPT_FLAGS := \
+ --auto-add-overlay \
+ --extra-packages android.support.wearable.view
include $(BUILD_PACKAGE)
diff --git a/wearable/tests/AndroidManifest.xml b/wearable/tests/AndroidManifest.xml
new file mode 100644
index 0000000..7a9cdc8
--- /dev/null
+++ b/wearable/tests/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="android.support.wearable.test">
+ <uses-sdk android:minSdkVersion="20"
+ android:targetSdkVersion="23"
+ tools:overrideLibrary="android.support.test,
+ android.app, android.support.test.rule, android.support.test.espresso,
+ android.support.test.espresso.idling"/>
+
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+
+ <application android:supportsRtl="true">
+ <uses-library android:name="android.test.runner"/>
+ <activity android:name="android.support.wearable.view.LayoutTestActivity" />
+ </application>
+</manifest>
diff --git a/wearable/tests/NO_DOCS b/wearable/tests/NO_DOCS
new file mode 100644
index 0000000..092a39c
--- /dev/null
+++ b/wearable/tests/NO_DOCS
@@ -0,0 +1,17 @@
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+Having this file, named NO_DOCS, in a directory will prevent
+Android javadocs from being generated for java files under
+the directory. This is especially useful for test projects.
diff --git a/wearable/tests/res/layout/box_inset_layout_testcase_1.xml b/wearable/tests/res/layout/box_inset_layout_testcase_1.xml
new file mode 100644
index 0000000..3c2bec9
--- /dev/null
+++ b/wearable/tests/res/layout/box_inset_layout_testcase_1.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.wearable.view.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/box">
+
+ <FrameLayout
+ android:id="@+id/child1"
+ app:boxedEdges="bottom|right"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <TextView
+ android:id="@+id/content1"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="bottom|right"
+ android:text="Test Case 1"/>
+ </FrameLayout>
+
+</android.support.wearable.view.BoxInsetLayout>
diff --git a/wearable/tests/res/layout/box_inset_layout_testcase_2.xml b/wearable/tests/res/layout/box_inset_layout_testcase_2.xml
new file mode 100644
index 0000000..839667c
--- /dev/null
+++ b/wearable/tests/res/layout/box_inset_layout_testcase_2.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.wearable.view.BoxInsetLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/box">
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child1"
+ android:layout_width="match_parent"
+ android:layout_height="60dp"
+ android:layout_gravity="top">
+ <TextView
+ android:id="@+id/content1"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="top|right"
+ android:text="Top Right"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child2"
+ android:layout_width="match_parent"
+ android:layout_height="60dp"
+ android:layout_gravity="bottom">
+ <TextView
+ android:id="@+id/content2"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="bottom|left"
+ android:text="Bottom Left"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child3"
+ android:layout_width="wrap_content"
+ android:layout_height="20dp"
+ android:layout_gravity="left|center_vertical">
+ <TextView
+ android:id="@+id/content3"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical|left"
+ android:text="Left"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child4"
+ android:layout_width="wrap_content"
+ android:layout_height="20dp"
+ android:layout_gravity="right|center_vertical">
+ <TextView
+ android:id="@+id/content4"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical|right"
+ android:text="Right"/>
+ </FrameLayout>
+
+
+</android.support.wearable.view.BoxInsetLayout>
diff --git a/wearable/tests/res/layout/box_inset_layout_testcase_3.xml b/wearable/tests/res/layout/box_inset_layout_testcase_3.xml
new file mode 100644
index 0000000..350de13
--- /dev/null
+++ b/wearable/tests/res/layout/box_inset_layout_testcase_3.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.wearable.view.BoxInsetLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/box">
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child1"
+ android:layout_gravity="top|left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/content1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="Top Left"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child2"
+ android:layout_gravity="top|right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/content2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="Top Right"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child3"
+ android:layout_gravity="bottom|right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/content3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="Bottom Right"/>
+ </FrameLayout>
+
+ <FrameLayout
+ app:boxedEdges="all"
+ android:id="@+id/child4"
+ android:layout_gravity="bottom|left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/content4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="Bottom Left"/>
+ </FrameLayout>
+
+</android.support.wearable.view.BoxInsetLayout>
diff --git a/wearable/tests/res/layout/box_inset_layout_testcase_4.xml b/wearable/tests/res/layout/box_inset_layout_testcase_4.xml
new file mode 100644
index 0000000..a702e4c
--- /dev/null
+++ b/wearable/tests/res/layout/box_inset_layout_testcase_4.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.support.wearable.view.BoxInsetLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/child1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text Super long text Super long text Super long text
+ Super long text Super long text "
+ app:boxedEdges="left|right" />
+
+
+ </android.support.wearable.view.BoxInsetLayout>
+
+</ScrollView>
diff --git a/wearable/tests/src/android/support/wearable/view/BoxInsetLayoutTest.java b/wearable/tests/src/android/support/wearable/view/BoxInsetLayoutTest.java
new file mode 100644
index 0000000..90e3f1c
--- /dev/null
+++ b/wearable/tests/src/android/support/wearable/view/BoxInsetLayoutTest.java
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.view;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.wearable.view.util.MoreViewAssertions.approximateBottom;
+import static android.support.wearable.view.util.MoreViewAssertions.approximateTop;
+import static android.support.wearable.view.util.MoreViewAssertions.bottom;
+import static android.support.wearable.view.util.MoreViewAssertions.left;
+import static android.support.wearable.view.util.MoreViewAssertions.right;
+import static android.support.wearable.view.util.MoreViewAssertions.screenBottom;
+import static android.support.wearable.view.util.MoreViewAssertions.screenLeft;
+import static android.support.wearable.view.util.MoreViewAssertions.screenRight;
+import static android.support.wearable.view.util.MoreViewAssertions.screenTop;
+import static android.support.wearable.view.util.MoreViewAssertions.top;
+
+import static org.hamcrest.Matchers.closeTo;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.wearable.test.R;
+import android.support.wearable.view.util.WakeLockRule;
+import android.util.DisplayMetrics;
+import android.view.View;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class BoxInsetLayoutTest {
+ private static final float FACTOR = 0.146467f; //(1 - sqrt(2)/2)/2
+
+ @Rule
+ public final WakeLockRule wakeLock = new WakeLockRule();
+
+ @Rule
+ public final ActivityTestRule<LayoutTestActivity> activityRule = new ActivityTestRule<>(
+ LayoutTestActivity.class, true, false);
+
+ @Test
+ public void testCase1() {
+ activityRule.launchActivity(new Intent().putExtra(LayoutTestActivity
+ .EXTRA_LAYOUT_RESOURCE_ID, R.layout.box_inset_layout_testcase_1));
+ DisplayMetrics dm = InstrumentationRegistry.getTargetContext().getResources()
+ .getDisplayMetrics();
+ int boxInset = (int) (FACTOR * Math.min(dm.widthPixels, dm.heightPixels));
+
+ int desiredPadding = 0;
+ if (activityRule.getActivity().getResources().getConfiguration().isScreenRound()) {
+ desiredPadding = boxInset;
+ }
+
+ // Child 1 is match_parent width and height
+ // layout_box=right|bottom
+ // Padding of boxInset should be added to the right and bottom sides only
+ onView(withId(R.id.child1)).check(left(equalTo(0))).check(top(equalTo(0))).check(
+ right(equalTo(dm.widthPixels - desiredPadding))).check(
+ bottom(equalTo(dm.heightPixels - desiredPadding)));
+
+ // Content 1 is is width and height match_parent
+ // The bottom and right sides should be inset by boxInset pixels due to padding
+ // on the parent view
+ onView(withId(R.id.content1)).check(screenLeft(equalTo(0))).check(
+ screenTop(equalTo(0))).check(
+ screenRight(equalTo(dm.widthPixels - desiredPadding))).check(
+ screenBottom(equalTo(dm.heightPixels - desiredPadding)));
+ }
+
+ @Test
+ public void testCase2() {
+ activityRule.launchActivity(
+ new Intent().putExtra(LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.box_inset_layout_testcase_2));
+ DisplayMetrics dm =
+ InstrumentationRegistry.getTargetContext().getResources().getDisplayMetrics();
+ int boxInset = (int) (FACTOR * Math.min(dm.widthPixels, dm.heightPixels));
+
+ int desiredPadding = 0;
+ if (activityRule.getActivity().getResources().getConfiguration().isScreenRound()) {
+ desiredPadding = boxInset;
+ }
+
+ View child1 = activityRule.getActivity().findViewById(R.id.child1);
+ View child2 = activityRule.getActivity().findViewById(R.id.child2);
+ View child3 = activityRule.getActivity().findViewById(R.id.child3);
+ View child4 = activityRule.getActivity().findViewById(R.id.child4);
+ // Child 1 is width match_parent, height=60dp, gravity top
+ // layout_box=all means it should have padding added to left, top and right
+ onView(withId(R.id.child1)).check(left(is(equalTo(desiredPadding)))).check(
+ top(is(equalTo(desiredPadding)))).check(
+ right(is(equalTo(dm.widthPixels - desiredPadding)))).check(
+ bottom(is(equalTo(desiredPadding + child1.getHeight()))));
+
+ // Content 1 is width and height match_parent
+ // the left top and right edges should be inset by boxInset pixels, due to
+ // padding in the parent
+ onView(withId(R.id.content1)).check(screenLeft(equalTo(desiredPadding))).check(
+ screenTop(equalTo(desiredPadding))).check(
+ screenRight(equalTo(dm.widthPixels - desiredPadding)));
+
+ // Child 2 is width match_parent, height=60dp, gravity bottom
+ // layout_box=all means it should have padding added to left, bottom and right
+ onView(withId(R.id.child2)).check(left(is(equalTo(desiredPadding)))).check(
+ top(is(equalTo(dm.heightPixels - desiredPadding - child2.getHeight())))).check(
+ right(is(equalTo(dm.widthPixels - desiredPadding)))).check(
+ bottom(is(equalTo(dm.heightPixels - desiredPadding))));
+
+ // Content 2 is width and height match_parent
+ // the left bottom and right edges should be inset by boxInset pixels, due to
+ // padding in the parent
+ onView(withId(R.id.content2)).check(screenLeft(equalTo(desiredPadding))).check(
+ screenRight(equalTo(dm.widthPixels - desiredPadding))).check(
+ screenBottom(equalTo(dm.heightPixels - desiredPadding)));
+
+ // Child 3 is width wrap_content, height=20dp, gravity left|center_vertical.
+ // layout_box=all means it should have padding added to left
+ // marginLeft be ignored due to gravity and layout_box=all (screenLeft=0)
+ onView(withId(R.id.child3)).check(left(is(equalTo(desiredPadding)))).check(approximateTop(
+ is(closeTo((dm.heightPixels / 2 - child3.getHeight() / 2), 1)))).check(
+ right(is(equalTo(desiredPadding + child3.getWidth())))).check(
+ approximateBottom(is(closeTo((dm.heightPixels / 2 + child3.getHeight() / 2), 1))));
+
+ // Content 3 width and height match_parent
+ // the left edge should be offset from the screen edge by boxInset pixels, due to left on
+ // the parent
+ onView(withId(R.id.content3)).check(screenLeft(equalTo(desiredPadding)));
+
+ // Child 4 is width wrap_content, height=20dp, gravity right|center_vertical.
+ // layout_box=all means it should have padding added to right
+ // it should have marginRight ignored due to gravity and layout_box=all (screenRight=max)
+ onView(withId(R.id.child4)).check(
+ left(is(dm.widthPixels - desiredPadding - child4.getWidth()))).check(approximateTop(
+ is(closeTo((dm.heightPixels / 2 - child3.getHeight() / 2), 1)))).check(
+ right(is(equalTo(dm.widthPixels - desiredPadding)))).check(
+ approximateBottom(is(closeTo((dm.heightPixels / 2 + child4.getHeight() / 2), 1))));
+
+ // Content 4 width and height wrap_content
+ // the right edge should be offset from the screen edge by boxInset pixels, due to
+ // right on the parent
+ onView(withId(R.id.content4)).check(screenRight(equalTo(dm.widthPixels - desiredPadding)));
+ }
+
+ @Test
+ public void testCase3() {
+ activityRule.launchActivity(
+ new Intent().putExtra(LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.box_inset_layout_testcase_3));
+ DisplayMetrics dm =
+ InstrumentationRegistry.getTargetContext().getResources().getDisplayMetrics();
+ int boxInset = (int) (FACTOR * Math.min(dm.widthPixels, dm.heightPixels));
+
+ int desiredPadding = 0;
+ if (activityRule.getActivity().getResources().getConfiguration().isScreenRound()) {
+ desiredPadding = boxInset;
+ }
+
+ View child1 = activityRule.getActivity().findViewById(R.id.child1);
+ View child2 = activityRule.getActivity().findViewById(R.id.child2);
+ View child3 = activityRule.getActivity().findViewById(R.id.child3);
+ View child4 = activityRule.getActivity().findViewById(R.id.child4);
+
+ // Child 1 is width and height wrap_content
+ // gravity is top|left, position should be 0,0 on screen
+ onView(withId(R.id.child1)).check(left(is(equalTo(desiredPadding)))).check(
+ top(is(equalTo(desiredPadding)))).check(
+ right(is(equalTo(desiredPadding + child1.getWidth())))).check(
+ bottom(is(equalTo(desiredPadding + child1.getHeight()))));
+
+ // Content 1 is width and height wrap_content
+ // the left and top edges should be offset from the screen edges by boxInset pixels
+ onView(withId(R.id.content1)).check(screenLeft(equalTo(desiredPadding))).check(
+ screenTop(equalTo(desiredPadding)));
+
+ // Child 2 is width and height wrap_content
+ // gravity is top|right, position should be 0,max on screen
+ onView(withId(R.id.child2)).check(
+ left(is(equalTo(dm.widthPixels - desiredPadding - child2.getWidth())))).check(
+ top(is(equalTo(desiredPadding)))).check(
+ right(is(equalTo(dm.widthPixels - desiredPadding)))).check(
+ bottom(is(equalTo(desiredPadding + child2.getHeight()))));
+
+ // Content 2 is width and height wrap_content
+ // the top and right edges should be offset from the screen edges by boxInset pixels
+ onView(withId(R.id.content2)).check(screenTop(equalTo(desiredPadding))).check(
+ screenRight(equalTo(dm.widthPixels - desiredPadding)));
+
+ // Child 3 is width and height wrap_content
+ // gravity is bottom|right, position should be max,max on screen
+ onView(withId(R.id.child3)).check(
+ left(is(equalTo(dm.widthPixels - desiredPadding - child3.getWidth())))).check(
+ top(is(equalTo(dm.heightPixels - desiredPadding - child3.getHeight())))).check(
+ right(is(equalTo(dm.widthPixels - desiredPadding)))).check(
+ bottom(is(equalTo(dm.heightPixels - desiredPadding))));
+
+ // Content 3 is width and height wrap_content
+ // the right and bottom edges should be offset from the screen edges by boxInset pixels
+ onView(withId(R.id.content3)).check(
+ screenBottom(equalTo(dm.heightPixels - desiredPadding))).check(
+ screenRight(equalTo(dm.widthPixels - desiredPadding)));
+
+ // Child 4 is width and height wrap_content
+ // gravity is bottom|left, position should be max,0 on screen
+ onView(withId(R.id.child4)).check(left(is(equalTo(desiredPadding)))).check(
+ top(is(equalTo(dm.heightPixels - desiredPadding - child4.getHeight())))).check(
+ right(is(equalTo(desiredPadding + child4.getWidth())))).check(
+ bottom(is(equalTo(dm.heightPixels - desiredPadding))));
+
+ // Content 3 is width and height wrap_content
+ // the bottom and left edges should be offset from the screen edges by boxInset pixels
+ onView(withId(R.id.content4)).check(
+ screenBottom(equalTo(dm.heightPixels - desiredPadding))).check(
+ screenLeft(equalTo(desiredPadding)));
+ }
+
+ @Test
+ public void testCase4() {
+ activityRule.launchActivity(new Intent().putExtra(LayoutTestActivity
+ .EXTRA_LAYOUT_RESOURCE_ID, R.layout.box_inset_layout_testcase_4));
+ DisplayMetrics dm = InstrumentationRegistry.getTargetContext().getResources()
+ .getDisplayMetrics();
+ int boxInset = (int) (FACTOR * Math.min(dm.widthPixels, dm.heightPixels));
+
+ int desiredPadding = 0;
+ if (activityRule.getActivity().getResources().getConfiguration().isScreenRound()) {
+ desiredPadding = boxInset;
+ }
+
+ View container = activityRule.getActivity().findViewById(R.id.container);
+ View child1 = activityRule.getActivity().findViewById(R.id.child1);
+ // Child 1 is match_parent width and wrap_content height
+ // layout_box=right|left
+ // Padding of boxInset should be added to the right and bottom sides only
+ onView(withId(R.id.child1)).check(left(equalTo(desiredPadding))).check(
+ top(equalTo(container.getTop()))).check(
+ right(equalTo(dm.widthPixels - desiredPadding))).check(
+ bottom(equalTo(container.getTop() + child1.getHeight())));
+ }
+}
diff --git a/wearable/tests/src/android/support/wearable/view/LayoutTestActivity.java b/wearable/tests/src/android/support/wearable/view/LayoutTestActivity.java
new file mode 100644
index 0000000..3fa7396
--- /dev/null
+++ b/wearable/tests/src/android/support/wearable/view/LayoutTestActivity.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.view;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+public class LayoutTestActivity extends Activity {
+ public static final String EXTRA_LAYOUT_RESOURCE_ID = "layout_resource_id";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Intent intent = getIntent();
+ if (!intent.hasExtra(EXTRA_LAYOUT_RESOURCE_ID)) {
+ throw new IllegalArgumentException(
+ "Intent extras must contain EXTRA_LAYOUT_RESOURCE_ID");
+ }
+ int layoutId = intent.getIntExtra(EXTRA_LAYOUT_RESOURCE_ID, -1);
+ setContentView(layoutId);
+ }
+}
diff --git a/wearable/tests/src/android/support/wearable/view/util/MoreViewAssertions.java b/wearable/tests/src/android/support/wearable/view/util/MoreViewAssertions.java
new file mode 100644
index 0000000..54fb89f
--- /dev/null
+++ b/wearable/tests/src/android/support/wearable/view/util/MoreViewAssertions.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.view.util;
+
+import static android.support.test.espresso.matcher.ViewMatchers.assertThat;
+
+import android.support.test.espresso.NoMatchingViewException;
+
+import android.support.test.espresso.ViewAssertion;
+import android.support.test.espresso.util.HumanReadables;
+
+import android.util.Log;
+import android.view.View;
+
+import org.hamcrest.Matcher;
+
+public class MoreViewAssertions {
+
+ public static final String TAG = "bilt";
+
+ public static ViewAssertion left(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "l: " + view.getPaddingLeft());
+ assertThat("View left: " + HumanReadables.describe(view), view.getLeft(), matcher);
+ }
+ };
+ }
+
+ public static ViewAssertion approximateTop(final Matcher<Double> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "t: " + view.getPaddingTop());
+ assertThat("View top: " + HumanReadables.describe(view), ((double) view.getTop()),
+ matcher);
+ }
+ };
+ }
+
+ public static ViewAssertion top(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "t: " + view.getPaddingTop());
+ assertThat("View top: " + HumanReadables.describe(view), view.getTop(), matcher);
+ }
+ };
+ }
+
+ public static ViewAssertion right(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "r: " + view.getPaddingRight());
+ assertThat("View right: " + HumanReadables.describe(view), view.getRight(),
+ matcher);
+ }
+ };
+ }
+
+ public static ViewAssertion bottom(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "b: " + view.getBottom());
+ assertThat("View bottom: " + HumanReadables.describe(view), view.getBottom(),
+ matcher);
+ }
+ };
+ }
+
+ public static ViewAssertion approximateBottom(final Matcher<Double> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ Log.d(TAG, "b: " + view.getBottom());
+ assertThat("View bottom: " + HumanReadables.describe(view), ((double) view
+ .getBottom()), matcher);
+ }
+ };
+ }
+
+ /**
+ * Returns a new ViewAssertion against a match of the view's left position, relative to the
+ * left
+ * edge of the containing window.
+ *
+ * @param matcher matcher for the left position
+ */
+ public static ViewAssertion screenLeft(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ int[] screenXy = {0, 0};
+ view.getLocationInWindow(screenXy);
+ assertThat("View screenLeft: " + HumanReadables.describe(view), screenXy[0],
+ matcher);
+ }
+ };
+ }
+
+ /**
+ * Returns a new ViewAssertion against a match of the view's top position, relative to the top
+ * edge of the containing window.
+ *
+ * @param matcher matcher for the top position
+ */
+ public static ViewAssertion screenTop(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ int[] screenXy = {0, 0};
+ view.getLocationInWindow(screenXy);
+ assertThat("View screenTop: " + HumanReadables.describe(view), screenXy[1],
+ matcher);
+ }
+ };
+ }
+
+ /**
+ * Returns a new ViewAssertion against a match of the view's right position, relative to the
+ * left
+ * edge of the containing window.
+ *
+ * @param matcher matcher for the right position
+ */
+ public static ViewAssertion screenRight(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ int[] screenXy = {0, 0};
+ view.getLocationInWindow(screenXy);
+ assertThat("View screenRight: " + HumanReadables.describe(view),
+ screenXy[0] + view.getWidth(), matcher);
+ }
+ };
+ }
+
+ /**
+ * Returns a new ViewAssertion against a match of the view's bottom position, relative to the
+ * top
+ * edge of the containing window.
+ *
+ * @param matcher matcher for the bottom position
+ */
+ public static ViewAssertion screenBottom(final Matcher<Integer> matcher) {
+ return new ViewAssertion() {
+ @Override
+ public void check(View view, NoMatchingViewException noViewException) {
+ int[] screenXy = {0, 0};
+ view.getLocationInWindow(screenXy);
+ assertThat("View screenBottom: " + HumanReadables.describe(view),
+ screenXy[1] + view.getHeight(), matcher);
+ }
+ };
+ }
+}
diff --git a/wearable/tests/src/android/support/wearable/view/util/WakeLockRule.java b/wearable/tests/src/android/support/wearable/view/util/WakeLockRule.java
new file mode 100644
index 0000000..9b806f4
--- /dev/null
+++ b/wearable/tests/src/android/support/wearable/view/util/WakeLockRule.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.view.util;
+
+import android.content.Context;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
+import android.support.test.InstrumentationRegistry;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+/**
+ * Rule which holds a wake lock for the duration of the test.
+ */
+public class WakeLockRule implements TestRule {
+ @SuppressWarnings("deprecation")
+ private static final int WAKELOCK_FLAGS =
+ PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+
+ @Override
+ public Statement apply(final Statement statement, Description description) {
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ WakeLock wakeLock = createWakeLock();
+ wakeLock.acquire();
+ try {
+ statement.evaluate();
+ } finally {
+ wakeLock.release();
+ }
+ }
+ };
+ }
+
+ private WakeLock createWakeLock() {
+ Context context = InstrumentationRegistry.getTargetContext();
+ PowerManager power = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ return power.newWakeLock(WAKELOCK_FLAGS, context.getPackageName());
+ }
+}