package com.chenjishi.slidedemo.base;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.chenjishi.slidedemo.R;
import com.nineoldandroids.view.ViewHelper;

import static com.chenjishi.slidedemo.base.IntentUtils.KEY_PREVIEW_IMAGE;

/**
 * Created by chenjishi on 14-3-17.
 */
public class SlidingActivity extends FragmentActivity {
    private static final float MIN_SCALE = 0.85f;

    private View mPreview;

    private float mInitOffset;
    private boolean hideTitle = false;
    private int titleResId = -1;

    @SuppressLint("NewApi")
    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(R.layout.slide_layout);

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mInitOffset = (1 - MIN_SCALE) * metrics.widthPixels / 2.f;

        mPreview = findViewById(R.id.iv_preview);
        FrameLayout contentView = (FrameLayout) findViewById(R.id.content_view);

        if (!hideTitle) {
            int resId = -1 == titleResId ? R.layout.title_layout : titleResId;
            inflater.inflate(resId, contentView);
        }

        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, Gravity.BOTTOM);
        final int marginTop = hideTitle ? 0 : (int) (metrics.density * 48.f + .5f);
        layoutParams.setMargins(0, marginTop, 0, 0);
        contentView.addView(inflater.inflate(layoutResID, null), layoutParams);

        SlidingLayout slideLayout = (SlidingLayout) findViewById(R.id.slide_layout);
        slideLayout.setShadowResource(R.drawable.sliding_back_shadow);
        slideLayout.setSliderFadeColor(0x00000000);
        slideLayout.setPanelSlideListener(new SlidingLayout.SimpleSlideListener() {
            @Override
            public void onPanelSlide(View panel, float slideOffset) {
                final int sdkInt = Build.VERSION.SDK_INT;

                if (slideOffset <= 0) {
                    if (sdkInt >= Build.VERSION_CODES.HONEYCOMB) {
                        mPreview.setScaleX(MIN_SCALE);
                        mPreview.setScaleY(MIN_SCALE);
                    } else {
                        ViewHelper.setScaleX(mPreview, MIN_SCALE);
                        ViewHelper.setScaleY(mPreview, MIN_SCALE);
                    }
                } else if (slideOffset < 1) {
                    // Scale the page down (between MIN_SCALE and 1)
                    float scaleFactor = MIN_SCALE + Math.abs(slideOffset) * (1 - MIN_SCALE);

                    if (sdkInt >= Build.VERSION_CODES.HONEYCOMB) {
                        mPreview.setAlpha(slideOffset);
                        mPreview.setTranslationX(mInitOffset * (1 - slideOffset));
                        mPreview.setScaleX(scaleFactor);
                        mPreview.setScaleY(scaleFactor);
                    } else {
                        ViewHelper.setAlpha(mPreview, slideOffset);
                        ViewHelper.setTranslationX(mPreview, mInitOffset * (1 - slideOffset));
                        ViewHelper.setScaleX(mPreview, scaleFactor);
                        ViewHelper.setScaleY(mPreview, scaleFactor);
                    }
                } else {
                    if (sdkInt >= Build.VERSION_CODES.HONEYCOMB) {
                        mPreview.setScaleX(1);
                        mPreview.setScaleY(1);
                        mPreview.setAlpha(1);
                        mPreview.setTranslationX(0);
                    } else {
                        ViewHelper.setScaleX(mPreview, 1);
                        ViewHelper.setScaleY(mPreview, 1);
                        ViewHelper.setAlpha(mPreview, 1);
                        ViewHelper.setTranslationX(mPreview, 0);
                    }
                    finish();
                    overridePendingTransition(0, 0);
                }
            }
        });


        byte[] byteArray = getIntent().getByteArrayExtra(KEY_PREVIEW_IMAGE);
        if (null != byteArray && byteArray.length > 0) {
            Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            if (null != bmp) {
                ((ImageView) mPreview).setImageBitmap(bmp);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    mPreview.setScaleX(MIN_SCALE);
                    mPreview.setScaleY(MIN_SCALE);
                } else {
                    ViewHelper.setScaleX(mPreview, MIN_SCALE);
                    ViewHelper.setScaleY(mPreview, MIN_SCALE);
                }
            } else {
                /** preview image captured fail, disable the slide back */
                slideLayout.setSlideable(false);
            }
        } else {
            /** preview image captured fail, disable the slide back */
            slideLayout.setSlideable(false);
        }
    }

    protected void setContentView(int layoutResID, int titleResId) {
        this.titleResId = titleResId;
        setContentView(layoutResID);
    }

    protected void setContentView(int layoutResID, boolean hideTitle) {
        this.hideTitle = hideTitle;
        setContentView(layoutResID);
    }
}

@@ -4558,24 +4558,135 @@
 ngth %3E 0) %7B%0A
+            BitmapFactory.Options options = new BitmapFactory.Options();%0A            options.inSampleSize = 2;%0A
             
@@ -4758,16 +4758,25 @@
 y.length
+, options
 );%0A     

make sample size smaller when decode bitmap prevent out of memory problem