blob: 68f2b19a2b7b9999ac101a5551c022cc0c1767fc [file] [log] [blame]
package com.android.browser;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import com.android.browser.R;
/**
* Activity that shows permissions request dialogs and handles lack of critical permissions.
*/
public class PermissionsActivity extends Activity {
private static final String TAG = "PermissionsActivity";
private static String PREF_HAS_SEEN_PERMISSIONS_DIALOGS = "pref_has_seen_permissions_dialogs";
private static int PERMISSION_REQUEST_CODE = 1;
private static int RESULT_CODE_OK = 1;
private static int RESULT_CODE_FAILED = 2;
private int mIndexPermissionRequestStorage;
private boolean mShouldRequestStoragePermission;
private int mNumPermissionsToRequest;
private boolean mFlagHasStoragePermission;
private SharedPreferences mPrefs;
/**
* Close activity when secure app passes lock screen or screen turns
* off.
*/
private final BroadcastReceiver mShutdownReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "received intent, finishing: " + intent.getAction());
finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
}
@Override
protected void onResume() {
super.onResume();
mNumPermissionsToRequest = 0;
checkPermissions();
}
private void checkPermissions() {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
mNumPermissionsToRequest++;
mShouldRequestStoragePermission = true;
} else {
mFlagHasStoragePermission = true;
}
if (mNumPermissionsToRequest != 0) {
if (!mPrefs.getBoolean(PREF_HAS_SEEN_PERMISSIONS_DIALOGS, false)) {
buildPermissionsRequest();
} else {
// Permissions dialog has already been shown
// and we're still missing permissions.
handlePermissionsFailure();
}
} else {
handlePermissionsSuccess();
}
}
private void buildPermissionsRequest() {
String[] permissionsToRequest = new String[mNumPermissionsToRequest];
int permissionsRequestIndex = 0;
if (mShouldRequestStoragePermission) {
permissionsToRequest[permissionsRequestIndex] = Manifest.permission.READ_EXTERNAL_STORAGE;
mIndexPermissionRequestStorage = permissionsRequestIndex;
permissionsRequestIndex++;
}
Log.v(TAG, "requestPermissions count: " + permissionsToRequest.length);
requestPermissions(permissionsToRequest, PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[],
int[] grantResults) {
Log.v(TAG, "onPermissionsResult counts: " + permissions.length + ":" + grantResults.length);
if (mShouldRequestStoragePermission) {
if (grantResults.length > 0 && grantResults[mIndexPermissionRequestStorage] ==
PackageManager.PERMISSION_GRANTED) {
mFlagHasStoragePermission = true;
} else {
handlePermissionsFailure();
}
}
if (mFlagHasStoragePermission) {
handlePermissionsSuccess();
}
}
private void handlePermissionsSuccess() {
Editor edit = mPrefs.edit();
edit.putBoolean(PREF_HAS_SEEN_PERMISSIONS_DIALOGS, true);
edit.commit();
Intent intent = new Intent(this, BrowserActivity.class);
startActivity(intent);
finish();
}
private void handlePermissionsFailure() {
new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.browser_error_title))
.setMessage(getResources().getString(R.string.error_permissions))
.setPositiveButton(getResources().getString(R.string.dialog_dismiss),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.show();
}
}