OSDN Git Service

画像picker...
authorMRSa <mrsa@myad.jp>
Wed, 18 Jul 2018 15:54:14 +0000 (00:54 +0900)
committerMRSa <mrsa@myad.jp>
Wed, 18 Jul 2018 15:54:14 +0000 (00:54 +0900)
app/src/main/java/jp/sourceforge/gokigen/memoma/Main.java
app/src/main/java/jp/sourceforge/gokigen/memoma/preference/IPreferenceIntentCaller.java [new file with mode: 0644]
app/src/main/java/jp/sourceforge/gokigen/memoma/preference/Preference.java
app/src/main/java/jp/sourceforge/gokigen/memoma/preference/PreferenceIntentCaller.java [new file with mode: 0644]
app/src/main/res/layout/preference.xml

index 47c5b3b..ce507e8 100644 (file)
@@ -1,5 +1,6 @@
 package jp.sourceforge.gokigen.memoma;
 
+import android.os.Build;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AppCompatActivity;
@@ -14,6 +15,8 @@ import android.view.Window;
 
 import jp.sourceforge.gokigen.memoma.fileio.MeMoMaDataInOutManager;
 
+import static android.os.Build.VERSION_CODES.KITKAT;
+
 /**
  *   メイン画面の処理
  * 
@@ -52,12 +55,26 @@ public class Main extends  AppCompatActivity
         setContentView(R.layout.main);
 
         // 外部メモリアクセス権のオプトイン
-        if ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
-            ActivityCompat.requestPermissions(this,
-                    new String[]{
-                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
-                    },
-                    REQUEST_NEED_PERMISSIONS);
+        if (((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED))||
+            (ContextCompat.checkSelfPermission(this, Manifest.permission.MANAGE_DOCUMENTS) != PackageManager.PERMISSION_GRANTED))
+        {
+            if (Build.VERSION.SDK_INT >= KITKAT)
+            {
+                ActivityCompat.requestPermissions(this,
+                        new String[]{
+                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                                Manifest.permission.MANAGE_DOCUMENTS,
+                        },
+                        REQUEST_NEED_PERMISSIONS);
+            }
+            else
+            {
+                ActivityCompat.requestPermissions(this,
+                        new String[]{
+                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                        },
+                        REQUEST_NEED_PERMISSIONS);
+            }
         }
 
         try
diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/preference/IPreferenceIntentCaller.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/preference/IPreferenceIntentCaller.java
new file mode 100644 (file)
index 0000000..b0bc93c
--- /dev/null
@@ -0,0 +1,6 @@
+package jp.sourceforge.gokigen.memoma.preference;
+
+public interface IPreferenceIntentCaller
+{
+    boolean selectBackgroundImageFileFromGallery(int code);
+}
index e40515e..253f396 100644 (file)
@@ -1,9 +1,15 @@
 package jp.sourceforge.gokigen.memoma.preference;
 
+import android.app.Activity;
+import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.database.Cursor;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
+import android.provider.MediaStore;
+import android.support.annotation.NonNull;
+import android.util.Log;
 
 import jp.sourceforge.gokigen.memoma.R;
 
@@ -13,15 +19,19 @@ import jp.sourceforge.gokigen.memoma.R;
  * @author MRSa
  *
  */
-public class Preference extends PreferenceActivity implements OnSharedPreferenceChangeListener
+public class Preference extends PreferenceActivity implements OnSharedPreferenceChangeListener, android.preference.Preference.OnPreferenceClickListener
 {
+    private final String TAG = toString();
+    private final IPreferenceIntentCaller intentCaller;
+    private final int SELECT_BACKGROUND_IMAGE = 100;
+
     /**
      *  コンストラクタ
      *
      **/
     public Preference()
     {
-       
+        intentCaller = PreferenceIntentCaller.newInstance(this);
     }
     
     @Override
@@ -29,6 +39,8 @@ public class Preference extends PreferenceActivity implements OnSharedPreference
     {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.layout.preference);
+
+       // findPreference("backgroundUri").setOnPreferenceClickListener(this);
     }
 
     @Override
@@ -52,4 +64,86 @@ public class Preference extends PreferenceActivity implements OnSharedPreference
     {
         //
     }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, @NonNull Intent data)
+    {
+        super.onActivityResult(requestCode, resultCode, data);
+        Log.v(TAG, "onActivityResult() : start");
+        try
+        {
+            switch (resultCode)
+            {
+                case Activity.RESULT_OK:
+                    String filePath = "";
+                    String[] projection = {MediaStore.MediaColumns.DATA};
+                    try
+                    {
+                        Cursor cursor = getContentResolver().query(data.getData(), projection, null, null, null);
+                        if (cursor != null) {
+                            if (cursor.getCount() > 0) {
+                                cursor.moveToNext();
+                                filePath = cursor.getString(0);
+                            }
+                            cursor.close();
+                        }
+                        setActivityResultValue(requestCode, filePath);
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                    break;
+
+                default:
+                    break;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        Log.v(TAG, "onActivityResult() : end");
+    }
+
+    private void setActivityResultValue(int requestCode, String filePath)
+    {
+        String key;
+        if (requestCode == SELECT_BACKGROUND_IMAGE)
+        {
+            key = "backgroundUri";
+        }
+        else
+        {
+            // 何もしない
+            return;
+        }
+        SharedPreferences preferences = getPreferenceScreen().getSharedPreferences();
+        String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
+        findPreference(key).setSummary(fileName);
+        SharedPreferences.Editor editor = preferences.edit();
+        editor.putString(key, filePath);
+        editor.apply();
+        Log.v(TAG, " key : " + key + " image File : " + fileName + " (" + filePath + ")");
+        //Toast.makeText(getContext(), "Selected :" + fileName, Toast.LENGTH_SHORT).show();
+    }
+
+    @Override
+    public boolean onPreferenceClick(android.preference.Preference preference)
+    {
+        try
+        {
+            if (!preference.hasKey())
+            {
+                return (false);
+            }
+            String key = preference.getKey();
+            return (key.contains("backgroundUri") && (intentCaller.selectBackgroundImageFileFromGallery(SELECT_BACKGROUND_IMAGE)));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (false);
+    }
 }
diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/preference/PreferenceIntentCaller.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/preference/PreferenceIntentCaller.java
new file mode 100644 (file)
index 0000000..0748fb0
--- /dev/null
@@ -0,0 +1,29 @@
+package jp.sourceforge.gokigen.memoma.preference;
+
+import android.app.Activity;
+import android.content.Intent;
+
+public class PreferenceIntentCaller implements IPreferenceIntentCaller
+{
+    private final Activity activity;
+
+    public static IPreferenceIntentCaller newInstance(Activity activity)
+    {
+        return (new PreferenceIntentCaller(activity));
+    }
+
+    private PreferenceIntentCaller(Activity activity)
+    {
+        this.activity = activity;
+    }
+
+
+    @Override
+    public boolean selectBackgroundImageFileFromGallery(int code)
+    {
+        Intent intent = new Intent(Intent.ACTION_PICK);
+        intent.setType("image/*");
+        activity.startActivityForResult(intent, code);
+        return (false);
+    }
+}
index 102e56b..d4b7045 100644 (file)
             android:summary="@string/backgroundViewSummary"
             android:dialogTitle="@string/backgroundViewTitle"
         />
+<!--
+        <PreferenceScreen
+            android:key="backgroundUri"
+            android:title="@string/backgroundViewTitle"
+            android:summary="@string/backgroundViewSummary" />
+-->
         <EditTextPreference
             android:key="backgroundColor"
             android:title="@string/backgroundColorTitle"