OSDN Git Service

「お気に入り」設定の保存と展開の機能について、実装準備。それに合わせて一部リファクタリング。
authorMRSa <mrsa@myad.jp>
Sat, 29 Jul 2017 14:47:24 +0000 (23:47 +0900)
committerMRSa <mrsa@myad.jp>
Sat, 29 Jul 2017 14:47:24 +0000 (23:47 +0900)
23 files changed:
wear/src/main/java/jp/sfjp/gokigen/a01c/IShowInformation.java
wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/CameraLiveImageView.java
wear/src/main/java/jp/sfjp/gokigen/a01c/liveview/button/PushedArea2.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/CameraPowerOff.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/IOlyCameraCoordinator.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/OlyCameraCoordinator.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/dispatcher/FeatureDispatcher.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/CameraPropertyLoadSaveOperations.java [moved from wear/src/main/java/jp/sfjp/gokigen/a01c/preference/CameraPropertyLoadSaveOperations.java with 98% similarity]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/ICameraPropertyLoadSaveOperations.java [moved from wear/src/main/java/jp/sfjp/gokigen/a01c/preference/ICameraPropertyLoadSaveOperations.java with 57% similarity]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/ILoadSaveCameraProperties.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/LoadSaveCameraProperties.java
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/ILoadSaveMyCameraPropertyDialogDismiss.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadMyCameraPropertyFragment.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyDialog.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyPagerAdapter.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertyLoadArrayAdapter.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetArrayAdapter.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetItems.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/SaveMyCameraPropertyFragment.java [new file with mode: 0644]
wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java [moved from wear/src/main/java/jp/sfjp/gokigen/a01c/preference/ICameraPropertyAccessor.java with 97% similarity]
wear/src/main/res/values-ja/strings.xml
wear/src/main/res/values/strings.xml

index d09333a..f8daa37 100644 (file)
@@ -38,4 +38,6 @@ public interface IShowInformation
     void vibrate(final int vibratePattern);
 
     void setEnabledOperation(boolean operation, boolean suppress);
+
+    void showFavoriteSettingsDialog();
 }
index fe3d884..3f91664 100644 (file)
@@ -24,7 +24,7 @@ import jp.sfjp.gokigen.a01c.liveview.IMessageDrawer;
 import jp.sfjp.gokigen.a01c.liveview.OlyCameraLiveViewOnTouchListener;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.OlyCameraCoordinator;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
 
 /**
  *   メインのActivity
@@ -34,6 +34,7 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
 {
     private final String TAG = toString();
     static final int REQUEST_NEED_PERMISSIONS = 1010;
+    static final int COMMAND_MY_PROPERTY = 0x00000100;
 
     private CameraLiveImageView liveView = null;
     private IOlyCameraCoordinator coordinator = null;
@@ -240,7 +241,7 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         {
             int resId;
             SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(this);
-            if (preferences.getBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, true))
+            if (preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, true))
             {
                 // ボタンをGrid OFFアイコンにする
                 resId = R.drawable.btn_ic_grid_off;
@@ -363,7 +364,7 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         coordinator.stopLiveView();
 
         //  パラメータを確認し、カメラの電源を切る
-        if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(ICameraPropertyAccessor.EXIT_APPLICATION_WITH_DISCONNECT, true))
+        if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(IPreferenceCameraPropertyAccessor.EXIT_APPLICATION_WITH_DISCONNECT, true))
         {
             Log.v(TAG, "Shutdown camera...");
 
@@ -656,4 +657,34 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
             listener.setEnableOperation(operation, suppress);
         }
     }
+
+    /**
+     *   「お気に入り設定」表示画面を開く
+     *
+     */
+    @Override
+    public void showFavoriteSettingsDialog()
+    {
+/*
+        // お気に入り設定画面を開く...
+        LoadSaveMyCameraPropertyDialog dialog = new LoadSaveMyCameraPropertyDialog();
+        dialog.setTargetFragment(this, COMMAND_MY_PROPERTY);
+        dialog.setPropertyOperationsHolder(coordinator.getCameraPropertyLoadSaveOperations());
+        dialog.show(this, "my_dialog");
+*/
+/*
+        //  コマンドの実行確認ダイアログ... 動かん。。
+        ConfirmationDialog dialog = new ConfirmationDialog(this);
+        dialog.show(R.string.title_my_settings, R.string.message_none, new ConfirmationDialog.Callback()
+        {
+            @Override
+            public void confirm()
+            {
+                vibrate(IShowInformation.VIBRATE_PATTERN_SIMPLE_LONGLONG);
+            }
+        });
+*/
+    }
+
+
 }
index e8e3e56..f889f8e 100644 (file)
@@ -10,7 +10,6 @@ import android.graphics.Paint;
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.graphics.Typeface;
 import android.media.ExifInterface;
 import android.os.Looper;
 import android.preference.PreferenceManager;
@@ -32,7 +31,7 @@ import jp.sfjp.gokigen.a01c.R;
 import jp.sfjp.gokigen.a01c.liveview.gridframe.GridFrameFactory;
 import jp.sfjp.gokigen.a01c.liveview.gridframe.IGridFrameDrawer;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.ILevelGauge;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
 
 /**
  *   CameraLiveImageView :
@@ -98,10 +97,10 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         imageScaleType = ImageView.ScaleType.FIT_CENTER;
         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
 
-        showGridFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, true);
-        showLevelGaugeFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
+        showGridFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, true);
+        showLevelGaugeFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
 
-        int framingGridStatus = Integer.parseInt(preferences.getString(ICameraPropertyAccessor.FRAME_GRID, ICameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
+        int framingGridStatus = Integer.parseInt(preferences.getString(IPreferenceCameraPropertyAccessor.FRAME_GRID, IPreferenceCameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
         gridFrameDrawer = GridFrameFactory.getGridFrameDrawer(framingGridStatus);
 
         // ダミーのビットマップデータ読み込み...画面表示のテスト用ロジック
@@ -909,7 +908,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         showGridFeature = isShowGridFeature;
         SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
         SharedPreferences.Editor editor = preferences.edit();
-        editor.putBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
+        editor.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
         editor.apply();
     }
 
@@ -933,7 +932,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         showLevelGaugeFeature = isShowLevelGaugeFeature;
         SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
         SharedPreferences.Editor editor = preferences.edit();
-        editor.putBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
+        editor.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
         editor.apply();
         ILevelGauge levelGauge = messageHolder.getLevelGauge();
         if (levelGauge == null)
index 1d7843c..58dd8b9 100644 (file)
@@ -26,7 +26,7 @@ class PushedArea2 implements IPushedButton
         if (isLongClick)
         {
             preference_action_id = preference_action_id + ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
-            //defaultAction = ICameraFeatureDispatcher.FEATURE_SHOW_FAVORITE_DIALOG;
+            defaultAction = ICameraFeatureDispatcher.FEATURE_SHOW_FAVORITE_DIALOG;
         }
         String takeMode = dispatcher.getTakeMode();
         switch (takeMode)
index a530e1f..d7ad00b 100644 (file)
@@ -6,7 +6,7 @@ import android.support.v7.preference.Preference;
 import jp.sfjp.gokigen.a01c.ConfirmationDialog;
 import jp.sfjp.gokigen.a01c.IChangeScene;
 import jp.sfjp.gokigen.a01c.R;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
 
 /**
  *  Preferenceがクリックされた時に処理するクラス
@@ -52,7 +52,7 @@ public class CameraPowerOff implements Preference.OnPreferenceClickListener, Con
         }
 
         preferenceKey = preference.getKey();
-        if (preferenceKey.contains(ICameraPropertyAccessor.EXIT_APPLICATION))
+        if (preferenceKey.contains(IPreferenceCameraPropertyAccessor.EXIT_APPLICATION))
         {
 
             // 確認ダイアログの生成と表示
@@ -66,7 +66,7 @@ public class CameraPowerOff implements Preference.OnPreferenceClickListener, Con
     @Override
     public void confirm()
     {
-        if (preferenceKey.contains(ICameraPropertyAccessor.EXIT_APPLICATION))
+        if (preferenceKey.contains(IPreferenceCameraPropertyAccessor.EXIT_APPLICATION))
         {
             // カメラの電源をOFFにしたうえで、アプリケーションを終了する。
             changeScene.exitApplication();
index 8f6c792..e47db18 100644 (file)
@@ -6,6 +6,7 @@ import jp.co.olympus.camerakit.OLYCameraLiveViewListener;
 import jp.co.olympus.camerakit.OLYCameraStatusListener;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ICameraPropertyLoadSaveOperations;
 
 /**
  *
@@ -60,6 +61,9 @@ public interface IOlyCameraCoordinator
     // カメラプロパティアクセスインタフェース
     IOlyCameraPropertyProvider getCameraPropertyProvider();
 
+    // カメラプロパティのロード・セーブインタフェース(読み込み中/保存中のダイアログ表示機能付き)
+    ICameraPropertyLoadSaveOperations getCameraPropertyLoadSaveOperations();
+
     // カメラプロパティのロード・セーブインタフェース
     ILoadSaveCameraProperties getLoadSaveCameraProperties();
 
index 8a3a785..7fb0440 100644 (file)
@@ -19,6 +19,7 @@ import jp.sfjp.gokigen.a01c.olycamerawrapper.indicator.ICameraStatusDisplay;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.listeners.CameraPropertyListenerImpl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.listeners.CameraRecordingListenerImpl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.listeners.CameraStatusListenerImpl;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ICameraPropertyLoadSaveOperations;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraProperty;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider;
@@ -28,7 +29,8 @@ import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.AutoFocusControl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.BracketingShotControl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.MovieRecordingControl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.SingleShotControl;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.CameraPropertyLoadSaveOperations;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
 
 /**
  *   OlyCameraCoordinator : Olympus Air との接続、切断の間をとりもつクラス。
@@ -55,6 +57,7 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
     private final MovieRecordingControl movieControl;
     private final BracketingShotControl bracketingShot;
     private final OlyCameraPropertyProxy propertyProxy;
+    private final CameraPropertyLoadSaveOperations loadSaveOperations;
     private final LoadSaveCameraProperties loadSaveCameraProperties;
     private final OlyCameraConnection cameraConnection;
     private final ICameraStatusDisplay cameraStatusDisplay;
@@ -64,6 +67,7 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
     private boolean isAutoFocusLocked = false;
     //private boolean isExposureLocked = false;
 
+
     /**
      * コンストラクタ
      */
@@ -86,11 +90,12 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
         bracketingShot = new BracketingShotControl(camera, focusFrameDisplay, this, showInformation);  // ブラケッティング&インターバル撮影
         propertyProxy = new OlyCameraPropertyProxy(camera); // カメラプロパティ
         cameraStatusDisplay = new CameraStatusDisplay(propertyProxy, showInformation);  // 画面表示
-        this.levelMeter = new LevelMeterHolder(showInformation, android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false));  // デジタル水準器
+        this.levelMeter = new LevelMeterHolder(showInformation, android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false));  // デジタル水準器
         camera.setCameraStatusListener(new CameraStatusListenerImpl(context, cameraStatusDisplay, levelMeter));
         camera.setCameraPropertyListener(new CameraPropertyListenerImpl(cameraStatusDisplay));
         camera.setRecordingListener(new CameraRecordingListenerImpl(context, showInformation));
         loadSaveCameraProperties = new LoadSaveCameraProperties(context, propertyProxy, this);
+        loadSaveOperations = new CameraPropertyLoadSaveOperations(context, loadSaveCameraProperties, cameraStatusDisplay);
     }
 
     /**
@@ -412,6 +417,12 @@ public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorCo
     }
 
     @Override
+    public ICameraPropertyLoadSaveOperations getCameraPropertyLoadSaveOperations()
+    {
+        return (loadSaveOperations);
+    }
+
+    @Override
     public ILoadSaveCameraProperties getLoadSaveCameraProperties()
     {
         return (loadSaveCameraProperties);
index e8f4874..a1d4001 100644 (file)
@@ -9,7 +9,6 @@ import jp.sfjp.gokigen.a01c.liveview.ILiveImageStatusNotify;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraProperty;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider;
-import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.BracketingShotControl;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.IBracketingShotStyle;
 
 
@@ -20,6 +19,7 @@ import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.IBracketingShotStyle;
 public class FeatureDispatcher implements ICameraFeatureDispatcher
 {
     private final String TAG = toString();
+
     private final IShowInformation statusDrawer;
     private final IOlyCameraCoordinator camera;
     private final ILiveImageStatusNotify liveImageView;
@@ -734,7 +734,8 @@ public class FeatureDispatcher implements ICameraFeatureDispatcher
      */
     private void showFavoriteDialog()
     {
-        // TBD...
+        // お気に入り設定表示画面を開く
+        statusDrawer.showFavoriteSettingsDialog();
     }
 
     /**
@@ -1,4 +1,4 @@
-package jp.sfjp.gokigen.a01c.preference;
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property;
 
 import android.app.Activity;
 import android.app.ProgressDialog;
@@ -7,7 +7,6 @@ import android.widget.Toast;
 
 import jp.sfjp.gokigen.a01c.R;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.indicator.ICameraStatusDisplay;
-import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties;
 
 /**
  *   カメラプロパティの保存、展開を実行する
@@ -1,6 +1,6 @@
-package jp.sfjp.gokigen.a01c.preference;
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property;
 
-interface ICameraPropertyLoadSaveOperations
+public interface ICameraPropertyLoadSaveOperations
 {
     void saveProperties(final String idHeader, final String dataName);
     void loadProperties(final String idHeader, final String dataName);
index 7099cbe..93f4a28 100644 (file)
@@ -2,6 +2,10 @@ package jp.sfjp.gokigen.a01c.olycamerawrapper.property;
 
 public interface ILoadSaveCameraProperties
 {
+    int MAX_STORE_PROPERTIES = 256;   // お気に入り設定の最大記憶数...
+    String TITLE_KEY = "CameraPropTitleKey";
+    String DATE_KEY = "CameraPropDateTime";
+
     void loadCameraSettings(final String id);
     void saveCameraSettings(final String id, final String name);
 }
index 10faf7e..74dd9bc 100644 (file)
@@ -23,9 +23,7 @@ public class LoadSaveCameraProperties implements ILoadSaveCameraProperties
 {
     private final String TAG = toString();
 
-    public static final int MAX_STORE_PROPERTIES = 256;   // お気に入り設定の最大記憶数...
-    public static final String TITLE_KEY = "CameraPropTitleKey";
-    public static final String DATE_KEY = "CameraPropDateTime";
+
     private static final String TAKEMODE = "TAKEMODE";
     private final Context parent;
     private final OLYCamera camera;
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/ILoadSaveMyCameraPropertyDialogDismiss.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/ILoadSaveMyCameraPropertyDialogDismiss.java
new file mode 100644 (file)
index 0000000..11005eb
--- /dev/null
@@ -0,0 +1,7 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+interface ILoadSaveMyCameraPropertyDialogDismiss
+{
+    void doDismissWithPropertyLoad(String id, String name);
+    void doDismissWithPropertySave(String id, String name);
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadMyCameraPropertyFragment.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadMyCameraPropertyFragment.java
new file mode 100644 (file)
index 0000000..9b73011
--- /dev/null
@@ -0,0 +1,79 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.ListFragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ListView;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties;
+
+public class LoadMyCameraPropertyFragment extends ListFragment implements ListView.OnItemClickListener
+{
+    private final String TAG = toString();
+    private ILoadSaveMyCameraPropertyDialogDismiss dialogDismiss = null;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
+    {
+        return (inflater.inflate(R.layout.list_camera_properties, container, false));
+    }
+
+    public void setDismissInterface(ILoadSaveMyCameraPropertyDialogDismiss dismiss)
+    {
+        this.dialogDismiss = dismiss;
+    }
+
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState)
+    {
+        super.onActivityCreated(savedInstanceState);
+
+        List<MyCameraPropertySetItems> listItems = new ArrayList<>();
+
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
+        for (int index = 1; index <= ILoadSaveCameraProperties.MAX_STORE_PROPERTIES; index++)
+        {
+            String idHeader = String.format(Locale.ENGLISH, "%03d", index);
+            String prefDate = preferences.getString(idHeader + ILoadSaveCameraProperties.DATE_KEY, "");
+            if (prefDate.length() <= 0)
+            {
+                //listItems.add(new MyCameraPropertySetItems(0, idHeader, "", ""));
+                break;
+            }
+            String prefTitle = preferences.getString(idHeader + ILoadSaveCameraProperties.TITLE_KEY, "");
+            listItems.add(new MyCameraPropertySetItems(0, idHeader, prefTitle, prefDate));
+        }
+
+        //String prefDate = preferences.getString(LoadSaveCameraProperties.DATE_KEY, "");
+        //listItems.add(new MyCameraPropertySetItems(0, "000", getString(R.string.auto_save_props), prefDate));
+
+        MyCameraPropertyLoadArrayAdapter adapter = new MyCameraPropertyLoadArrayAdapter(getActivity(),  R.layout.column_load, listItems);
+        setListAdapter(adapter);
+
+        getListView().setOnItemClickListener(this);
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l)
+    {
+        final MyCameraPropertySetItems item = (MyCameraPropertySetItems) getListAdapter().getItem(position);
+        Log.v(TAG, "onItemClick() : " + position + " [" + item.getItemId() + "] " + item.getItemName() + " (" + item.getItemInfo() + ")");
+
+        // アイテムを選択して終わらせる
+        if (dialogDismiss != null)
+        {
+            dialogDismiss.doDismissWithPropertyLoad(item.getItemId(), item.getItemName());
+        }
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyDialog.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyDialog.java
new file mode 100644 (file)
index 0000000..41b952c
--- /dev/null
@@ -0,0 +1,111 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTabHost;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TabHost;
+
+import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ICameraPropertyLoadSaveOperations;
+
+
+public class LoadSaveMyCameraPropertyDialog extends DialogFragment implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener, ILoadSaveMyCameraPropertyDialogDismiss
+{
+    private final String TAG = toString();
+    private ICameraPropertyLoadSaveOperations propertyOperations = null;
+    private FragmentTabHost tabHost = null;
+    private ViewPager viewPager = null;
+
+    public void setPropertyOperationsHolder(ICameraPropertyLoadSaveOperations holder)
+    {
+        propertyOperations = holder;
+    }
+
+    /**/
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
+    {
+        try
+        {
+            View view = inflater.inflate(R.layout.dialog_my_camera_properties, container);
+            tabHost = (FragmentTabHost) view.findViewById(R.id.tabHost01);
+            tabHost.setup(getActivity(), getChildFragmentManager());
+            tabHost.addTab(tabHost.newTabSpec("Load").setIndicator(getString(R.string.title_tab_title_load)), Fragment.class, null);
+            tabHost.addTab(tabHost.newTabSpec("Save").setIndicator(getString(R.string.title_tab_title_save)), Fragment.class, null);
+
+            tabHost.setOnTabChangedListener(this);
+
+            LoadSaveMyCameraPropertyPagerAdapter adapter = new LoadSaveMyCameraPropertyPagerAdapter(getChildFragmentManager(), this);
+            adapter.setTitles(new String[]{getString(R.string.title_tab_title_load), getString(R.string.title_tab_title_save)});
+
+            viewPager = (ViewPager) view.findViewById(R.id.pager);
+            viewPager.setAdapter(adapter);
+            //viewPager.setOnPageChangeListener(this);
+            viewPager.addOnPageChangeListener(this);
+
+            getDialog().setTitle(getString(R.string.title_my_settings));
+            return (view);
+
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (null);
+
+    }
+
+    @Override
+    public void onTabChanged(String tabId)
+    {
+        Log.v(TAG, "CHANGED TAB : " + tabId);
+
+        int i = tabHost.getCurrentTab();
+        viewPager.setCurrentItem(i);
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+    }
+
+    @Override
+    public void onPageSelected(int position)
+    {
+        Log.v(TAG, "CHANGED PAGER : " + position);
+        tabHost.setCurrentTab(position);
+
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state)
+    {
+
+    }
+
+    @Override
+    public void doDismissWithPropertyLoad(final String id, final String name)
+    {
+        dismiss();
+        if (propertyOperations != null)
+        {
+            propertyOperations.loadProperties(id, name);
+        }
+    }
+
+    @Override
+    public void doDismissWithPropertySave(final String id, final String name)
+    {
+        dismiss();
+        if (propertyOperations != null)
+        {
+            propertyOperations.saveProperties(id, name);
+        }
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyPagerAdapter.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/LoadSaveMyCameraPropertyPagerAdapter.java
new file mode 100644 (file)
index 0000000..f4eaca6
--- /dev/null
@@ -0,0 +1,72 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.util.Log;
+
+class LoadSaveMyCameraPropertyPagerAdapter extends FragmentPagerAdapter
+{
+    private final String TAG = toString();
+    private final ILoadSaveMyCameraPropertyDialogDismiss dismissInterface;
+
+    private String[] titles = null;
+    private LoadMyCameraPropertyFragment loadFragment = null;
+    private SaveMyCameraPropertyFragment saveFragment = null;
+
+    LoadSaveMyCameraPropertyPagerAdapter(FragmentManager fm, ILoadSaveMyCameraPropertyDialogDismiss dismissInterface)
+    {
+        super(fm);
+        this.dismissInterface = dismissInterface;
+    }
+
+    private void initialize()
+    {
+        loadFragment = null;
+        loadFragment = new LoadMyCameraPropertyFragment();
+        loadFragment.setDismissInterface(dismissInterface);
+
+        saveFragment = null;
+        saveFragment = new SaveMyCameraPropertyFragment();
+        saveFragment.setDismissInterface(dismissInterface);
+    }
+
+    @Override
+    public Fragment getItem(int position)
+    {
+        Log.v(TAG, "getItem :" + position);
+        if ((loadFragment == null)||(saveFragment == null))
+        {
+            initialize();
+        }
+        Fragment returnFragment;
+        if (position == 0)
+        {
+            // loadFragment
+            returnFragment = loadFragment;
+        }
+        else  //
+        {
+            // saveFragment
+            returnFragment = saveFragment;
+        }
+        return (returnFragment);
+    }
+
+    @Override
+    public int getCount()
+    {
+        return 2;
+    }
+
+    @Override
+    public CharSequence getPageTitle(int position)
+    {
+        return titles[position];
+    }
+
+    void setTitles(String[] titles)
+    {
+        this.titles = titles;
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertyLoadArrayAdapter.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertyLoadArrayAdapter.java
new file mode 100644 (file)
index 0000000..2d1a446
--- /dev/null
@@ -0,0 +1,61 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import java.util.List;
+
+class MyCameraPropertyLoadArrayAdapter extends ArrayAdapter<MyCameraPropertySetItems>
+{
+    private LayoutInflater inflater = null;
+    private final int textViewResourceId;
+    private List<MyCameraPropertySetItems> listItems = null;
+
+    MyCameraPropertyLoadArrayAdapter(Context context, int resource, List<MyCameraPropertySetItems> objects)
+    {
+        super(context, resource, objects);
+        textViewResourceId = resource;
+        listItems = objects;
+
+        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    }
+
+    /**
+     *
+     */
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent)
+    {
+        View view;
+        if(convertView != null)
+        {
+            view = convertView;
+        }
+        else
+        {
+            view = inflater.inflate(textViewResourceId, parent, false);
+        }
+        MyCameraPropertySetItems item = listItems.get(position);
+        try
+        {
+            TextView idView = (TextView) view.findViewWithTag("id");
+            idView.setText(item.getItemId());
+
+            TextView titleView = (TextView)view.findViewWithTag("title");
+            titleView.setText(item.getItemName());
+
+            TextView infoView = (TextView) view.findViewWithTag("info");
+            infoView.setText(item.getItemInfo());
+
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (view);
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetArrayAdapter.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetArrayAdapter.java
new file mode 100644 (file)
index 0000000..803e0eb
--- /dev/null
@@ -0,0 +1,97 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.List;
+
+import jp.sfjp.gokigen.a01c.R;
+
+class MyCameraPropertySetArrayAdapter  extends ArrayAdapter<MyCameraPropertySetItems>
+{
+    private final String TAG = toString();
+    private final Context context;
+    private LayoutInflater inflater = null;
+    private final int textViewResourceId;
+    private List<MyCameraPropertySetItems> listItems = null;
+    private final ILoadSaveMyCameraPropertyDialogDismiss dialogDismiss;
+
+
+    MyCameraPropertySetArrayAdapter(Context context, int resource, List<MyCameraPropertySetItems> objects, ILoadSaveMyCameraPropertyDialogDismiss dialogDismiss)
+    {
+        super(context, resource, objects);
+        this.context = context;
+        textViewResourceId = resource;
+        listItems = objects;
+        this.dialogDismiss = dialogDismiss;
+
+        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    }
+
+    /**
+     *
+     */
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent)
+    {
+        View view;
+        if(convertView != null)
+        {
+            view = convertView;
+        }
+        else
+        {
+            view = inflater.inflate(textViewResourceId, parent, false);
+        }
+        try
+        {
+            final MyCameraPropertySetItems item = listItems.get(position);
+
+            TextView idView = (TextView) view.findViewWithTag("id");
+            idView.setText(item.getItemId());
+
+            final EditText titleView = (EditText)view.findViewWithTag("title");
+            titleView.setText(item.getItemName());
+
+            TextView infoView = (TextView) view.findViewWithTag("info");
+            infoView.setText(item.getItemInfo());
+
+            Button button = (Button) view.findViewWithTag("button");
+            button.setOnClickListener(new Button.OnClickListener()
+            {
+                @Override
+                public void onClick(View view)
+                {
+
+                    String idHeader = item.getItemId();
+                    String title = titleView.getText().toString();
+                    String itemInfo = item.getItemInfo();
+
+                    Log.v(TAG, "CLICKED : " + idHeader + " " + title + " (" + item.getItemName() + " " + itemInfo + ")" );
+                    if (dialogDismiss != null)
+                    {
+                        dialogDismiss.doDismissWithPropertySave(idHeader, title);
+                    }
+                    Log.v(TAG, "PROPERTY STORED : " + idHeader + " " + title);
+
+                    // Toastで保管したことを通知する
+                    String restoredMessage = context.getString(R.string.saved_my_props) + title;
+                    Toast.makeText(context, restoredMessage, Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (view);
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetItems.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/MyCameraPropertySetItems.java
new file mode 100644 (file)
index 0000000..345a827
--- /dev/null
@@ -0,0 +1,37 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+class MyCameraPropertySetItems
+{
+    private final String itemId;
+    private String itemName = "";
+    private String itemInfo = "";
+    private int iconResource = 0;
+
+    MyCameraPropertySetItems(int iconResource, String itemId, String itemName, String itemInfo)
+    {
+        this.iconResource = iconResource;
+        this.itemId = itemId;
+        this.itemName = itemName;
+        this.itemInfo = itemInfo;
+    }
+
+    String getItemId()
+    {
+        return itemId;
+    }
+
+    String getItemName()
+    {
+        return itemName;
+    }
+
+    String getItemInfo()
+    {
+        return itemInfo;
+    }
+
+    int getIconResource()
+    {
+        return iconResource;
+    }
+}
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/SaveMyCameraPropertyFragment.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/olycamerawrapper/property/favorite/SaveMyCameraPropertyFragment.java
new file mode 100644 (file)
index 0000000..b05d118
--- /dev/null
@@ -0,0 +1,56 @@
+package jp.sfjp.gokigen.a01c.olycamerawrapper.property.favorite;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.ListFragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties;
+
+
+public class SaveMyCameraPropertyFragment extends ListFragment
+{
+    private ILoadSaveMyCameraPropertyDialogDismiss dialogDismiss = null;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
+    {
+        return (inflater.inflate(R.layout.list_camera_properties, container, false));
+    }
+
+    public void setDismissInterface(ILoadSaveMyCameraPropertyDialogDismiss dismiss)
+    {
+        this.dialogDismiss = dismiss;
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState)
+    {
+        super.onActivityCreated(savedInstanceState);
+
+        List<MyCameraPropertySetItems> listItems = new ArrayList<>();
+
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
+        for (int index = 1; index <= ILoadSaveCameraProperties.MAX_STORE_PROPERTIES; index++)
+        {
+            String idHeader = String.format(Locale.ENGLISH, "%03d", index);
+            String prefDate = preferences.getString(idHeader + ILoadSaveCameraProperties.DATE_KEY, "");
+            if (prefDate.length() <= 0)
+            {
+                listItems.add(new MyCameraPropertySetItems(0, idHeader, "", ""));
+                break;
+            }
+            String prefTitle = preferences.getString(idHeader + ILoadSaveCameraProperties.TITLE_KEY, "");
+            listItems.add(new MyCameraPropertySetItems(0, idHeader, prefTitle, prefDate));
+        }
+        MyCameraPropertySetArrayAdapter adapter = new MyCameraPropertySetArrayAdapter(getActivity(),  R.layout.column_save, listItems, dialogDismiss);
+        setListAdapter(adapter);
+    }
+}
@@ -5,7 +5,7 @@ package jp.sfjp.gokigen.a01c.preference;
  *
  *
  */
-public interface ICameraPropertyAccessor
+public interface IPreferenceCameraPropertyAccessor
 {
     String FRAME_GRID = "frame_grid";
     String FRAME_GRID_DEFAULT_VALUE = "0";
index f9f83c0..e1f139c 100644 (file)
     <string name="video_recording">&#9679;REC</string>
     <string name="video_failure">失敗です&#8230;</string>
     <string name="message_none">---</string>
+
+    <string name="title_my_settings">設定</string>
+    <string name="title_tab_title_load">読込</string>
+    <string name="title_tab_title_save">保存</string>
+    <string name="save_props">Save</string>
+    <string name="hint_save_props">Name</string>
 </resources>
index 40c215d..648537d 100644 (file)
     <string name="video_recording">&#9679;REC</string>
     <string name="video_failure">FAILED!</string>
     <string name="message_none">---</string>
+
+    <string name="title_my_settings">Favorite</string>
+    <string name="title_tab_title_load">Load</string>
+    <string name="title_tab_title_save">Save</string>
+    <string name="save_props">Save</string>
+    <string name="hint_save_props">Name</string>
 </resources>