package io.github.mthli.Tweetin.Fragment.Picture; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageRequest; import com.android.volley.toolbox.Volley; import com.pnikosis.materialishprogress.ProgressWheel; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import io.github.mthli.Tweetin.R; import io.github.mthli.Tweetin.Task.Profile.ProfileTask; import io.github.mthli.Tweetin.Tweet.Tweet; import io.github.mthli.Tweetin.Tweet.TweetUnit; import io.github.mthli.Tweetin.View.ViewUnit; import uk.co.senab.photoview.PhotoViewAttacher; public class PictureFragment extends Fragment { private SlidingUpPanelLayout slidingUpPanelLayout; public SlidingUpPanelLayout getSlidingUpPanelLayout() { return slidingUpPanelLayout; } private ProgressWheel progressWheel; private TextView reloadView; private ImageView pictureView; private String pictureURL = null; private RequestQueue requestQueue; private Bitmap originBitmap = null; public Bitmap getOriginBitmap() { return originBitmap; } private View profile; public View getProfile() { return profile; } private ProfileTask profileTask; @Override public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) { return inflater.inflate(R.layout.picture_fragment, viewGroup, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); slidingUpPanelLayout = (SlidingUpPanelLayout) getView().findViewById(R.id.picture_fragment_sliding_layout); slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); slidingUpPanelLayout.setShadowHeight(0); profile = LayoutInflater.from(getActivity()).inflate(R.layout.profile, null, false); FrameLayout drag = (FrameLayout) getView().findViewById(R.id.picture_fragment_drag); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ); drag.addView(profile, layoutParams); progressWheel = (ProgressWheel) getView().findViewById(R.id.picture_fragment_progress_bar); progressWheel.setVisibility(View.VISIBLE); reloadView = (TextView) getView().findViewById(R.id.picture_fragment_reload); reloadView.setVisibility(View.GONE); pictureView = (ImageView) getView().findViewById(R.id.picture_fragment_picture); pictureView.setVisibility(View.GONE); TextView descriptionView = (TextView) getView().findViewById(R.id.picture_fragment_description); descriptionView.getBackground().setAlpha(153); descriptionView.setVisibility(View.VISIBLE); Tweet tweet = (new TweetUnit(getActivity())).getTweetFromIntent(getActivity().getIntent()); pictureURL = tweet.getPictureURL(); if (pictureURL == null) { pictureURL = getString(R.string.picture_default_picture_url); } String description = tweet.getText(); if (description == null) { description = getString(R.string.picture_default_desciption); } else { description = "@" + tweet.getScreenName() + ": " + description; } slidingUpPanelLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) {} @Override public void onPanelCollapsed(View panel) { if (profileTask != null && profileTask.getStatus() == AsyncTask.Status.RUNNING) { profileTask.cancel(true); } slidingUpPanelLayout.setShadowHeight(0); } @Override public void onPanelExpanded(View panel) {} @Override public void onPanelAnchored(View panel) {} @Override public void onPanelHidden(View panel) { if (profileTask != null && profileTask.getStatus() == AsyncTask.Status.RUNNING) { profileTask.cancel(true); } slidingUpPanelLayout.setShadowHeight(0); } }); reloadView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { load(); } }); reloadView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(getActivity(), R.string.picture_toast_reload, Toast.LENGTH_SHORT).show(); return true; } }); descriptionView.setMovementMethod(LinkMovementMethod.getInstance()); descriptionView.setText((new TweetUnit(getActivity())).getSpanFromText(description)); requestQueue = Volley.newRequestQueue(getActivity()); load(); } private void load() { progressWheel.setVisibility(View.VISIBLE); reloadView.setVisibility(View.GONE); pictureView.setVisibility(View.GONE); ImageRequest imageRequest = new ImageRequest( pictureURL, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { originBitmap = bitmap; pictureView.setImageBitmap(bitmap); PhotoViewAttacher photoViewAttacher = new PhotoViewAttacher(pictureView); photoViewAttacher.setZoomable(true); photoViewAttacher.update(); progressWheel.setVisibility(View.GONE); reloadView.setVisibility(View.GONE); pictureView.setVisibility(View.VISIBLE); } }, 0, 0, Bitmap.Config.ARGB_8888, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { progressWheel.setVisibility(View.GONE); reloadView.setVisibility(View.VISIBLE); pictureView.setVisibility(View.GONE); } } ); requestQueue.add(imageRequest); } public void showProfile(String screenName) { if (screenName == null) { return; } if (profileTask != null && profileTask.getStatus() == AsyncTask.Status.RUNNING) { profileTask.cancel(true); } profile.findViewById(R.id.profile_progress_bar).setVisibility(View.VISIBLE); profile.findViewById(R.id.profile_all).setVisibility(View.GONE); slidingUpPanelLayout.setShadowHeight((int) ViewUnit.getElevation(getActivity(), 2)); slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED); profileTask = new ProfileTask(getActivity(), profile, screenName); profileTask.execute(); } public void cancelAllTasks() { if (profileTask != null && profileTask.getStatus() == AsyncTask.Status.RUNNING) { profileTask.cancel(true); } requestQueue.stop(); } }