1 package net.osdn.gokigen.cameratest.camtest;
3 import android.app.Activity;
4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory;
6 import android.os.Environment;
7 import android.util.Log;
8 import android.view.View;
9 import android.widget.ImageView;
10 import android.widget.TextView;
12 import com.google.android.material.snackbar.Snackbar;
14 import net.osdn.gokigen.cameratest.R;
15 import net.osdn.gokigen.cameratest.fuji.Connection;
16 import net.osdn.gokigen.cameratest.fuji.ILiveViewImage;
17 import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
19 import androidx.annotation.NonNull;
22 import java.io.FileInputStream;
23 import java.io.FileOutputStream;
24 import java.io.FileWriter;
26 public class CamTest implements View.OnClickListener, ILiveViewImage
28 private String TAG = toString();
29 private final Activity activity;
30 private TextView textview;
31 private Connection connection;
32 private FileOutputStream outputStream = null;
33 private FileWriter fileWriter = null;
35 public CamTest(@NonNull Activity activity)
37 this.activity = activity;
38 this.connection = new Connection(this);
43 Log.v(TAG, "connect request");
48 Snackbar.make(activity.findViewById(R.id.constraintLayout), R.string.connect, Snackbar.LENGTH_SHORT).show();
50 showMessageText("START CONNECT");
51 Thread thread = new Thread(new Runnable() {
54 boolean ret = connection.start_connect();
57 showMessageText("CONNECT FAILURE...");
69 public void settings()
71 Log.v(TAG, "settings menu");
73 showMessageText("BBBB");
76 private void showMessageText(final String message)
78 activity.runOnUiThread(new Runnable() {
82 if (textview == null) {
83 textview = activity.findViewById(R.id.show_information);
85 if (textview != null) {
86 textview.setText(message);
88 } catch (Exception e) {
96 public void onClick(View v)
98 Log.v(TAG, "onClick : " + v.getId());
106 readImageFile("sampledata1.bin");
107 showMessageText("show 'sampledata1.bin'.");
110 readImageFile("sampledata2.bin");
111 showMessageText("show 'sampledata2.bin'.");
114 readImageFile("sampledata3.bin");
115 showMessageText("show 'sampledata3.bin'.");
118 showMessageText("Unknown : " + id);
123 private void doShutter()
125 Log.v(TAG, "execute shutter");
128 Snackbar.make(activity.findViewById(R.id.constraintLayout), R.string.shutter, Snackbar.LENGTH_SHORT).show();
129 showMessageText("SHUTTER");
130 Thread thread = new Thread(new Runnable() {
133 boolean ret = connection.execute_shutter();
136 showMessageText("SHUTTER FAILURE...");
149 public void updateImage(ReceivedDataHolder receivedData)
153 final byte[] dataValue = receivedData.getData();
154 byte[] startJpegMarker = {(byte)0xff, (byte)0xd8};
155 byte[] endJpegMarker = {(byte)0xff, (byte)0xd9};
157 Log.v(TAG, "Image : "+ dataValue.length + " bytes.");
159 // ダミーの記録ファイルが開いていたらファイルに書いておく。
160 outputFile(receivedData);
162 /////// Bitmap画像を作る... //////
163 final Bitmap imageData = BitmapFactory.decodeByteArray(dataValue, 18, (dataValue.length - 18));
164 if (imageData == null)
166 Log.v(TAG, "imageData is null...");
170 Log.v(TAG, "imageData : " + imageData.getByteCount() + " bytes.");
174 activity.runOnUiThread(new Runnable() {
180 ImageView view = activity.findViewById(R.id.imageView);
181 view.setImageBitmap(imageData);
198 public void updateImage(final Bitmap bitmap)
202 Log.v(TAG, "bitmap : " + bitmap.getByteCount() + " bytes.");
205 activity.runOnUiThread(new Runnable() {
211 ImageView view = activity.findViewById(R.id.imageView);
212 view.setImageBitmap(bitmap);
228 private void outputFile(ReceivedDataHolder receivedData)
232 if (outputStream != null)
234 final byte[] byteData = receivedData.getData();
235 outputStream.write(byteData, 0, byteData.length);
237 if (fileWriter != null)
239 final char[] charData = receivedData.getCharData();
240 fileWriter.write(charData, 0, charData.length);
250 private void prepareFile()
252 boolean useStream = true;
255 final String directoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/AirA01a/";
256 final String outputFileName = "camtest.bin";
257 File filepath = new File(directoryPath.toLowerCase(), outputFileName.toLowerCase());
259 outputStream = new FileOutputStream(filepath);
263 fileWriter = new FileWriter(filepath);
274 private void readImageFile(final String readFileName)
276 Thread thread = new Thread(new Runnable() {
279 readImageFileImpl(readFileName);
292 private void readImageFileImpl(final String readFileName)
296 Log.v(TAG, "readImageFileImpl() : " + readFileName);
297 final String directoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/AirA01a/";
298 File filepath = new File(directoryPath.toLowerCase(), readFileName.toLowerCase());
299 FileInputStream istr = new FileInputStream(filepath);
300 final Bitmap imageData = BitmapFactory.decodeStream(istr);
302 if (imageData == null)
304 Log.v(TAG, "readImageFileImpl() : bitmap is NULL.");
308 Log.v(TAG, "readImageFileImpl() : bitmap is " + imageData.getByteCount() + " bytes.");
311 ////// 画像表示を更新する //////
312 activity.runOnUiThread(new Runnable() {
318 ImageView view = activity.findViewById(R.id.information_view);
319 view.setImageBitmap(imageData);