gust94

GalleryFragment

Jan 19th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.77 KB | None | 0 0
  1. package com.dss.invitup.vc.occasionPage.gallery;
  2. import android.Manifest;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.content.pm.PackageManager;
  6. import android.graphics.Bitmap;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.provider.MediaStore;
  11. import android.support.v4.app.ActivityCompat;
  12. import android.support.v4.app.Fragment;
  13. import android.support.v7.app.AlertDialog;
  14. import android.support.v7.widget.DefaultItemAnimator;
  15. import android.support.v7.widget.RecyclerView;
  16. import android.support.v7.widget.StaggeredGridLayoutManager;
  17. import android.util.Log;
  18. import android.view.LayoutInflater;
  19. import android.view.View;
  20. import android.view.ViewGroup;
  21. import android.widget.ImageView;
  22. import android.widget.LinearLayout;
  23. import android.widget.Toast;
  24. import com.dss.invitup.MainActivity;
  25. import com.dss.invitup.R;
  26. import com.dss.invitup.adapters.GalleryAdapter;
  27. import com.dss.invitup.events.AddPicturePermissionEvent;
  28. import com.dss.invitup.events.GalleryFullImageItemClickedEvent;
  29. import com.dss.invitup.events.GetGalleryEntriesDeleteFinishedEvent;
  30. import com.dss.invitup.events.GetGalleryEntriesFinishedEvent;
  31. import com.dss.invitup.events.GetUpdateGalleryEntryFinishedEvent;
  32. import com.dss.invitup.events.MainActivityHideLoadingEvent;
  33. import com.dss.invitup.events.MainActivityShowLoadingEvent;
  34. import com.dss.invitup.models.serverResponses.OccasionGalleryEntriesResponse;
  35. import com.dss.invitup.singleton.AppController;
  36. import com.dss.invitup.singleton.InterfaceManager;
  37. import com.dss.invitup.singleton.ServerManager;
  38. import com.dss.invitup.singleton.SettingsManager;
  39. import com.dss.invitup.singleton.UploadManager;
  40. import com.dss.invitup.view.RobotoMediumTextView;
  41. import com.dss.invitup.view.RobotoRegularTextView;
  42. import java.io.ByteArrayOutputStream;
  43. import java.io.File;
  44. import java.io.IOException;
  45. import java.text.SimpleDateFormat;
  46. import java.util.Date;
  47. import de.greenrobot.event.EventBus;
  48. import in.srain.cube.views.ptr.PtrClassicFrameLayout;
  49. import in.srain.cube.views.ptr.PtrFrameLayout;
  50. import in.srain.cube.views.ptr.PtrUIHandler;
  51. import in.srain.cube.views.ptr.indicator.PtrIndicator;
  52. import io.realm.Realm;
  53. /**
  54. * Copyright © 2016 Dihardja Software Solutions. All rights reserved.
  55. */
  56. public class GalleryFragment extends Fragment{
  57. PtrClassicFrameLayout ptrClassicFrameLayout;
  58. RecyclerView recyclerView;
  59. ImageView addAttachmentImageView,
  60. attachmentHolderImageView,
  61. cancelAttachmentImageView,
  62. sendAttachmentImageView;
  63. RobotoMediumTextView imageNameTextView;
  64. LinearLayout attachmentLinearLayout;
  65. RobotoRegularTextView emptyTextView;
  66. Realm realm;
  67. GalleryAdapter galleryAdapter;
  68. OccasionGalleryEntriesResponse occasionGalleryEntriesResponse;
  69. StaggeredGridLayoutManager staggeredGridLayoutManager;
  70. int imageHeight=0, imageWidth=0;
  71. String currentOccasionId = "";
  72. Uri imageURI;
  73. File photoFile = null;
  74. String mCurrentPhotoPath;
  75. static final int PHOTO_FROM_CAMERA = 0;
  76. static final int PHOTO_FROM_ALBUM = 1;
  77. boolean isHasLocalData = false, isEligibleToTakePicture = false;
  78. MainActivity mainActivity;
  79. @Override
  80. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  81. Bundle savedInstanceState) {
  82. View view = inflater.inflate(R.layout.fragment_gallery, container, false);
  83. if(!EventBus.getDefault().isRegistered(this)){
  84. EventBus.getDefault().register(this);
  85. }
  86. ptrClassicFrameLayout = (PtrClassicFrameLayout) view.findViewById(R.id.fragment_gallery_ptrClassicFrameLayout);
  87. recyclerView = (RecyclerView) view.findViewById(R.id.fragment_gallery_recyclerView);
  88. attachmentLinearLayout = (LinearLayout) view.findViewById(R.id.fragment_gallery_attachmentLinearLayout);
  89. addAttachmentImageView = (ImageView) view.findViewById(R.id.fragment_gallery_addButtonImageView);
  90. attachmentHolderImageView = (ImageView) view.findViewById(R.id.fragment_gallery_attachmentHolderImageView);
  91. cancelAttachmentImageView = (ImageView) view.findViewById(R.id.fragment_gallery_cancelAttachmentImageView);
  92. sendAttachmentImageView = (ImageView) view.findViewById(R.id.fragment_gallery_sendAttachmentImageView);
  93. imageNameTextView = (RobotoMediumTextView) view.findViewById(R.id.fragment_gallery_imageNameTextView);
  94. emptyTextView = (RobotoRegularTextView) view.findViewById(R.id.fragment_gallery_emptyTextView);
  95. staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
  96. recyclerView.setItemAnimator(new DefaultItemAnimator());
  97. recyclerView.setLayoutManager(staggeredGridLayoutManager);
  98. currentOccasionId =SettingsManager.getInstance().getCurrentOccasion().getId();
  99. galleryAdapter = new GalleryAdapter(getActivity(),listenerInterface);
  100. realm = AppController.getInstance().getRealm();
  101. mainActivity = (MainActivity) getActivity();
  102. return view;
  103. }
  104. @Override
  105. public void onViewCreated(View view, Bundle savedInstanceState) {
  106. super.onViewCreated(view, savedInstanceState);
  107. mainActivity.position = 2;
  108. if (SettingsManager.getInstance().getCurrentUserRole() == SettingsManager.UserRole.INVITED) {
  109. addAttachmentImageView.setVisibility(View.GONE);
  110. } else {
  111. addAttachmentImageView.setVisibility(View.VISIBLE);
  112. }
  113. addAttachmentImageView.setOnClickListener(addAttachmentListener);
  114. cancelAttachmentImageView.setOnClickListener(cancelAttachmentListener);
  115. sendAttachmentImageView.setOnClickListener(sendAttachmentListener);
  116. recyclerView.setAdapter(galleryAdapter);
  117. recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
  118. @Override
  119. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  120. super.onScrollStateChanged(recyclerView, newState);
  121. }
  122. @Override
  123. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  124. super.onScrolled(recyclerView, dx, dy);
  125. staggeredGridLayoutManager.invalidateSpanAssignments();
  126. ptrClassicFrameLayout.setEnabled(false);
  127. if(((StaggeredGridLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPositions(null)[0] == 0 && ((StaggeredGridLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPositions(null)[1] == 1){
  128. ptrClassicFrameLayout.setEnabled(true);
  129. }
  130. }
  131. });
  132. ptrClassicFrameLayout.addPtrUIHandler(new PtrUIHandler() {
  133. @Override
  134. public void onUIReset(PtrFrameLayout frame) {
  135. }
  136. @Override
  137. public void onUIRefreshPrepare(PtrFrameLayout frame) {
  138. }
  139. @Override
  140. public void onUIRefreshBegin(PtrFrameLayout frame) {
  141. galleryAdapter.clearAdapter();
  142. EventBus.getDefault().post(new MainActivityShowLoadingEvent());
  143. ServerManager.getInstance().getAllOccasionGallery(SettingsManager.getInstance().getCurrentOccasion().getId());
  144. }
  145. @Override
  146. public void onUIRefreshComplete(PtrFrameLayout frame) {
  147. }
  148. @Override
  149. public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch, byte status, PtrIndicator ptrIndicator) {
  150. }
  151. });
  152. reloadLocalData();
  153. }
  154. @Override
  155. public void onDestroy(){
  156. super.onDestroy();
  157. if(EventBus.getDefault().isRegistered(this)) {
  158. EventBus.getDefault().unregister(this);
  159. }
  160. }
  161. @Override
  162. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  163. super.onActivityResult(requestCode, resultCode, data);
  164. Bitmap bmp = null;
  165. if(resultCode == getActivity().RESULT_OK) {
  166. if (requestCode == 0) {
  167. Uri selectedImageURI = Uri.fromFile(photoFile);
  168. Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
  169. try {
  170. if (selectedImageURI != null) {
  171. bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageURI);
  172. } else {
  173. bitmap = (Bitmap) data.getExtras().getParcelable("data");
  174. }
  175. } catch (IOException e) {
  176. Log.d("error", " IOException");
  177. }
  178. bmp = bitmap;
  179. imageURI = getImageUri(bitmap);
  180. }else if (requestCode == 1) {
  181. Uri selectedImageURI = data.getData();
  182. try {
  183. if (selectedImageURI != null) {
  184. bmp = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageURI);
  185. } else {
  186. bmp = (Bitmap) data.getExtras().get("data");
  187. }
  188.  
  189. imageURI = getImageUri(bmp);
  190. } catch (IOException e) {
  191. Log.d("error", " IOException");
  192. }
  193. }
  194. attachmentHolderImageView.setImageBitmap(bmp);
  195. attachmentLinearLayout.setVisibility(View.VISIBLE);
  196. sendAttachmentImageView.setEnabled(true);
  197. String picturePath = InterfaceManager.sharedInstance().getFileGalleryPath(getActivity(), imageURI);
  198. String[] pictureName = picturePath.split("/");
  199. imageNameTextView.setText(pictureName[pictureName.length-1]);
  200. }
  201. }
  202. ImageView.OnClickListener addAttachmentListener = new View.OnClickListener() {
  203. @Override
  204. public void onClick(View v) {
  205. final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  206. final CharSequence options[] = new CharSequence[]{getActivity().getResources().getString(R.string.builder_take_picture),
  207. getActivity().getResources().getString(R.string.builder_choose_picture)};
  208. builder.setTitle(getActivity().getResources().getString(R.string.builder_attach_picture_gallery));
  209. builder.setItems(options, new DialogInterface.OnClickListener() {
  210. @Override
  211. public void onClick(DialogInterface dialog, int which) {
  212. photoFile = null;
  213. try {
  214. photoFile = createImageFile();
  215. } catch (IOException ex) {
  216. Log.e("err", ex.toString());
  217. }
  218. takePhoto(which);
  219. }
  220. });
  221. builder.show();
  222. }
  223. };
  224. ImageView.OnClickListener sendAttachmentListener = new View.OnClickListener() {
  225. @Override
  226. public void onClick(View v) {
  227. EventBus.getDefault().post(new MainActivityShowLoadingEvent());
  228. sendAttachmentImageView.setEnabled(false);
  229. String filename = System.currentTimeMillis() + ".png";
  230. File imageFile = new File(getActivity().getCacheDir(), filename);
  231. try {
  232. imageFile = InterfaceManager.sharedInstance().convertUriImageToFile(getActivity(), imageURI, imageFile);
  233. } catch (IOException e) {
  234. e.printStackTrace();
  235. }
  236. if (imageFile != null) {
  237. String imageUrlFromS3 = UploadManager.getInstance().uploadImageAndGetImageURLFromGallery(currentOccasionId, imageFile);
  238.  
  239. if(imageWidth!=0 && imageHeight!=0) {
  240. ServerManager.getInstance().updateOccasionGallery(currentOccasionId, imageUrlFromS3, imageWidth, imageHeight);
  241. }
  242. }
  243. }
  244. };
  245. ImageView.OnClickListener cancelAttachmentListener = new View.OnClickListener() {
  246. @Override
  247. public void onClick(View v) {
  248. attachmentHolderImageView.setImageDrawable(null);
  249. attachmentLinearLayout.setVisibility(View.GONE);
  250. Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.cancellation_add_picture), Toast.LENGTH_SHORT).show();
  251. }
  252. };
  253. private GalleryAdapter.GalleryAdapterListenerInterface listenerInterface = new GalleryAdapter.GalleryAdapterListenerInterface() {
  254. @Override
  255. public void onImageOpenTapped(String imageURL, String galleryEntryId, String ownerId) {
  256. EventBus.getDefault().post(new GalleryFullImageItemClickedEvent(imageURL, galleryEntryId, ownerId));
  257. }
  258. };
  259. public void reloadLocalData(){
  260. occasionGalleryEntriesResponse = realm.where(OccasionGalleryEntriesResponse.class).equalTo("id",currentOccasionId).findFirst();
  261. if(occasionGalleryEntriesResponse!=null){
  262. if(occasionGalleryEntriesResponse.getOccasionGalleryEntry().size()!=0){
  263. isHasLocalData = true;
  264. emptyTextView.setVisibility(View.GONE);
  265. galleryAdapter.updateAdapter(occasionGalleryEntriesResponse.getOccasionGalleryEntry());
  266. }else{
  267. isHasLocalData = false;
  268. emptyTextView.setVisibility(View.VISIBLE);
  269. }
  270. }else{
  271. isHasLocalData = false;
  272. emptyTextView.setVisibility(View.VISIBLE);
  273. }
  274. EventBus.getDefault().post(new MainActivityShowLoadingEvent());
  275. ServerManager.getInstance().getAllOccasionGallery(SettingsManager.getInstance().getCurrentOccasion().getId());
  276. }
  277. public void takePhoto(int which){
  278. switch (which) {
  279. case 0:
  280. if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
  281. if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  282. ActivityCompat.requestPermissions(getActivity(),
  283. new String[]{Manifest.permission.CAMERA,
  284. Manifest.permission.WRITE_EXTERNAL_STORAGE},
  285. 0);
  286. return;
  287. } else {
  288. ActivityCompat.requestPermissions(getActivity(),
  289. new String[]{Manifest.permission.CAMERA},
  290. 0);
  291. return;
  292. }
  293. } else {
  294. if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  295. ActivityCompat.requestPermissions(getActivity(),
  296. new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
  297. 0);
  298. return;
  299. }else{
  300. isEligibleToTakePicture = true;
  301. }
  302. }
  303. if(isEligibleToTakePicture){
  304. Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  305. if (photoFile != null) {
  306. cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
  307. startActivityForResult(cameraIntent, PHOTO_FROM_CAMERA);
  308. }
  309. }
  310. break;
  311. case 1:
  312. if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  313. ActivityCompat.requestPermissions(getActivity(),
  314. new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
  315. 1);
  316. return;
  317. }else{
  318. isEligibleToTakePicture = true;
  319. }
  320.  
  321. if(isEligibleToTakePicture){
  322. Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  323. startActivityForResult(galleryIntent, PHOTO_FROM_ALBUM);
  324. }
  325. break;
  326. }
  327. }
  328. private File createImageFile() throws IOException {
  329. String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
  330. String imageFileName = "PNG_" + timeStamp + "_";
  331. File storageDir = Environment.getExternalStoragePublicDirectory(
  332. Environment.DIRECTORY_PICTURES);
  333. File image = File.createTempFile(
  334. imageFileName, ".png", storageDir
  335. );
  336. mCurrentPhotoPath = "file:" + image.getAbsolutePath();
  337. return image;
  338. }
  339. private Uri getImageUri(Bitmap inImage) {
  340. ByteArrayOutputStream bytes = new ByteArrayOutputStream();
  341. inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
  342. String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), inImage, "Title", null);
  343. imageWidth = inImage.getWidth();
  344. imageHeight = inImage.getHeight();
  345. return Uri.parse(path);
  346. }
  347. public void onEvent(GetGalleryEntriesDeleteFinishedEvent event){
  348. EventBus.getDefault().post(new MainActivityHideLoadingEvent());
  349. if(event.errorMessage.equalsIgnoreCase("")){
  350. attachmentHolderImageView.setImageDrawable(null);
  351. attachmentLinearLayout.setVisibility(View.GONE);
  352. EventBus.getDefault().post(new MainActivityShowLoadingEvent());
  353. ServerManager.getInstance().getAllOccasionGallery(SettingsManager.getInstance().getCurrentOccasion().getId());
  354. }else{
  355. InterfaceManager.sharedInstance().showErrorMessage(getActivity(), event.errorMessage);
  356. sendAttachmentImageView.setEnabled(true);
  357. }
  358. }
  359. public void onEvent(GetGalleryEntriesFinishedEvent event){
  360. ptrClassicFrameLayout.refreshComplete();
  361. EventBus.getDefault().post(new MainActivityHideLoadingEvent());
  362. if(event.occasionGalleryEntriesResponse!=null){
  363. if(event.occasionGalleryEntriesResponse.getOccasionGalleryEntry().size()!=0){
  364. emptyTextView.setVisibility(View.GONE);
  365. occasionGalleryEntriesResponse = event.occasionGalleryEntriesResponse;
  366. galleryAdapter.updateAdapter(occasionGalleryEntriesResponse.getOccasionGalleryEntry());
  367. }else{
  368. emptyTextView.setVisibility(View.VISIBLE);
  369. }
  370. }else{
  371. if(!isHasLocalData){
  372. emptyTextView.setVisibility(View.VISIBLE);
  373. }
  374. InterfaceManager.sharedInstance().showErrorMessage(getActivity(), event.errorMessage);
  375. }
  376. }
  377. public void onEvent(GetUpdateGalleryEntryFinishedEvent event){
  378. EventBus.getDefault().post(new MainActivityHideLoadingEvent());
  379. if(event.errorMessage.equalsIgnoreCase("")){
  380. attachmentHolderImageView.setImageDrawable(null);
  381. attachmentLinearLayout.setVisibility(View.GONE);
  382. EventBus.getDefault().post(new MainActivityShowLoadingEvent());
  383. ServerManager.getInstance().getAllOccasionGallery(SettingsManager.getInstance().getCurrentOccasion().getId());
  384. }else{
  385. InterfaceManager.sharedInstance().showErrorMessage(getActivity(), event.errorMessage);
  386. sendAttachmentImageView.setEnabled(true);
  387. }
  388. }
  389. public void onEvent(AddPicturePermissionEvent event){
  390. isEligibleToTakePicture = event.isEligible;
  391. if(isEligibleToTakePicture){
  392. takePhoto(event.requestCode);
  393. }
  394. }
  395. }
Add Comment
Please, Sign In to add comment