improved account switching animation

fixed MIUI connectivity issue
This commit is contained in:
Mariotaku Lee 2015-03-22 12:03:46 +08:00
parent cdf6ba0062
commit 4c41cc1af1
5 changed files with 104 additions and 407 deletions

View File

@ -19,70 +19,19 @@
package twitter4j.http;
import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import twitter4j.TwitterException;
import twitter4j.conf.ConfigurationContext;
import twitter4j.internal.logging.Logger;
import twitter4j.internal.util.InternalStringUtil;
import static twitter4j.http.RequestMethod.POST;
/**
* @author Yusuke Yamamoto - yusuke at mac.com
* @since Twitter4J 2.1.2
*/
public class HttpClientImpl extends HttpClientBase implements HttpClient, HttpResponseCode {
private static final Logger logger = Logger.getLogger(HttpClientImpl.class);
private static final TrustManager[] TRUST_ALL_CERTS = new TrustManager[]{new TrustAllX509TrustManager()};
private static final SSLSocketFactory IGNORE_ERROR_SSL_FACTORY;
static {
System.setProperty("http.keepAlive", "false");
SSLSocketFactory factory = null;
try {
final SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, TRUST_ALL_CERTS, new SecureRandom());
factory = sc.getSocketFactory();
} catch (final KeyManagementException | NoSuchAlgorithmException e) {
}
IGNORE_ERROR_SSL_FACTORY = factory;
}
private static final HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER = new AllowAllHostnameVerifier();
private static final Map<HttpClientConfiguration, HttpClient> instanceMap = new HashMap<HttpClientConfiguration, HttpClient>(
private static final Map<HttpClientConfiguration, HttpClient> instanceMap = new HashMap<>(
1);
public HttpClientImpl() {
@ -104,221 +53,7 @@ public class HttpClientImpl extends HttpClientBase implements HttpClient, HttpRe
@Override
public HttpResponse request(final HttpRequest req) throws TwitterException {
int retriedCount;
final int retry = CONF.getHttpRetryCount() + 1;
HttpResponse res = null;
for (retriedCount = 0; retriedCount < retry; retriedCount++) {
int responseCode = -1;
try {
HttpURLConnection con;
OutputStream os = null;
try {
con = getConnection(req.getURL());
con.setDoInput(true);
setHeaders(req, con);
con.setRequestMethod(req.getMethod().name());
final HttpParameter[] params = req.getParameters();
if (req.getMethod() == POST) {
if (HttpParameter.containsFile(params)) {
String boundary = "----Twitter4J-upload" + System.currentTimeMillis();
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
boundary = "--" + boundary;
con.setDoOutput(true);
os = con.getOutputStream();
final DataOutputStream out = new DataOutputStream(os);
for (final HttpParameter param : params) {
if (param.isFile()) {
write(out, boundary + "\r\n");
write(out, "Content-Disposition: form-data; name=\"" + param.getName()
+ "\"; filename=\"" + param.getFileName() + "\"\r\n");
write(out, "Content-Type: " + param.getContentType() + "\r\n\r\n");
final BufferedInputStream in = new BufferedInputStream(
param.hasFileBody() ? param.getFileBody() : new FileInputStream(
param.getFile()));
int buff;
while ((buff = in.read()) != -1) {
out.write(buff);
}
write(out, "\r\n");
in.close();
} else {
write(out, boundary + "\r\n");
write(out, "Content-Disposition: form-data; name=\"" + param.getName() + "\"\r\n");
write(out, "Content-Type: text/plain; charset=UTF-8\r\n\r\n");
logger.debug(param.getValue());
out.write(param.getValue().getBytes("UTF-8"));
write(out, "\r\n");
}
}
write(out, boundary + "--\r\n");
write(out, "\r\n");
} else {
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
final String postParam = HttpParameter.encodeParameters(req.getParameters());
logger.debug("Post Params: ", postParam);
final byte[] bytes = postParam.getBytes("UTF-8");
con.setRequestProperty("Content-Length", Integer.toString(bytes.length));
con.setDoOutput(true);
os = con.getOutputStream();
os.write(bytes);
}
os.flush();
os.close();
}
res = new HttpResponseImpl(con, CONF);
responseCode = con.getResponseCode();
if (logger.isDebugEnabled()) {
logger.debug("Response: ");
final Map<String, List<String>> responseHeaders = con.getHeaderFields();
for (final String key : responseHeaders.keySet()) {
final List<String> values = responseHeaders.get(key);
for (final String value : values) {
if (key != null) {
logger.debug(key + ": " + value);
} else {
logger.debug(value);
}
}
}
}
if (responseCode < OK || responseCode > ACCEPTED) {
if (responseCode == ENHANCE_YOUR_CLAIM || responseCode == BAD_REQUEST
|| responseCode < INTERNAL_SERVER_ERROR || retriedCount == CONF.getHttpRetryCount())
throw new TwitterException(res.asString(), req, res);
} else {
break;
}
} finally {
try {
if (os != null) {
os.close();
}
} catch (final IOException ignore) {
}
}
} catch (final IOException ioe) {
// connection timeout or read timeout
if (retriedCount == CONF.getHttpRetryCount())
// throw new TwitterException(ioe.getMessage(), ioe,
// responseCode);
throw new TwitterException(ioe.getMessage(), req, res);
} catch (final NullPointerException e) {
// This exception will be thown when URL is invalid.
e.printStackTrace();
throw new TwitterException("The URL requested is invalid.", e);
} catch (final OutOfMemoryError e) {
throw new TwitterException(e.getMessage(), e);
}
try {
if (logger.isDebugEnabled() && res != null) {
res.asString();
}
logger.debug("Sleeping " + CONF.getHttpRetryIntervalSeconds() + " seconds until the next retry.");
Thread.sleep(CONF.getHttpRetryIntervalSeconds() * 1000);
} catch (final InterruptedException ignore) {
// nothing to do
}
}
return res;
}
private HttpURLConnection getConnection(final String url_string) throws IOException {
final HttpURLConnection con;
final Proxy proxy;
if (isProxyConfigured()) {
if (CONF.getHttpProxyUser() != null && !CONF.getHttpProxyUser().equals("")) {
if (logger.isDebugEnabled()) {
logger.debug("Proxy AuthUser: " + CONF.getHttpProxyUser());
logger.debug("Proxy AuthPassword: " + InternalStringUtil.maskString(CONF.getHttpProxyPassword()));
}
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// respond only to proxy auth requests
if (getRequestorType().equals(RequestorType.PROXY))
return new PasswordAuthentication(CONF.getHttpProxyUser(), CONF.getHttpProxyPassword()
.toCharArray());
else
return null;
}
});
}
proxy = new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(CONF.getHttpProxyHost(),
CONF.getHttpProxyPort()));
if (logger.isDebugEnabled()) {
logger.debug("Opening proxied connection(" + CONF.getHttpProxyHost() + ":" + CONF.getHttpProxyPort()
+ ")");
}
} else {
proxy = Proxy.NO_PROXY;
}
final HostAddressResolver resolver = FactoryUtils.getHostAddressResolver(CONF);
final URI url_orig;
try {
url_orig = new URI(url_string);
} catch (final URISyntaxException e) {
throw new IOException("Invalid URI " + url_string);
}
final String host = url_orig.getHost(), authority = url_orig.getAuthority();
final InetAddress[] resolved_host = resolver != null ? resolver.resolve(host) : InetAddress.getAllByName(host);
con = (HttpURLConnection) new URL(resolved_host.length > 0 ? url_string.replace("://" + host, "://"
+ resolved_host[0].getHostAddress()) : url_string).openConnection(proxy);
// if (resolved_host != null && !host.equals(resolved_host)) {
// con.setRequestProperty("Host", authority);
// }
if (CONF.getHttpConnectionTimeout() > 0) {
con.setConnectTimeout(CONF.getHttpConnectionTimeout());
}
if (CONF.getHttpReadTimeout() > 0) {
con.setReadTimeout(CONF.getHttpReadTimeout());
}
con.setInstanceFollowRedirects(false);
if (con instanceof HttpsURLConnection && CONF.isSSLErrorIgnored()) {
((HttpsURLConnection) con).setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER);
if (IGNORE_ERROR_SSL_FACTORY != null) {
((HttpsURLConnection) con).setSSLSocketFactory(IGNORE_ERROR_SSL_FACTORY);
}
}
return con;
}
/**
* sets HTTP headers
*
* @param req The request
* @param connection HttpURLConnection
*/
private void setHeaders(final HttpRequest req, final HttpURLConnection connection) {
if (logger.isDebugEnabled()) {
logger.debug("Request: ");
logger.debug(req.getMethod().name() + " ", req.getURL());
}
String authorizationHeader;
if (req.getAuthorization() != null
&& (authorizationHeader = req.getAuthorization().getAuthorizationHeader(req)) != null) {
if (logger.isDebugEnabled()) {
logger.debug("Authorization: ", InternalStringUtil.maskString(authorizationHeader));
}
connection.addRequestProperty("Authorization", authorizationHeader);
}
final Map<String, String> req_headers = req.getRequestHeaders();
if (req_headers != null) {
for (final String key : req_headers.keySet()) {
connection.addRequestProperty(key, req.getRequestHeaders().get(key));
logger.debug(key + ": " + req.getRequestHeaders().get(key));
}
}
}
public static String encode(final String str) {
try {
return URLEncoder.encode(str, "UTF-8");
} catch (final java.io.UnsupportedEncodingException neverHappen) {
throw new AssertionError("will never happen");
}
throw new UnsupportedOperationException();
}
public static HttpClient getInstance(final HttpClientConfiguration conf) {
@ -330,25 +65,4 @@ public class HttpClientImpl extends HttpClientBase implements HttpClient, HttpRe
return client;
}
static class AllowAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(final String hostname, final SSLSession session) {
return true;
}
}
final static class TrustAllX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(final X509Certificate[] chain, final String authType) {
}
@Override
public void checkServerTrusted(final X509Certificate[] chain, final String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
}

View File

@ -419,17 +419,29 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
return mThemedContext = new ContextThemeWrapper(context, themeResource);
}
private void getLocationOnScreen(View view, RectF rectF) {
final int[] location = new int[2];
view.getLocationOnScreen(location);
rectF.set(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight());
}
private void onAccountSelected(AccountProfileImageViewHolder holder, final ParcelableAccount account) {
if (mSwitchAccountAnimationPlaying) return;
final ImageView snapshotView = mFloatingProfileImageSnapshotView;
final ShapedImageView profileImageView = mAccountProfileImageView;
final ShapedImageView clickedImageView = holder.getIconView();
// Reset snapshot view position
snapshotView.setPivotX(0);
snapshotView.setPivotY(0);
snapshotView.setTranslationX(0);
snapshotView.setTranslationY(0);
final Matrix matrix = new Matrix();
final Rect tempRect = new Rect();
clickedImageView.getGlobalVisibleRect(tempRect);
final RectF sourceBounds = new RectF(tempRect);
profileImageView.getGlobalVisibleRect(tempRect);
final RectF destBounds = new RectF(tempRect);
final RectF sourceBounds = new RectF(), destBounds = new RectF(), snapshotBounds = new RectF();
getLocationOnScreen(clickedImageView, sourceBounds);
getLocationOnScreen(profileImageView, destBounds);
getLocationOnScreen(snapshotView, snapshotBounds);
final float finalScale = destBounds.width() / sourceBounds.width();
final Bitmap snapshotBitmap = TransitionUtils.createViewBitmap(clickedImageView, matrix,
new RectF(0, 0, sourceBounds.width(), sourceBounds.height()));
@ -439,12 +451,10 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
snapshotView.setLayoutParams(lp);
// Copied from MaterialNavigationDrawer: https://github.com/madcyph3r/AdvancedMaterialDrawer/
AnimatorSet set = new AnimatorSet();
snapshotView.setPivotX(0);
snapshotView.setPivotY(0);
snapshotView.setX(sourceBounds.left);
snapshotView.setY(sourceBounds.top);
set.play(ObjectAnimator.ofFloat(snapshotView, View.X, sourceBounds.left, destBounds.left))
.with(ObjectAnimator.ofFloat(snapshotView, View.Y, sourceBounds.top, destBounds.top))
set.play(ObjectAnimator.ofFloat(snapshotView, View.TRANSLATION_X,
sourceBounds.left - snapshotBounds.left, destBounds.left - snapshotBounds.left))
.with(ObjectAnimator.ofFloat(snapshotView, View.TRANSLATION_Y,
sourceBounds.top - snapshotBounds.top, destBounds.top - snapshotBounds.top))
.with(ObjectAnimator.ofFloat(snapshotView, View.SCALE_X, 1, finalScale))
.with(ObjectAnimator.ofFloat(snapshotView, View.SCALE_Y, 1, finalScale))
.with(ObjectAnimator.ofFloat(profileImageView, View.ALPHA, 1, 0))

View File

@ -1748,21 +1748,15 @@ public final class Utils implements Constants, TwitterConstants {
return context.getResources().getInteger(R.integer.default_text_size);
}
public static Twitter getDefaultTwitterInstance(final Context context, final boolean include_entities) {
public static Twitter getDefaultTwitterInstance(final Context context, final boolean includeEntities) {
if (context == null) return null;
return getDefaultTwitterInstance(context, include_entities, true, true);
return getDefaultTwitterInstance(context, includeEntities, true);
}
public static Twitter getDefaultTwitterInstance(final Context context, final boolean includeEntities,
final boolean includeRetweets) {
if (context == null) return null;
return getDefaultTwitterInstance(context, includeEntities, includeRetweets, !MIUIUtils.isMIUI());
}
public static Twitter getDefaultTwitterInstance(final Context context, final boolean includeEntities,
final boolean includeRetweets, final boolean apacheHttp) {
if (context == null) return null;
return getTwitterInstance(context, getDefaultAccountId(context), includeEntities, includeRetweets, apacheHttp);
return getTwitterInstance(context, getDefaultAccountId(context), includeEntities, includeRetweets);
}
public static String getErrorMessage(final Context context, final CharSequence message) {
@ -2510,19 +2504,14 @@ public final class Utils implements Constants, TwitterConstants {
public static Twitter getTwitterInstance(final Context context, final long accountId,
final boolean includeEntities) {
return getTwitterInstance(context, accountId, includeEntities, true, !MIUIUtils.isMIUI());
return getTwitterInstance(context, accountId, includeEntities, true);
}
@Nullable
public static Twitter getTwitterInstance(final Context context, final long accountId,
final boolean includeEntities, final boolean includeRetweets) {
return getTwitterInstance(context, accountId, includeEntities, includeRetweets, !MIUIUtils.isMIUI());
}
@Nullable
public static Twitter getTwitterInstance(final Context context, final long accountId,
final boolean includeEntities,
final boolean includeRetweets, final boolean apacheHttp) {
final boolean includeRetweets) {
if (context == null) return null;
final TwidereApplication app = TwidereApplication.getInstance(context);
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
@ -2532,94 +2521,85 @@ public final class Utils implements Constants, TwitterConstants {
final boolean enableProxy = prefs.getBoolean(KEY_ENABLE_PROXY, false);
// Here I use old consumer key/secret because it's default key for older
// versions
final String where = Expression.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL();
final Cursor c = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
Accounts.COLUMNS, where, null, null);
if (c == null) return null;
try {
if (!c.moveToFirst()) return null;
final ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(app));
if (apacheHttp) {
cb.setHttpClientFactory(new OkHttpClientFactory(context));
}
cb.setHttpConnectionTimeout(connection_timeout);
cb.setGZIPEnabled(enableGzip);
cb.setIgnoreSSLError(ignoreSslError);
cb.setIncludeCards(true);
cb.setCardsPlatform("Android-12");
final ParcelableCredentials credentials = ParcelableCredentials.getCredentials(context, accountId);
if (credentials == null) return null;
final ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(app));
cb.setHttpClientFactory(new OkHttpClientFactory(context));
cb.setHttpConnectionTimeout(connection_timeout);
cb.setGZIPEnabled(enableGzip);
cb.setIgnoreSSLError(ignoreSslError);
cb.setIncludeCards(true);
cb.setCardsPlatform("Android-12");
// cb.setModelVersion(7);
if (enableProxy) {
final String proxy_host = prefs.getString(KEY_PROXY_HOST, null);
final int proxy_port = ParseUtils.parseInt(prefs.getString(KEY_PROXY_PORT, "-1"));
if (!isEmpty(proxy_host) && proxy_port > 0) {
cb.setHttpProxyHost(proxy_host);
cb.setHttpProxyPort(proxy_port);
}
if (enableProxy) {
final String proxy_host = prefs.getString(KEY_PROXY_HOST, null);
final int proxy_port = ParseUtils.parseInt(prefs.getString(KEY_PROXY_PORT, "-1"));
if (!isEmpty(proxy_host) && proxy_port > 0) {
cb.setHttpProxyHost(proxy_host);
cb.setHttpProxyPort(proxy_port);
}
final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
final String apiUrlFormat = c.getString(c.getColumnIndex(Accounts.API_URL_FORMAT));
final String consumerKey = trim(c.getString(c.getColumnIndex(Accounts.CONSUMER_KEY)));
final String consumerSecret = trim(c.getString(c.getColumnIndex(Accounts.CONSUMER_SECRET)));
final boolean sameOAuthSigningUrl = c.getInt(c.getColumnIndex(Accounts.SAME_OAUTH_SIGNING_URL)) == 1;
final boolean noVersionSuffix = c.getInt(c.getColumnIndex(Accounts.NO_VERSION_SUFFIX)) == 1;
if (!isEmpty(apiUrlFormat)) {
final String versionSuffix = noVersionSuffix ? null : "/1.1/";
cb.setRestBaseURL(getApiUrl(apiUrlFormat, "api", versionSuffix));
cb.setOAuthBaseURL(getApiUrl(apiUrlFormat, "api", "/oauth/"));
cb.setUploadBaseURL(getApiUrl(apiUrlFormat, "upload", versionSuffix));
if (!sameOAuthSigningUrl) {
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_BASE_URL);
cb.setSigningUploadBaseURL(DEFAULT_SIGNING_UPLOAD_BASE_URL);
}
}
if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) {
setMockOfficialUserAgent(context, cb);
} else {
setUserAgent(context, cb);
}
final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
final String apiUrlFormat = credentials.api_url_format;
final String consumerKey = trim(credentials.consumer_key);
final String consumerSecret = trim(credentials.consumer_secret);
final boolean sameOAuthSigningUrl = credentials.same_oauth_signing_url;
final boolean noVersionSuffix = credentials.no_version_suffix;
if (!isEmpty(apiUrlFormat)) {
final String versionSuffix = noVersionSuffix ? null : "/1.1/";
cb.setRestBaseURL(getApiUrl(apiUrlFormat, "api", versionSuffix));
cb.setOAuthBaseURL(getApiUrl(apiUrlFormat, "api", "/oauth/"));
cb.setUploadBaseURL(getApiUrl(apiUrlFormat, "upload", versionSuffix));
if (!sameOAuthSigningUrl) {
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_BASE_URL);
cb.setSigningUploadBaseURL(DEFAULT_SIGNING_UPLOAD_BASE_URL);
}
}
if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) {
setMockOfficialUserAgent(context, cb);
} else {
setUserAgent(context, cb);
}
cb.setIncludeEntitiesEnabled(includeEntities);
cb.setIncludeRTsEnabled(includeRetweets);
cb.setIncludeReplyCountEnabled(true);
cb.setIncludeDescendentReplyCountEnabled(true);
switch (c.getInt(c.getColumnIndexOrThrow(Accounts.AUTH_TYPE))) {
case Accounts.AUTH_TYPE_OAUTH:
case Accounts.AUTH_TYPE_XAUTH: {
if (!isEmpty(consumerKey) && !isEmpty(consumerSecret)) {
cb.setOAuthConsumerKey(consumerKey);
cb.setOAuthConsumerSecret(consumerSecret);
} else if (!isEmpty(prefConsumerKey) && !isEmpty(prefConsumerSecret)) {
cb.setOAuthConsumerKey(prefConsumerKey);
cb.setOAuthConsumerSecret(prefConsumerSecret);
} else {
cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
}
final String token = c.getString(c.getColumnIndexOrThrow(Accounts.OAUTH_TOKEN));
final String tokenSecret = c.getString(c.getColumnIndexOrThrow(Accounts.OAUTH_TOKEN_SECRET));
if (isEmpty(token) || isEmpty(tokenSecret)) return null;
return new TwitterFactory(cb.build()).getInstance(new AccessToken(token, tokenSecret));
}
case Accounts.AUTH_TYPE_BASIC: {
final String screenName = c.getString(c.getColumnIndexOrThrow(Accounts.SCREEN_NAME));
final String username = c.getString(c.getColumnIndexOrThrow(Accounts.BASIC_AUTH_USERNAME));
final String loginName = username != null ? username : screenName;
final String password = c.getString(c.getColumnIndexOrThrow(Accounts.BASIC_AUTH_PASSWORD));
if (isEmpty(loginName) || isEmpty(password)) return null;
return new TwitterFactory(cb.build()).getInstance(new BasicAuthorization(loginName, password));
}
case Accounts.AUTH_TYPE_TWIP_O_MODE: {
return new TwitterFactory(cb.build()).getInstance(new TwipOModeAuthorization());
}
default: {
return null;
cb.setIncludeEntitiesEnabled(includeEntities);
cb.setIncludeRTsEnabled(includeRetweets);
cb.setIncludeReplyCountEnabled(true);
cb.setIncludeDescendentReplyCountEnabled(true);
switch (credentials.auth_type) {
case Accounts.AUTH_TYPE_OAUTH:
case Accounts.AUTH_TYPE_XAUTH: {
if (!isEmpty(consumerKey) && !isEmpty(consumerSecret)) {
cb.setOAuthConsumerKey(consumerKey);
cb.setOAuthConsumerSecret(consumerSecret);
} else if (!isEmpty(prefConsumerKey) && !isEmpty(prefConsumerSecret)) {
cb.setOAuthConsumerKey(prefConsumerKey);
cb.setOAuthConsumerSecret(prefConsumerSecret);
} else {
cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
}
final String token = credentials.oauth_token;
final String tokenSecret = credentials.oauth_token_secret;
if (isEmpty(token) || isEmpty(tokenSecret)) return null;
return new TwitterFactory(cb.build()).getInstance(new AccessToken(token, tokenSecret));
}
case Accounts.AUTH_TYPE_BASIC: {
final String screenName = credentials.screen_name;
final String username = credentials.basic_auth_username;
final String loginName = username != null ? username : screenName;
final String password = credentials.basic_auth_password;
if (isEmpty(loginName) || isEmpty(password)) return null;
return new TwitterFactory(cb.build()).getInstance(new BasicAuthorization(loginName, password));
}
case Accounts.AUTH_TYPE_TWIP_O_MODE: {
return new TwitterFactory(cb.build()).getInstance(new TwipOModeAuthorization());
}
default: {
return null;
}
} finally {
c.close();
}
}

View File

@ -21,9 +21,6 @@ package org.mariotaku.twidere.util.net;
import android.content.Context;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.net.OkHttpClientImpl;
import twitter4j.http.HttpClient;
import twitter4j.http.HttpClientConfiguration;
import twitter4j.http.HttpClientFactory;

View File

@ -150,15 +150,9 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve
if (record instanceof ARecord) {
final InetAddress ipv4Addr = ((ARecord) record).getAddress();
resolvedAddresses.add(InetAddress.getByAddress(originalHost, ipv4Addr.getAddress()));
// if (ipv4Addr.isReachable(300)) {
// hostAddr = ipv4Addr.getHostAddress();
// }
} else if (record instanceof AAAARecord) {
final InetAddress ipv6Addr = ((AAAARecord) record).getAddress();
resolvedAddresses.add(InetAddress.getByAddress(originalHost, ipv6Addr.getAddress()));
// if (ipv6Addr.isReachable(300)) {
// hostAddr = ipv6Addr.getHostAddress();
// }
}
}
if (!resolvedAddresses.isEmpty()) {
@ -179,7 +173,9 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve
if (Utils.isDebugBuild()) {
Log.w(RESOLVER_LOGTAG, "Resolve address " + host + " failed, using original host");
}
return InetAddress.getAllByName(host);
final InetAddress[] defaultAddresses = InetAddress.getAllByName(host);
mHostCache.put(host, defaultAddresses);
return defaultAddresses;
}
private InetAddress[] fromAddressString(String host, String address) throws UnknownHostException {