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;
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);
// OutOfMemoryエラー対策...一度読み込んで画像サイズを取得
//System.gc();
opt.inJustDecodeBounds = true;
+ opt.inPurgeable = true;
//opt.inDither = true;
BitmapFactory.decodeByteArray(rx_body, 0, rx_body.length);
}
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);
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;
}
@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);
{
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)
e.printStackTrace();
}
- ImagePagerViewFragment fragment = ImagePagerViewFragment.newInstance(playbackControl, runMode, imageContentList, position);
+ ImagePagerViewFragment fragment = ImagePagerViewFragment.newInstance(interfaceProvider, imageContentList, position);
FragmentActivity activity = getActivity();
if (activity != null)
{
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;
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;
private IPlaybackControl playbackControl;
private ICameraRunMode runMode;
+ private IInformationReceiver informationReceiver;
private List<CameraContentEx> contentList = null;
private int contentIndex = 0;
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();
}
{
// 画像表示が終わったことを通知する
playbackControl.showPictureFinished();
+
+ // 表示をクリアする
+ if (informationReceiver != null)
+ {
+ informationReceiver.updateMessage("", false, true, Color.BLACK);
+ }
}
catch (Exception e)
{
private class ImagePagerAdapter extends PagerAdapter
{
-
@Override
public int getCount()
{
catch (Exception e)
{
e.printStackTrace();
+ if (informationReceiver != null)
+ {
+ informationReceiver.updateMessage(e.getMessage(), false, true, Color.YELLOW);
+ }
}
runOnUiThread(new Runnable() {
@Override
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
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;
@Override
public void setImageDrawable(Drawable drawable)
{
+ super.setImageDrawable(null);
super.setImageDrawable(drawable);
reset();
}
@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();
}
<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">画像取得中…</string>
+ <string name="canon_get_image_screennail_done">完了</string>
</resources>
<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…</string>
+ <string name="canon_get_image_screennail_done">Done.</string>
</resources>