package uk.co.imallan.tuchongdaily.ui.fragment; import android.database.Cursor; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.text.TextUtils; import android.transition.Slide; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import uk.co.imallan.tuchongdaily.R; import uk.co.imallan.tuchongdaily.db.Table; import uk.co.imallan.tuchongdaily.provider.ImageProvider; import uk.co.imallan.tuchongdaily.utils.ImageUtils; /** * Created by allan on 15/3/1. */ public class ImageFragment extends AbstractFragment implements LoaderManager.LoaderCallbacks<Cursor>, View.OnClickListener { public static final String IMAGE_SERVER_ID = "IMAGE_SERVER_ID"; private static final int LOADER_REQUEST_IMAGE = 1; private View mRootView; public ImageView mImage; private String mServerId; private TextView mCamera; private TextView mLens; @Override protected boolean prepareServiceReceiver() { return false; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle arguments = getArguments(); mServerId = arguments.getString(IMAGE_SERVER_ID); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(R.layout.fragment_image, container, false); mImage = (ImageView) mRootView.findViewById(R.id.image_view_image_framgent); mCamera = (TextView) mRootView.findViewById(R.id.text_image_fragment_camera_info); mLens = (TextView) mRootView.findViewById(R.id.text_image_fragment_lens_info); initTransitions(); return mRootView; } private void initTransitions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Slide slideInBottom = new Slide(); slideInBottom.addTarget(R.id.text_image_fragment_camera_info); slideInBottom.addTarget(R.id.text_image_fragment_lens_info); slideInBottom.setStartDelay(300); getActivity().getWindow().setEnterTransition(slideInBottom); Slide slide = new Slide(); slide.addTarget(R.id.text_image_fragment_camera_info); slide.addTarget(R.id.text_image_fragment_lens_info); } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mImage.setOnClickListener(this); mRootView.setOnClickListener(this); getLoaderManager().initLoader(LOADER_REQUEST_IMAGE, null, this); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch (id) { case LOADER_REQUEST_IMAGE: return new CursorLoader(getActivity(), ImageProvider.uriImage(mServerId), null, null, null, null); default: return null; } } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { switch (loader.getId()) { case LOADER_REQUEST_IMAGE: if (data.moveToFirst()) { Picasso.with(getActivity()).load(data.getString(data.getColumnIndex(Table.Image.COLUMN_URL_LARGE))) .transform(new ImageUtils.LimitImageSizeTransformation(ImageUtils.LimitImageSizeTransformation.QUALITY.QUALITY_1080P)) .noPlaceholder().noFade().into(mImage, new Callback() { @Override public void onSuccess() { scheduleStartPostponedTransition(mImage); } @Override public void onError() { scheduleStartPostponedTransition(mImage); } }); String camera = data.getString(data.getColumnIndex(Table.Image.COLUMN_CAMERA)); String lens = data.getString(data.getColumnIndex(Table.Image.COLUMN_LENS)); if (!TextUtils.isEmpty(camera)) { mCamera.setText(camera); } if (!TextUtils.isEmpty(lens)) { mLens.setText(lens); } break; } } } @Override public void onLoaderReset(Loader<Cursor> loader) { } @Override public void onClick(View v) { switch (v.getId()) { case R.id.root_view_fragment_image: case R.id.image_view_image_framgent: getActivity().onBackPressed(); break; } } }