|
3 | 3 | import static com.mraulio.gbcameramanager.utils.StaticValues.dateLocale;
|
4 | 4 | import static com.mraulio.gbcameramanager.utils.StaticValues.lastSeenGalleryImage;
|
5 | 5 | import static com.mraulio.gbcameramanager.ui.gallery.GalleryUtils.frameChange;
|
| 6 | +import static com.mraulio.gbcameramanager.utils.Utils.gbcImagesList; |
6 | 7 | import static com.mraulio.gbcameramanager.utils.Utils.gbcPalettesList;
|
7 | 8 | import static com.mraulio.gbcameramanager.utils.Utils.hashFrames;
|
| 9 | +import static com.mraulio.gbcameramanager.utils.Utils.imageBitmapCache; |
| 10 | +import static com.mraulio.gbcameramanager.utils.Utils.rotateBitmap; |
8 | 11 | import static com.mraulio.gbcameramanager.utils.Utils.showNotification;
|
9 | 12 | import static com.mraulio.gbcameramanager.utils.Utils.sortPalettes;
|
10 | 13 |
|
|
22 | 25 | import android.util.DisplayMetrics;
|
23 | 26 | import android.view.KeyEvent;
|
24 | 27 | import android.view.LayoutInflater;
|
| 28 | +import android.view.MotionEvent; |
25 | 29 | import android.view.View;
|
26 | 30 | import android.view.ViewGroup;
|
27 | 31 | import android.view.Window;
|
|
32 | 36 | import android.widget.EditText;
|
33 | 37 | import android.widget.GridView;
|
34 | 38 | import android.widget.ImageView;
|
| 39 | +import android.widget.ScrollView; |
35 | 40 | import android.widget.TextView;
|
36 | 41 |
|
37 | 42 | import androidx.annotation.NonNull;
|
@@ -295,6 +300,56 @@ private void paletteDialog(int[] palette, String paletteId, String paletteName)
|
295 | 300 | et3.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
296 | 301 | et4.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
297 | 302 |
|
| 303 | + View dialogBackground = dialog.findViewById(android.R.id.content).getRootView(); |
| 304 | + ScrollView mainLayout = dialog.findViewById(R.id.palette_creator_layout); |
| 305 | + mainLayout.setOnClickListener(null);//So the fast image change doesn't happen when missclicking buttons inside the actual dialog |
| 306 | + |
| 307 | + dialogBackground.setOnTouchListener(new View.OnTouchListener() { |
| 308 | + float downY = 0; |
| 309 | + |
| 310 | + @Override |
| 311 | + public boolean onTouch(View v, MotionEvent event) { |
| 312 | + |
| 313 | + final int SWIPE_THRESHOLD = 200; |
| 314 | + float x = event.getX(); |
| 315 | + float upY = 0; |
| 316 | + int screenWidth = getContext().getResources().getDisplayMetrics().widthPixels; |
| 317 | + |
| 318 | + int leftHalf = screenWidth / 2; |
| 319 | + |
| 320 | + switch (event.getAction()) { |
| 321 | + case MotionEvent.ACTION_DOWN: |
| 322 | + downY = event.getY(); |
| 323 | + break; |
| 324 | + case MotionEvent.ACTION_UP: |
| 325 | + upY = event.getY(); |
| 326 | + if (upY > (downY + SWIPE_THRESHOLD)) { |
| 327 | + //Swipe down |
| 328 | + try { |
| 329 | + changePalettePreview(true, ivPalette, palette); |
| 330 | + } catch (IOException e) { |
| 331 | + throw new RuntimeException(e); |
| 332 | + } |
| 333 | + } else if (upY < (downY - SWIPE_THRESHOLD)) { |
| 334 | + //Swipe up |
| 335 | + try { |
| 336 | + changePalettePreview(false, ivPalette, palette); |
| 337 | + } catch (IOException e) { |
| 338 | + throw new RuntimeException(e); |
| 339 | + } |
| 340 | + } else {//a click |
| 341 | + try { |
| 342 | + changePalettePreview(!(x > leftHalf), ivPalette, palette); |
| 343 | + } catch (IOException e) { |
| 344 | + throw new RuntimeException(e); |
| 345 | + } |
| 346 | + } |
| 347 | + break; |
| 348 | + } |
| 349 | + return true; |
| 350 | + } |
| 351 | + }); |
| 352 | + |
298 | 353 | etPaletteId.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
299 | 354 | @Override
|
300 | 355 | public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
@@ -717,21 +772,54 @@ public void onClick(View v) {
|
717 | 772 | dialog.show();
|
718 | 773 | }
|
719 | 774 |
|
| 775 | + private void changePalettePreview(boolean prevImage, ImageView ivPalette, int[] palette) throws IOException { |
| 776 | + int holderInt = new Integer(lastSeenGalleryImage); |
| 777 | + if (prevImage) { |
| 778 | + if (lastSeenGalleryImage == 0) { |
| 779 | + lastSeenGalleryImage = gbcImagesList.size() - 1; //Goes to the last image on the gallery |
| 780 | + } else { |
| 781 | + lastSeenGalleryImage--; |
| 782 | + } |
| 783 | + |
| 784 | + } else { |
| 785 | + if (lastSeenGalleryImage >= gbcImagesList.size() - 1) { |
| 786 | + lastSeenGalleryImage = 0; //Goes to the last image on the gallery |
| 787 | + } else { |
| 788 | + lastSeenGalleryImage++; |
| 789 | + } |
| 790 | + } |
| 791 | + |
| 792 | + Bitmap image = imageBitmapCache.get(gbcImagesList.get(lastSeenGalleryImage).getHashCode()); |
| 793 | + //If image is not in the hashmap, check the cache. If it's not in the cache do nothing |
| 794 | + if (image == null) { |
| 795 | + image = GalleryFragment.diskCache.get(gbcImagesList.get(lastSeenGalleryImage).getHashCode()); |
| 796 | + } |
| 797 | + if (image != null) { |
| 798 | + ivPalette.setImageBitmap(paletteMaker(palette)); |
| 799 | + } else { |
| 800 | + lastSeenGalleryImage = holderInt; |
| 801 | + } |
| 802 | + } |
| 803 | + |
720 | 804 | private Bitmap paletteMaker(int[] palette) throws IOException {
|
721 |
| - ImageCodec imageCodec = new ImageCodec(160, 144);//imageBytes.length/40 to get the height of the image |
722 | 805 | Bitmap bitmap;
|
723 | 806 | Bitmap upscaledBitmap;
|
724 | 807 | byte[] imageBytes;
|
725 |
| - if (Utils.gbcImagesList.size() == 0 || (Utils.gbcImagesList.get(0).getImageBytes().length / 40 != 144)) {//If there are no images, or they are not 144 height |
| 808 | + if (Utils.gbcImagesList.size() == 0) {//If there are no images, or they are not 144 height |
726 | 809 | imageBytes = Utils.encodeImage(hashFrames.get("gbcam03").getFrameBitmap(), "bw");
|
| 810 | + ImageCodec imageCodec = new ImageCodec(160, 144);//imageBytes.length/40 to get the height of the image |
727 | 811 | bitmap = imageCodec.decodeWithPalette(palette, imageBytes, false);
|
728 | 812 | upscaledBitmap = Bitmap.createScaledBitmap(bitmap, Utils.framesList.get(0).getFrameBitmap().getWidth() * 6, Utils.framesList.get(0).getFrameBitmap().getHeight() * 6, false);
|
729 | 813 | } else {
|
730 | 814 | GbcImage gbcImage = Utils.gbcImagesList.get(lastSeenGalleryImage);
|
731 | 815 | bitmap = frameChange(gbcImage, gbcImage.getFrameId(), gbcImage.isInvertPalette(), gbcImage.isInvertFramePalette(), gbcImage.isLockFrame(), false);
|
732 | 816 | imageBytes = Utils.encodeImage(bitmap, "bw");
|
| 817 | + ImageCodec imageCodec = new ImageCodec(160, bitmap.getHeight());//imageBytes.length/40 to get the height of the image |
| 818 | + |
733 | 819 | bitmap = imageCodec.decodeWithPalette(palette, imageBytes, false);
|
734 |
| - upscaledBitmap = Bitmap.createScaledBitmap(bitmap, 160 * 6, 144 * 6, false); |
| 820 | + |
| 821 | + bitmap = rotateBitmap(bitmap, gbcImage); |
| 822 | + upscaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() * 4, bitmap.getHeight() * 4, false); |
735 | 823 | }
|
736 | 824 |
|
737 | 825 | return upscaledBitmap;
|
|
0 commit comments