88import android .os .Handler ;
99import android .os .Message ;
1010import android .view .View ;
11+ import android .widget .AdapterView ;
12+ import android .widget .ArrayAdapter ;
1113import android .widget .Button ;
1214import android .widget .ProgressBar ;
1315import android .widget .RelativeLayout ;
16+ import android .widget .Spinner ;
1417import android .widget .TextView ;
18+ import android .widget .Toast ;
1519
1620import java .io .File ;
1721import java .io .IOException ;
22+ import java .util .ArrayList ;
1823
1924
2025public class MainActivity extends AppCompatActivity {
@@ -27,9 +32,11 @@ public class MainActivity extends AppCompatActivity {
2732 private ProgressBar mProcessBar ;
2833 private TextView mProcessName ;
2934 private TextView mProcessPercent ;
35+ private Spinner mSpinnerModels ;
3036 // resource files
37+ private String mSearchPath = "/data/local/tmp/mnn-llm/" ;
3138 private String mModelName = "qwen-1.8b-int4" ;
32- private String mModelDir = "/data/local/tmp/chat/" + mModelName ; // default dir
39+ private String mModelDir = mSearchPath + mModelName ; // default dir
3340 private boolean mModelReady = true ;
3441 @ Override
3542 protected void onCreate (Bundle savedInstanceState ) {
@@ -42,8 +49,24 @@ protected void onCreate(Bundle savedInstanceState) {
4249 mProcessBar = (ProgressBar )findViewById (R .id .process_bar );
4350 mProcessName = (TextView )findViewById (R .id .process_name );
4451 mProcessPercent = (TextView )findViewById (R .id .process_percent );
45- // using assert file
52+ mSpinnerModels = (Spinner ) findViewById (R .id .spinner_models );
53+ // default using assert file
4654 mModelDir = this .getCacheDir () + "/" + mModelName ;
55+ populateFoldersSpinner ();
56+ mSpinnerModels .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
57+ @ Override
58+ public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
59+ if (position > 0 ) {
60+ mModelName = (String ) parent .getItemAtPosition (position );
61+ mModelInfo .setText ("选择模型:" + mModelName );
62+ mModelInfo .setVisibility (View .VISIBLE );
63+ mModelDir = mSearchPath + mModelName ;
64+ }
65+ }
66+ @ Override
67+ public void onNothingSelected (AdapterView <?> parent ) {
68+ }
69+ });
4770 mProcessHandler = new Handler () {
4871 @ Override
4972 public void handleMessage (Message msg ) {
@@ -107,6 +130,26 @@ public boolean checkModelsReady() {
107130 return true ;
108131 }
109132
133+ private ArrayList <String > getFoldersList (String path ) {
134+ File directory = new File (path );
135+ File [] files = directory .listFiles ();
136+ ArrayList <String > foldersList = new ArrayList <>();
137+
138+ if (files != null ) {
139+ for (File file : files ) {
140+ if (file .isDirectory ()) {
141+ foldersList .add (file .getName ());
142+ }
143+ }
144+ }
145+ return foldersList ;
146+ }
147+ private void populateFoldersSpinner () {
148+ ArrayList <String > folders = getFoldersList ("/data/local/tmp/mnn-llm" );
149+ folders .add (0 , getString (R .string .spinner_prompt ));
150+ ArrayAdapter <String > adapter = new ArrayAdapter <>(this , android .R .layout .simple_spinner_dropdown_item , folders );
151+ mSpinnerModels .setAdapter (adapter );
152+ }
110153 public void loadModel (View view ) {
111154 onCheckModels ();
112155 if (!mModelReady ) {
0 commit comments