package com.sls.superlight.slates.viewone; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.LayoutRes; import android.util.AttributeSet; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import com.sls.superlight.MainActivity; import com.sls.superlight.R; import com.jakewharton.rxbinding.view.RxView; import com.sls.superlight.superlightstack.AnimationHandler; import com.sls.superlight.superlightstack.BaseView; import com.sls.superlight.slates.Listener; import java.io.IOException; import butterknife.BindView; import butterknife.ButterKnife; import rx.Observable; import rx.Subscription; import rx.subscriptions.CompositeSubscription; import static android.app.Activity.RESULT_OK; public class ViewOne extends BaseView implements Listener { private final CompositeSubscription compositeSubscription = new CompositeSubscription(); private Context context; @BindView(R.id.go_to_button) Button goToButton; @BindView(R.id.arg_text) EditText arg; @BindView(R.id.image_test) ImageView imageView; private int PICK_IMAGE_REQUEST = 1; public ViewOne(Context context) { super(context); this.context = context; } public ViewOne(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public ViewOne(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } @TargetApi(21) public ViewOne(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); this.context = context; } public Observable<Void> imageClicked() { return RxView.clicks(imageView); } private Subscription subscribeImageClick() { return imageClicked() .subscribe(a -> launchGallery()); } private Observable<Void> goToButton() { return RxView.clicks(goToButton); } private Subscription subscribeGoToButton() { return goToButton() .subscribe(a -> switchView(R.layout.view_two, R.id.ViewTwo)); } public void switchView(@LayoutRes int layoutResID, int id) { ((MainActivity)context).transitioner.goTo(layoutResID, id, getData(), AnimationHandler.TransitionTypes.CROSSFADE); } public void launchGallery() { ((MainActivity)context).addListener(this); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); ((MainActivity) context).startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); } @Override protected void onFinishInflate() { ButterKnife.bind(this); this.setId(R.id.ViewOne); super.onFinishInflate(); } private Bundle getData() { Bundle bundle = new Bundle(); bundle.putString("VIEW_ONE", arg.getText().toString()); return bundle; } @Override protected void onAttachedToWindow() { if(super.getBundle() != null) { arg.setText(super.getBundle().getString("VIEW_ONE")); } compositeSubscription.add(subscribeGoToButton()); compositeSubscription.add(subscribeImageClick()); super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { compositeSubscription.clear(); super.onDetachedFromWindow(); } @Override public void resultCallback(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { try { Uri uri = data.getData(); Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri); this.imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } } } }