Merge pull request #2144 from Sonicadvance1/android_autostart

[Android] Support arguments from Activity Monitor.
This commit is contained in:
Ryan Houdek 2015-03-08 08:50:27 -05:00
commit a984b2476a
4 changed files with 71 additions and 2 deletions

View File

@ -36,7 +36,7 @@ public final class AssetCopyService extends IntentService
@Override @Override
protected void onHandleIntent(Intent intent) protected void onHandleIntent(Intent intent)
{ {
String BaseDir = Environment.getExternalStorageDirectory() + File.separator + "dolphin-emu"; String BaseDir = NativeLibrary.GetUserDirectory();
String ConfigDir = BaseDir + File.separator + "Config"; String ConfigDir = BaseDir + File.separator + "Config";
String GCDir = BaseDir + File.separator + "GC"; String GCDir = BaseDir + File.separator + "GC";

View File

@ -175,6 +175,11 @@ public final class NativeLibrary
*/ */
public static native void SetUserDirectory(String directory); public static native void SetUserDirectory(String directory);
/**
* Returns the current working user directory
*/
public static native String GetUserDirectory();
/** /**
* Begins emulation. * Begins emulation.
* *

View File

@ -12,11 +12,15 @@ import android.app.Fragment;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -28,11 +32,13 @@ import org.dolphinemu.dolphinemu.AssetCopyService;
import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.about.AboutActivity; import org.dolphinemu.dolphinemu.about.AboutActivity;
import org.dolphinemu.dolphinemu.emulation.EmulationActivity;
import org.dolphinemu.dolphinemu.folderbrowser.FolderBrowser; import org.dolphinemu.dolphinemu.folderbrowser.FolderBrowser;
import org.dolphinemu.dolphinemu.settings.PrefsActivity; import org.dolphinemu.dolphinemu.settings.PrefsActivity;
import org.dolphinemu.dolphinemu.sidemenu.SideMenuAdapter; import org.dolphinemu.dolphinemu.sidemenu.SideMenuAdapter;
import org.dolphinemu.dolphinemu.sidemenu.SideMenuItem; import org.dolphinemu.dolphinemu.sidemenu.SideMenuItem;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -49,6 +55,8 @@ public final class GameListActivity extends Activity
private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout;
private SideMenuAdapter mDrawerAdapter; private SideMenuAdapter mDrawerAdapter;
private ListView mDrawerList; private ListView mDrawerList;
private boolean mAutoStart = false;
private String mAutoStartFile = "";
/** /**
* Called from the {@link GameListFragment}. * Called from the {@link GameListFragment}.
@ -65,6 +73,7 @@ public final class GameListActivity extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.gamelist_activity); setContentView(R.layout.gamelist_activity);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@ -104,6 +113,13 @@ public final class GameListActivity extends Activity
}; };
mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerLayout.setDrawerListener(mDrawerToggle);
CheckForIntent();
String BaseDir = NativeLibrary.GetUserDirectory();
final String DefaultDir = Environment.getExternalStorageDirectory() + File.separator + "dolphin-emu";
if (BaseDir.isEmpty())
BaseDir = DefaultDir;
NativeLibrary.SetUserDirectory(BaseDir);
// Stuff in this block only happens when this activity is newly created (i.e. not a rotation) // Stuff in this block only happens when this activity is newly created (i.e. not a rotation)
if (savedInstanceState == null) if (savedInstanceState == null)
@ -118,7 +134,6 @@ public final class GameListActivity extends Activity
ft.replace(R.id.content_frame, gameList); ft.replace(R.id.content_frame, gameList);
ft.commit(); ft.commit();
} }
// Create an alert telling them that their phone sucks // Create an alert telling them that their phone sucks
if (Build.CPU_ABI.contains("arm") && !NativeLibrary.SupportsNEON()) if (Build.CPU_ABI.contains("arm") && !NativeLibrary.SupportsNEON())
@ -135,6 +150,49 @@ public final class GameListActivity extends Activity
}); });
builder.show(); builder.show();
} }
if (mAutoStart)
{
// Start the emulation activity
Intent intent = new Intent(this, EmulationActivity.class);
intent.putExtra("SelectedGame", mAutoStartFile);
startActivity(intent);
}
}
private void CheckForIntent()
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean handled = prefs.getBoolean("HandledIntent", false);
// Get an editor.
SharedPreferences.Editor editor = prefs.edit();
Bundle extras = getIntent().getExtras();
if (!handled && extras != null)
{
// Application got passed extra data
editor.putBoolean("HandledIntent", true);
editor.apply();
// Did we get passed a new user directory?
String user_dir = extras.getString("UserDir");
if (user_dir != null && user_dir.length() != 0)
NativeLibrary.SetUserDirectory(user_dir);
// Did we get passed a file?
String start_file = extras.getString("AutoStartFile");
if (start_file != null && start_file.length() != 0)
{
mAutoStart = true;
mAutoStartFile = start_file;
}
return;
}
editor.putBoolean("HandledIntent", false);
editor.apply();
} }
/** /**

View File

@ -233,6 +233,7 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SaveState(JN
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_LoadState(JNIEnv *env, jobject obj, jint slot); JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_LoadState(JNIEnv *env, jobject obj, jint slot);
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_CreateUserFolders(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_CreateUserFolders(JNIEnv *env, jobject obj);
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetUserDirectory(JNIEnv *env, jobject obj, jstring jDirectory); JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetUserDirectory(JNIEnv *env, jobject obj, jstring jDirectory);
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetUserDirectory(JNIEnv *env, jobject obj);
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv *env, jobject obj, jobject _surf); JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv *env, jobject obj, jobject _surf);
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_UnPauseEmulation(JNIEnv *env, jobject obj) JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_UnPauseEmulation(JNIEnv *env, jobject obj)
@ -370,6 +371,11 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetUserDirec
UICommon::SetUserDirectory(directory); UICommon::SetUserDirectory(directory);
} }
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetUserDirectory(JNIEnv *env, jobject obj)
{
return env->NewStringUTF(File::GetUserPath(D_USER_IDX).c_str());
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv *env, jobject obj, jobject _surf) JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv *env, jobject obj, jobject _surf)
{ {
surf = ANativeWindow_fromSurface(env, _surf); surf = ANativeWindow_fromSurface(env, _surf);