// Copyright 2013 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.ui; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; /** * The class provides the WindowAndroid's implementation which requires * Activity Instance. * Only instantiate this class when you need the implemented features. */ public class ActivityWindowAndroid extends WindowAndroid { // Constants used for intent request code bounding. private static final int REQUEST_CODE_PREFIX = 1000; private static final int REQUEST_CODE_RANGE_SIZE = 100; private static final String TAG = "ActivityWindowAndroid"; private Activity mActivity; private int mNextRequestCode = 0; public ActivityWindowAndroid(Activity activity) { super(activity.getApplicationContext()); mActivity = activity; } @Override public boolean showIntent(Intent intent, IntentCallback callback, int errorId) { int requestCode = REQUEST_CODE_PREFIX + mNextRequestCode; mNextRequestCode = (mNextRequestCode + 1) % REQUEST_CODE_RANGE_SIZE; try { mActivity.startActivityForResult(intent, requestCode); } catch (ActivityNotFoundException e) { return false; } mOutstandingIntents.put(requestCode, callback); mIntentErrors.put(requestCode, mApplicationContext.getString(errorId)); return true; } @Override public boolean onActivityResult(int requestCode, int resultCode, Intent data) { IntentCallback callback = mOutstandingIntents.get(requestCode); mOutstandingIntents.delete(requestCode); String errorMessage = mIntentErrors.remove(requestCode); if (callback != null) { callback.onIntentCompleted(this, resultCode, mApplicationContext.getContentResolver(), data); return true; } else { if (errorMessage != null) { showCallbackNonExistentError(errorMessage); return true; } } return false; } @Override @Deprecated public Context getContext() { return mActivity; } }