OSDN Git Service

シャッターや絞り、露出補正を変更できるようにした。
authorMRSa <mrsa@myad.jp>
Sun, 3 May 2020 14:46:38 +0000 (23:46 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 3 May 2020 14:46:38 +0000 (23:46 +0900)
14 files changed:
app/src/main/java/net/osdn/gokigen/gr2control/camera/CameraInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusChecker.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXStatusHolder.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/IFujiXCameraCommands.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFujiXKeyPanelClickListener.java
app/src/main/res/drawable/ic_camera_roll_black_24dp.xml [new file with mode: 0644]
app/src/main/res/drawable/ic_exposure_black_24dp.xml [new file with mode: 0644]
app/src/main/res/drawable/ic_iso_black_24dp.xml [new file with mode: 0644]
app/src/main/res/layout-land/fragment_live_view.xml
app/src/main/res/layout/fragment_live_view.xml
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml

index df8de68..9fcaa5e 100644 (file)
@@ -1,6 +1,6 @@
 package net.osdn.gokigen.gr2control.camera;
 
-import android.app.Activity;
+
 import android.content.SharedPreferences;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
@@ -13,6 +13,7 @@ import net.osdn.gokigen.gr2control.liveview.liveviewlistener.ILiveViewListener;
 import net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.PreferenceManager;
 
 /**
@@ -26,10 +27,10 @@ public class CameraInterfaceProvider implements IInterfaceProvider
     private final OlympusInterfaceProvider olympus;
     private final RicohGr2InterfaceProvider ricohGr2;
     private final FujiXInterfaceProvider fujiX;
-    private final Activity context;
+    private final FragmentActivity context;
     private ICameraConnection.CameraConnectionMethod connectionMethod = ICameraConnection.CameraConnectionMethod.UNKNOWN;
 
-    public static IInterfaceProvider newInstance(@NonNull Activity context, @NonNull ICameraStatusReceiver provider)
+    public static IInterfaceProvider newInstance(@NonNull FragmentActivity context, @NonNull ICameraStatusReceiver provider)
     {
         return (new CameraInterfaceProvider(context, provider));
     }
@@ -38,7 +39,7 @@ public class CameraInterfaceProvider implements IInterfaceProvider
      *
      *
      */
-    private CameraInterfaceProvider(@NonNull Activity context, @NonNull ICameraStatusReceiver provider)
+    private CameraInterfaceProvider(@NonNull FragmentActivity context, @NonNull ICameraStatusReceiver provider)
     {
         this.context = context;
         olympus = new OlympusInterfaceProvider(context, provider);
index d6fa055..acff302 100644 (file)
@@ -1,9 +1,9 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
 
-import android.app.Activity;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentActivity;
 
 import net.osdn.gokigen.gr2control.camera.ICameraButtonControl;
 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
@@ -46,7 +46,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
     private static final int CONTROL_PORT = 55740;
     private static final String CAMERA_IP = "192.168.0.1";
 
-    private final Activity activity;
+    private final FragmentActivity activity;
     private final FujiXCommandPublisher commandPublisher;
     private final FujiXLiveViewControl liveViewControl;
     private final FujiXAsyncResponseReceiver asyncReceiver;
@@ -66,7 +66,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
      *
      *
      */
-    public FujiXInterfaceProvider(@NonNull Activity context, @NonNull ICameraStatusReceiver provider)
+    public FujiXInterfaceProvider(@NonNull FragmentActivity context, @NonNull ICameraStatusReceiver provider)
     {
         this.activity = context;
         this.commandPublisher = new FujiXCommandPublisher(CAMERA_IP, CONTROL_PORT);
index 45365cc..5df4fbd 100644 (file)
@@ -1,10 +1,10 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
 
-import android.app.Activity;
 import android.content.SharedPreferences;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.PreferenceManager;
 
 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
@@ -30,10 +30,10 @@ public class FujiXStatusChecker implements ICameraStatusWatcher, ICameraStatus,
     private boolean logcat = false;
 
 
-    FujiXStatusChecker(@NonNull Activity activity, @NonNull IFujiXCommandPublisher issuer)
+    FujiXStatusChecker(@NonNull FragmentActivity activity, @NonNull IFujiXCommandPublisher issuer)
     {
         this.issuer = issuer;
-        this.statusHolder = new FujiXStatusHolder(issuer);
+        this.statusHolder = new FujiXStatusHolder(activity, issuer);
         try
         {
             SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
index b5b5f35..c83f602 100644 (file)
@@ -6,7 +6,9 @@ import android.util.SparseIntArray;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.collection.SparseArrayCompat;
+import androidx.fragment.app.FragmentActivity;
 
+import net.osdn.gokigen.gr2control.R;
 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXReplyMessageReceiver;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
@@ -31,16 +33,18 @@ import java.util.Locale;
 class FujiXStatusHolder
 {
     private final String TAG = toString();
+    private final FragmentActivity activity;
     private final IFujiXCommandPublisher publisher;
     private static final boolean logcat = true;
     private SparseIntArray statusHolder;
     private SparseArrayCompat<String> statusNameArray;
 
-    FujiXStatusHolder(@NonNull IFujiXCommandPublisher publisher)
+    FujiXStatusHolder(@NonNull FragmentActivity activity, @NonNull IFujiXCommandPublisher publisher)
     {
         statusHolder = new SparseIntArray();
         statusHolder.clear();
 
+        this.activity = activity;
         this.publisher = publisher;
         statusNameArray = new SparseArrayCompat<>();
         prepareStatusNameArray();
@@ -715,13 +719,26 @@ class FujiXStatusHolder
             // アイテム名の一覧を応答する
             return (getAvailableStatusNameList());
         }
-
         if (listKey.matches(ICameraStatus.EFFECT))
         {
             return (getAvailableEffectItemList());
         }
+        if (listKey.matches(ICameraStatus.AE))
+        {
+            return (new ArrayList<>());
+        }
+        if (listKey.matches(ICameraStatus.WHITE_BALANCE))
+        {
+            return (getAvailableWhiteBalanceItemList());
+        }
+        if (listKey.matches(ICameraStatus.ISO_SENSITIVITY))
+        {
+            return (getAvailableIsoSensitivityItemList());
+        }
+
 
         /////  選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... /////
+        /*
         ArrayList<String> selection = new ArrayList<>();
         try
         {
@@ -735,7 +752,8 @@ class FujiXStatusHolder
         {
             e.printStackTrace();
         }
-        return (selection);
+        */
+        return (new ArrayList<>());
     }
 
     private List<String> getAvailableEffectItemList()
@@ -762,6 +780,27 @@ class FujiXStatusHolder
         return(selection);
     }
 
+    private List<String> getAvailableWhiteBalanceItemList()
+    {
+        // WHITE BALANCEの選択肢をリストにして返す
+        ArrayList<String> selection = new ArrayList<>();
+
+        String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
+        for (String item : items)
+        {
+            selection.add(item);
+        }
+        return (selection);
+    }
+
+    private List<String> getAvailableIsoSensitivityItemList()
+    {
+        // ISO感度設定の選択肢をリストにして返す
+        ArrayList<String> selection = new ArrayList<>();
+        return (selection);
+    }
+
+
     private String getCurrentEffectStatus()
     {
         // EFFECTの現在状態を応答する : FILM Simulationにした
@@ -781,6 +820,57 @@ class FujiXStatusHolder
         return ("");
     }
 
+    private String getCurrentWhiteBalanceStatus()
+    {
+        // White Balanceの現在状態を取得する
+        try
+        {
+            int value = statusHolder.get(IFujiXCameraProperties.WHITE_BALANCE);
+            String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
+            String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_white_balance_value);
+            int index = 0;
+            for (String itemValue : itemValues)
+            {
+                int itemValueInt = Integer.parseInt(itemValue);
+                if (itemValueInt == value)
+                {
+                    return (items[index]);
+                }
+                index++;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return ("");
+    }
+
+    private String getCurrentIsoSensitivityStatus()
+    {
+        // ISO感度設定の現在状態を取得する
+        String isoValue = "";
+        try
+        {
+            int value = statusHolder.get(IFujiXCameraProperties.ISO);
+            int iso = ((0x0000ffff & value));
+            int auto = ((0xffff0000 & value));
+            if (auto != 0)
+            {
+                isoValue = "A (" + iso + ")";
+            }
+            else
+            {
+                isoValue = "" + iso;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (isoValue);
+    }
+
     private void setEffectItem(String value)
     {
         try
@@ -804,6 +894,38 @@ class FujiXStatusHolder
         }
     }
 
+    private void setCurrentWhiteBalanceStatus(String value)
+    {
+        try
+        {
+            String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
+            String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_white_balance_value);
+            int index = 0;
+            for (String item : items)
+            {
+                if (item.matches(value))
+                {
+                    // 見つかった! この値を設定する
+                    String itemValue = itemValues[index];
+                    int itemValueInt = Integer.parseInt(itemValue);
+                    publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set White Balance", true), IFujiXCameraProperties.WHITE_BALANCE, 4, itemValueInt));
+                    return;
+                }
+                index++;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void setCurrentIsoSensitivityStatus(String value)
+    {
+        // ISO感度を設定する
+
+
+    }
 
     String getItemStatus(String key)
     {
@@ -811,6 +933,18 @@ class FujiXStatusHolder
         {
             return (getCurrentEffectStatus());
         }
+        if (key.matches(ICameraStatus.WHITE_BALANCE))
+        {
+            return (getCurrentWhiteBalanceStatus());
+        }
+        if (key.matches(ICameraStatus.ISO_SENSITIVITY))
+        {
+            return (getCurrentIsoSensitivityStatus());
+        }
+        if (key.matches(ICameraStatus.TAKE_MODE))
+        {
+            return ("");
+        }
         try
         {
             int strIndex = key.indexOf("x");
@@ -858,12 +992,21 @@ class FujiXStatusHolder
             {
                 Log.v(TAG, "setStatus(" + key + ", " + value + ")");
             }
-
             if (key.matches(ICameraStatus.EFFECT))
             {
                 setEffectItem(value);
                 return;
             }
+            if (key.matches(ICameraStatus.WHITE_BALANCE))
+            {
+                setCurrentWhiteBalanceStatus(value);
+                return;
+            }
+            if (key.matches(ICameraStatus.ISO_SENSITIVITY))
+            {
+                setCurrentIsoSensitivityStatus(value);
+                // return;
+            }
 
             // ここで設定を行う。
         }
index bc8df0d..e1069ca 100644 (file)
@@ -13,10 +13,10 @@ public interface IFujiXCameraCommands
     int FOCUS_POINT = 0x9026;
     int FOCUS_UNLOCK = 0x9027;
     int CAMERA_CAPABILITIES = 0x902b;
+*/
     int SHUTTER_SPEED = 0x902c;
     int APERTURE = 0x902d;
     int EXPREV = 0x902e;
-*/
 
     String STOP_STR = "STOP";
     String IMAGE_INFO_STR = "IMAGE_INFO";
index 8df0837..07ac50c 100644 (file)
@@ -228,8 +228,12 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             {
                 fujiXOnKeyPanelClickListener = new LiveViewFujiXKeyPanelClickListener(interfaceProvider, vibrator);
             }
-            //setFujiXKeyPanelClickListener(view, xxx);
-
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_sv_minus);
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_sv_plus);
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_tv_minus);
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_tv_plus);
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_xv_minus);
+            setFujiXKeyPanelClickListener(view, R.id.button_fuji_x_xv_plus);
 
             connectStatus = view.findViewById(R.id.connect_disconnect_button);
             if (connectStatus != null)
index 0d9d3e3..db94f7a 100644 (file)
@@ -1,16 +1,24 @@
 package net.osdn.gokigen.gr2control.liveview;
 
 import android.os.Vibrator;
+import android.util.Log;
 import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import net.osdn.gokigen.gr2control.R;
 import net.osdn.gokigen.gr2control.camera.IInterfaceProvider;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.CommandGeneric;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.IFujiXCameraCommands;
+import net.osdn.gokigen.gr2control.camera.utils.SimpleLogDumper;
 
-public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener
+public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener, View.OnLongClickListener, IFujiXCommandCallback
 {
     private final String TAG = toString();
+    private static final boolean isDumpLog = false;
     private final IInterfaceProvider interfaceProvider;
     private final Vibrator vibrator;
 
@@ -20,16 +28,126 @@ public class LiveViewFujiXKeyPanelClickListener implements View.OnClickListener,
         this.vibrator = vibrator;
     }
 
-
     @Override
     public void onClick(View v)
     {
-
+        boolean isVibrate = true;
+        try
+        {
+            int id = v.getId();
+            switch (id)
+            {
+                case R.id.button_fuji_x_sv_minus:
+                    updateValue(IFujiXCameraCommands.SHUTTER_SPEED, 0);
+                    break;
+                case R.id.button_fuji_x_sv_plus:
+                    updateValue(IFujiXCameraCommands.SHUTTER_SPEED, 1);
+                    break;
+                case R.id.button_fuji_x_tv_minus:
+                    updateValue(IFujiXCameraCommands.APERTURE, 0);
+                    break;
+                case R.id.button_fuji_x_tv_plus:
+                    updateValue(IFujiXCameraCommands.APERTURE, 1);
+                    break;
+                case R.id.button_fuji_x_xv_minus:
+                    updateValue(IFujiXCameraCommands.EXPREV, 0);
+                    break;
+                case R.id.button_fuji_x_xv_plus:
+                    updateValue(IFujiXCameraCommands.EXPREV, 1);
+                    break;
+                default:
+                    isVibrate = false;
+                    break;
+            }
+            vibrate(isVibrate);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     @Override
     public boolean onLongClick(View v)
     {
+        boolean isVibrate = false;
+        boolean ret = false;
+        try
+        {
+            int id = v.getId();
+            switch (id)
+            {
+                case R.id.button_fuji_x_sv_minus:
+                    break;
+                case R.id.button_fuji_x_sv_plus:
+                    break;
+                case R.id.button_fuji_x_tv_minus:
+                    break;
+                case R.id.button_fuji_x_tv_plus:
+                    break;
+                case R.id.button_fuji_x_xv_minus:
+                    break;
+                case R.id.button_fuji_x_xv_plus:
+                    break;
+                default:
+                    break;
+            }
+            vibrate(isVibrate);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (ret);
+    }
+
+    /**
+     *  値を更新する
+     *
+     */
+    private void updateValue(int id, int value)
+    {
+        try
+        {
+            IFujiXCommandPublisher publisher = interfaceProvider.getFujiXInterfaceProvider().getCommandPublisher();
+            publisher.enqueueCommand(new CommandGeneric(this, id, 4, value));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     *   ぶるぶるさせる
+     *
+     */
+    private void vibrate(boolean isVibrate)
+    {
+        if ((vibrator != null)&&(isVibrate))
+        {
+            vibrator.vibrate(30);
+        }
+    }
+
+    @Override
+    public void receivedMessage(int id, byte[] rx_body)
+    {
+        if (isDumpLog)
+        {
+            SimpleLogDumper.dump_bytes("" + id, rx_body);
+        }
+    }
+
+    @Override
+    public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
+    {
+        Log.v(TAG, " onReceiveProgress() : " + currentBytes + "/" + totalBytes);
+    }
+
+    @Override
+    public boolean isReceiveMulti()
+    {
         return (false);
     }
 }
diff --git a/app/src/main/res/drawable/ic_camera_roll_black_24dp.xml b/app/src/main/res/drawable/ic_camera_roll_black_24dp.xml
new file mode 100644 (file)
index 0000000..c3f3e95
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M14,5c0,-1.1 -0.9,-2 -2,-2h-1L11,2c0,-0.55 -0.45,-1 -1,-1L6,1c-0.55,0 -1,0.45 -1,1v1L4,3c-1.1,0 -2,0.9 -2,2v15c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2h8L22,5h-8zM12,18h-2v-2h2v2zM12,9h-2L10,7h2v2zM16,18h-2v-2h2v2zM16,9h-2L14,7h2v2zM20,18h-2v-2h2v2zM20,9h-2L18,7h2v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_exposure_black_24dp.xml b/app/src/main/res/drawable/ic_exposure_black_24dp.xml
new file mode 100644 (file)
index 0000000..23eabc3
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M15,17v2h2v-2h2v-2h-2v-2h-2v2h-2v2h2zM20,2L4,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM5,5h6v2L5,7L5,5zM20,20L4,20L20,4v16z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_iso_black_24dp.xml b/app/src/main/res/drawable/ic_iso_black_24dp.xml
new file mode 100644 (file)
index 0000000..1c4ef5f
--- /dev/null
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM5.5,7.5h2v-2L9,5.5v2h2L11,9L9,9v2L7.5,11L7.5,9h-2L5.5,7.5zM19,19L5,19L19,5v14zM17,17v-1.5h-5L12,17h5z"/>
+</vector>
index 3752df4..6908dbe 100644 (file)
@@ -1,14 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:ignore="HardcodedText,ContentDescription" >
 
     <LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:tools="http://schemas.android.com/tools"
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:visibility="gone"
         android:background="@color/background_translucent_white" >
 
+        <ImageView
+            android:id="@+id/button_fuji_x_sv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignParentTop="true"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="8pt"
+            android:layout_marginLeft="6pt"
+            android:layout_marginStart="6pt"
+            android:gravity="center" />
+
+        <TextView
+            android:id="@+id/label_fuji_x_sv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_sv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_sv_minus"
+            android:layout_alignTop="@id/button_fuji_x_sv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:text="@string/shutter_speed"
+            android:textColor="@color/colorBlack"
+            android:textStyle="bold"
+            android:textSize="8pt"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_sv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_sv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_sv_center"
+            android:layout_toRightOf="@id/label_fuji_x_sv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_tv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_below="@id/button_fuji_x_sv_minus"
+            android:layout_alignLeft="@id/button_fuji_x_sv_minus"
+            android:layout_alignStart="@id/button_fuji_x_sv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="6pt"
+            android:gravity="center" />
+
+        <TextView
+            android:id="@+id/label_fuji_x_tv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_tv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_tv_minus"
+            android:layout_alignTop="@id/button_fuji_x_tv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:text="@string/aperture"
+            android:textColor="@color/colorBlack"
+            android:textStyle="bold"
+            android:textSize="8pt"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_tv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_tv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_tv_center"
+            android:layout_toRightOf="@id/label_fuji_x_tv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_xv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_below="@id/button_fuji_x_tv_minus"
+            android:layout_alignLeft="@id/button_fuji_x_tv_minus"
+            android:layout_alignStart="@id/button_fuji_x_tv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="6pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/label_fuji_x_xv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_xv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_xv_minus"
+            android:layout_alignTop="@id/button_fuji_x_xv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_exposure_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_xv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_xv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_xv_center"
+            android:layout_toRightOf="@id/label_fuji_x_xv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
         <TextView
             android:id="@+id/fuji_x_hideKeyPanelTextView"
             android:layout_width="48dp"
index 0439185..3fd10b4 100644 (file)
@@ -4,10 +4,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:ignore="HardcodedText,ContentDescription" >
+
     <LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        xmlns:tools="http://schemas.android.com/tools"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:visibility="gone"
         android:background="@color/background_translucent_white" >
 
+        <ImageView
+            android:id="@+id/button_fuji_x_sv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignParentTop="true"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="8pt"
+            android:layout_marginLeft="6pt"
+            android:layout_marginStart="6pt"
+            android:gravity="center" />
+
+        <TextView
+            android:id="@+id/label_fuji_x_sv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_sv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_sv_minus"
+            android:layout_alignTop="@id/button_fuji_x_sv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:text="@string/shutter_speed"
+            android:textColor="@color/colorBlack"
+            android:textStyle="bold"
+            android:textSize="8pt"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_sv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_sv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_sv_center"
+            android:layout_toRightOf="@id/label_fuji_x_sv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_tv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_below="@id/button_fuji_x_sv_minus"
+            android:layout_alignLeft="@id/button_fuji_x_sv_minus"
+            android:layout_alignStart="@id/button_fuji_x_sv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="6pt"
+            android:gravity="center" />
+
+        <TextView
+            android:id="@+id/label_fuji_x_tv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_tv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_tv_minus"
+            android:layout_alignTop="@id/button_fuji_x_tv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:text="@string/aperture"
+            android:textColor="@color/colorBlack"
+            android:textStyle="bold"
+            android:textSize="8pt"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_tv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_tv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_tv_center"
+            android:layout_toRightOf="@id/label_fuji_x_tv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_xv_minus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_below="@id/button_fuji_x_tv_minus"
+            android:layout_alignLeft="@id/button_fuji_x_tv_minus"
+            android:layout_alignStart="@id/button_fuji_x_tv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_remove_circle_outline_black_24dp"
+            android:layout_marginTop="6pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/label_fuji_x_xv_center"
+            android:layout_width="34pt"
+            android:layout_height="14pt"
+            android:layout_toEndOf="@id/button_fuji_x_xv_minus"
+            android:layout_toRightOf="@id/button_fuji_x_xv_minus"
+            android:layout_alignTop="@id/button_fuji_x_xv_minus"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_exposure_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
+
+        <ImageView
+            android:id="@+id/button_fuji_x_xv_plus"
+            android:layout_width="20pt"
+            android:layout_height="14pt"
+            android:layout_alignTop="@id/button_fuji_x_xv_minus"
+            android:layout_toEndOf="@id/label_fuji_x_xv_center"
+            android:layout_toRightOf="@id/label_fuji_x_xv_center"
+            android:scaleType="fitCenter"
+            android:visibility="visible"
+            android:clickable="true"
+            android:focusable="true"
+            android:src="@drawable/ic_add_circle_outline_black_24dp"
+            android:layout_marginLeft="2pt"
+            android:layout_marginStart="2pt"
+            android:gravity="center" />
 
         <TextView
             android:id="@+id/fuji_x_hideKeyPanelTextView"
index b72d283..227b231 100644 (file)
     <string name="dialog_title_message_body">メッセージボディ</string>
     <string name="dialog_command_hint">(command)</string>
     <string name="dialog_service_hint">(service)</string>
+
+    <string name="shutter_speed">Shutter</string>
+    <string name="aperture">Aperture</string>
+
 </resources>
index fa2c38f..a4c64f4 100644 (file)
     <string name="dialog_command_hint">(command)</string>
     <string name="dialog_service_hint">(service)</string>
 
+    <string name="shutter_speed">Shutter</string>
+    <string name="aperture">Aperture</string>
 </resources>