OSDN Git Service

自動転送のために仕組みを仕込んでみた。
authorMRSa <mrsa@myad.jp>
Thu, 28 Mar 2019 15:10:24 +0000 (00:10 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 28 Mar 2019 15:10:24 +0000 (00:10 +0900)
app/build.gradle
app/src/main/java/net/osdn/gokigen/pkremote/MainActivity.java
app/src/main/java/net/osdn/gokigen/pkremote/scene/CameraSceneUpdater.java
app/src/main/java/net/osdn/gokigen/pkremote/scene/IChangeScene.java
app/src/main/java/net/osdn/gokigen/pkremote/transfer/AutoTransferFragment.java [new file with mode: 0644]
app/src/main/res/drawable/ic_file_download_black_24dp.xml [new file with mode: 0644]
app/src/main/res/layout/fragment_auto_transfer.xml [new file with mode: 0644]
app/src/main/res/menu/navigation.xml
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml

index 64e9bda..f1c07ba 100644 (file)
@@ -6,8 +6,8 @@ android {
         applicationId "net.osdn.gokigen.pkremote"
         minSdkVersion 14
         targetSdkVersion 28
-        versionCode 10005
-        versionName "1.0.5"
+        versionCode 10100
+        versionName "1.1.0"
     }
     buildTypes {
         release {
index 33fdc83..3c6e422 100644 (file)
@@ -54,11 +54,12 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     scenceUpdater.changeScenceToImageList();
                     return (true);
                 case R.id.navigation_calendar:
-                    //
                     scenceUpdater.changeSceneToCalendar();
                     return (true);
+                case R.id.navigation_auto_transfer:
+                    scenceUpdater.changeSceneToAutoTransfer();
+                    return (true);
                 case R.id.navigation_settings:
-                    //
                     scenceUpdater.changeSceneToConfiguration();
                     return (true);
             }
index 43398f6..b7f04a1 100644 (file)
@@ -16,6 +16,7 @@ import net.osdn.gokigen.pkremote.logcat.LogCatFragment;
 import net.osdn.gokigen.pkremote.playback.ImageGridViewFragment;
 import net.osdn.gokigen.pkremote.preference.olympus.OpcPreferenceFragment;
 import net.osdn.gokigen.pkremote.preference.ricohgr2.RicohGr2PreferenceFragment;
+import net.osdn.gokigen.pkremote.transfer.AutoTransferFragment;
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
@@ -39,6 +40,7 @@ public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene,
     private LogCatFragment logCatFragment = null;
     private CalendarFragment calendarFragment = null;
     private ImageGridViewFragment gridViewFragment = null;
+    private AutoTransferFragment autoTransferFragment = null;
 
     public static CameraSceneUpdater newInstance(@NonNull AppCompatActivity activity)
     {
@@ -391,6 +393,21 @@ public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene,
 
     //  IChangeScene
     @Override
+    public void changeSceneToAutoTransfer()
+    {
+        if (autoTransferFragment == null)
+        {
+            autoTransferFragment = AutoTransferFragment.newInstance(activity, this, interfaceProvider);
+        }
+        FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
+        transaction.replace(R.id.fragment1, autoTransferFragment);
+        // backstackに追加
+        transaction.addToBackStack(null);
+        transaction.commit();
+    }
+
+    //  IChangeScene
+    @Override
     public void changeSceneToCalendar()
     {
         if (calendarFragment == null)
@@ -424,6 +441,10 @@ public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene,
         changeScenceToImageList(null);
     }
 
+    /**
+     *
+     *
+     */
     private void changeScenceToImageList(String filterLabel)
     {
         Log.v(TAG, "changeScenceToImageList() : " + filterLabel);
index 04c5dd5..a60d7b5 100644 (file)
@@ -15,6 +15,7 @@ public interface IChangeScene
     void changeSceneToApiList();
     void changeScenceDateSelected(String filterLabel);
     void changeScenceToImageList();
+    void changeSceneToAutoTransfer();
     void exitApplication();
     void reloadRemoteImageContents();
     void setAnotherStatusReceiver(ICameraStatusReceiver statusReceiver);
diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/transfer/AutoTransferFragment.java b/app/src/main/java/net/osdn/gokigen/pkremote/transfer/AutoTransferFragment.java
new file mode 100644 (file)
index 0000000..6fbbed6
--- /dev/null
@@ -0,0 +1,270 @@
+package net.osdn.gokigen.pkremote.transfer;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Vibrator;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.ImageButton;
+import android.widget.ProgressBar;
+
+import net.osdn.gokigen.pkremote.R;
+import net.osdn.gokigen.pkremote.camera.interfaces.IInterfaceProvider;
+import net.osdn.gokigen.pkremote.scene.IChangeScene;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+
+import static android.content.Context.VIBRATOR_SERVICE;
+
+public class AutoTransferFragment extends Fragment implements View.OnClickListener
+{
+    private final String TAG = this.toString();
+
+    private IInterfaceProvider interfaceProvider = null;
+    private IChangeScene changeScene = null;
+    private AppCompatActivity activity = null;
+    private View myView = null;
+
+    public static AutoTransferFragment newInstance(@NonNull AppCompatActivity context, IChangeScene sceneSelector, @NonNull IInterfaceProvider provider)
+    {
+        AutoTransferFragment instance = new AutoTransferFragment();
+        instance.prepare(context, sceneSelector, provider);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        //arguments.putString("title", title);
+        //arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+
+    /**
+     *
+     */
+    private void prepare(@NonNull AppCompatActivity activity, IChangeScene sceneSelector, IInterfaceProvider interfaceProvider)
+    {
+        Log.v(TAG, "prepare()");
+
+        this.activity = activity;
+        this.changeScene = sceneSelector;
+        this.interfaceProvider = interfaceProvider;
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState)
+    {
+        super.onCreate(savedInstanceState);
+        Log.v(TAG, "onCreate()");
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public void onAttach(Context context)
+    {
+        super.onAttach(context);
+        Log.v(TAG, "onAttach()");
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
+    {
+        super.onCreateView(inflater, container, savedInstanceState);
+
+        Log.v(TAG, "onCreateView()");
+        if (myView != null)
+        {
+            // Viewを再利用。。。
+            Log.v(TAG, "onCreateView() : called again, so do nothing... : " + myView);
+            return (myView);
+        }
+
+        myView = inflater.inflate(R.layout.fragment_auto_transfer, container, false);
+        try
+        {
+            prepare(myView);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (myView);
+    }
+
+    @Override
+    public void onResume()
+    {
+        super.onResume();
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+
+        // 画面を抜ける時には、自動転送を停止させる
+        finishTransfer();
+    }
+
+    private void prepare(@NonNull View view)
+    {
+        try
+        {
+            Button start = view.findViewById(R.id.transfer_start_button);
+            if (start != null)
+            {
+                start.setOnClickListener(this);
+            }
+
+            Button stop = view.findViewById(R.id.transfer_stop_button);
+            if (stop != null)
+            {
+                stop.setOnClickListener(this);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void startTransfer()
+    {
+        try
+        {
+            // STARTボタンを無効化
+            controlButton(false);
+
+            // ぶるぶるする
+            Vibrator vibrator = (activity != null) ? (Vibrator) activity.getSystemService(VIBRATOR_SERVICE) : null;
+            if (vibrator != null)
+            {
+                vibrator.vibrate(50);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+
+    private void finishTransfer()
+    {
+        try
+        {
+            // STARTボタンを有効化
+            controlButton(true);
+
+            // ぶるぶるする
+            Vibrator vibrator = (activity != null) ? (Vibrator) activity.getSystemService(VIBRATOR_SERVICE) : null;
+            if (vibrator != null)
+            {
+                vibrator.vibrate(150);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void controlButton(boolean isStartButtonEnable)
+    {
+        try
+        {
+            Button start = activity.findViewById(R.id.transfer_start_button);
+            Button stop = activity.findViewById(R.id.transfer_stop_button);
+            if ((start != null)&&(stop != null))
+            {
+                start.setEnabled(isStartButtonEnable);
+                stop.setEnabled(!isStartButtonEnable);
+                CheckBox check = activity.findViewById(R.id.check_auto_download_raw);
+                ProgressBar bar = activity.findViewById(R.id.auto_transfer_progress_bar);
+                ImageButton reload = activity.findViewById(R.id.button_reload);
+                ImageButton connect = activity.findViewById(R.id.button_wifi_connect);
+                if (isStartButtonEnable)
+                {
+                    if (bar != null)
+                    {
+                        bar.setVisibility(View.GONE);
+                    }
+                    if (check != null)
+                    {
+                        check.setEnabled(true);
+                    }
+                    if (reload != null)
+                    {
+                        reload.setVisibility(View.VISIBLE);
+                        reload.setEnabled(true);
+                    }
+                    if (connect != null)
+                    {
+                        connect.setVisibility(View.VISIBLE);
+                        connect.setEnabled(true);
+                    }
+                }
+                else
+                {
+                    if (bar != null)
+                    {
+                        bar.setVisibility(View.VISIBLE);
+                    }
+                    if (check != null)
+                    {
+                        check.setEnabled(false);
+                    }
+                    if (reload != null)
+                    {
+                        reload.setEnabled(false);
+                        reload.setVisibility(View.INVISIBLE);
+                    }
+                    if (connect != null)
+                    {
+                        connect.setEnabled(false);
+                        connect.setVisibility(View.INVISIBLE);
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void onClick(View v)
+    {
+        int id = v.getId();
+        if (id == R.id.transfer_start_button)
+        {
+            //
+            Log.v(TAG, "TRANSFER START");
+            startTransfer();
+        }
+        else if  (id == R.id.transfer_stop_button)
+        {
+            Log.v(TAG, "TRANSFER FINISH");
+            finishTransfer();
+        }
+    }
+}
diff --git a/app/src/main/res/drawable/ic_file_download_black_24dp.xml b/app/src/main/res/drawable/ic_file_download_black_24dp.xml
new file mode 100644 (file)
index 0000000..45b19b6
--- /dev/null
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#323232"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z"/>
+</vector>
diff --git a/app/src/main/res/layout/fragment_auto_transfer.xml b/app/src/main/res/layout/fragment_auto_transfer.xml
new file mode 100644 (file)
index 0000000..0e782e6
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/image_view_area"
+        android:layout_width="match_parent"
+        android:layout_height="160dp"
+        android:src="@null"
+        android:scaleType="centerCrop"
+        tools:ignore="ContentDescription" />
+    <View
+        android:layout_width="fill_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="?android:attr/buttonBarStyle"
+        android:orientation="horizontal">
+
+        <Button
+            android:id="@+id/transfer_start_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:visibility="visible"
+            android:enabled="true"
+            style="?android:attr/buttonBarButtonStyle"
+            android:text="@string/button_transfer_start" />
+
+        <Button
+            android:id="@+id/transfer_stop_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:visibility="visible"
+            android:enabled="false"
+            style="?android:attr/buttonBarButtonStyle"
+            android:text="@string/button_transfer_stop" />
+
+    </LinearLayout>
+    <View
+        android:layout_width="fill_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray"/>
+
+    <CheckBox android:id="@+id/check_auto_download_raw"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/action_download_with_raw"
+        android:checked="false"
+        android:textSize="8pt"
+        />
+
+    <View
+        android:layout_width="fill_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray"/>
+
+    <TextView
+        android:id="@+id/auto_download_information_text"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:gravity="start"
+        android:clickable="true"
+        android:focusable="true"
+        android:text="@string/blank"
+        android:textColor="@color/background_dark"
+        android:textSize="9pt" />
+
+    <ProgressBar
+        android:id="@+id/auto_transfer_progress_bar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:visibility="gone"
+        />
+</LinearLayout>
index f75a0a6..1c39813 100644 (file)
@@ -8,6 +8,11 @@
         android:id="@+id/navigation_photo_library"
         android:icon="@drawable/ic_photo_library_black_24dp"
         android:title="@string/title_photo_library" />
+
+    <item
+        android:id="@+id/navigation_auto_transfer"
+        android:icon="@drawable/ic_file_download_black_24dp"
+        android:title="@string/title_auto_transfer" />
     <item
         android:id="@+id/navigation_settings"
         android:icon="@drawable/ic_settings_black_24dp"
index e0783d3..e61fdc8 100644 (file)
@@ -14,6 +14,7 @@
     <string name="title_notifications">通知</string>
     <string name="title_settings">設定</string>
     <string name="title_photo_library">画像</string>
+    <string name="title_auto_transfer">自動転送</string>
 
 
     <string name="dialog_title_confirmation">確認</string>
     <string name="action_batch_download_640x480">スモールサイズ(JPEG)</string>
     <string name="action_batch_download_raw">オリジナルサイズ(RAWも取得)</string>
     <string name="action_select_all">全選択/全解除</string>
+
+    <string name="button_transfer_start">転送開始</string>
+    <string name="button_transfer_stop">転送終了</string>
+
 </resources>
index 7f9f3ff..8696571 100644 (file)
@@ -14,6 +14,7 @@
     <string name="title_notifications">Notifications</string>
     <string name="title_settings">Settings</string>
     <string name="title_photo_library">Photo Library</string>
+    <string name="title_auto_transfer">Auto Transfer</string>
 
 
     <string name="dialog_title_confirmation">Confirmation</string>
     <string name="action_batch_download_640x480">Small Size(JPEG)</string>
     <string name="action_batch_download_raw">Original Size(with RAW)</string>
     <string name="action_select_all">Select All/Unselect All</string>
+
+    <string name="button_transfer_start">TRANSFER START</string>
+    <string name="button_transfer_stop">TRANSFER STOP</string>
+
 </resources>