// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.init;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.library_loader.LoaderErrors;
import org.chromium.chrome.R;
/**
* Dialog shown when startup fails.
* <br>
* Fragments are required to be public with a public empty constructor, hence the visibility.
*/
public class InvalidStartupDialog extends DialogFragment {
private static final String TAG = "InvalidStartupDialog";
private static final String MESSAGE_KEY = "InvalidStartupErrorKey";
/**
* Shows the invalid startup dialog for a given error code.
*
* @param activity The activity showing the dialog.
* @param errorCode The error code that triggered the failure.
*/
@SuppressFBWarnings("DM_EXIT")
public static void show(Activity activity, int errorCode) {
int msg;
switch (errorCode) {
case LoaderErrors.LOADER_ERROR_NATIVE_LIBRARY_LOAD_FAILED:
msg = R.string.os_version_missing_features;
break;
case LoaderErrors.LOADER_ERROR_NATIVE_LIBRARY_WRONG_VERSION:
msg = R.string.incompatible_libraries;
break;
default:
msg = R.string.native_startup_failed;
}
final String message = activity.getResources().getString(msg);
if (!(activity instanceof FragmentActivity)) {
Log.e(TAG, "Unable to start chrome due to: " + msg);
System.exit(-1);
return;
}
Bundle dialogArgs = new Bundle();
dialogArgs.putString(MESSAGE_KEY, message);
InvalidStartupDialog dialog = new InvalidStartupDialog();
dialog.setArguments(dialogArgs);
dialog.show(((FragmentActivity) activity).getSupportFragmentManager(),
"InvalidStartupDialog");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle arguments = getArguments();
String message = arguments.getString(MESSAGE_KEY, "Failed to start");
AlertDialog.Builder builder =
new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
builder.setMessage(message)
.setCancelable(true)
.setPositiveButton(getResources().getString(android.R.string.ok), null);
return builder.create();
}
@SuppressFBWarnings("DM_EXIT")
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
System.exit(-1);
}
}