OSDN Git Service

Canon仕様をこれで確定させる。
authorMRSa <mrsa@myad.jp>
Mon, 14 Oct 2019 05:45:34 +0000 (14:45 +0900)
committerMRSa <mrsa@myad.jp>
Mon, 14 Oct 2019 05:45:34 +0000 (14:45 +0900)
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/ptpip/wrapper/playback/PtpIpPlaybackControl.java
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/ptpip/wrapper/playback/PtpIpScreennailImageReceiver.java
app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/playback/detail/ImagePagerViewFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/playback/detail/ScalableImageView.java
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml

index 811cea4..94d3de2 100644 (file)
@@ -2,10 +2,13 @@ package net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.playback;
 
 import android.app.Activity;
 import android.content.SharedPreferences;
+import android.graphics.Color;
 import android.util.Log;
 
 import androidx.preference.PreferenceManager;
 
+import net.osdn.gokigen.pkremote.IInformationReceiver;
+import net.osdn.gokigen.pkremote.R;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback;
@@ -105,7 +108,14 @@ public class PtpIpPlaybackControl implements IPlaybackControl
                 IPtpIpCommandPublisher publisher = provider.getCommandPublisher();
                 //int storageId = content.getStorageId();
                 int objectId = content.getId();
-                // Log.v(TAG, "downloadContentThumbnail() " + indexStr + " [" + objectId + "] (" + storageId + ")");
+
+                // 画像表示中...のメッセージを表示する
+                IInformationReceiver display = provider.getInformationReceiver();
+                if (display != null)
+                {
+                    String message = activity.getString(R.string.canon_get_image_screennail);
+                    display.updateMessage(message, false, true, Color.LTGRAY);
+                }
 
                 // 画像を取得する
                 PtpIpScreennailImageReceiver receiver = new PtpIpScreennailImageReceiver(activity, objectId, publisher, callback);
index 8806395..fb9634c 100644 (file)
@@ -139,6 +139,7 @@ public class PtpIpScreennailImageReceiver implements IPtpIpCommandCallback
                 // OutOfMemoryエラー対策...一度読み込んで画像サイズを取得
                 //System.gc();
                 opt.inJustDecodeBounds = true;
+                opt.inPurgeable = true;
                 //opt.inDither = true;
                 BitmapFactory.decodeByteArray(rx_body, 0, rx_body.length);
             }
@@ -153,6 +154,7 @@ public class PtpIpScreennailImageReceiver implements IPtpIpCommandCallback
             int heightBounds = opt.outHeight / BITMAP_MAX_PIXEL;
             opt.inSampleSize = Math.min(widthBounds, heightBounds);
             opt.inJustDecodeBounds = false;
+            opt.inPurgeable = true;
 
             // ビットマップをリサイズして返す
             callback.onCompleted(BitmapFactory.decodeByteArray(rx_body, 0, rx_body.length, opt), null);
index c3985ba..f1ef8e9 100644 (file)
@@ -63,7 +63,9 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
        private static final String PENTAX_RAW_PEF_SUFFIX = ".pef";
     private static final String PANASONIC_RAW_SUFFIX = ".rw2";
     private static final String SONY_RAW_SUFFIX = ".arw";
-
+    private static final String CANON_RAW_SUFFIX = ".crw";
+    private static final String CANON_RAW_SUFFIX2 = ".cr2";
+    private static final String CANON_RAW_SUFFIX3 = ".cr3";
 
     private MyContentDownloader contentDownloader;
     private GridView gridView;
@@ -134,7 +136,7 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
        }
        
        @Override
-       public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
+       public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater)
        {
                inflater.inflate(R.menu.image_grid_view, menu);
                String title = getString(R.string.app_name);
@@ -464,6 +466,18 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
             {
                 contentItems.add(new CameraContentEx(item, true, SONY_RAW_SUFFIX));
             }
+            else if (path.endsWith(CANON_RAW_SUFFIX))
+            {
+                contentItems.add(new CameraContentEx(item, true, CANON_RAW_SUFFIX));
+            }
+            else if (path.endsWith(CANON_RAW_SUFFIX2))
+            {
+                contentItems.add(new CameraContentEx(item, true, CANON_RAW_SUFFIX2));
+            }
+            else if (path.endsWith(CANON_RAW_SUFFIX3))
+            {
+                contentItems.add(new CameraContentEx(item, true, CANON_RAW_SUFFIX3));
+            }
         }
 
         for (CameraContentEx item : contentItems)
@@ -668,7 +682,7 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
             e.printStackTrace();
         }
 
-        ImagePagerViewFragment fragment = ImagePagerViewFragment.newInstance(playbackControl, runMode, imageContentList, position);
+        ImagePagerViewFragment fragment = ImagePagerViewFragment.newInstance(interfaceProvider, imageContentList, position);
         FragmentActivity activity = getActivity();
         if (activity != null)
         {
index 0a7e665..0228785 100644 (file)
@@ -2,6 +2,7 @@ package net.osdn.gokigen.pkremote.playback.detail;
 
 import android.app.Activity;
 import android.graphics.Bitmap;
+import android.graphics.Color;
 import android.graphics.drawable.BitmapDrawable;
 import android.os.Bundle;
 import android.util.Log;
@@ -13,7 +14,9 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import net.osdn.gokigen.pkremote.IInformationReceiver;
 import net.osdn.gokigen.pkremote.R;
+import net.osdn.gokigen.pkremote.camera.interfaces.IInterfaceProvider;
 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraRunMode;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContent;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
@@ -45,6 +48,7 @@ public class ImagePagerViewFragment extends Fragment
 
     private IPlaybackControl playbackControl;
     private ICameraRunMode runMode;
+    private IInformationReceiver informationReceiver;
 
        private List<CameraContentEx> contentList = null;
        private int contentIndex = 0;
@@ -54,19 +58,20 @@ public class ImagePagerViewFragment extends Fragment
        private LruCache<String, Bitmap> imageCache =null;
 
 
-    public static ImagePagerViewFragment newInstance(@NonNull IPlaybackControl playbackControl, @NonNull ICameraRunMode runMode, @NonNull List<CameraContentEx> contentList, int contentIndex)
+   //public static ImagePagerViewFragment newInstance(@NonNull IPlaybackControl playbackControl, @NonNull ICameraRunMode runMode, @NonNull List<CameraContentEx> contentList, int contentIndex)
+    public static ImagePagerViewFragment newInstance( @NonNull IInterfaceProvider interfaceProvider, @NonNull List<CameraContentEx> contentList, int contentIndex)
        {
                ImagePagerViewFragment fragment = new ImagePagerViewFragment();
-               fragment.setInterface(playbackControl, runMode);
+               fragment.setInterface(interfaceProvider);
                fragment.setContentList(contentList, contentIndex);
                return (fragment);
        }
 
-
-       private void setInterface(@NonNull IPlaybackControl playbackControl, @NonNull ICameraRunMode runMode)
+       private void setInterface(@NonNull IInterfaceProvider interfaceProvider)
     {
-        this.playbackControl = playbackControl;
-        this.runMode = runMode;
+        this.playbackControl = interfaceProvider.getPlaybackControl();
+        this.runMode = interfaceProvider.getCameraRunMode();
+        this.informationReceiver = interfaceProvider.getInformationReceiver();
     }
 
 
@@ -320,6 +325,12 @@ public class ImagePagerViewFragment extends Fragment
         {
             // 画像表示が終わったことを通知する
             playbackControl.showPictureFinished();
+
+            // 表示をクリアする
+            if (informationReceiver != null)
+            {
+                informationReceiver.updateMessage("", false, true, Color.BLACK);
+            }
         }
         catch (Exception e)
         {
@@ -335,7 +346,6 @@ public class ImagePagerViewFragment extends Fragment
 
        private class ImagePagerAdapter extends PagerAdapter
     {
-
                @Override
                public int getCount()
         {
@@ -506,6 +516,10 @@ public class ImagePagerViewFragment extends Fragment
                     catch (Exception e)
                     {
                         e.printStackTrace();
+                        if (informationReceiver != null)
+                        {
+                            informationReceiver.updateMessage(e.getMessage(), false, true, Color.YELLOW);
+                        }
                     }
                     runOnUiThread(new Runnable() {
                         @Override
@@ -527,11 +541,21 @@ public class ImagePagerViewFragment extends Fragment
                                 catch (Exception e)
                                 {
                                     e.printStackTrace();
+                                    if (informationReceiver != null)
+                                    {
+                                        informationReceiver.updateMessage(e.getMessage(), false, true, Color.YELLOW);
+                                    }
                                 }
+                                view.setImageBitmap(null);
                                 view.setImageBitmap(bitmap);
                             }
                         }
                     });
+                    // 表示をクリアする
+                    if (informationReceiver != null)
+                    {
+                        informationReceiver.updateMessage(getString(R.string.canon_get_image_screennail_done), false, true, Color.LTGRAY);
+                    }
                 }
 
                 @Override
index adbe6f3..7d88b72 100644 (file)
@@ -3,6 +3,7 @@ package net.osdn.gokigen.pkremote.playback.detail;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Matrix;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.util.AttributeSet;
@@ -68,6 +69,7 @@ public class ScalableImageView extends AppCompatImageView
     @Override
     public void setImageDrawable(Drawable drawable)
     {
+        super.setImageDrawable(null);
         super.setImageDrawable(drawable);
         reset();
     }
@@ -75,6 +77,22 @@ public class ScalableImageView extends AppCompatImageView
     @Override
     public void setImageBitmap(Bitmap bm)
     {
+        try
+        {
+            BitmapDrawable bd = (BitmapDrawable) super.getDrawable();
+            if (bd != null)
+            {
+                Bitmap bitmap = bd.getBitmap();
+                if (bitmap != null)
+                {
+                    bitmap.recycle();
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
         super.setImageBitmap(bm);
         reset();
     }
index a77aae7..aa7e703 100644 (file)
 
     <string name="pref_canon_get_screennail_as_small_picture">表示画像はスモール画像を使用</string>
     <string name="pref_summary_canon_get_screennail_as_small_picture">すこし時間がかかりますが、画像表示にスモール画像を使用します。</string>
+    <string name="canon_get_image_screennail">画像取得中&#8230;</string>
+    <string name="canon_get_image_screennail_done">完了</string>
 </resources>
index 94ecfc1..4e2a369 100644 (file)
 
     <string name="pref_canon_get_screennail_as_small_picture">Use small image as screen nail</string>
     <string name="pref_summary_canon_get_screennail_as_small_picture">Use small size image as </string>
+    <string name="canon_get_image_screennail">Get Image&#8230;</string>
+    <string name="canon_get_image_screennail_done">Done.</string>
 </resources>