From: MRSa Date: Thu, 21 Feb 2019 15:35:18 +0000 (+0900) Subject: 日付でカテゴライズできるようにした。 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=7462eca12cde9e089230b0f504279ce135ce5e53;p=gokigen%2FPKRemote.git 日付でカテゴライズできるようにした。 --- diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/camera/playback/CameraContentsRecognizer.java b/app/src/main/java/net/osdn/gokigen/pkremote/camera/playback/CameraContentsRecognizer.java index 9fb55df..5125ad8 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/camera/playback/CameraContentsRecognizer.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/camera/playback/CameraContentsRecognizer.java @@ -226,12 +226,14 @@ public class CameraContentsRecognizer implements ICameraContentsRecognizer, ICam @Override public List 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 getContentsListAtPath(String path) { + Log.v(TAG, "getContentsListAtPath() : " + path); if (path.equals("ALL")) { return (getContentsList()); } if (cameraContentsList == null) { + getRemoteCameraContentsListImpl(this); return (new ArrayList<>()); } diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java b/app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java index f34cc31..5488b43 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/playback/ImageGridViewFragment.java @@ -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 getContentsList() + { + try { + ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer(); + if (recognizer == null) { + Log.v(TAG, "getContentsList() : recognizer is null"); + return (new ArrayList<>()); + } + List 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 contents = recognizer.getContentsList(); - if (contents == null) - { - Log.v(TAG, "refreshImpl() : contents is null"); - return; - } + // 一覧を取得する + List contents = getContentsList(); List contentItems = new ArrayList<>(); HashMap 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 list) { - // Sort contents in chronological order (or alphabetical order). - Collections.sort(list, new Comparator() { - @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 contentItems = new ArrayList<>(); - HashMap 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 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 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 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 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 strList = (dateChecked) ? recognizer.getDateList() : recognizer.getPathList(); + + // 先頭に ALLを追加 + //strList.add("ALL"); + strList.add(0, "ALL"); + ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, strList); + categorySpinner.setAdapter(adapter); + categorySpinner.invalidate(); + + // 画面更新。 + refresh(); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } }