diff --git a/src/android/app/src/main/java/org/citra/citra_android/ui/main/MainActivity.java b/src/android/app/src/main/java/org/citra/citra_android/ui/main/MainActivity.java index 176b825b7..fbe5020f3 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/ui/main/MainActivity.java +++ b/src/android/app/src/main/java/org/citra/citra_android/ui/main/MainActivity.java @@ -47,7 +47,13 @@ public final class MainActivity extends AppCompatActivity implements MainView { setSupportActionBar(mToolbar); mFrameLayoutId = R.id.games_platform_frame; - mFab.setOnClickListener(view -> mPresenter.onFabClick()); + mFab.setOnClickListener(view -> { + if (PermissionsHandler.hasWriteAccess(this)) { + mPresenter.onFabClick(); + } else { + PermissionsHandler.checkWritePermission(this); + } + }); mPresenter.onCreate(); if (savedInstanceState == null) { @@ -117,7 +123,11 @@ public final class MainActivity extends AppCompatActivity implements MainView { @Override public void launchSettingsActivity(String menuTag) { - SettingsActivity.launch(this, menuTag, ""); + if (PermissionsHandler.hasWriteAccess(this)) { + SettingsActivity.launch(this, menuTag, ""); + } else { + PermissionsHandler.checkWritePermission(this); + } } @Override @@ -162,6 +172,9 @@ public final class MainActivity extends AppCompatActivity implements MainView { mPlatformGamesFragment = new PlatformGamesFragment(); getSupportFragmentManager().beginTransaction().add(mFrameLayoutId, mPlatformGamesFragment) .commit(); + + // Immediately prompt user to select a game directory on first boot + findViewById(R.id.button_add_directory).callOnClick(); } else { Toast.makeText(this, R.string.write_permission_needed, Toast.LENGTH_SHORT) .show(); diff --git a/src/android/app/src/main/java/org/citra/citra_android/utils/PermissionsHandler.java b/src/android/app/src/main/java/org/citra/citra_android/utils/PermissionsHandler.java index 7df7a5ed0..99b61d4c6 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/utils/PermissionsHandler.java +++ b/src/android/app/src/main/java/org/citra/citra_android/utils/PermissionsHandler.java @@ -1,16 +1,11 @@ package org.citra.citra_android.utils; import android.annotation.TargetApi; -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Build; import android.support.v4.app.FragmentActivity; import android.support.v4.content.ContextCompat; -import android.widget.Toast; - -import org.citra.citra_android.R; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; @@ -29,13 +24,6 @@ public class PermissionsHandler { } if (isFirstBoot(activity)) { - if (activity.shouldShowRequestPermissionRationale(WRITE_EXTERNAL_STORAGE)) { - showMessageOKCancel(activity, activity.getString(R.string.write_permission_needed), - (dialog, which) -> activity.requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE}, - REQUEST_CODE_WRITE_PERMISSION)); - return false; - } - activity.requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_WRITE_PERMISSION); return false; @@ -52,17 +40,4 @@ public class PermissionsHandler { return true; } - - private static void showMessageOKCancel(final FragmentActivity activity, String message, - DialogInterface.OnClickListener okListener) { - new AlertDialog.Builder(activity) - .setIcon(R.drawable.ic_launcher) - .setMessage(message) - .setPositiveButton(android.R.string.ok, okListener) - .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> - Toast.makeText(activity, R.string.write_permission_needed, Toast.LENGTH_SHORT) - .show()) - .create() - .show(); - } } diff --git a/src/android/app/src/main/java/org/citra/citra_android/utils/StartupHandler.java b/src/android/app/src/main/java/org/citra/citra_android/utils/StartupHandler.java index 26d76c3a8..de78326b0 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/utils/StartupHandler.java +++ b/src/android/app/src/main/java/org/citra/citra_android/utils/StartupHandler.java @@ -1,12 +1,10 @@ package org.citra.citra_android.utils; import android.app.AlertDialog; -import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; -import android.view.View; import org.citra.citra_android.R; import org.citra.citra_android.activities.EmulationActivity; @@ -34,24 +32,13 @@ public final class StartupHandler { public static void HandleInit(FragmentActivity parent) { if (PermissionsHandler.isFirstBoot(parent)) { // Prompt user with standard first boot disclaimer - AlertDialog.Builder builder = new AlertDialog.Builder(parent); - builder.setTitle(R.string.app_name); - builder.setIcon(R.drawable.ic_launcher); - builder.setMessage(parent.getResources().getString(R.string.app_disclaimer)); - builder.setPositiveButton("OK", null); - - builder.setOnDismissListener(new DialogInterface.OnDismissListener() { - public void onDismiss(DialogInterface dialog) { - // Ensure user agrees to any necessary app permissions - handlePermissionsCheck(parent); - - // Immediately prompt user to select a game directory on first boot - View view = parent.findViewById(R.id.button_add_directory); - view.callOnClick(); - } - }); - - builder.show(); + new AlertDialog.Builder(parent) + .setTitle(R.string.app_name) + .setIcon(R.mipmap.ic_launcher) + .setMessage(parent.getResources().getString(R.string.app_disclaimer)) + .setPositiveButton("OK", null) + .setOnDismissListener(dialogInterface -> handlePermissionsCheck(parent)) + .show(); } } }