diff --git a/android/app/src/main/java/com/mnn/llm/MainActivity.java b/android/app/src/main/java/com/mnn/llm/MainActivity.java index 696e35d2..2831a0b6 100644 --- a/android/app/src/main/java/com/mnn/llm/MainActivity.java +++ b/android/app/src/main/java/com/mnn/llm/MainActivity.java @@ -8,13 +8,18 @@ import android.os.Handler; import android.os.Message; import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ProgressBar; import android.widget.RelativeLayout; +import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; import java.io.File; import java.io.IOException; +import java.util.ArrayList; public class MainActivity extends AppCompatActivity { @@ -27,9 +32,11 @@ public class MainActivity extends AppCompatActivity { private ProgressBar mProcessBar; private TextView mProcessName; private TextView mProcessPercent; + private Spinner mSpinnerModels; // resource files + private String mSearchPath = "/data/local/tmp/mnn-llm/"; private String mModelName = "qwen-1.8b-int4"; - private String mModelDir = "/data/local/tmp/chat/" + mModelName; // default dir + private String mModelDir = mSearchPath + mModelName; // default dir private boolean mModelReady = true; @Override protected void onCreate(Bundle savedInstanceState) { @@ -42,8 +49,24 @@ protected void onCreate(Bundle savedInstanceState) { mProcessBar = (ProgressBar)findViewById(R.id.process_bar); mProcessName = (TextView)findViewById(R.id.process_name); mProcessPercent = (TextView)findViewById(R.id.process_percent); - // using assert file + mSpinnerModels = (Spinner) findViewById(R.id.spinner_models); + // default using assert file mModelDir = this.getCacheDir() + "/" + mModelName; + populateFoldersSpinner(); + mSpinnerModels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + if (position > 0) { + mModelName = (String) parent.getItemAtPosition(position); + mModelInfo.setText("选择模型:" + mModelName); + mModelInfo.setVisibility(View.VISIBLE); + mModelDir = mSearchPath + mModelName; + } + } + @Override + public void onNothingSelected(AdapterView parent) { + } + }); mProcessHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -107,6 +130,26 @@ public boolean checkModelsReady() { return true; } + private ArrayList getFoldersList(String path) { + File directory = new File(path); + File[] files = directory.listFiles(); + ArrayList foldersList = new ArrayList<>(); + + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + foldersList.add(file.getName()); + } + } + } + return foldersList; + } + private void populateFoldersSpinner() { + ArrayList folders = getFoldersList("/data/local/tmp/mnn-llm"); + folders.add(0, getString(R.string.spinner_prompt)); + ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, folders); + mSpinnerModels.setAdapter(adapter); + } public void loadModel(View view) { onCheckModels(); if (!mModelReady) { diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml index 4b0b5b84..aad4c397 100644 --- a/android/app/src/main/res/layout/activity_main.xml +++ b/android/app/src/main/res/layout/activity_main.xml @@ -37,6 +37,14 @@ android:layout_alignParentBottom="true" android:orientation="vertical"> + Close navigation drawer Settings mnn-llm + 选择模型文件夹