OSDN Git Service

日付でカテゴライズできるようにした。
authorMRSa <mrsa@myad.jp>
Thu, 21 Feb 2019 15:35:18 +0000 (00:35 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 21 Feb 2019 15:35:18 +0000 (00:35 +0900)
app/src/main/java/net/osdn/gokigen/pkremote/camera/playback/CameraContentsRecognizer.java
app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java

index 9fb55df..5125ad8 100644 (file)
@@ -226,12 +226,14 @@ public class CameraContentsRecognizer implements ICameraContentsRecognizer, ICam
     @Override
     public List<ICameraContent> getContentsListAtDate(String date)
     {
+        Log.v(TAG, "getContentsListAtDate() : " + date);
         if (date.equals("ALL"))
         {
             return (getContentsList());
         }
         if (cameraContentsList == null)
         {
+            getRemoteCameraContentsListImpl(this);
             return (new ArrayList<>());
         }
 
@@ -269,12 +271,14 @@ public class CameraContentsRecognizer implements ICameraContentsRecognizer, ICam
     @Override
     public List<ICameraContent> getContentsListAtPath(String path)
     {
+        Log.v(TAG, "getContentsListAtPath() : " + path);
         if (path.equals("ALL"))
         {
             return (getContentsList());
         }
         if (cameraContentsList == null)
         {
+            getRemoteCameraContentsListImpl(this);
             return (new ArrayList<>());
         }
 
index f34cc31..5488b43 100644 (file)
@@ -14,6 +14,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
+import android.widget.CompoundButton;
 import android.widget.GridView;
 import android.widget.ProgressBar;
 import android.widget.RadioButton;
@@ -24,17 +25,12 @@ 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.ICameraContentsRecognizer;
-import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
-import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback;
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
 import net.osdn.gokigen.pkremote.playback.detail.CameraContentEx;
-import net.osdn.gokigen.pkremote.playback.detail.ImageContentInfoEx;
 import net.osdn.gokigen.pkremote.playback.detail.ImagePagerViewFragment;
 import net.osdn.gokigen.pkremote.playback.grid.ImageGridViewAdapter;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -43,7 +39,6 @@ import java.util.concurrent.Executors;
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.collection.LruCache;
 import androidx.fragment.app.Fragment;
@@ -55,14 +50,15 @@ import androidx.preference.PreferenceManager;
  *
  *
  */
-public class ImageGridViewFragment extends Fragment implements AdapterView.OnItemClickListener
+public class ImageGridViewFragment extends Fragment implements AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener, CompoundButton.OnCheckedChangeListener
 {
        private final String TAG = this.toString();
-    private final String MOVIE_SUFFIX = ".mov";
-    private final String JPEG_SUFFIX = ".jpg";
-    private final String DNG_RAW_SUFFIX = ".dng";
-       private final String OLYMPUS_RAW_SUFFIX = ".orf";
-       private final String PENTAX_RAW_PEF_SUFFIX = ".pef";
+
+    private static final String MOVIE_SUFFIX = ".mov";
+    private static final String JPEG_SUFFIX = ".jpg";
+    private static final String DNG_RAW_SUFFIX = ".dng";
+       private static final String OLYMPUS_RAW_SUFFIX = ".orf";
+       private static final String PENTAX_RAW_PEF_SUFFIX = ".pef";
 
     private GridView gridView;
        private IInterfaceProvider interfaceProvider;
@@ -190,7 +186,10 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
                 Spinner categorySpinner = activity.findViewById(R.id.category_spinner);
                 boolean dateChecked = dateButton.isChecked();
                 dateButton.setChecked(dateChecked);
+                dateButton.setOnCheckedChangeListener(this);
                 pathButton.setChecked(!dateChecked);
+                pathButton.setOnCheckedChangeListener(this);
+                categorySpinner.setOnItemSelectedListener(this);
 
                 ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
                 if (recognizer != null)
@@ -251,7 +250,6 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
             {
                 runMode.changeRunMode(false);
             }
-
         }
         catch (Exception e)
         {
@@ -300,6 +298,43 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
         }
     }
 
+    private  List<ICameraContent> getContentsList()
+    {
+        try {
+            ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
+            if (recognizer == null) {
+                Log.v(TAG, "getContentsList() : recognizer is null");
+                return (new ArrayList<>());
+            }
+            List<ICameraContent> contents = recognizer.getContentsList();
+            if (contents == null) {
+                Log.v(TAG, "getContentsList() : contents is null");
+                return (new ArrayList<>());
+            }
+            FragmentActivity activity = getActivity();
+            if (activity == null)
+            {
+                return (recognizer.getContentsList());
+            }
+
+            Spinner spinner = activity.findViewById(R.id.category_spinner);
+            String label = (String) spinner.getSelectedItem();
+            Log.v(TAG, ":::::SELECTED LABEL  : " + label);
+
+            RadioButton checkDate = activity.findViewById(R.id.radio_date);
+            if (checkDate.isChecked())
+            {
+                return (recognizer.getContentsListAtDate(label));
+            }
+            recognizer.getContentsListAtPath(label);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (new ArrayList<>());
+    }
+
     /**
      *   処理をContentsRecognizer ベースに差し替える
      *
@@ -309,18 +344,8 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
         imageContentList = null;
         Log.v(TAG, "refreshImpl() start");
 
-        ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
-        if (recognizer == null)
-        {
-            Log.v(TAG, "refreshImpl() : recognizer is null");
-            return;
-        }
-        List<ICameraContent> contents = recognizer.getContentsList();
-        if (contents == null)
-        {
-            Log.v(TAG, "refreshImpl() : contents is null");
-            return;
-        }
+        // 一覧を取得する
+        List<ICameraContent> contents = getContentsList();
 
         List<CameraContentEx> contentItems = new ArrayList<>();
         HashMap<String, CameraContentEx> rawItems = new HashMap<>();
@@ -372,367 +397,6 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
         Log.v(TAG, "refreshImpl() end");
     }
 
-    /**
-     *
-     *
-     */
-       private void refreshImplOriginal()
-       {
-//             contentList = null;
-               Log.v(TAG, "refreshImpl() start");
-
-               playbackControl.downloadContentList(new IDownloadContentListCallback() {
-                       @Override
-                       public void onCompleted(List<ICameraFileInfo> list) {
-                               // Sort contents in chronological order (or alphabetical order).
-                               Collections.sort(list, new Comparator<ICameraFileInfo>() {
-                                       @Override
-                                       public int compare(ICameraFileInfo lhs, ICameraFileInfo rhs)
-                                       {
-                                               long diff = rhs.getDatetime().getTime() - lhs.getDatetime().getTime();
-                                               if (diff == 0)
-                        {
-                                                       diff = rhs.getFilename().compareTo(lhs.getFilename());
-                                               }
-                                               return (int)Math.min(Math.max(-1, diff), 1);
-                                       }
-                               });
-
-                List<ImageContentInfoEx> contentItems = new ArrayList<>();
-                HashMap<String, ImageContentInfoEx> rawItems = new HashMap<>();
-                for (ICameraFileInfo item : list)
-                {
-                    String path = item.getFilename().toLowerCase(Locale.getDefault());
-                    if ((path.toLowerCase().endsWith(JPEG_SUFFIX))||(path.toLowerCase().endsWith(MOVIE_SUFFIX)))
-                    {
-                        contentItems.add(new ImageContentInfoEx(item, false, ""));
-                    }
-                    else if (path.toLowerCase().endsWith(DNG_RAW_SUFFIX))
-                    {
-                        //rawItems.put(path, new ImageContentInfoEx(item, true, DNG_RAW_SUFFIX));
-                        contentItems.add(new ImageContentInfoEx(item, true, DNG_RAW_SUFFIX));
-                    }
-                    else if (path.toLowerCase().endsWith(OLYMPUS_RAW_SUFFIX))
-                    {
-                        rawItems.put(path, new ImageContentInfoEx(item, true, OLYMPUS_RAW_SUFFIX));
-                    }
-                    else if (path.toLowerCase().endsWith(PENTAX_RAW_PEF_SUFFIX))
-                    {
-                        //rawItems.put(path, new ImageContentInfoEx(item, true, PENTAX_RAW_PEF_SUFFIX));
-                        contentItems.add(new ImageContentInfoEx(item, true, PENTAX_RAW_PEF_SUFFIX));
-                    }
-                }
-
-                //List<ImageContentInfoEx> appendRawContents = new ArrayList<>();
-                for (ImageContentInfoEx item : contentItems)
-                {
-                    String path = item.getFileInfo().getFilename().toLowerCase(Locale.getDefault());
-                    if (path.toLowerCase().endsWith(JPEG_SUFFIX))
-                    {
-/*
-                        String target1 = path.replace(JPEG_SUFFIX, DNG_RAW_SUFFIX);
-                        ImageContentInfoEx raw1 = rawItems.get(target1);
-                        if (raw1 != null)
-                        {
-                               // JPEGファイルとRAWファイルがあるので、それをマークする
-                            item.setHasRaw(true, DNG_RAW_SUFFIX);
-                            Log.v(TAG, "DETECT RAW FILE: " + target1);
-                        }
-                        else
-                        {
-                            // RAWだけあった場合、一覧に追加する
-                            appendRawContents.add(rawItems.get(path));
-                        }
-*/
-                        String target2 = path.replace(JPEG_SUFFIX, OLYMPUS_RAW_SUFFIX);
-                        ImageContentInfoEx raw2 = rawItems.get(target2);
-                        if (raw2 != null)
-                        {
-                            // RAW は、JPEGファイルがあった場合にのみリストする
-                            item.setHasRaw(true, OLYMPUS_RAW_SUFFIX);
-                            Log.v(TAG, "DETECT RAW FILE: " + target2);
-                        }
-/*
-                        String target3 = path.replace(JPEG_SUFFIX, PENTAX_RAW_PEF_SUFFIX);
-                        ImageContentInfoEx raw3 = rawItems.get(target3);
-                        if (raw3 != null)
-                        {
-                            // RAW は、JPEGファイルがあった場合にのみリストする
-                            item.setHasRaw(true, PENTAX_RAW_PEF_SUFFIX);
-                            Log.v(TAG, "DETECT RAW FILE: " + target3);
-                        }
-                        else
-                        {
-                            // RAWだけあった場合、一覧に追加する
-                            appendRawContents.add(rawItems.get(path));
-                        }
-*/
-                    }
-                }
-                //contentItems.addAll(appendRawContents);
-//                contentList = contentItems;
-
-                               runOnUiThread(new Runnable() {
-                                       @Override
-                                       public void run() {
-                        showHideProgressBar(false);
-                        gridView.invalidateViews();
-                                       }
-                               });
-                       }
-                       
-                       @Override
-                       public void onErrorOccurred(Exception e) {
-                               final String message = e.getMessage();
-                               runOnUiThread(new Runnable() {
-                                       @Override
-                                       public void run() {
-                        showHideProgressBar(false);
-                                               presentMessage("Load failed", message);
-                                       }
-                               });
-                       }
-               });
-        Log.v(TAG, "refreshImpl() end");
-    }
-
-
-/*
-
-       private static class GridCellViewHolder
-    {
-               ImageView imageView;
-               ImageView iconView;
-       }
-
-       private class GridViewAdapter extends BaseAdapter
-    {
-               private LayoutInflater inflater;
-
-               GridViewAdapter(LayoutInflater inflater)
-               {
-                       this.inflater = inflater;
-               }
-
-               private List<?> getItemList()
-        {
-            return (contentList);
-               }
-               
-               @Override
-               public int getCount()
-        {
-                       if (getItemList() == null)
-                       {
-                               return (0);
-                       }
-                       return getItemList().size();
-               }
-
-               @Override
-               public Object getItem(int position)
-        {
-                       if (getItemList() == null)
-                       {
-                               return null;
-                       }
-                       return (getItemList().get(position));
-               }
-
-               @Override
-               public long getItemId(int position)
-        {
-                       return (position);
-               }
-
-               @Override
-               public View getView(int position, View convertView, ViewGroup parent)
-        {
-                       GridCellViewHolder viewHolder;
-                       if (convertView == null)
-                       {
-                               convertView = inflater.inflate(R.layout.view_grid_cell, parent, false);
-                               
-                               viewHolder = new GridCellViewHolder();
-                               viewHolder.imageView = convertView.findViewById(R.id.imageViewY);
-                               viewHolder.iconView = convertView.findViewById(R.id.imageViewZ);
-
-                               convertView.setTag(viewHolder);
-                       }
-            else
-            {
-                               viewHolder = (GridCellViewHolder)convertView.getTag();
-                       }
-
-                       ImageContentInfoEx infoEx = (ImageContentInfoEx) getItem(position);
-            ICameraFileInfo item = (infoEx != null) ? infoEx.getFileInfo() : null;
-                       if (item == null)
-            {
-                               viewHolder.imageView.setImageDrawable(null);
-                               viewHolder.iconView.setImageDrawable(null);
-                               return convertView;
-                       }
-                       String path = new File(item.getDirectoryPath(), item.getFilename()).getPath();
-                       Bitmap thumbnail = imageCache.get(path);
-                       if (thumbnail == null)
-            {
-                               viewHolder.imageView.setImageDrawable(null);
-                               viewHolder.iconView.setImageDrawable(null);
-                               if (!gridViewIsScrolling)
-                {
-                                       if (executor.isShutdown())
-                    {
-                                               executor = Executors.newFixedThreadPool(1);
-                                       }
-                                       executor.execute(new ThumbnailLoader(viewHolder, path, infoEx.hasRaw()));
-                               }
-                       }
-            else
-            {
-                               viewHolder.imageView.setImageBitmap(thumbnail);
-                               if (path.toLowerCase().endsWith(MOVIE_SUFFIX))
-                {
-                                       viewHolder.iconView.setImageResource(R.drawable.ic_videocam_black_24dp);
-                               }
-                else if (infoEx.hasRaw())
-                {
-                    viewHolder.iconView.setImageResource(R.drawable.ic_raw_black_1x);
-                }
-                else
-                {
-                                       viewHolder.iconView.setImageDrawable(null);
-                               }
-                       }
-                       return convertView;
-               }
-       }
-       
-       private class GridViewOnItemClickListener implements AdapterView.OnItemClickListener
-    {
-               @Override
-               public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-               ImagePagerViewFragment fragment = ImagePagerViewFragment.newInstance(playbackControl, runMode, contentList, position);
-            FragmentActivity activity = getActivity();
-               if (activity != null)
-               {
-                FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
-                transaction.replace(getId(), fragment);
-                transaction.addToBackStack(null);
-                transaction.commit();
-            }
-               }
-       }
-       
-       private class GridViewOnScrollListener implements AbsListView.OnScrollListener
-    {
-               @Override
-               public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
-        {
-                       // No operation.
-               }
-
-               @Override
-               public void onScrollStateChanged(AbsListView view, int scrollState)
-        {
-                       if (scrollState == SCROLL_STATE_IDLE)
-                       {
-                               gridViewIsScrolling = false;
-                               gridView.invalidateViews();
-                       }
-                       else if ((scrollState == SCROLL_STATE_FLING) || (scrollState == SCROLL_STATE_TOUCH_SCROLL))
-                       {
-                               gridViewIsScrolling = true;
-                               if (!executor.isShutdown())
-                               {
-                                       executor.shutdownNow();
-                               }
-                       }
-               }
-       }
-
-       private class ThumbnailLoader implements Runnable
-    {
-               private GridCellViewHolder viewHolder;
-               private String path;
-        private final boolean hasRaw;
-               
-               ThumbnailLoader(GridCellViewHolder viewHolder, String path, boolean hasRaw)
-        {
-                       this.viewHolder = viewHolder;
-                       this.path = path;
-            this.hasRaw = hasRaw;
-               }
-               
-               @Override
-               public void run()
-        {
-                       class Box {
-                               boolean isDownloading = true;
-                       }
-                       final Box box = new Box();
-
-                       playbackControl.downloadContentThumbnail(path, new IDownloadThumbnailImageCallback()
-            {
-                               @Override
-                               public void onCompleted(final Bitmap thumbnail, Map<String, Object> metadata)
-                               {
-                                       if (thumbnail != null)
-                                       {
-                        try {
-                            Log.v(TAG, "Thumbnail PATH : " + path + " size : " + thumbnail.getByteCount());
-                            imageCache.put(path, thumbnail);
-                            runOnUiThread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    viewHolder.imageView.setImageBitmap(thumbnail);
-                                    if (path.toLowerCase().endsWith(MOVIE_SUFFIX)) {
-                                        viewHolder.iconView.setImageResource(R.drawable.ic_videocam_black_24dp);
-                                    } else if (hasRaw) {
-                                        viewHolder.iconView.setImageResource(R.drawable.ic_raw_black_1x);
-                                    } else {
-                                        viewHolder.iconView.setImageDrawable(null);
-                                    }
-                                }
-                            });
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                                       box.isDownloading = false;  
-                               }
-                               
-                               @Override
-                               public void onErrorOccurred(Exception e)
-                               {
-                                       box.isDownloading = false;
-                               }
-                       });
-
-                       // Waits to realize the serial download.
-                       while (box.isDownloading) {
-                               Thread.yield();
-                       }
-               }
-       }
-*/
-       
-       // -------------------------------------------------------------------------
-       // Helpers
-       // -------------------------------------------------------------------------
-       
-       private void presentMessage(String title, String message)
-    {
-               Context context = getActivity();
-               if (context == null)
-               {
-            return;
-        }
-               
-               AlertDialog.Builder builder = new AlertDialog.Builder(context);
-               builder.setTitle(title).setMessage(message);
-               builder.show();
-       }
-       
        private void runOnUiThread(Runnable action)
     {
                Activity activity = getActivity();
@@ -743,93 +407,6 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
                activity.runOnUiThread(action);
        }
 
-/*
-       private Bitmap createRotatedBitmap(byte[] data, Map<String, Object> metadata)
-    {
-               Bitmap bitmap = null;
-               try
-        {
-                       bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
-               }
-               catch (Throwable e)
-        {
-                       e.printStackTrace();
-               }
-               if (bitmap == null)
-               {
-                   Log.v(TAG, "createRotatedBitmap() : bitmap is null : " + data.length);
-                       return (null);
-               }
-               
-               int degrees = getRotationDegrees(data, metadata);
-               if (degrees != 0)
-               {
-                       Matrix m = new Matrix();
-                       m.postRotate(degrees);
-                       try
-            {
-                               bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
-                       }
-                       catch (Throwable e)
-            {
-                               e.printStackTrace();
-                       }
-               }
-               return (bitmap);
-       }
-       
-       private int getRotationDegrees(byte[] data, Map<String, Object> metadata)
-    {
-               int degrees = 0;
-               int orientation = ExifInterface.ORIENTATION_UNDEFINED;
-               
-               if (metadata != null && metadata.containsKey("Orientation")) {
-                       orientation = Integer.parseInt((String)metadata.get("Orientation"));
-               } else {
-                       // Gets image orientation to display a picture.
-                       try {
-                               File tempFile = File.createTempFile("temp", null);
-                               {
-                                       FileOutputStream outStream = new FileOutputStream(tempFile.getAbsolutePath());
-                                       outStream.write(data);
-                                       outStream.close();
-                               }
-                               
-                               ExifInterface exifInterface = new ExifInterface(tempFile.getAbsolutePath());
-                               orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
-
-                               if (!tempFile.delete())
-                {
-                    Log.v(TAG, "File delete fail...");
-                }
-                       }
-                       catch (IOException e)
-            {
-                               e.printStackTrace();
-                       }
-               }
-
-               switch (orientation)
-        {
-            case ExifInterface.ORIENTATION_NORMAL:
-                degrees = 0;
-                break;
-            case ExifInterface.ORIENTATION_ROTATE_90:
-                degrees = 90;
-                break;
-            case ExifInterface.ORIENTATION_ROTATE_180:
-                degrees = 180;
-                break;
-            case ExifInterface.ORIENTATION_ROTATE_270:
-                degrees = 270;
-                break;
-            default:
-                break;
-               }
-               return (degrees);
-       }
-*/
-
     // AdapterView.OnItemClickListener
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id)
@@ -844,4 +421,57 @@ public class ImageGridViewFragment extends Fragment implements AdapterView.OnIte
             transaction.commit();
         }
     }
+
+    // AdapterView.OnItemSelectedListener
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
+    {
+        Log.v(TAG, "onItemSelected()");
+        refresh();
+    }
+
+    //  AdapterView.OnItemSelectedListener
+    @Override
+    public void onNothingSelected(AdapterView<?> parent)
+    {
+        Log.v(TAG, "onNothingSelected()");
+    }
+
+    @Override
+    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
+    {
+        Log.v(TAG, "onCheckedChanged : " + isChecked);
+        try
+        {
+            if (!isChecked)
+            {
+                // do nothing!
+                return;
+            }
+            boolean dateChecked = (buttonView.getId() == R.id.radio_date);
+            ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
+            FragmentActivity activity = getActivity();
+            if ((recognizer != null)&&(activity != null))
+            {
+                Spinner categorySpinner = activity.findViewById(R.id.category_spinner);
+
+                // パス一覧 / 日付一覧
+                List<String> strList = (dateChecked) ? recognizer.getDateList() : recognizer.getPathList();
+
+                // 先頭に ALLを追加
+                //strList.add("ALL");
+                strList.add(0, "ALL");
+                ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, strList);
+                categorySpinner.setAdapter(adapter);
+                categorySpinner.invalidate();
+
+                // 画面更新。
+                refresh();
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
 }