diff options
| author | Gus Prevas <kprevas@google.com> | 2015-09-17 17:34:46 -0400 |
|---|---|---|
| committer | Gus Prevas <kprevas@google.com> | 2015-09-25 13:10:52 -0400 |
| commit | 1ed322b123b5aa8cd02c036e5e3393b6a79f559f (patch) | |
| tree | d08adcece2b43a58edddbe09d872ff2304f420aa | |
| parent | de02fe2afdc835eca72bb05a1514daa439bb2b40 (diff) | |
| download | frameworks_base-1ed322b123b5aa8cd02c036e5e3393b6a79f559f.zip frameworks_base-1ed322b123b5aa8cd02c036e5e3393b6a79f559f.tar.gz frameworks_base-1ed322b123b5aa8cd02c036e5e3393b6a79f559f.tar.bz2 | |
Adds an option to override RemoteViews transition.
This change adds a configuration option,
"config_overrideRemoteViewsActivityTransition", which is false by
default and true on watches. If it's true, when a RemoteViews
is clicked, it will use a new attribute on the active window animation
style, "activityOpenRemoteViewsEnterAnimation", to determine
the entry transition to use, instead of the current hard-coded
default.
Bug: 23534750
Change-Id: I91e92804a663ab71a3e46c3430fa579b87cc7931
| -rw-r--r-- | core/java/android/widget/RemoteViews.java | 41 | ||||
| -rw-r--r-- | core/res/res/values-watch/config.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 7 | ||||
| -rw-r--r-- | core/res/res/values/config.xml | 4 | ||||
| -rw-r--r-- | core/res/res/values/styles_micro.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 |
6 files changed, 54 insertions, 3 deletions
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7ca3339..ca1b211 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -31,6 +31,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.PorterDuff; import android.graphics.Rect; @@ -55,6 +56,8 @@ import android.view.ViewGroup; import android.widget.AdapterView.OnItemClickListener; import libcore.util.Objects; +import com.android.internal.R; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -206,14 +209,22 @@ public class RemoteViews implements Parcelable, Filter { /** @hide */ public static class OnClickHandler { + + private int mEnterAnimationId; + public boolean onClickHandler(View view, PendingIntent pendingIntent, Intent fillInIntent) { try { // TODO: Unregister this handler if PendingIntent.FLAG_ONE_SHOT? Context context = view.getContext(); - ActivityOptions opts = ActivityOptions.makeScaleUpAnimation(view, - 0, 0, - view.getMeasuredWidth(), view.getMeasuredHeight()); + ActivityOptions opts; + if (mEnterAnimationId != 0) { + opts = ActivityOptions.makeCustomAnimation(context, mEnterAnimationId, 0); + } else { + opts = ActivityOptions.makeScaleUpAnimation(view, + 0, 0, + view.getMeasuredWidth(), view.getMeasuredHeight()); + } context.startIntentSender( pendingIntent.getIntentSender(), fillInIntent, Intent.FLAG_ACTIVITY_NEW_TASK, @@ -228,6 +239,10 @@ public class RemoteViews implements Parcelable, Filter { } return true; } + + public void setEnterAnimationId(int enterAnimationId) { + mEnterAnimationId = enterAnimationId; + } } /** @@ -2761,11 +2776,31 @@ public class RemoteViews implements Parcelable, Filter { inflater.setFilter(this); result = inflater.inflate(rvToApply.getLayoutId(), parent, false); + loadTransitionOverride(context, handler); + rvToApply.performApply(result, parent, handler); return result; } + private static void loadTransitionOverride(Context context, + RemoteViews.OnClickHandler handler) { + if (handler != null && context.getResources().getBoolean( + com.android.internal.R.bool.config_overrideRemoteViewsActivityTransition)) { + TypedArray windowStyle = context.getTheme().obtainStyledAttributes( + com.android.internal.R.styleable.Window); + int windowAnimations = windowStyle.getResourceId( + com.android.internal.R.styleable.Window_windowAnimationStyle, 0); + TypedArray windowAnimationStyle = context.obtainStyledAttributes( + windowAnimations, com.android.internal.R.styleable.WindowAnimation); + handler.setEnterAnimationId(windowAnimationStyle.getResourceId( + com.android.internal.R.styleable. + WindowAnimation_activityOpenRemoteViewsEnterAnimation, 0)); + windowStyle.recycle(); + windowAnimationStyle.recycle(); + } + } + /** * Applies all of the actions to the provided view. * diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml index 41b05ea..919519e 100644 --- a/core/res/res/values-watch/config.xml +++ b/core/res/res/values-watch/config.xml @@ -54,4 +54,7 @@ <!-- Do not show the message saying USB is connected in charging mode. --> <bool name="config_usbChargingMessage">false</bool> + + <!-- Use a custom transition for RemoteViews. --> + <bool name="config_overrideRemoteViewsActivityTransition">true</bool> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index cf83422..2828d21 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2144,6 +2144,13 @@ i (which is exiting the screen). The wallpaper remains static behind the animation. --> <attr name="wallpaperIntraCloseExitAnimation" format="reference" /> + + <!-- When opening a new activity from a RemoteViews, this is the + animation that is run on the next activity (which is entering the + screen). Requires config_overrideRemoteViewsActivityTransition to + be true. --> + <attr name="activityOpenRemoteViewsEnterAnimation" format="reference" /> + </declare-styleable> <!-- ============================= --> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index f1e26aa..0859e5a 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2217,6 +2217,10 @@ <bool name="config_defaultWindowFeatureOptionsPanel">true</bool> <bool name="config_defaultWindowFeatureContextMenu">true</bool> + <!-- If true, the transition for a RemoteViews is read from a resource instead of using the + default scale-up transition. --> + <bool name="config_overrideRemoteViewsActivityTransition">false</bool> + <!-- This config is used to check if the carrier requires converting destination number before sending out a SMS. Formats for this configuration as below: diff --git a/core/res/res/values/styles_micro.xml b/core/res/res/values/styles_micro.xml index c6052ff..05835e7 100644 --- a/core/res/res/values/styles_micro.xml +++ b/core/res/res/values/styles_micro.xml @@ -18,6 +18,7 @@ <style name="Animation.Micro.Activity" parent="Animation.Material.Activity"> <item name="activityOpenEnterAnimation">@anim/slide_in_micro</item> + <item name="activityOpenRemoteViewsEnterAnimation">@anim/slide_in_micro</item> <item name="activityOpenExitAnimation">@null</item> <item name="activityCloseEnterAnimation">@null</item> <item name="activityCloseExitAnimation">@anim/slide_out_micro</item> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index bdbc86f..6d8c38f 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2203,6 +2203,7 @@ <java-symbol type="bool" name="config_sms_force_7bit_encoding" /> <java-symbol type="bool" name="config_defaultWindowFeatureOptionsPanel" /> <java-symbol type="bool" name="config_defaultWindowFeatureContextMenu" /> + <java-symbol type="bool" name="config_overrideRemoteViewsActivityTransition" /> <java-symbol type="layout" name="simple_account_item" /> <java-symbol type="array" name="config_sms_convert_destination_number_support" /> |
