Skip to content

Commit

Permalink
Added Vito Activity transition util, similar to DraweeTransition and …
Browse files Browse the repository at this point in the history
…migrate Showcase sample

Reviewed By: kartavya-ramnani

Differential Revision: D64238554

fbshipit-source-id: c60a191643bba7c847b08d81fda052da44069478
  • Loading branch information
oprisnik authored and facebook-github-bot committed Jan 13, 2025
1 parent 6434cd9 commit 0d6849b
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 49 deletions.
4 changes: 2 additions & 2 deletions samples/showcase/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
</activity>

<activity
android:name=".drawee.transition.ImageDetailsActivity"
android:label="@string/drawee_transition_details_title"
android:name=".vito.transition.ImageDetailsActivity"
android:label="@string/vito_transition_details_title"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme.ImageDetails"
android:exported="false"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
package com.facebook.fresco.samples.showcase

import com.facebook.fresco.samples.showcase.drawee.*
import com.facebook.fresco.samples.showcase.drawee.transition.DraweeTransitionFragment
import com.facebook.fresco.samples.showcase.imageformat.color.ImageFormatColorFragment
import com.facebook.fresco.samples.showcase.imageformat.datauri.ImageFormatDataUriFragment
import com.facebook.fresco.samples.showcase.imageformat.gif.ImageFormatGifFragment
Expand All @@ -27,6 +26,7 @@ import com.facebook.fresco.samples.showcase.vito.renderer.RendererColorFilterExa
import com.facebook.fresco.samples.showcase.vito.renderer.RendererFadeExampleFragment
import com.facebook.fresco.samples.showcase.vito.renderer.RendererShapeExampleFragment
import com.facebook.fresco.samples.showcase.vito.renderer.VitoLayerExample
import com.facebook.fresco.samples.showcase.vito.transition.VitoTransitionFragment

object ExampleDatabase {

Expand All @@ -39,7 +39,6 @@ object ExampleDatabase {
"Drawee",
listOf(
ExampleItem("Simple DraweeSpan") { DraweeSpanSimpleTextFragment() },
ExampleItem("Drawee Transition") { DraweeTransitionFragment() },
ExampleItem("Retaining Data Source Supplier") {
RetainingDataSourceSupplierFragment()
},
Expand Down Expand Up @@ -115,6 +114,7 @@ object ExampleDatabase {
ExampleItem("Multi URI") { MultiUriFragment() },
ExampleItem("Placeholder, Progress, Failure") { ImageLayersFragment() },
ExampleItem("Rounded Corners") { VitoRoundedCornersFragment() },
ExampleItem("Image Transition") { VitoTransitionFragment() },
)),
ExampleCategory(
"Vito Renderer",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,28 @@
* LICENSE file in the root directory of this source tree.
*/

package com.facebook.fresco.samples.showcase.drawee.transition;
package com.facebook.fresco.samples.showcase.vito.transition;

import android.content.Context;
import android.content.Intent;
import android.graphics.PointF;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.ImageView;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.view.DraweeTransition;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.fresco.samples.showcase.R;
import com.facebook.fresco.vito.options.ImageOptions;
import com.facebook.fresco.vito.view.VitoView;
import com.facebook.vito.view.transition.VitoTransition;

/** Image details activity */
public class ImageDetailsActivity extends AppCompatActivity {

private static final String CALLER_CONTEXT = "VitoTransitionFragment";

public static Intent getStartIntent(Context context, Uri imageUri) {
Intent intent = new Intent(context, ImageDetailsActivity.class);
intent.setData(imageUri);
Expand All @@ -33,35 +36,34 @@ public static Intent getStartIntent(Context context, Uri imageUri) {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawee_transition_detail);
setContentView(R.layout.activity_vito_transition_detail);

ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}

SimpleDraweeView simpleDraweeView = (SimpleDraweeView) findViewById(R.id.image);
simpleDraweeView.setImageURI(getIntent().getData());
ImageView imageView = findViewById(R.id.image);
imageView.setImageURI(getIntent().getData());

ScalingUtils.ScaleType toScaleType = ScalingUtils.ScaleType.FOCUS_CROP;
PointF toFocusPoint = new PointF(0.5f, 0);

simpleDraweeView.getHierarchy().setActualImageScaleType(toScaleType);
simpleDraweeView.getHierarchy().setActualImageFocusPoint(toFocusPoint);
ImageOptions imageOptions =
ImageOptions.create().scale(toScaleType).focusPoint(toFocusPoint).build();
VitoView.show(getIntent().getData(), imageOptions, CALLER_CONTEXT, imageView);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ScalingUtils.ScaleType fromScaleType = ScalingUtils.ScaleType.FOCUS_CROP;
PointF fromFocusPoint = DraweeTransitionFragment.FOCUS_POINT;
ScalingUtils.ScaleType fromScaleType = ScalingUtils.ScaleType.FOCUS_CROP;
PointF fromFocusPoint = VitoTransitionFragment.FOCUS_POINT;

getWindow()
.setSharedElementEnterTransition(
DraweeTransition.createTransitionSet(
fromScaleType, toScaleType, fromFocusPoint, toFocusPoint));
getWindow()
.setSharedElementReturnTransition(
DraweeTransition.createTransitionSet(
toScaleType, fromScaleType, toFocusPoint, fromFocusPoint));
}
getWindow()
.setSharedElementEnterTransition(
VitoTransition.createTransitionSet(
CALLER_CONTEXT, fromScaleType, toScaleType, fromFocusPoint, toFocusPoint));
getWindow()
.setSharedElementReturnTransition(
VitoTransition.createTransitionSet(
CALLER_CONTEXT, toScaleType, fromScaleType, toFocusPoint, fromFocusPoint));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/

package com.facebook.fresco.samples.showcase.drawee.transition;
package com.facebook.fresco.samples.showcase.vito.transition;

import android.app.ActivityOptions;
import android.content.Intent;
Expand All @@ -15,37 +15,49 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.facebook.common.internal.Suppliers;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.fresco.samples.showcase.BaseShowcaseFragment;
import com.facebook.fresco.samples.showcase.R;
import com.facebook.fresco.samples.showcase.misc.ImageUriProvider;
import com.facebook.fresco.vito.options.ImageOptions;
import com.facebook.fresco.vito.view.VitoView;
import com.facebook.fresco.vito.view.impl.VitoViewImpl2;

/** Simple drawee fragment that just displays an image. */
public class DraweeTransitionFragment extends BaseShowcaseFragment {
public class VitoTransitionFragment extends BaseShowcaseFragment {

public static final PointF FOCUS_POINT = new PointF(1, 0.5f);
private static final String CALLER_CONTEXT = "VitoTransitionFragment";

@Nullable
@Override
public View onCreateView(
LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_drawee_transition, container, false);
return inflater.inflate(R.layout.fragment_vito_transition, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
final Uri imageUri = sampleUris().createSampleUri(ImageUriProvider.ImageSize.M);

final SimpleDraweeView simpleDraweeView =
(SimpleDraweeView) view.findViewById(R.id.drawee_view);
// You have to enable legacy visibility handling for the start view in order for this to work
simpleDraweeView.setLegacyVisibilityHandlingEnabled(true);
simpleDraweeView.setImageURI(imageUri);
simpleDraweeView.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP);
simpleDraweeView.getHierarchy().setActualImageFocusPoint(FOCUS_POINT);
simpleDraweeView.setOnClickListener(
// In Android N, visibility handling for ImageView was changed to use onVisibilityAggregated,
// which doesn't update the visibility of the starting Vito view correctly when the activity
// transition is reversed.
// Hence, we have to (globally) disable Visibility APIs for now.
VitoViewImpl2.useVisibilityCallbacks = Suppliers.BOOLEAN_FALSE;

final ImageView imageView = view.findViewById(R.id.image_view);
final ImageOptions imageOptions =
ImageOptions.create()
.scale(ScalingUtils.ScaleType.FOCUS_CROP)
.focusPoint(FOCUS_POINT)
.build();
imageView.setImageURI(imageUri);
VitoView.show(imageUri, imageOptions, CALLER_CONTEXT, imageView);
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>

<com.facebook.drawee.view.SimpleDraweeView
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transitionName="@string/transition_name"
fresco:actualImageScaleType="fitCenter"
/>

<TextView
Expand All @@ -23,7 +21,7 @@
android:background="@color/image_detail_help_background"
android:textColor="@android:color/white"
android:padding="@dimen/activity_horizontal_margin"
android:text="@string/drawee_transition_details_help"
android:text="@string/vito_transition_details_help"
/>

</FrameLayout>
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
>

<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/drawee_view"
<ImageView
android:id="@+id/image_view"
android:layout_width="@dimen/drawee_width_medium"
android:layout_height="@dimen/drawee_height_medium"
fresco:actualImageScaleType="centerCrop"
/>

<TextView
Expand All @@ -21,7 +19,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_medium"
android:gravity="center"
android:text="@string/drawee_transition_help"
android:text="@string/vito_transition_help"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</LinearLayout>
6 changes: 3 additions & 3 deletions samples/showcase/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@

<string name="drawee_rotation_help">Change the used RotationOptions using the drop-down menu on top.</string>

<string name="drawee_transition_help">Tap the image to start the activity transition.</string>
<string name="drawee_transition_details_title">Image Detail Activity</string>
<string name="drawee_transition_details_help">This is the second activity. Press back to reverse the transition.</string>
<string name="vito_transition_help">Tap the image to start the activity transition.</string>
<string name="vito_transition_details_title">Image Detail Activity</string>
<string name="vito_transition_details_help">This is the second activity. Press back to reverse the transition.</string>

<string name="drawee_retaining_supplier_help">Click on the image to show the next one. The previous one will be retained until the new image is ready.</string>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.facebook.fresco.vito.source.ImageSource
/** Vito View implementation */
object VitoViewImpl2 {
@JvmField var useVisibilityCallbacks: Supplier<Boolean> = Suppliers.BOOLEAN_TRUE
@JvmField var useVisibilityAggregatedCallbacks: Supplier<Boolean> = Suppliers.BOOLEAN_FALSE
@JvmField var useSimpleFetchLogic: Supplier<Boolean> = Suppliers.BOOLEAN_FALSE
@JvmField var useReleaseInViewDetached: Supplier<Boolean> = Suppliers.BOOLEAN_TRUE
@JvmField var useReleaseDelayedInViewDetached: Supplier<Boolean> = Suppliers.BOOLEAN_FALSE
Expand Down
Loading

0 comments on commit 0d6849b

Please sign in to comment.