android: frontend: startup: Improve startup and permissions handling.

- Fixes a first boot crash.
This commit is contained in:
bunnei 2019-09-01 02:15:36 -04:00
parent d690e4d120
commit 81042d8e12
3 changed files with 22 additions and 47 deletions

View File

@ -47,7 +47,13 @@ public final class MainActivity extends AppCompatActivity implements MainView {
setSupportActionBar(mToolbar); setSupportActionBar(mToolbar);
mFrameLayoutId = R.id.games_platform_frame; 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(); mPresenter.onCreate();
if (savedInstanceState == null) { if (savedInstanceState == null) {
@ -117,7 +123,11 @@ public final class MainActivity extends AppCompatActivity implements MainView {
@Override @Override
public void launchSettingsActivity(String menuTag) { public void launchSettingsActivity(String menuTag) {
if (PermissionsHandler.hasWriteAccess(this)) {
SettingsActivity.launch(this, menuTag, ""); SettingsActivity.launch(this, menuTag, "");
} else {
PermissionsHandler.checkWritePermission(this);
}
} }
@Override @Override
@ -162,6 +172,9 @@ public final class MainActivity extends AppCompatActivity implements MainView {
mPlatformGamesFragment = new PlatformGamesFragment(); mPlatformGamesFragment = new PlatformGamesFragment();
getSupportFragmentManager().beginTransaction().add(mFrameLayoutId, mPlatformGamesFragment) getSupportFragmentManager().beginTransaction().add(mFrameLayoutId, mPlatformGamesFragment)
.commit(); .commit();
// Immediately prompt user to select a game directory on first boot
findViewById(R.id.button_add_directory).callOnClick();
} else { } else {
Toast.makeText(this, R.string.write_permission_needed, Toast.LENGTH_SHORT) Toast.makeText(this, R.string.write_permission_needed, Toast.LENGTH_SHORT)
.show(); .show();

View File

@ -1,16 +1,11 @@
package org.citra.citra_android.utils; package org.citra.citra_android.utils;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.widget.Toast;
import org.citra.citra_android.R;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
@ -29,13 +24,6 @@ public class PermissionsHandler {
} }
if (isFirstBoot(activity)) { 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}, activity.requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_WRITE_PERMISSION); REQUEST_CODE_WRITE_PERMISSION);
return false; return false;
@ -52,17 +40,4 @@ public class PermissionsHandler {
return true; 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();
}
} }

View File

@ -1,12 +1,10 @@
package org.citra.citra_android.utils; package org.citra.citra_android.utils;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View;
import org.citra.citra_android.R; import org.citra.citra_android.R;
import org.citra.citra_android.activities.EmulationActivity; import org.citra.citra_android.activities.EmulationActivity;
@ -34,24 +32,13 @@ public final class StartupHandler {
public static void HandleInit(FragmentActivity parent) { public static void HandleInit(FragmentActivity parent) {
if (PermissionsHandler.isFirstBoot(parent)) { if (PermissionsHandler.isFirstBoot(parent)) {
// Prompt user with standard first boot disclaimer // Prompt user with standard first boot disclaimer
AlertDialog.Builder builder = new AlertDialog.Builder(parent); new AlertDialog.Builder(parent)
builder.setTitle(R.string.app_name); .setTitle(R.string.app_name)
builder.setIcon(R.drawable.ic_launcher); .setIcon(R.mipmap.ic_launcher)
builder.setMessage(parent.getResources().getString(R.string.app_disclaimer)); .setMessage(parent.getResources().getString(R.string.app_disclaimer))
builder.setPositiveButton("OK", null); .setPositiveButton("OK", null)
.setOnDismissListener(dialogInterface -> handlePermissionsCheck(parent))
builder.setOnDismissListener(new DialogInterface.OnDismissListener() { .show();
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();
} }
} }
} }