android: frontend: startup: Improve startup and permissions handling.
- Fixes a first boot crash.
This commit is contained in:
parent
7cf5b73ddd
commit
b063c2296e
@ -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();
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user