From bd72e13dd42a2ad276e5836570972c601a74e562 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 23 Apr 2013 14:21:48 -0500 Subject: [PATCH] Generally make the Android UI better. --- Source/Android/AndroidManifest.xml | 8 +- Source/Android/assets/Dolphin.png | Bin 4789 -> 0 bytes Source/Android/project.properties | 1 + Source/Android/res/layout/folderbrowser.xml | 44 +++++ .../res/layout/folderbrowserfooter.xml | 7 + Source/Android/res/layout/main.xml | 52 +++-- Source/Android/res/layout/sidemenu.xml | 31 +++ .../dolphinemu/DolphinEmulator.java | 16 +- .../dolphinemu/dolphinemu/FolderBrowser.java | 98 ++++++++++ ...ArrayAdapter.java => GameListAdapter.java} | 16 +- .../dolphinemu/dolphinemu/GameListItem.java | 84 ++++++++ .../dolphinemu/dolphinemu/GameListView.java | 181 ++++++++++++++++++ .../dolphinemu/dolphinemu/NativeListView.java | 94 --------- .../src/org/dolphinemu/dolphinemu/Option.java | 38 ---- .../dolphinemu/SideMenuAdapter.java | 49 +++++ .../dolphinemu/dolphinemu/SideMenuItem.java | 30 +++ Source/Core/DolphinWX/Src/MainAndroid.cpp | 115 ++++++++++- 17 files changed, 704 insertions(+), 160 deletions(-) delete mode 100644 Source/Android/assets/Dolphin.png create mode 100644 Source/Android/res/layout/folderbrowser.xml create mode 100644 Source/Android/res/layout/folderbrowserfooter.xml create mode 100644 Source/Android/res/layout/sidemenu.xml create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java rename Source/Android/src/org/dolphinemu/dolphinemu/{FileArrayAdapter.java => GameListAdapter.java} (71%) create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/GameListItem.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/GameListView.java delete mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeListView.java delete mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/Option.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java diff --git a/Source/Android/AndroidManifest.xml b/Source/Android/AndroidManifest.xml index 624f7b2df9..82573aa8aa 100644 --- a/Source/Android/AndroidManifest.xml +++ b/Source/Android/AndroidManifest.xml @@ -26,7 +26,13 @@ + + diff --git a/Source/Android/assets/Dolphin.png b/Source/Android/assets/Dolphin.png deleted file mode 100644 index 74d6c888016a4eeb6bf8d354213b4743d16b6f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4789 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 diff --git a/Source/Android/project.properties b/Source/Android/project.properties index a3ee5ab64f..91be165ce3 100644 --- a/Source/Android/project.properties +++ b/Source/Android/project.properties @@ -12,3 +12,4 @@ # Project target. target=android-17 +android.library.reference.1=../../Externals/android-menudrawer/library diff --git a/Source/Android/res/layout/folderbrowser.xml b/Source/Android/res/layout/folderbrowser.xml new file mode 100644 index 0000000000..ae480d0807 --- /dev/null +++ b/Source/Android/res/layout/folderbrowser.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Android/res/layout/folderbrowserfooter.xml b/Source/Android/res/layout/folderbrowserfooter.xml new file mode 100644 index 0000000000..9c0e11d81b --- /dev/null +++ b/Source/Android/res/layout/folderbrowserfooter.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Source/Android/res/layout/main.xml b/Source/Android/res/layout/main.xml index 6116f6c33d..1b19ad19fe 100644 --- a/Source/Android/res/layout/main.xml +++ b/Source/Android/res/layout/main.xml @@ -1,26 +1,42 @@ - - + - - + + + + + + + + + + + diff --git a/Source/Android/res/layout/sidemenu.xml b/Source/Android/res/layout/sidemenu.xml new file mode 100644 index 0000000000..57ab67e3ca --- /dev/null +++ b/Source/Android/res/layout/sidemenu.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index a989bf68d5..82d186de26 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -6,6 +6,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import net.simonvt.menudrawer.MenuDrawer; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -88,7 +90,8 @@ public class DolphinEmulator extends Activity super.onCreate(savedInstanceState); if (savedInstanceState == null) { - Intent ListIntent = new Intent(this, NativeListView.class); + + Intent ListIntent = new Intent(this, GameListView.class); startActivityForResult(ListIntent, 1); // Make the assets directory @@ -120,13 +123,22 @@ public class DolphinEmulator extends Activity CopyAsset("Dolphin.png", Environment.getExternalStorageDirectory()+File.separator+ "dolphin-emu" + File.separator + "Dolphin.png"); + CopyAsset("Back.png", + Environment.getExternalStorageDirectory()+File.separator+ + "dolphin-emu" + File.separator + "Back.png"); + CopyAsset("Folder.png", + Environment.getExternalStorageDirectory()+File.separator+ + "dolphin-emu" + File.separator + "Folder.png"); + CopyAsset("Background.glsl", + Environment.getExternalStorageDirectory()+File.separator+ + "dolphin-emu" + File.separator + "Background.glsl"); CopyAsset("GCPadNew.ini", Environment.getExternalStorageDirectory()+File.separator+ "dolphin-emu" + File.separator +"Config"+ File.separator +"GCPadNew.ini"); } } } - + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java new file mode 100644 index 0000000000..68203413b7 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java @@ -0,0 +1,98 @@ +package org.dolphinemu.dolphinemu; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.simonvt.menudrawer.MenuDrawer; + +import android.app.Activity; +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Environment; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +public class FolderBrowser extends ListActivity { + private GameListAdapter adapter; + private static File currentDir = null; + private void Fill(File f) + { + File[]dirs = f.listFiles(); + this.setTitle("Current Dir: " + f.getName()); + Listdir = new ArrayList(); + Listfls = new ArrayList(); + + try + { + for(File ff: dirs) + { + if (ff.getName().charAt(0) != '.') + if(ff.isDirectory()) + dir.add(new GameListItem(getApplicationContext(), ff.getName(),"Folder",ff.getAbsolutePath())); + else + if (ff.getName().toLowerCase().contains(".gcm") || + ff.getName().toLowerCase().contains(".iso") || + ff.getName().toLowerCase().contains(".wbfs") || + ff.getName().toLowerCase().contains(".gcz") || + ff.getName().toLowerCase().contains(".dol") || + ff.getName().toLowerCase().contains(".elf")) + fls.add(new GameListItem(getApplicationContext(), ff.getName(),"File Size: "+ff.length(),ff.getAbsolutePath())); + } + } + catch(Exception e) + { + } + + Collections.sort(dir); + Collections.sort(fls); + dir.addAll(fls); + if (!f.getName().equalsIgnoreCase("sdcard")) + dir.add(0, new GameListItem(getApplicationContext(), "..", "Parent Directory", f.getParent())); + + adapter = new GameListAdapter(this,R.layout.folderbrowser,dir); + this.setListAdapter(adapter); + } + + @Override + protected void onListItemClick(ListView l, View v, int position, long id) { + // TODO Auto-generated method stub + super.onListItemClick(l, v, position, id); + GameListItem o = adapter.getItem(position); + if(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory")){ + currentDir = new File(o.getPath()); + Fill(currentDir); + } + } + + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + if(currentDir == null) + currentDir = new File(Environment.getExternalStorageDirectory().getPath()); + Fill(currentDir); + } + @Override + public void onBackPressed() { + Intent intent = new Intent(); + intent.putExtra("Select", currentDir.getPath()); + setResult(Activity.RESULT_OK, intent); + + this.finish(); + super.onBackPressed(); + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java similarity index 71% rename from Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java rename to Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java index b49149a36c..f0aa522a1f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java @@ -7,22 +7,23 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.ImageView; import android.widget.TextView; -public class FileArrayAdapter extends ArrayAdapter