Browse Source

android: add directory browser

Wei Mingzhi 6 years ago
parent
commit
b931084a8e

+ 1 - 0
android/app/build.gradle

@@ -50,4 +50,5 @@ dependencies {
     compile 'com.android.support:appcompat-v7:25.3.1'
     compile 'com.android.support:gridlayout-v7:25.3.1'
     compile 'com.android.support:design:25.3.1'
+    compile 'com.nononsenseapps:filepicker:4.1.0'
 }

+ 18 - 0
android/app/src/main/AndroidManifest.xml

@@ -43,6 +43,24 @@
             android:label="@string/app_name"
             android:theme="@style/AppTheme.NoActionBar">
         </activity>
+        <activity
+            android:name="com.nononsenseapps.filepicker.FilePickerActivity"
+            android:label="@string/action_browse"
+            android:theme="@style/NNF_BaseTheme">
+            <intent-filter>
+                <action android:name="android.intent.action.GET_CONTENT" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="${applicationId}.provider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/nnf_provider_paths" />
+        </provider>
     </application>
 
 </manifest>

+ 33 - 3
android/app/src/main/java/com/sdlpal/sdlpal/SettingsActivity.java

@@ -1,23 +1,26 @@
 package com.sdlpal.sdlpal;
 
+import android.app.Activity;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.AppCompatSpinner;
 import android.support.v7.widget.SwitchCompat;
 import android.support.v7.widget.Toolbar;
-import  android.support.v7.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
 import android.view.View;
 import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
 import android.widget.CompoundButton;
 import android.widget.EditText;
 import android.widget.SeekBar;
 import android.widget.Spinner;
+import com.nononsenseapps.filepicker.*;
 
-import java.util.ArrayList;
+import java.io.File;
+import java.util.List;
 
 public class SettingsActivity extends AppCompatActivity {
 
@@ -62,6 +65,8 @@ public class SettingsActivity extends AppCompatActivity {
 
     private SettingsActivity mInstance = this;
 
+    private static final int FILE_CODE = 30001;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -141,6 +146,19 @@ public class SettingsActivity extends AppCompatActivity {
             }
         });
 
+        findViewById(R.id.btnBrowseFolder).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent i = new Intent(mInstance, FilePickerActivity.class);
+                i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
+                i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
+                i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
+                i.putExtra(FilePickerActivity.EXTRA_START_PATH, ((EditText)findViewById(R.id.edFolder)).getText());
+
+                startActivityForResult(i, FILE_CODE);
+            }
+        });
+
         resetConfigs();
 
         if (PalActivity.crashed) {
@@ -157,6 +175,18 @@ public class SettingsActivity extends AppCompatActivity {
         }
     }
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
+        if (requestCode == FILE_CODE && resultCode == Activity.RESULT_OK) {
+            List<Uri> files = Utils.getSelectedFilesFromResult(intent);
+            for (Uri uri: files) {
+                File file = Utils.getFileForUri(uri);
+                ((EditText)findViewById(R.id.edFolder)).setText(file.getAbsolutePath());
+                break;
+            }
+        }
+    }
+
     protected int findMatchedIntIndex(int value, int[] values, int defaultIndex) {
         for(int i = 0; i < values.length; i++) {
             if (values[i] == value)

+ 17 - 7
android/app/src/main/res/layout/content_settings.xml

@@ -31,15 +31,25 @@
                 tools:layout_editor_absoluteX="8dp"
                 tools:layout_editor_absoluteY="-1dp" />
 
-            <EditText
-                android:id="@+id/edFolder"
+            <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:ems="10"
-                android:inputType="textUri"
-                tools:layout_editor_absoluteX="8dp"
-                tools:layout_editor_absoluteY="16dp" />
+                android:orientation="horizontal">
+                <EditText
+                    android:id="@+id/edFolder"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:ems="10"
+                    android:inputType="textUri"
+                    tools:layout_editor_absoluteX="8dp"
+                    tools:layout_editor_absoluteY="16dp" />
+                <Button
+                    android:id="@+id/btnBrowseFolder"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/action_browse" />
+            </LinearLayout>
 
             <android.support.v7.widget.SwitchCompat
                 android:id="@+id/swMsgFile"

android/app/src/main/res/values-zh/arrays.xml → android/app/src/main/res/values-zh-rCN/arrays.xml


android/app/src/main/res/values-zh/strings.xml → android/app/src/main/res/values-zh-rCN/strings.xml


+ 9 - 9
android/app/src/main/res/values-zh-rTW/strings.xml

@@ -1,32 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="label_folder">游戏资源所在文件夹:</string>
+    <string name="label_folder">遊戲資料檔所在資料夾:</string>
     <string name="action_browse">瀏覽</string>
     <string name="action_aspect">保持縱橫比</string>
     <string name="label_bufsize">音訊緩衝區大小</string>
     <string name="label_musfmt">背景音樂格式</string>
     <string name="action_default">默認設定</string>
     <string name="action_finish">完成設定</string>
-    <string name="label_cdfmt">CD 音軌格式</string>
+    <string name="label_cdfmt">CD音軌格式</string>
     <string name="label_quality">音訊品質</string>
     <string name="label_audrate">音訊輸出取樣速率</string>
     <string name="action_stereo">立體聲</string>
-    <string name="action_suropl">環繞聲 OPL</string>
+    <string name="action_suropl">環繞聲OPL</string>
     <string name="action_touch">啟用觸屏輔助</string>
-    <string name="action_avi">啟用 AVI 過場動畫</string>
+    <string name="action_avi">啟用AVI影片</string>
     <string name="title_settings">設定模式</string>
     <string name="label_sfxvol">音效音量</string>
     <string name="label_musvol">音樂音量</string>
-    <string name="label_opl">OPL 模擬器</string>
-    <string name="label_oplrate">OPL 模擬器取樣速率</string>
+    <string name="label_opl">OPL模擬器</string>
+    <string name="label_oplrate">OPL模擬器取樣速率</string>
     <string name="msg_crash">上次程式異常退出,已顯示設定頁供您檢查設定是否正確。</string>
     <string name="msg_empty">必須指定遊戲資源檔案夾!</string>
-    <string name="msg_exit">您的設定已保存,下次啟動時將直接開始遊戲。在遊戲中,您可以通過遊戲系統功能表的返回設定選項回到本設定頁。</string>
+    <string name="msg_exit">您的設定已保存,下次啟動時將直接開始遊戲。在遊戲中,您可以通過遊戲系統功能表的返回設定選項回到本設定頁。</string>
     <string name="action_restore">撤銷修改</string>
     <string name="label_loglevel">日誌記錄級別</string>
     <string name="action_usefontfile">自訂字體檔案</string>
     <string name="action_usemsgfile">自訂語言檔案</string>
     <string name="action_uselogfile">記錄到檔案</string>
-    <string name="toast_requestpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。如拒絕授權,則本應用無法正常行。</string>
-    <string name="toast_grantpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。請點擊“確定”後手動為本應用開啟許可權。</string>
+    <string name="toast_requestpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。如拒絕授權,則本應用無法正常行。</string>
+    <string name="toast_grantpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。請點擊「確定」後手動為本應用開啟許可權。</string>
 </resources>