package io.c0nnector.github.paradise.ui.startup; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.ActivityOptionsCompat; import android.view.View; import android.view.ViewGroup; import com.f2prateek.dart.InjectExtra; import com.squareup.otto.Subscribe; import java.util.ArrayList; import butterknife.Bind; import io.c0nnector.github.paradise.R; import io.c0nnector.github.paradise.api.model.Role; import io.c0nnector.github.paradise.api.model.Screenshot; import io.c0nnector.github.paradise.api.model.results.Startup; import io.c0nnector.github.paradise.bus.ScreenshotSelectedEvent; import io.c0nnector.github.paradise.ui.BaseActivity; import io.c0nnector.github.paradise.ui.screenshot.ActivityScreenshot; import io.c0nnector.github.paradise.util.Intents; import io.c0nnector.github.least.LeastAdapter; import io.c0nnector.github.least.LeastView; public class ActivityStartupDetails extends BaseActivity { /** * We could use a NestedScrollview to display the startup details but at this point is pretty * buggy. So we show a single item in a recyclerview */ @Bind(R.id.recyclerView) LeastView leastView; @Nullable @InjectExtra Startup startup; @Nullable @InjectExtra Role role; @Nullable @InjectExtra Integer startupId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_startup); //delay transition until we add the leastview items postponeEnterTransition(); } @Override protected void afterViews() { super.afterViews(); LeastAdapter adapter = new LeastAdapter.Builder() .binder(StartupDetailsViewBinder.instance(getSupportFragmentManager())) .item(new StartupDetailsViewItem(startup, role, startupId)) .build(this); leastView.setAdapter(adapter); leastView.setOnHierarchyChangeListener(leastViewChangeListener); } /** * Called when we upgrade a partial startup object into a full one */ @Subscribe public void onStartupObjectUpdated(final Startup startup) { this.startup = startup; } /** * Called when the user clicks a screenshot * * @param event */ @Subscribe public void onPhotoClick(ScreenshotSelectedEvent event) { //open screenshot gallery ActivityScreenshot.start(this, (ArrayList<Screenshot>) startup.getScreenshots(), event.getPosition(), event.getImgScreenshot()); } /** * Starts activity transition after we add the leastview items */ private ViewGroup.OnHierarchyChangeListener leastViewChangeListener = new ViewGroup.OnHierarchyChangeListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void onChildViewAdded(View parent, View child) { startPostponedEnterTransition(); leastView.setOnHierarchyChangeListener(null); } @Override public void onChildViewRemoved(View parent, View child) { } }; /***************************************************** * ---------------- * Intents * -------------------- * * * ****************************************************/ /** * Start * * @param context * @param startup startup to display */ public static void start(Context context, Startup startup) { Intents.with(context, ActivityStartupDetails.class) .extraParcel("startup", startup) .open(); } /** * Start, with shared element transition * * @param activity * @param startup startup to display */ public static void start(Activity activity, Startup startup, View startupProfileView) { ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, startupProfileView, "startupProfile"); Intents.with(activity, ActivityStartupDetails.class) .extraParcel("startup", startup) .open(options.toBundle()); } /** * Start * * @param context * @param role startup object(light) */ public static void start(Context context, Role role) { Intents.with(context, ActivityStartupDetails.class) .extraParcel("role", role) .open(); } /** * Start * * @param context * @param startupId startupid to load */ public static void start(Context context, Integer startupId) { Intents.with(context, ActivityStartupDetails.class) .extra("startupId", startupId) .open(); } }