package com.quickblox.sample.content.activities; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.TextView; import com.quickblox.content.QBContent; import com.quickblox.content.model.QBFile; import com.quickblox.core.QBEntityCallback; import com.quickblox.core.QBProgressCallback; import com.quickblox.core.exception.QBResponseException; import com.quickblox.core.request.QBPagedRequestBuilder; import com.quickblox.sample.content.R; import com.quickblox.sample.content.adapter.GalleryAdapter; import com.quickblox.sample.content.helper.DataHolder; import com.quickblox.sample.content.helper.DownloadMoreListener; import com.quickblox.sample.core.utils.DialogUtils; import com.quickblox.sample.core.utils.ErrorUtils; import com.quickblox.sample.core.utils.Toaster; import com.quickblox.sample.core.utils.imagepick.ImagePickHelper; import com.quickblox.sample.core.utils.imagepick.OnImagePickedListener; import java.io.File; import java.util.ArrayList; public class GalleryActivity extends BaseActivity implements AdapterView.OnItemClickListener, OnImagePickedListener, DownloadMoreListener { public static final int GALLERY_REQUEST_CODE = 183; private static final int IMAGE_SIZE_LIMIT_KB = 1024 * 100; private static final int IMAGES_PER_PAGE = 50; private int current_page = 1; private GalleryAdapter galleryAdapter; private ImagePickHelper imagePickHelper; private LinearLayout emptyView; private TextView problemView; private TextView descriptionView; public static void start(Context context) { Intent intent = new Intent(context, GalleryActivity.class); context.startActivity(intent); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gallery); DataHolder.getInstance().clear(); initUI(); getFileList(); imagePickHelper = new ImagePickHelper(); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { QBFile qbFile = (QBFile) adapterView.getItemAtPosition(position); ShowImageActivity.start(this, qbFile.getId()); } public void onStartUploadImageClick(View view) { imagePickHelper.pickAnImage(this, GALLERY_REQUEST_CODE); } private void initUI() { galleryAdapter = new GalleryAdapter(this, DataHolder.getInstance().getQBFiles()); galleryAdapter.setDownloadMoreListener(this); GridView galleryGridView = _findViewById(R.id.gallery_gridview); emptyView = _findViewById(R.id.empty_view); problemView = _findViewById(R.id.problem); descriptionView = _findViewById(R.id.description); galleryGridView.setAdapter(galleryAdapter); galleryGridView.setOnItemClickListener(this); } private void getFileList() { progressDialog = DialogUtils.getProgressDialog(this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show(); QBPagedRequestBuilder builder = new QBPagedRequestBuilder(); builder.setPerPage(IMAGES_PER_PAGE); builder.setPage(current_page++); QBContent.getFiles(builder).performAsync(new QBEntityCallback<ArrayList<QBFile>>() { @Override public void onSuccess(ArrayList<QBFile> qbFiles, Bundle bundle) { if (qbFiles.isEmpty()) { current_page--; } else { DataHolder.getInstance().addQbFiles(qbFiles); } if (progressDialog.isIndeterminate()) { progressDialog.dismiss(); } updateData(); } @Override public void onError(QBResponseException e) { progressDialog.dismiss(); current_page--; View view = findViewById(R.id.activity_gallery); showSnackbarError(view, R.string.splash_create_session_error, e, new View.OnClickListener() { @Override public void onClick(View v) { getFileList(); } }); } }); } private void updateData() { if (DataHolder.getInstance().isEmpty()) { noPhoto(); } else { emptyView.setVisibility(View.GONE); } galleryAdapter.updateData(DataHolder.getInstance().getQBFiles()); } private void noPhoto() { problemView.setText(getResources().getString(R.string.no_photo)); descriptionView.setText(getResources().getString(R.string.press_button)); descriptionView.setTextColor(ContextCompat.getColor(this, R.color.text_color_light_grey)); emptyView.setVisibility(View.VISIBLE); } private void uploadSelectedImage(final File imageFile) { final int imageSizeKb = (int) imageFile.length() / 1024; final float onePercent = (float) imageSizeKb / 100; if (imageSizeKb >= IMAGE_SIZE_LIMIT_KB) { Toaster.longToast(R.string.image_size_error); return; } progressDialog.dismiss(); progressDialog = DialogUtils.getProgressDialog(this); progressDialog.setMax(imageSizeKb); progressDialog.setProgressNumberFormat("%1d/%2d kB"); progressDialog.show(); QBContent.uploadFileTask(imageFile, true, null, new QBProgressCallback() { @Override public void onProgressUpdate(int progress) { progressDialog.setProgress((int) (onePercent * progress)); } }).performAsync(new QBEntityCallback<QBFile>() { @Override public void onSuccess(QBFile qbFile, Bundle bundle) { DataHolder.getInstance().addQbFile(qbFile); progressDialog.dismiss(); updateData(); } @Override public void onError(QBResponseException e) { progressDialog.dismiss(); View view = findViewById(R.id.activity_gallery); showSnackbarError(view, R.string.splash_create_session_error, e, new View.OnClickListener() { @Override public void onClick(View v) { uploadSelectedImage(imageFile); } }); } }); } @Override public void onImagePicked(int requestCode, File file) { uploadSelectedImage(file); } @Override public void onImagePickError(int requestCode, Exception e) { ErrorUtils.showErrorDialog(this, R.string.gallery_pick_error, e.getMessage()); } @Override public void onImagePickClosed(int requestCode) { // ignored } @Override public void downloadMore() { getFileList(); } }