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);
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();

View File

@ -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();
}
}

View File

@ -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();
}
}
}