Skip to content

Commit 9800f01

Browse files
authored
Merge pull request #45 from Mraulio/dev
Merge changes
2 parents c3f4df5 + f3d9eae commit 9800f01

File tree

18 files changed

+210
-64
lines changed

18 files changed

+210
-64
lines changed

app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ android {
1111
minSdk 23
1212
targetSdk 33
1313
versionCode 6
14-
versionName "0.52"
14+
versionName "0.53"
1515
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1616
javaCompileOptions {
1717
annotationProcessorOptions {

app/src/main/java/com/mraulio/gbcameramanager/MainActivity.java

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ protected void onCreate(Bundle savedInstanceState) {
105105
StaticValues.defaultFrameId = StaticValues.sharedPreferences.getString("default_frame_id","gbcam01");
106106
StaticValues.dateLocale = StaticValues.sharedPreferences.getString("date_locale", "yyyy-MM-dd");
107107
StaticValues.exportMetadata = StaticValues.sharedPreferences.getBoolean("export_metadata", false);
108+
StaticValues.alwaysDefaultFrame = StaticValues.sharedPreferences.getBoolean("always_default_frame", false);
108109

109110
StaticValues.filterMonth = StaticValues.sharedPreferences.getBoolean("date_filter_month", false);
110111
StaticValues.filterYear = StaticValues.sharedPreferences.getBoolean("date_filter_year", false);

app/src/main/java/com/mraulio/gbcameramanager/gameboycameralib/saveExtractor/SaveImageExtractor.java

+36-31
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static com.mraulio.gbcameramanager.gameboycameralib.constants.SaveImageConstants.*;
44
import static com.mraulio.gbcameramanager.ui.gallery.GalleryUtils.paletteChanger;
5+
import static com.mraulio.gbcameramanager.utils.StaticValues.alwaysDefaultFrame;
56
import static com.mraulio.gbcameramanager.utils.Utils.frameGroupsNames;
67
import static com.mraulio.gbcameramanager.utils.Utils.hashFrames;
78

@@ -135,42 +136,46 @@ private Bitmap gbcImageBitmap(GbcImage gbcImage, byte[] imageBytes, Utils.SAVE_T
135136
frameNumber = Integer.parseInt((String) frameNumberObj) + 1; //+1 Because the Ids begin with 1 and not 0
136137
}
137138
}
138-
String jpId = "jp";
139-
String intId = "int";
140-
String hkId = "hk";
141-
switch (saveTypeIntJpHk) {
142-
case JP:
143-
if (frameGroupsNames.containsKey(jpId)) {
144-
//Use the 4 different jp frames, 01, 02, 07 and 09
145-
//Rest of the frames are from the int group, if it exists
146-
if (frameNumber == 1 || frameNumber == 2 || frameNumber == 7 || frameNumber == 9) {
147-
frameId = jpId + String.format("%02d", frameNumber);
148-
} else {
139+
140+
if (!alwaysDefaultFrame) {
141+
String jpId = "jp";
142+
String intId = "int";
143+
String hkId = "hk";
144+
145+
switch (saveTypeIntJpHk) {
146+
case JP:
147+
if (frameGroupsNames.containsKey(jpId)) {
148+
//Use the 4 different jp frames, 01, 02, 07 and 09
149+
//Rest of the frames are from the int group, if it exists
150+
if (frameNumber == 1 || frameNumber == 2 || frameNumber == 7 || frameNumber == 9) {
151+
frameId = jpId + String.format("%02d", frameNumber);
152+
} else {
153+
frameId = intId + String.format("%02d", frameNumber);
154+
}
155+
if (!hashFrames.containsKey(frameId)) {
156+
frameId = StaticValues.defaultFrameId;//If the group exists but the frame doesn't
157+
}
158+
}
159+
break;
160+
case INT:
161+
//Use the int frame group
162+
if (frameGroupsNames.containsKey(intId)) {
149163
frameId = intId + String.format("%02d", frameNumber);
150164
}
151165
if (!hashFrames.containsKey(frameId)) {
152166
frameId = StaticValues.defaultFrameId;//If the group exists but the frame doesn't
153167
}
154-
}
155-
break;
156-
case INT:
157-
//Use the int frame group
158-
if (frameGroupsNames.containsKey(intId)) {
159-
frameId = intId + String.format("%02d", frameNumber);
160-
}
161-
if (!hashFrames.containsKey(frameId)) {
162-
frameId = StaticValues.defaultFrameId;//If the group exists but the frame doesn't
163-
}
164-
break;
165-
case HK:
166-
if (frameGroupsNames.containsKey(hkId)) {
167-
168-
frameId = hkId + String.format("%02d", frameNumber);
169-
if (!hashFrames.containsKey(frameId)) {
170-
frameId = StaticValues.defaultFrameId;//If the group exists but the frame doesn't
168+
break;
169+
case HK:
170+
if (frameGroupsNames.containsKey(hkId)) {
171+
172+
frameId = hkId + String.format("%02d", frameNumber);
173+
if (!hashFrames.containsKey(frameId)) {
174+
frameId = StaticValues.defaultFrameId;//If the group exists but the frame doesn't
175+
}
171176
}
172-
}
173-
break;
177+
break;
178+
}
174179
}
175180
gbcImage.setFrameId(frameId);
176181
GbcFrame gbcFrame = hashFrames.get(frameId);
@@ -180,7 +185,7 @@ private Bitmap gbcImageBitmap(GbcImage gbcImage, byte[] imageBytes, Utils.SAVE_T
180185
canvas.drawBitmap(image, 16, gbcFrame.isWildFrame() ? 40 : 16, null);
181186
image = framed;
182187
imageBytes = Utils.encodeImage(image, "bw");
183-
image = paletteChanger(gbcImage.getPaletteId(),imageBytes,gbcImage.isInvertPalette());
188+
image = paletteChanger(gbcImage.getPaletteId(), imageBytes, gbcImage.isInvertPalette());
184189
}
185190
gbcImage.setImageBytes(imageBytes);
186191
return image;

app/src/main/java/com/mraulio/gbcameramanager/ui/gallery/CollageMaker.java

+19-8
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,34 @@ public static Bitmap createCollage(List<Bitmap> bitmaps, int value, boolean crop
2424
}
2525
}
2626

27+
boolean verticalImage = false;
28+
29+
//Check if the images are rotated
30+
if (height == 160 && (width == 144) || width == 224) {
31+
verticalImage = true;
32+
}
33+
2734
int totalImages = bitmaps.size();
2835
if (totalImages == 0) {
2936
return null;
3037
}
3138

32-
3339
if (crop) {
34-
int cropX = 16;
35-
int cropY = (height == 224) ? 40 : 16;
40+
int cropX;
41+
int cropY;
42+
if (!verticalImage) {
43+
cropX = 16;
44+
cropY = (height == 224) ? 40 : 16;
45+
} else {
46+
cropX = (height == 224) ? 40 : 16;
47+
cropY = 16;
48+
}
3649
List<Bitmap> croppedBitmaps = new ArrayList<>();
3750
for (Bitmap bt : bitmaps) {
38-
Bitmap croppedBitmap = Bitmap.createBitmap(bt, cropX, cropY, 128, 112);
51+
Bitmap croppedBitmap = Bitmap.createBitmap(bt, cropX, cropY, verticalImage ? 112 : 128, verticalImage ? 128 : 112);
3952
croppedBitmaps.add(croppedBitmap);
4053
}
4154
bitmaps = croppedBitmaps;
42-
4355
}
4456

4557
int rows = 0;
@@ -53,7 +65,6 @@ public static Bitmap createCollage(List<Bitmap> bitmaps, int value, boolean crop
5365
columns = Math.max(1, (int) Math.ceil((double) totalImages / rows));
5466
}
5567

56-
5768
int collageWidth = bitmaps.get(0).getWidth() * columns;
5869
int collageHeight = bitmaps.get(0).getHeight() * rows;
5970

@@ -78,14 +89,14 @@ public static Bitmap createCollage(List<Bitmap> bitmaps, int value, boolean crop
7889
int horizontalOffset = 0;
7990
if (halfFrame && !crop && col != 0) {
8091
horizontalOffset = -8 * (col - 1);
81-
bitmap = Bitmap.createBitmap(bitmap, 8, 0, 152, 144);//Crop 50% of the left frame
92+
bitmap = Bitmap.createBitmap(bitmap, 8, 0, verticalImage ? 136 : 152, verticalImage ? 160 : 144);//Crop 50% of the left frame
8293
}
8394

8495
// Calculate vertical offset
8596
int verticalOffset = 0;
8697
if (halfFrame && !crop && row != 0) {
8798
verticalOffset = -8 * (row - 1);
88-
bitmap = Bitmap.createBitmap(bitmap, 0, 8, bitmap.getWidth(), 136);//Crop 50% of the top frame
99+
bitmap = Bitmap.createBitmap(bitmap, 0, 8, bitmap.getWidth(), verticalImage ? 152 : 136);//Crop 50% of the top frame
89100
}
90101
Matrix matrix = new Matrix();
91102
matrix.setTranslate((col * bitmap.getWidth()) + horizontalOffset, (row * bitmap.getHeight()) + verticalOffset);

app/src/main/java/com/mraulio/gbcameramanager/ui/gallery/GalleryFragment.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public void onClick(View view) {
243243
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
244244
if (!selectionMode[0]) {
245245
MainImageDialog mainImageDialog = new MainImageDialog(gridView, keepFrame, lastPage, position,
246-
filteredGbcImages, lastSeenGalleryImage, getContext(), displayMetrics, showPalettes, getActivity(),
246+
filteredGbcImages, getContext(), displayMetrics, showPalettes, getActivity(),
247247
port, usbIoManager, tvResponseBytes, connection, tv, manager, null, null);
248248
mainImageDialog.showImageDialog();
249249
} else {
@@ -357,7 +357,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
357357
case R.id.action_multi_edit:
358358
if (selectionMode[0] && selectedImages.size() > 1) {
359359
MainImageDialog mainImageDialog = new MainImageDialog(gridView, keepFrame, lastPage, 0,
360-
filteredGbcImages, lastSeenGalleryImage, getContext(), displayMetrics, showPalettes, getActivity(),
360+
filteredGbcImages, getContext(), displayMetrics, showPalettes, getActivity(),
361361
port, usbIoManager, tvResponseBytes, connection, tv, manager, selectedImages, customGridViewAdapterImage);
362362
mainImageDialog.showImageDialog();
363363
} else Utils.toast(getContext(), getString(R.string.select_minimum_toast));

app/src/main/java/com/mraulio/gbcameramanager/ui/gallery/MainImageDialog.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static android.view.View.VISIBLE;
55
import static com.mraulio.gbcameramanager.ui.gallery.GalleryFragment.selectionMode;
66
import static com.mraulio.gbcameramanager.utils.StaticValues.FILTER_FAVOURITE;
7+
import static com.mraulio.gbcameramanager.utils.StaticValues.lastSeenGalleryImage;
78
import static com.mraulio.gbcameramanager.utils.StaticValues.FILTER_SUPER_FAVOURITE;
89
import static com.mraulio.gbcameramanager.utils.StaticValues.showEditMenuButton;
910
import static com.mraulio.gbcameramanager.gbxcart.GBxCartConstants.BAUDRATE;
@@ -89,7 +90,6 @@ public class MainImageDialog implements SerialInputOutputManager.Listener {
8990
private static int lastPage;
9091
private static int position;
9192
private static List<GbcImage> filteredGbcImages;
92-
private static int lastSeenGalleryImage;
9393
private static Context context;
9494
private DisplayMetrics displayMetrics;
9595
private static boolean showPalettes;
@@ -122,15 +122,14 @@ public class MainImageDialog implements SerialInputOutputManager.Listener {
122122
static GbcImage gbcImage;
123123

124124
public MainImageDialog (GridView gridView, boolean keepFrame, int lastPage, int position,
125-
List<GbcImage> filteredGbcImages, int lastSeenGalleryImage, Context context, DisplayMetrics displayMetrics,
125+
List<GbcImage> filteredGbcImages, Context context, DisplayMetrics displayMetrics,
126126
boolean showPalettes, Activity activity, UsbSerialPort port, SerialInputOutputManager usbIoManager,
127127
TextView tvResponseBytes, UsbDeviceConnection connection, TextView tv, UsbManager manager, List<Integer> selectedImages, CustomGridViewAdapterImage customGridViewAdapterImage) {
128128
this.gridView = gridView;
129129
this.keepFrame = keepFrame;
130130
this.lastPage = lastPage;
131131
this.position = position;
132132
this.filteredGbcImages = filteredGbcImages;
133-
this.lastSeenGalleryImage = lastSeenGalleryImage;
134133
this.context = context;
135134
this.displayMetrics = displayMetrics;
136135
this.showPalettes = showPalettes;

app/src/main/java/com/mraulio/gbcameramanager/ui/palettes/PalettesFragment.java

+91-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import static com.mraulio.gbcameramanager.utils.StaticValues.dateLocale;
44
import static com.mraulio.gbcameramanager.utils.StaticValues.lastSeenGalleryImage;
55
import static com.mraulio.gbcameramanager.ui.gallery.GalleryUtils.frameChange;
6+
import static com.mraulio.gbcameramanager.utils.Utils.gbcImagesList;
67
import static com.mraulio.gbcameramanager.utils.Utils.gbcPalettesList;
78
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;
811
import static com.mraulio.gbcameramanager.utils.Utils.showNotification;
912
import static com.mraulio.gbcameramanager.utils.Utils.sortPalettes;
1013

@@ -22,6 +25,7 @@
2225
import android.util.DisplayMetrics;
2326
import android.view.KeyEvent;
2427
import android.view.LayoutInflater;
28+
import android.view.MotionEvent;
2529
import android.view.View;
2630
import android.view.ViewGroup;
2731
import android.view.Window;
@@ -32,6 +36,7 @@
3236
import android.widget.EditText;
3337
import android.widget.GridView;
3438
import android.widget.ImageView;
39+
import android.widget.ScrollView;
3540
import android.widget.TextView;
3641

3742
import androidx.annotation.NonNull;
@@ -295,6 +300,56 @@ private void paletteDialog(int[] palette, String paletteId, String paletteName)
295300
et3.setImeOptions(EditorInfo.IME_ACTION_DONE);
296301
et4.setImeOptions(EditorInfo.IME_ACTION_DONE);
297302

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+
298353
etPaletteId.setOnEditorActionListener(new TextView.OnEditorActionListener() {
299354
@Override
300355
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
@@ -717,21 +772,54 @@ public void onClick(View v) {
717772
dialog.show();
718773
}
719774

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+
720804
private Bitmap paletteMaker(int[] palette) throws IOException {
721-
ImageCodec imageCodec = new ImageCodec(160, 144);//imageBytes.length/40 to get the height of the image
722805
Bitmap bitmap;
723806
Bitmap upscaledBitmap;
724807
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
726809
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
727811
bitmap = imageCodec.decodeWithPalette(palette, imageBytes, false);
728812
upscaledBitmap = Bitmap.createScaledBitmap(bitmap, Utils.framesList.get(0).getFrameBitmap().getWidth() * 6, Utils.framesList.get(0).getFrameBitmap().getHeight() * 6, false);
729813
} else {
730814
GbcImage gbcImage = Utils.gbcImagesList.get(lastSeenGalleryImage);
731815
bitmap = frameChange(gbcImage, gbcImage.getFrameId(), gbcImage.isInvertPalette(), gbcImage.isInvertFramePalette(), gbcImage.isLockFrame(), false);
732816
imageBytes = Utils.encodeImage(bitmap, "bw");
817+
ImageCodec imageCodec = new ImageCodec(160, bitmap.getHeight());//imageBytes.length/40 to get the height of the image
818+
733819
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);
735823
}
736824

737825
return upscaledBitmap;

0 commit comments

Comments
 (0)