From 5b631710a92a23cfb3a13a0578d535ce5e9ca587 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 25 Apr 2026 06:40:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8C=89=E9=92=AE=E4=B8=8E=E4=BF=A1=E6=81=AF=E7=AA=97?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gallery/build.properties | 4 +- .../studio/gallery/ImageViewerActivity.java | 158 ++++++++++++++++++ gallery/src/main/res/drawable/ic_info.xml | 9 + .../main/res/layout/activity_image_viewer.xml | 8 + 4 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 gallery/src/main/res/drawable/ic_info.xml diff --git a/gallery/build.properties b/gallery/build.properties index eee0e01..d316f57 100644 --- a/gallery/build.properties +++ b/gallery/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sat Apr 25 05:59:24 HKT 2026 +#Sat Apr 25 06:37:38 CST 2026 stageCount=2 libraryProject= baseVersion=15.0 publishVersion=15.0.1 -buildCount=0 +buildCount=5 baseBetaVersion=15.0.2 diff --git a/gallery/src/main/java/cc/winboll/studio/gallery/ImageViewerActivity.java b/gallery/src/main/java/cc/winboll/studio/gallery/ImageViewerActivity.java index 445be56..13208a5 100644 --- a/gallery/src/main/java/cc/winboll/studio/gallery/ImageViewerActivity.java +++ b/gallery/src/main/java/cc/winboll/studio/gallery/ImageViewerActivity.java @@ -32,6 +32,7 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha private ImageButton btnBack; private ImageButton btnDelete; private ImageButton btnShare; + private ImageButton btnInfo; private GestureDetector gestureDetector; private TrashManager trashManager; @@ -54,6 +55,7 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha btnBack = findViewById(R.id.btn_back); btnDelete = findViewById(R.id.btn_delete); btnShare = findViewById(R.id.btn_share); + btnInfo = findViewById(R.id.btn_info); ImagePagerAdapter adapter = new ImagePagerAdapter(imageUrls); viewPager.setAdapter(adapter); @@ -95,6 +97,13 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha shareCurrentImage(); } }); + + btnInfo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showImageInfo(); + } + }); } private void toggleToolbar() { @@ -201,6 +210,155 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha } } + private void showImageInfo() { + if (currentPosition < 0 || currentPosition >= imageUrls.size()) { + return; + } + + String imagePath = ""; + if (imagePaths != null && currentPosition < imagePaths.size()) { + imagePath = imagePaths.get(currentPosition); + } else { + imagePath = getPathFromUri(imageUrls.get(currentPosition)); + } + + File imageFile = new File(imagePath); + if (!imageFile.exists()) { + imageFile = new File(imagePath); + } + + android.widget.LinearLayout layout = new android.widget.LinearLayout(this); + layout.setOrientation(android.widget.LinearLayout.VERTICAL); + layout.setPadding(48, 32, 48, 32); + + android.widget.TextView labelPath = new android.widget.TextView(this); + labelPath.setText("Path:"); + labelPath.setTextColor(getColor(android.R.color.darker_gray)); + labelPath.setTextSize(14); + labelPath.setTypeface(null, android.graphics.Typeface.BOLD); + layout.addView(labelPath); + + android.widget.TextView valuePath = new android.widget.TextView(this); + valuePath.setText(imagePath); + valuePath.setTextColor(getColor(android.R.color.black)); + valuePath.setTextSize(14); + valuePath.setTextIsSelectable(true); + layout.addView(valuePath); + + if (imageFile.exists()) { + long sizeBytes = imageFile.length(); + String size; + if (sizeBytes < 1024) { + size = sizeBytes + " B"; + } else if (sizeBytes < 1024 * 1024) { + size = String.format("%.2f KB", sizeBytes / 1024.0); + } else { + size = String.format("%.2f MB", sizeBytes / (1024.0 * 1024.0)); + } + + android.widget.TextView labelSize = new android.widget.TextView(this); + labelSize.setText("Size:"); + labelSize.setTextColor(getColor(android.R.color.darker_gray)); + labelSize.setTextSize(14); + labelSize.setTypeface(null, android.graphics.Typeface.BOLD); + layout.addView(labelSize); + + android.widget.TextView valueSize = new android.widget.TextView(this); + valueSize.setText(size); + valueSize.setTextColor(getColor(android.R.color.black)); + valueSize.setTextSize(14); + valueSize.setTextIsSelectable(true); + layout.addView(valueSize); + } + + try { + android.graphics.BitmapFactory.Options options = new android.graphics.BitmapFactory.Options(); + options.inJustDecodeBounds = true; + android.graphics.BitmapFactory.decodeFile(imagePath, options); + if (options.outWidth > 0 && options.outHeight > 0) { + android.widget.TextView labelPixels = new android.widget.TextView(this); + labelPixels.setText("Pixels:"); + labelPixels.setTextColor(getColor(android.R.color.darker_gray)); + labelPixels.setTextSize(14); + labelPixels.setTypeface(null, android.graphics.Typeface.BOLD); + layout.addView(labelPixels); + + android.widget.TextView valuePixels = new android.widget.TextView(this); + valuePixels.setText(options.outWidth + " x " + options.outHeight); + valuePixels.setTextColor(getColor(android.R.color.black)); + valuePixels.setTextSize(14); + valuePixels.setTextIsSelectable(true); + layout.addView(valuePixels); + } + } catch (Exception e) { + LogUtils.e(TAG, "get pixels error: " + e.getMessage()); + } + + try { + String[] projection = { + MediaStore.Images.Media.DATE_ADDED, + MediaStore.Images.Media.DATE_MODIFIED, + MediaStore.Images.Media.DATE_TAKEN + }; + android.database.Cursor cursor = getContentResolver().query( + imageUrls.get(currentPosition), projection, null, null, null); + if (cursor != null) { + if (cursor.moveToFirst()) { + int dateAddedCol = cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED); + int dateTakenCol = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN); + + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + if (dateTakenCol >= 0) { + long dateTaken = cursor.getLong(dateTakenCol); + if (dateTaken > 0) { + android.widget.TextView labelTaken = new android.widget.TextView(this); + labelTaken.setText("Date Taken:"); + labelTaken.setTextColor(getColor(android.R.color.darker_gray)); + labelTaken.setTextSize(14); + labelTaken.setTypeface(null, android.graphics.Typeface.BOLD); + layout.addView(labelTaken); + + android.widget.TextView valueTaken = new android.widget.TextView(this); + valueTaken.setText(sdf.format(new java.util.Date(dateTaken))); + valueTaken.setTextColor(getColor(android.R.color.black)); + valueTaken.setTextSize(14); + valueTaken.setTextIsSelectable(true); + layout.addView(valueTaken); + } + } + if (dateAddedCol >= 0) { + long dateAdded = cursor.getLong(dateAddedCol); + if (dateAdded > 0) { + android.widget.TextView labelAdded = new android.widget.TextView(this); + labelAdded.setText("Date Added:"); + labelAdded.setTextColor(getColor(android.R.color.darker_gray)); + labelAdded.setTextSize(14); + labelAdded.setTypeface(null, android.graphics.Typeface.BOLD); + layout.addView(labelAdded); + + android.widget.TextView valueAdded = new android.widget.TextView(this); + valueAdded.setText(sdf.format(new java.util.Date(dateAdded * 1000))); + valueAdded.setTextColor(getColor(android.R.color.black)); + valueAdded.setTextSize(14); + valueAdded.setTextIsSelectable(true); + layout.addView(valueAdded); + } + } + } + cursor.close(); + } + } catch (Exception e) { + LogUtils.e(TAG, "get date error: " + e.getMessage()); + } + + new AlertDialog.Builder(this) + .setTitle("Image Info") + .setView(layout) + .setPositiveButton("OK", null) + .show(); + } + @Override public void onPageSelected(int position) { currentPosition = position; diff --git a/gallery/src/main/res/drawable/ic_info.xml b/gallery/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..b49a72b --- /dev/null +++ b/gallery/src/main/res/drawable/ic_info.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/gallery/src/main/res/layout/activity_image_viewer.xml b/gallery/src/main/res/layout/activity_image_viewer.xml index 3d7ef55..3e6971e 100644 --- a/gallery/src/main/res/layout/activity_image_viewer.xml +++ b/gallery/src/main/res/layout/activity_image_viewer.xml @@ -44,6 +44,14 @@ android:src="@drawable/ic_share" android:contentDescription="Share"/> + +