Android Open Source - google-authenticator-android Http Client Factory






From Project

Back to project page google-authenticator-android.

License

The source code is released under:

Apache License

If you think the Android project google-authenticator-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011 Google Inc. All Rights Reserved.
 *// w ww.j a  v a  2  s.  co m
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.android.apps.authenticator.testability;

import android.content.Context;
import android.os.Build;

import org.apache.http.client.HttpClient;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Factory that creates an {@link HttpClient}.
 *
 * @author klyubin@google.com (Alex Klyubin)
 */
final class HttpClientFactory {

  /** Timeout (ms) for establishing a connection.*/
  // @VisibleForTesting
  static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 20 * 1000;

  /** Timeout (ms) for read operations on connections. */
  // @VisibleForTesting
  static final int DEFAULT_READ_TIMEOUT_MILLIS = 20 * 1000;

  /** Timeout (ms) for obtaining a connection from the connection pool.*/
  // @VisibleForTesting
  static final int DEFAULT_GET_CONNECTION_FROM_POOL_TIMEOUT_MILLIS = 20 * 1000;

  /** Hidden constructor to prevent instantiation. */
  private HttpClientFactory() {}

  /**
   * Creates a new {@link HttpClient}.
   *
   * @param context context for reusing SSL sessions.
   */
  static HttpClient createHttpClient(Context context) {
    HttpClient client;
    // TODO(klyubin): Remove this complicated code once the minimum target is Froyo.
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1) {
      try {
        client = createHttpClientForFroyoAndHigher(context);
      } catch (Exception e) {
        throw new RuntimeException("Failed to create HttpClient", e);
      }
    } else {
      client = createHttpClientForEclair();
    }

    configureHttpClient(client);
    return client;
  }

  private static void configureHttpClient(HttpClient httpClient) {
    HttpParams params = httpClient.getParams();
    HttpConnectionParams.setStaleCheckingEnabled(params, false);
    HttpConnectionParams.setConnectionTimeout(params, DEFAULT_CONNECT_TIMEOUT_MILLIS);
    HttpConnectionParams.setSoTimeout(params, DEFAULT_READ_TIMEOUT_MILLIS);
    HttpConnectionParams.setSocketBufferSize(params, 8192);
    ConnManagerParams.setTimeout(params, DEFAULT_GET_CONNECTION_FROM_POOL_TIMEOUT_MILLIS);

    // Don't handle redirects automatically
    HttpClientParams.setRedirecting(params, false);

    // Don't handle authentication automatically
    HttpClientParams.setAuthenticating(params, false);
  }

  private static HttpClient createHttpClientForFroyoAndHigher(Context context)
      throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
          InvocationTargetException {
    // IMPLEMENTATION NOTE: We create the instance via Reflection API to avoid raising the
    // target SDK version to 8 because that will cause Eclipse to complain for no good reason.
    // The code below invokes:
    //   AndroidHttpClient.newInstance(null, getContext())
    Class<?> androidHttpClientClass =
        context.getClassLoader().loadClass("android.net.http.AndroidHttpClient");
    Method newInstanceMethod =
        androidHttpClientClass.getMethod("newInstance", String.class, Context.class);
    return (HttpClient) newInstanceMethod.invoke(null, null, context);
  }

  /**
   * Creates a new instance of {@code HttpClient} for Eclair where we can't use
   * {@code android.net.http.AndroidHttpClient}.
   */
  private static HttpClient createHttpClientForEclair() {
    // IMPLEMENTATION NOTE: Since AndroidHttpClient is not available on Eclair, we create a
    // DefaultHttpClient with a configuration similar to that of AndroidHttpClient.
    return new DefaultHttpClient(new BasicHttpParams());
  }
}




Java Source Code List

com.google.android.apps.authenticator.AccountDb.java
com.google.android.apps.authenticator.AddOtherAccountActivity.java
com.google.android.apps.authenticator.AuthenticatorActivity.java
com.google.android.apps.authenticator.AuthenticatorApplication.java
com.google.android.apps.authenticator.Base32String.java
com.google.android.apps.authenticator.CheckCodeActivity.java
com.google.android.apps.authenticator.CountdownIndicator.java
com.google.android.apps.authenticator.EnterKeyActivity.java
com.google.android.apps.authenticator.FileUtilities.java
com.google.android.apps.authenticator.HexEncoding.java
com.google.android.apps.authenticator.MarketBuildOptionalFeatures.java
com.google.android.apps.authenticator.OptionalFeatures.java
com.google.android.apps.authenticator.OtpGenerationNotPermittedException.java
com.google.android.apps.authenticator.OtpProvider.java
com.google.android.apps.authenticator.OtpSourceException.java
com.google.android.apps.authenticator.OtpSource.java
com.google.android.apps.authenticator.PasscodeGenerator.java
com.google.android.apps.authenticator.Preconditions.java
com.google.android.apps.authenticator.RunOnThisLooperThreadExecutor.java
com.google.android.apps.authenticator.SettingsAboutActivity.java
com.google.android.apps.authenticator.SettingsActivity.java
com.google.android.apps.authenticator.TotpClock.java
com.google.android.apps.authenticator.TotpCountdownTask.java
com.google.android.apps.authenticator.TotpCounter.java
com.google.android.apps.authenticator.UserRowView.java
com.google.android.apps.authenticator.Utilities.java
com.google.android.apps.authenticator.dataimport.ExportServiceBasedImportController.java
com.google.android.apps.authenticator.dataimport.ImportController.java
com.google.android.apps.authenticator.dataimport.Importer.java
com.google.android.apps.authenticator.howitworks.IntroEnterCodeActivity.java
com.google.android.apps.authenticator.howitworks.IntroEnterPasswordActivity.java
com.google.android.apps.authenticator.howitworks.IntroVerifyDeviceActivity.java
com.google.android.apps.authenticator.testability.DependencyInjector.java
com.google.android.apps.authenticator.testability.HttpClientFactory.java
com.google.android.apps.authenticator.testability.SharedPreferencesRenamingDelegatingContext.java
com.google.android.apps.authenticator.testability.StartActivityListener.java
com.google.android.apps.authenticator.testability.TestableActivity.java
com.google.android.apps.authenticator.testability.TestablePreferenceActivity.java
com.google.android.apps.authenticator.timesync.AboutActivity.java
com.google.android.apps.authenticator.timesync.NetworkTimeProvider.java
com.google.android.apps.authenticator.timesync.SettingsTimeCorrectionActivity.java
com.google.android.apps.authenticator.timesync.SyncNowActivity.java
com.google.android.apps.authenticator.timesync.SyncNowController.java
com.google.android.apps.authenticator.wizard.WizardPageActivity.java