added a new key

This commit is contained in:
Mariotaku Lee 2015-05-08 15:52:15 +08:00
parent 8c110aeced
commit 5e62ad8508
15 changed files with 310 additions and 336 deletions

View File

@ -29,228 +29,226 @@ import org.mariotaku.twidere.constant.SharedPreferenceConstants;
*/ */
public interface TwidereConstants extends SharedPreferenceConstants, IntentConstants { public interface TwidereConstants extends SharedPreferenceConstants, IntentConstants {
public static final String TWIDERE_APP_NAME = "Twidere"; String TWIDERE_APP_NAME = "Twidere";
public static final String TWIDERE_PACKAGE_NAME = "org.mariotaku.twidere"; String TWIDERE_PACKAGE_NAME = "org.mariotaku.twidere";
public static final String TWIDERE_PROJECT_URL = "https://github.com/mariotaku/twidere"; String TWIDERE_PROJECT_URL = "https://github.com/mariotaku/twidere";
public static final String TWIDERE_PROJECT_EMAIL = "twidere.project@gmail.com"; String TWIDERE_PROJECT_EMAIL = "twidere.project@gmail.com";
public static final String LOGTAG = TWIDERE_APP_NAME; String LOGTAG = TWIDERE_APP_NAME;
public static final String USER_NICKNAME_PREFERENCES_NAME = "user_nicknames"; String USER_NICKNAME_PREFERENCES_NAME = "user_nicknames";
public static final String USER_COLOR_PREFERENCES_NAME = "user_colors"; String USER_COLOR_PREFERENCES_NAME = "user_colors";
public static final String HOST_MAPPING_PREFERENCES_NAME = "host_mapping"; String HOST_MAPPING_PREFERENCES_NAME = "host_mapping";
public static final String MESSAGE_DRAFTS_PREFERENCES_NAME = "message_drafts"; String MESSAGE_DRAFTS_PREFERENCES_NAME = "message_drafts";
public static final String SHARED_PREFERENCES_NAME = "preferences"; String SHARED_PREFERENCES_NAME = "preferences";
public static final String PERMISSION_PREFERENCES_NAME = "app_permissions"; String PERMISSION_PREFERENCES_NAME = "app_permissions";
public static final String SILENT_NOTIFICATIONS_PREFERENCE_NAME = "silent_notifications"; String SILENT_NOTIFICATIONS_PREFERENCE_NAME = "silent_notifications";
public static final String TIMELINE_POSITIONS_PREFERENCES_NAME = "timeline_positions"; String TIMELINE_POSITIONS_PREFERENCES_NAME = "timeline_positions";
public static final String ACCOUNT_PREFERENCES_NAME_PREFIX = "account_preferences_"; String ACCOUNT_PREFERENCES_NAME_PREFIX = "account_preferences_";
public static final String KEYBOARD_SHORTCUTS_PREFERENCES_NAME = "keyboard_shortcuts_preferences"; String KEYBOARD_SHORTCUTS_PREFERENCES_NAME = "keyboard_shortcuts_preferences";
public static final String TWITTER_CONSUMER_KEY = "uAFVpMhBntJutfVj6abfA"; String TWITTER_CONSUMER_KEY_LEGACY = "uAFVpMhBntJutfVj6abfA";
public static final String TWITTER_CONSUMER_SECRET = "JARXkJTfxo0F8MyctYy9bUmrLISjo8vXAHsZHYuk2E"; String TWITTER_CONSUMER_SECRET_LEGACY = "JARXkJTfxo0F8MyctYy9bUmrLISjo8vXAHsZHYuk2E";
public static final String TWITTER_CONSUMER_KEY_2 = "UyaS0xmUQXKiJ48vZP4dXQ"; String TWITTER_CONSUMER_KEY = "YVROlQkXFvkPfH3jcFaR4A";
public static final String TWITTER_CONSUMER_SECRET_2 = "QlYVMWA751Dl5yNve41CNEN46GV4nxk57FmLeAXAV0"; String TWITTER_CONSUMER_SECRET = "0UnEHDq5IzVK9nstiz2nWOtG5rOMM5JkUpATfM78Do";
public static final String TWITTER_CONSUMER_KEY_3 = "YljS7Zmbw3JkouhZkxCINAsn6";
public static final String TWITTER_CONSUMER_SECRET_3 = "AYrXN6eAJ3Luf9o5zS4Flq2bSBhrB6A9eioI8JENRx8HMh9YuS";
public static final String SCHEME_HTTP = "http"; String SCHEME_HTTP = "http";
public static final String SCHEME_HTTPS = "https"; String SCHEME_HTTPS = "https";
public static final String SCHEME_CONTENT = "content"; String SCHEME_CONTENT = "content";
public static final String SCHEME_TWIDERE = "twidere"; String SCHEME_TWIDERE = "twidere";
public static final String PROTOCOL_HTTP = SCHEME_HTTP + "://"; String PROTOCOL_HTTP = SCHEME_HTTP + "://";
public static final String PROTOCOL_HTTPS = SCHEME_HTTPS + "://"; String PROTOCOL_HTTPS = SCHEME_HTTPS + "://";
public static final String PROTOCOL_CONTENT = SCHEME_CONTENT + "://"; String PROTOCOL_CONTENT = SCHEME_CONTENT + "://";
public static final String PROTOCOL_TWIDERE = SCHEME_TWIDERE + "://"; String PROTOCOL_TWIDERE = SCHEME_TWIDERE + "://";
public static final String AUTHORITY_USER = "user"; String AUTHORITY_USER = "user";
public static final String AUTHORITY_HOME = "home"; String AUTHORITY_HOME = "home";
public static final String AUTHORITY_MENTIONS = "mentions"; String AUTHORITY_MENTIONS = "mentions";
public static final String AUTHORITY_DIRECT_MESSAGES = "direct_messages"; String AUTHORITY_DIRECT_MESSAGES = "direct_messages";
public static final String AUTHORITY_USERS = "users"; String AUTHORITY_USERS = "users";
public static final String AUTHORITY_USER_TIMELINE = "user_timeline"; String AUTHORITY_USER_TIMELINE = "user_timeline";
public static final String AUTHORITY_USER_MEDIA_TIMELINE = "user_media_timeline"; String AUTHORITY_USER_MEDIA_TIMELINE = "user_media_timeline";
public static final String AUTHORITY_USER_FAVORITES = "user_favorites"; String AUTHORITY_USER_FAVORITES = "user_favorites";
public static final String AUTHORITY_USER_FOLLOWERS = "user_followers"; String AUTHORITY_USER_FOLLOWERS = "user_followers";
public static final String AUTHORITY_USER_FRIENDS = "user_friends"; String AUTHORITY_USER_FRIENDS = "user_friends";
public static final String AUTHORITY_USER_BLOCKS = "user_blocks"; String AUTHORITY_USER_BLOCKS = "user_blocks";
public static final String AUTHORITY_STATUS = "status"; String AUTHORITY_STATUS = "status";
public static final String AUTHORITY_STATUSES = "statuses"; String AUTHORITY_STATUSES = "statuses";
public static final String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation"; String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation";
public static final String AUTHORITY_SEARCH = "search"; String AUTHORITY_SEARCH = "search";
public static final String AUTHORITY_MAP = "map"; String AUTHORITY_MAP = "map";
public static final String AUTHORITY_USER_LIST = "user_list"; String AUTHORITY_USER_LIST = "user_list";
public static final String AUTHORITY_USER_LIST_TIMELINE = "user_list_timeline"; String AUTHORITY_USER_LIST_TIMELINE = "user_list_timeline";
public static final String AUTHORITY_USER_LIST_MEMBERS = "user_list_members"; String AUTHORITY_USER_LIST_MEMBERS = "user_list_members";
public static final String AUTHORITY_USER_LIST_SUBSCRIBERS = "user_list_subscribers"; String AUTHORITY_USER_LIST_SUBSCRIBERS = "user_list_subscribers";
public static final String AUTHORITY_USER_LIST_MEMBERSHIPS = "user_list_memberships"; String AUTHORITY_USER_LIST_MEMBERSHIPS = "user_list_memberships";
public static final String AUTHORITY_USER_LISTS = "user_lists"; String AUTHORITY_USER_LISTS = "user_lists";
public static final String AUTHORITY_USERS_RETWEETED_STATUS = "users_retweeted_status"; String AUTHORITY_USERS_RETWEETED_STATUS = "users_retweeted_status";
public static final String AUTHORITY_SAVED_SEARCHES = "saved_searches"; String AUTHORITY_SAVED_SEARCHES = "saved_searches";
public static final String AUTHORITY_SEARCH_USERS = "search_users"; String AUTHORITY_SEARCH_USERS = "search_users";
public static final String AUTHORITY_SEARCH_TWEETS = "search_tweets"; String AUTHORITY_SEARCH_TWEETS = "search_tweets";
public static final String AUTHORITY_TRENDS = "trends"; String AUTHORITY_TRENDS = "trends";
public static final String AUTHORITY_USER_MENTIONS = "user_mentions"; String AUTHORITY_USER_MENTIONS = "user_mentions";
public static final String AUTHORITY_ACTIVITIES_ABOUT_ME = "activities_about_me"; String AUTHORITY_ACTIVITIES_ABOUT_ME = "activities_about_me";
public static final String AUTHORITY_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; String AUTHORITY_ACTIVITIES_BY_FRIENDS = "activities_by_friends";
public static final String AUTHORITY_INCOMING_FRIENDSHIPS = "incoming_friendships"; String AUTHORITY_INCOMING_FRIENDSHIPS = "incoming_friendships";
public static final String AUTHORITY_STATUS_RETWEETERS = "status_retweeters"; String AUTHORITY_STATUS_RETWEETERS = "status_retweeters";
public static final String AUTHORITY_STATUS_FAVORITERS = "status_favoriters"; String AUTHORITY_STATUS_FAVORITERS = "status_favoriters";
public static final String AUTHORITY_STATUS_REPLIES = "status_replies"; String AUTHORITY_STATUS_REPLIES = "status_replies";
public static final String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me"; String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me";
public static final String AUTHORITY_MUTES_USERS = "mutes_users"; String AUTHORITY_MUTES_USERS = "mutes_users";
public static final String AUTHORITY_NOTIFICATIONS = "notifications"; String AUTHORITY_NOTIFICATIONS = "notifications";
public static final String AUTHORITY_ACCOUNTS = "accounts"; String AUTHORITY_ACCOUNTS = "accounts";
public static final String AUTHORITY_DRAFTS = "drafts"; String AUTHORITY_DRAFTS = "drafts";
public static final String AUTHORITY_FILTERS = "filters"; String AUTHORITY_FILTERS = "filters";
public static final String AUTHORITY_PROFILE_EDITOR = "profile_editor"; String AUTHORITY_PROFILE_EDITOR = "profile_editor";
public static final String QUERY_PARAM_ACCOUNT_ID = "account_id"; String QUERY_PARAM_ACCOUNT_ID = "account_id";
public static final String QUERY_PARAM_ACCOUNT_IDS = "account_ids"; String QUERY_PARAM_ACCOUNT_IDS = "account_ids";
public static final String QUERY_PARAM_ACCOUNT_NAME = "account_name"; String QUERY_PARAM_ACCOUNT_NAME = "account_name";
public static final String QUERY_PARAM_STATUS_ID = "status_id"; String QUERY_PARAM_STATUS_ID = "status_id";
public static final String QUERY_PARAM_USER_ID = "user_id"; String QUERY_PARAM_USER_ID = "user_id";
public static final String QUERY_PARAM_LIST_ID = "list_id"; String QUERY_PARAM_LIST_ID = "list_id";
public static final String QUERY_PARAM_SCREEN_NAME = "screen_name"; String QUERY_PARAM_SCREEN_NAME = "screen_name";
public static final String QUERY_PARAM_LIST_NAME = "list_name"; String QUERY_PARAM_LIST_NAME = "list_name";
public static final String QUERY_PARAM_QUERY = "query"; String QUERY_PARAM_QUERY = "query";
public static final String QUERY_PARAM_TYPE = "type"; String QUERY_PARAM_TYPE = "type";
public static final String QUERY_PARAM_VALUE_USERS = "users"; String QUERY_PARAM_VALUE_USERS = "users";
public static final String QUERY_PARAM_VALUE_TWEETS = "tweets"; String QUERY_PARAM_VALUE_TWEETS = "tweets";
public static final String QUERY_PARAM_NOTIFY = "notify"; String QUERY_PARAM_NOTIFY = "notify";
public static final String QUERY_PARAM_LAT = "lat"; String QUERY_PARAM_LAT = "lat";
public static final String QUERY_PARAM_LNG = "lng"; String QUERY_PARAM_LNG = "lng";
public static final String QUERY_PARAM_URL = "url"; String QUERY_PARAM_URL = "url";
public static final String QUERY_PARAM_NAME = "name"; String QUERY_PARAM_NAME = "name";
public static final String QUERY_PARAM_FINISH_ONLY = "finish_only"; String QUERY_PARAM_FINISH_ONLY = "finish_only";
public static final String QUERY_PARAM_NEW_ITEMS_COUNT = "new_items_count"; String QUERY_PARAM_NEW_ITEMS_COUNT = "new_items_count";
public static final String QUERY_PARAM_RECIPIENT_ID = "recipient_id"; String QUERY_PARAM_RECIPIENT_ID = "recipient_id";
public static final String QUERY_PARAM_READ_POSITION = "param_read_position"; String QUERY_PARAM_READ_POSITION = "param_read_position";
public static final String QUERY_PARAM_READ_POSITIONS = "param_read_positions"; String QUERY_PARAM_READ_POSITIONS = "param_read_positions";
public static final String DEFAULT_PROTOCOL = PROTOCOL_HTTPS; String DEFAULT_PROTOCOL = PROTOCOL_HTTPS;
public static final String OAUTH_CALLBACK_OOB = "oob"; String OAUTH_CALLBACK_OOB = "oob";
public static final String OAUTH_CALLBACK_URL = PROTOCOL_TWIDERE + "com.twitter.oauth/"; String OAUTH_CALLBACK_URL = PROTOCOL_TWIDERE + "com.twitter.oauth/";
public static final int REQUEST_TAKE_PHOTO = 1; int REQUEST_TAKE_PHOTO = 1;
public static final int REQUEST_PICK_IMAGE = 2; int REQUEST_PICK_IMAGE = 2;
public static final int REQUEST_SELECT_ACCOUNT = 3; int REQUEST_SELECT_ACCOUNT = 3;
public static final int REQUEST_COMPOSE = 4; int REQUEST_COMPOSE = 4;
public static final int REQUEST_EDIT_API = 5; int REQUEST_EDIT_API = 5;
public static final int REQUEST_BROWSER_SIGN_IN = 6; int REQUEST_BROWSER_SIGN_IN = 6;
public static final int REQUEST_SET_COLOR = 7; int REQUEST_SET_COLOR = 7;
public static final int REQUEST_SAVE_FILE = 8; int REQUEST_SAVE_FILE = 8;
public static final int REQUEST_EDIT_IMAGE = 9; int REQUEST_EDIT_IMAGE = 9;
public static final int REQUEST_EXTENSION_COMPOSE = 10; int REQUEST_EXTENSION_COMPOSE = 10;
public static final int REQUEST_ADD_TAB = 11; int REQUEST_ADD_TAB = 11;
public static final int REQUEST_EDIT_TAB = 12; int REQUEST_EDIT_TAB = 12;
public static final int REQUEST_PICK_FILE = 13; int REQUEST_PICK_FILE = 13;
public static final int REQUEST_PICK_DIRECTORY = 14; int REQUEST_PICK_DIRECTORY = 14;
public static final int REQUEST_ADD_TO_LIST = 15; int REQUEST_ADD_TO_LIST = 15;
public static final int REQUEST_SELECT_USER = 16; int REQUEST_SELECT_USER = 16;
public static final int REQUEST_SELECT_USER_LIST = 17; int REQUEST_SELECT_USER_LIST = 17;
public static final int REQUEST_PICK_ACTIVITY = 18; int REQUEST_PICK_ACTIVITY = 18;
public static final int REQUEST_SETTINGS = 19; int REQUEST_SETTINGS = 19;
public static final int REQUEST_OPEN_DOCUMENT = 20; int REQUEST_OPEN_DOCUMENT = 20;
public static final int REQUEST_SWIPEBACK_ACTIVITY = 101; int REQUEST_SWIPEBACK_ACTIVITY = 101;
public static final int TABLE_ID_ACCOUNTS = 1; int TABLE_ID_ACCOUNTS = 1;
public static final int TABLE_ID_STATUSES = 12; int TABLE_ID_STATUSES = 12;
public static final int TABLE_ID_MENTIONS = 13; int TABLE_ID_MENTIONS = 13;
public static final int TABLE_ID_DIRECT_MESSAGES = 21; int TABLE_ID_DIRECT_MESSAGES = 21;
public static final int TABLE_ID_DIRECT_MESSAGES_INBOX = 22; int TABLE_ID_DIRECT_MESSAGES_INBOX = 22;
public static final int TABLE_ID_DIRECT_MESSAGES_OUTBOX = 23; int TABLE_ID_DIRECT_MESSAGES_OUTBOX = 23;
public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATION = 24; int TABLE_ID_DIRECT_MESSAGES_CONVERSATION = 24;
public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATION_SCREEN_NAME = 25; int TABLE_ID_DIRECT_MESSAGES_CONVERSATION_SCREEN_NAME = 25;
public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATIONS_ENTRIES = 26; int TABLE_ID_DIRECT_MESSAGES_CONVERSATIONS_ENTRIES = 26;
public static final int TABLE_ID_FILTERED_USERS = 31; int TABLE_ID_FILTERED_USERS = 31;
public static final int TABLE_ID_FILTERED_KEYWORDS = 32; int TABLE_ID_FILTERED_KEYWORDS = 32;
public static final int TABLE_ID_FILTERED_SOURCES = 33; int TABLE_ID_FILTERED_SOURCES = 33;
public static final int TABLE_ID_FILTERED_LINKS = 34; int TABLE_ID_FILTERED_LINKS = 34;
public static final int TABLE_ID_TRENDS_LOCAL = 41; int TABLE_ID_TRENDS_LOCAL = 41;
public static final int TABLE_ID_SAVED_SEARCHES = 42; int TABLE_ID_SAVED_SEARCHES = 42;
public static final int TABLE_ID_SEARCH_HISTORY = 43; int TABLE_ID_SEARCH_HISTORY = 43;
public static final int TABLE_ID_DRAFTS = 51; int TABLE_ID_DRAFTS = 51;
public static final int TABLE_ID_TABS = 52; int TABLE_ID_TABS = 52;
public static final int TABLE_ID_CACHED_USERS = 61; int TABLE_ID_CACHED_USERS = 61;
public static final int TABLE_ID_CACHED_STATUSES = 62; int TABLE_ID_CACHED_STATUSES = 62;
public static final int TABLE_ID_CACHED_HASHTAGS = 63; int TABLE_ID_CACHED_HASHTAGS = 63;
public static final int TABLE_ID_CACHED_RELATIONSHIPS = 64; int TABLE_ID_CACHED_RELATIONSHIPS = 64;
public static final int VIRTUAL_TABLE_ID_DATABASE_READY = 100; int VIRTUAL_TABLE_ID_DATABASE_READY = 100;
public static final int VIRTUAL_TABLE_ID_NOTIFICATIONS = 101; int VIRTUAL_TABLE_ID_NOTIFICATIONS = 101;
public static final int VIRTUAL_TABLE_ID_PREFERENCES = 102; int VIRTUAL_TABLE_ID_PREFERENCES = 102;
public static final int VIRTUAL_TABLE_ID_ALL_PREFERENCES = 103; int VIRTUAL_TABLE_ID_ALL_PREFERENCES = 103;
public static final int VIRTUAL_TABLE_ID_PERMISSIONS = 104; int VIRTUAL_TABLE_ID_PERMISSIONS = 104;
public static final int VIRTUAL_TABLE_ID_DNS = 105; int VIRTUAL_TABLE_ID_DNS = 105;
public static final int VIRTUAL_TABLE_ID_CACHED_IMAGES = 106; int VIRTUAL_TABLE_ID_CACHED_IMAGES = 106;
public static final int VIRTUAL_TABLE_ID_CACHE_FILES = 107; int VIRTUAL_TABLE_ID_CACHE_FILES = 107;
public static final int VIRTUAL_TABLE_ID_UNREAD_COUNTS = 108; int VIRTUAL_TABLE_ID_UNREAD_COUNTS = 108;
public static final int VIRTUAL_TABLE_ID_UNREAD_COUNTS_BY_TYPE = 109; int VIRTUAL_TABLE_ID_UNREAD_COUNTS_BY_TYPE = 109;
public static final int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121; int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121;
public static final int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122; int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122;
public static final int VIRTUAL_TABLE_ID_DRAFTS_UNSENT = 131; int VIRTUAL_TABLE_ID_DRAFTS_UNSENT = 131;
public static final int NOTIFICATION_ID_HOME_TIMELINE = 1; int NOTIFICATION_ID_HOME_TIMELINE = 1;
public static final int NOTIFICATION_ID_MENTIONS_TIMELINE = 2; int NOTIFICATION_ID_MENTIONS_TIMELINE = 2;
public static final int NOTIFICATION_ID_DIRECT_MESSAGES = 3; int NOTIFICATION_ID_DIRECT_MESSAGES = 3;
public static final int NOTIFICATION_ID_DRAFTS = 4; int NOTIFICATION_ID_DRAFTS = 4;
public static final int NOTIFICATION_ID_DATA_PROFILING = 5; int NOTIFICATION_ID_DATA_PROFILING = 5;
public static final int NOTIFICATION_ID_UPDATE_STATUS = 101; int NOTIFICATION_ID_UPDATE_STATUS = 101;
public static final int NOTIFICATION_ID_SEND_DIRECT_MESSAGE = 102; int NOTIFICATION_ID_SEND_DIRECT_MESSAGE = 102;
public static final String ICON_SPECIAL_TYPE_CUSTOMIZE = "_customize"; String ICON_SPECIAL_TYPE_CUSTOMIZE = "_customize";
public static final String TASK_TAG_GET_HOME_TIMELINE = "get_home_tomeline"; String TASK_TAG_GET_HOME_TIMELINE = "get_home_tomeline";
public static final String TASK_TAG_GET_MENTIONS = "get_mentions"; String TASK_TAG_GET_MENTIONS = "get_mentions";
public static final String TASK_TAG_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages"; String TASK_TAG_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages";
public static final String TASK_TAG_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages"; String TASK_TAG_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages";
public static final String TASK_TAG_GET_TRENDS = "get_trends"; String TASK_TAG_GET_TRENDS = "get_trends";
public static final String TASK_TAG_STORE_TRENDS = "store_trends"; String TASK_TAG_STORE_TRENDS = "store_trends";
public static final String SERVICE_COMMAND_REFRESH_ALL = "refresh_all"; String SERVICE_COMMAND_REFRESH_ALL = "refresh_all";
public static final String SERVICE_COMMAND_GET_HOME_TIMELINE = "get_home_timeline"; String SERVICE_COMMAND_GET_HOME_TIMELINE = "get_home_timeline";
public static final String SERVICE_COMMAND_GET_MENTIONS = "get_mentions"; String SERVICE_COMMAND_GET_MENTIONS = "get_mentions";
public static final String SERVICE_COMMAND_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages"; String SERVICE_COMMAND_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages";
public static final String SERVICE_COMMAND_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages"; String SERVICE_COMMAND_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages";
public static final String METADATA_KEY_EXTENSION = "org.mariotaku.twidere.extension"; String METADATA_KEY_EXTENSION = "org.mariotaku.twidere.extension";
public static final String METADATA_KEY_EXTENSION_PERMISSIONS = "org.mariotaku.twidere.extension.permissions"; String METADATA_KEY_EXTENSION_PERMISSIONS = "org.mariotaku.twidere.extension.permissions";
public static final String METADATA_KEY_EXTENSION_SETTINGS = "org.mariotaku.twidere.extension.settings"; String METADATA_KEY_EXTENSION_SETTINGS = "org.mariotaku.twidere.extension.settings";
public static final String METADATA_KEY_EXTENSION_ICON = "org.mariotaku.twidere.extension.icon"; String METADATA_KEY_EXTENSION_ICON = "org.mariotaku.twidere.extension.icon";
public static final String METADATA_KEY_EXTENSION_USE_JSON = "org.mariotaku.twidere.extension.use_json"; String METADATA_KEY_EXTENSION_USE_JSON = "org.mariotaku.twidere.extension.use_json";
public static final char SEPARATOR_PERMISSION = '|'; char SEPARATOR_PERMISSION = '|';
public static final String SEPARATOR_PERMISSION_REGEX = "\\" + SEPARATOR_PERMISSION; String SEPARATOR_PERMISSION_REGEX = "\\" + SEPARATOR_PERMISSION;
public static final String PERMISSION_DENIED = "denied"; String PERMISSION_DENIED = "denied";
public static final String PERMISSION_REFRESH = "refresh"; String PERMISSION_REFRESH = "refresh";
public static final String PERMISSION_READ = "read"; String PERMISSION_READ = "read";
public static final String PERMISSION_WRITE = "write"; String PERMISSION_WRITE = "write";
public static final String PERMISSION_DIRECT_MESSAGES = "direct_messages"; String PERMISSION_DIRECT_MESSAGES = "direct_messages";
public static final String PERMISSION_ACCOUNTS = "accounts"; String PERMISSION_ACCOUNTS = "accounts";
public static final String PERMISSION_PREFERENCES = "preferences"; String PERMISSION_PREFERENCES = "preferences";
public static final String TAB_TYPE_HOME_TIMELINE = "home_timeline"; String TAB_TYPE_HOME_TIMELINE = "home_timeline";
public static final String TAB_TYPE_MENTIONS_TIMELINE = "mentions_timeline"; String TAB_TYPE_MENTIONS_TIMELINE = "mentions_timeline";
public static final String TAB_TYPE_TRENDS_SUGGESTIONS = "trends_suggestions"; String TAB_TYPE_TRENDS_SUGGESTIONS = "trends_suggestions";
public static final String TAB_TYPE_DIRECT_MESSAGES = "direct_messages"; String TAB_TYPE_DIRECT_MESSAGES = "direct_messages";
public static final String TAB_TYPE_FAVORITES = "favorites"; String TAB_TYPE_FAVORITES = "favorites";
public static final String TAB_TYPE_USER_TIMELINE = "user_timeline"; String TAB_TYPE_USER_TIMELINE = "user_timeline";
public static final String TAB_TYPE_SEARCH_STATUSES = "search_statuses"; String TAB_TYPE_SEARCH_STATUSES = "search_statuses";
public static final String TAB_TYPE_LIST_TIMELINE = "list_timeline"; String TAB_TYPE_LIST_TIMELINE = "list_timeline";
public static final String TAB_TYPE_ACTIVITIES_ABOUT_ME = "activities_about_me"; String TAB_TYPE_ACTIVITIES_ABOUT_ME = "activities_about_me";
public static final String TAB_TYPE_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; String TAB_TYPE_ACTIVITIES_BY_FRIENDS = "activities_by_friends";
public static final String TAB_TYPE_RETWEETS_OF_ME = "retweets_of_me"; String TAB_TYPE_RETWEETS_OF_ME = "retweets_of_me";
public static final int TAB_CODE_HOME_TIMELINE = 1; int TAB_CODE_HOME_TIMELINE = 1;
public static final int TAB_CODE_MENTIONS_TIMELINE = 2; int TAB_CODE_MENTIONS_TIMELINE = 2;
public static final int TAB_CODE_DIRECT_MESSAGES = 4; int TAB_CODE_DIRECT_MESSAGES = 4;
public static final int TWITTER_MAX_IMAGE_SIZE = 3145728; int TWITTER_MAX_IMAGE_SIZE = 3145728;
public static final int TWITTER_MAX_IMAGE_WIDTH = 1024; int TWITTER_MAX_IMAGE_WIDTH = 1024;
public static final int TWITTER_MAX_IMAGE_HEIGHT = 2048; int TWITTER_MAX_IMAGE_HEIGHT = 2048;
} }

View File

@ -250,9 +250,9 @@ public interface SharedPreferenceConstants {
String KEY_NO_VERSION_SUFFIX = "no_version_suffix"; String KEY_NO_VERSION_SUFFIX = "no_version_suffix";
@Preference(type = INT, hasDefault = true, defaultInt = Accounts.AUTH_TYPE_OAUTH) @Preference(type = INT, hasDefault = true, defaultInt = Accounts.AUTH_TYPE_OAUTH)
String KEY_AUTH_TYPE = "auth_type"; String KEY_AUTH_TYPE = "auth_type";
@Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_KEY_3) @Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_KEY)
String KEY_CONSUMER_KEY = "consumer_key"; String KEY_CONSUMER_KEY = "consumer_key";
@Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_SECRET_3) @Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_SECRET)
String KEY_CONSUMER_SECRET = "consumer_secret"; String KEY_CONSUMER_SECRET = "consumer_secret";
String KEY_SETTINGS_WIZARD_COMPLETED = "settings_wizard_completed"; String KEY_SETTINGS_WIZARD_COMPLETED = "settings_wizard_completed";
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true) @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true)

View File

@ -15,4 +15,5 @@ public interface RestClient {
Converter getConverter(); Converter getConverter();
Authorization getAuthorization(); Authorization getAuthorization();
} }

View File

@ -1,5 +1,7 @@
package org.mariotaku.simplerestapi.http; package org.mariotaku.simplerestapi.http;
import android.support.annotation.NonNull;
import java.io.IOException; import java.io.IOException;
/** /**
@ -7,6 +9,7 @@ import java.io.IOException;
*/ */
public interface RestHttpClient { public interface RestHttpClient {
@NonNull
RestResponse execute(RestRequest request) throws IOException; RestResponse execute(RestRequest request) throws IOException;
} }

View File

@ -14,7 +14,7 @@ import java.util.List;
/** /**
* Created by mariotaku on 15/2/7. * Created by mariotaku on 15/2/7.
*/ */
public class RestRequest { public final class RestRequest {
private final String method; private final String method;
private final String url; private final String url;
@ -104,6 +104,7 @@ public class RestRequest {
RestRequest create(@NonNull Endpoint endpoint, @NonNull RestMethodInfo info, @Nullable Authorization authorization); RestRequest create(@NonNull Endpoint endpoint, @NonNull RestMethodInfo info, @Nullable Authorization authorization);
} }
public static final class DefaultFactory implements Factory { public static final class DefaultFactory implements Factory {
@Override @Override

View File

@ -70,13 +70,6 @@ public final class TwitterFactory {
private final Configuration conf; private final Configuration conf;
/**
* Creates a TwitterFactory with the root configuration.
*/
public TwitterFactory() {
this(ConfigurationContext.getInstance());
}
/** /**
* Creates a TwitterFactory with the given configuration. * Creates a TwitterFactory with the given configuration.
* *

View File

@ -154,8 +154,8 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
final int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false); final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false);
final boolean prefNoVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false); final boolean prefNoVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false);
final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
if (savedInstanceState != null) { if (savedInstanceState != null) {
apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat)); apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat));
authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType); authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType);

View File

@ -234,9 +234,9 @@ public class BrowserSignInActivity extends BaseSupportDialogActivity implements
final boolean enable_gzip_compressing = mPreferences.getBoolean(KEY_GZIP_COMPRESSING, false); final boolean enable_gzip_compressing = mPreferences.getBoolean(KEY_GZIP_COMPRESSING, false);
final boolean ignore_ssl_error = mPreferences.getBoolean(KEY_IGNORE_SSL_ERROR, false); final boolean ignore_ssl_error = mPreferences.getBoolean(KEY_IGNORE_SSL_ERROR, false);
final boolean enable_proxy = mPreferences.getBoolean(KEY_ENABLE_PROXY, false); final boolean enable_proxy = mPreferences.getBoolean(KEY_ENABLE_PROXY, false);
final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET,
TWITTER_CONSUMER_SECRET_3); TWITTER_CONSUMER_SECRET);
cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(mApplication)); cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(mApplication));
Utils.setClientUserAgent(mActivity, consumerKey, consumerSecret, cb); Utils.setClientUserAgent(mActivity, consumerKey, consumerSecret, cb);
cb.setRestBaseURL(DEFAULT_REST_BASE_URL); cb.setRestBaseURL(DEFAULT_REST_BASE_URL);

View File

@ -397,8 +397,8 @@ public class SignInActivity extends BaseAppCompatActivity implements TwitterCons
cb.setSigningUploadBaseURL(DEFAULT_SIGNING_UPLOAD_BASE_URL); cb.setSigningUploadBaseURL(DEFAULT_SIGNING_UPLOAD_BASE_URL);
} }
if (isEmpty(mConsumerKey) || isEmpty(mConsumerSecret)) { if (isEmpty(mConsumerKey) || isEmpty(mConsumerSecret)) {
cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_3); cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_3); cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
} else { } else {
cb.setOAuthConsumerKey(mConsumerKey); cb.setOAuthConsumerKey(mConsumerKey);
cb.setOAuthConsumerSecret(mConsumerSecret); cb.setOAuthConsumerSecret(mConsumerSecret);
@ -428,8 +428,8 @@ public class SignInActivity extends BaseAppCompatActivity implements TwitterCons
final int authType = mPreferences.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final int authType = mPreferences.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
final boolean sameOAuthSigningUrl = mPreferences.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false); final boolean sameOAuthSigningUrl = mPreferences.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false);
final boolean noVersionSuffix = mPreferences.getBoolean(KEY_NO_VERSION_SUFFIX, false); final boolean noVersionSuffix = mPreferences.getBoolean(KEY_NO_VERSION_SUFFIX, false);
final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
if (isEmpty(mAPIUrlFormat) || defaultApiChanged) { if (isEmpty(mAPIUrlFormat) || defaultApiChanged) {
mAPIUrlFormat = apiUrlFormat; mAPIUrlFormat = apiUrlFormat;
} }

View File

@ -102,8 +102,8 @@ public class DefaultAPIPreference extends DialogPreference implements Constants,
final int authType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final int authType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
final boolean sameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false); final boolean sameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false);
final boolean noVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false); final boolean noVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false);
final String consumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); final String consumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String consumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); final String consumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
setValues(apiUrlFormat, authType, noVersionSuffix, sameOAuthSigningUrl, consumerKey, consumerSecret); setValues(apiUrlFormat, authType, noVersionSuffix, sameOAuthSigningUrl, consumerKey, consumerSecret);
} }
@ -162,8 +162,8 @@ public class DefaultAPIPreference extends DialogPreference implements Constants,
final String prefApiUrlFormat = getNonEmptyString(pref, KEY_API_URL_FORMAT, DEFAULT_REST_BASE_URL); final String prefApiUrlFormat = getNonEmptyString(pref, KEY_API_URL_FORMAT, DEFAULT_REST_BASE_URL);
final int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_API_URL_FORMAT, false); final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_API_URL_FORMAT, false);
final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
final String apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat)); final String apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat));
final int authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType); final int authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType);
final boolean sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL, final boolean sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL,

View File

@ -2,10 +2,16 @@ package org.mariotaku.twidere.util;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.SSLCertificateSocketFactory;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Pair; import android.util.Pair;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.internal.Internal;
import com.squareup.okhttp.internal.Network;
import org.mariotaku.simplerestapi.http.Authorization; import org.mariotaku.simplerestapi.http.Authorization;
import org.mariotaku.simplerestapi.http.RestHttpClient; import org.mariotaku.simplerestapi.http.RestHttpClient;
import org.mariotaku.simplerestapi.http.RestRequest; import org.mariotaku.simplerestapi.http.RestRequest;
@ -24,26 +30,30 @@ import org.mariotaku.twidere.provider.TwidereDataStore;
import org.mariotaku.twidere.util.net.TwidereHostResolverFactory; import org.mariotaku.twidere.util.net.TwidereHostResolverFactory;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Proxy; import java.net.Proxy;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import twitter4j.Twitter; import twitter4j.Twitter;
import twitter4j.TwitterConstants; import twitter4j.TwitterConstants;
import twitter4j.TwitterFactory; import twitter4j.TwitterFactory;
import twitter4j.conf.Configuration; import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder; import twitter4j.conf.ConfigurationBuilder;
import twitter4j.http.HostAddressResolverFactory; import twitter4j.http.HostAddressResolver;
import static android.text.TextUtils.isEmpty; import static android.text.TextUtils.isEmpty;
/** /**
* Created by mariotaku on 15/5/7. * Created by mariotaku on 15/5/7.
*/ */
public class TwitterAPIUtils { public class TwitterAPIUtils implements TwidereConstants {
@NonNull
public static RestResponse getRedirectedHttpResponse(@NonNull final RestHttpClient client, @NonNull final String url, public static RestResponse getRedirectedHttpResponse(@NonNull final RestHttpClient client, @NonNull final String url,
final String signUrl, final Authorization auth, final String signUrl, final Authorization auth,
final List<Pair<String, String>> additionalHeaders) final List<Pair<String, String>> additionalHeaders)
@ -53,7 +63,7 @@ public class TwitterAPIUtils {
RestResponse resp; RestResponse resp;
RestRequest req = new RestRequest.Builder().method(GET.METHOD).url(url).headers(additionalHeaders).build(); RestRequest req = new RestRequest.Builder().method(GET.METHOD).url(url).headers(additionalHeaders).build();
resp = client.execute(req); resp = client.execute(req);
while (resp != null && Utils.isRedirected(resp.getStatus())) { while (Utils.isRedirected(resp.getStatus())) {
final String requestUrl = resp.getHeader("Location"); final String requestUrl = resp.getHeader("Location");
if (requestUrl == null) return null; if (requestUrl == null) return null;
if (urls.contains(requestUrl)) throw new IOException("Too many redirects"); if (urls.contains(requestUrl)) throw new IOException("Too many redirects");
@ -101,7 +111,7 @@ public class TwitterAPIUtils {
private static Configuration getConfiguration(Context context, boolean includeEntities, boolean includeRetweets, ParcelableAccount.ParcelableCredentials credentials) { private static Configuration getConfiguration(Context context, boolean includeEntities, boolean includeRetweets, ParcelableAccount.ParcelableCredentials credentials) {
final TwidereApplication app = TwidereApplication.getInstance(context); final TwidereApplication app = TwidereApplication.getInstance(context);
final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final int connection_timeout = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10) * 1000; final int connectionTimeout = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10) * 1000;
final boolean enableGzip = prefs.getBoolean(SharedPreferenceConstants.KEY_GZIP_COMPRESSING, true); final boolean enableGzip = prefs.getBoolean(SharedPreferenceConstants.KEY_GZIP_COMPRESSING, true);
final boolean ignoreSslError = prefs.getBoolean(SharedPreferenceConstants.KEY_IGNORE_SSL_ERROR, false); final boolean ignoreSslError = prefs.getBoolean(SharedPreferenceConstants.KEY_IGNORE_SSL_ERROR, false);
final boolean enableProxy = prefs.getBoolean(SharedPreferenceConstants.KEY_ENABLE_PROXY, false); final boolean enableProxy = prefs.getBoolean(SharedPreferenceConstants.KEY_ENABLE_PROXY, false);
@ -109,7 +119,7 @@ public class TwitterAPIUtils {
// versions // versions
final ConfigurationBuilder cb = new ConfigurationBuilder(); final ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(app)); cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(app));
cb.setHttpConnectionTimeout(connection_timeout); cb.setHttpConnectionTimeout(connectionTimeout);
cb.setGZIPEnabled(enableGzip); cb.setGZIPEnabled(enableGzip);
cb.setIgnoreSSLError(ignoreSslError); cb.setIgnoreSSLError(ignoreSslError);
cb.setIncludeCards(true); cb.setIncludeCards(true);
@ -153,8 +163,12 @@ public class TwitterAPIUtils {
switch (credentials.auth_type) { switch (credentials.auth_type) {
case TwidereDataStore.Accounts.AUTH_TYPE_OAUTH: case TwidereDataStore.Accounts.AUTH_TYPE_OAUTH:
case TwidereDataStore.Accounts.AUTH_TYPE_XAUTH: { case TwidereDataStore.Accounts.AUTH_TYPE_XAUTH: {
return new OAuthAuthorization(credentials.consumer_key, credentials.consumer_secret, final String consumerKey = TextUtils.isEmpty(credentials.consumer_key) ?
new OAuthToken(credentials.oauth_token, credentials.oauth_token_secret)); TWITTER_CONSUMER_KEY_LEGACY : credentials.consumer_key;
final String consumerSecret = TextUtils.isEmpty(credentials.consumer_secret) ?
TWITTER_CONSUMER_SECRET_LEGACY : credentials.consumer_secret;
final OAuthToken accessToken = new OAuthToken(credentials.oauth_token, credentials.oauth_token_secret);
return new OAuthAuthorization(consumerKey, consumerSecret, accessToken);
} }
case TwidereDataStore.Accounts.AUTH_TYPE_BASIC: { case TwidereDataStore.Accounts.AUTH_TYPE_BASIC: {
final String screenName = credentials.screen_name; final String screenName = credentials.screen_name;
@ -168,44 +182,52 @@ public class TwitterAPIUtils {
return new EmptyAuthorization(); return new EmptyAuthorization();
} }
public static RestHttpClient getHttpClient(final Context context, final int timeoutMillis,
final boolean ignoreSslError, final Proxy proxy,
final HostAddressResolverFactory resolverFactory,
final String userAgent, final boolean twitterClientHeader) {
final ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setHttpConnectionTimeout(timeoutMillis);
cb.setIgnoreSSLError(ignoreSslError);
cb.setIncludeTwitterClientHeader(twitterClientHeader);
if (proxy != null && !Proxy.NO_PROXY.equals(proxy)) {
final SocketAddress address = proxy.address();
if (address instanceof InetSocketAddress) {
cb.setHttpProxyHost(((InetSocketAddress) address).getHostName());
cb.setHttpProxyPort(((InetSocketAddress) address).getPort());
}
}
cb.setHostAddressResolverFactory(resolverFactory);
return new OkHttpRestClient();
}
public static RestHttpClient getDefaultHttpClient(final Context context) { public static RestHttpClient getDefaultHttpClient(final Context context) {
if (context == null) return null; if (context == null) return null;
final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final int timeoutMillis = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10000) * 1000; //TODO set user agent
final Proxy proxy = Utils.getProxy(context); TwidereApplication.getInstance(context).getDefaultUserAgent();
final String userAgent = TwidereApplication.getInstance(context).getDefaultUserAgent(); return createHttpClient(context, prefs);
final HostAddressResolverFactory resolverFactory = new TwidereHostResolverFactory(
TwidereApplication.getInstance(context));
return getHttpClient(context, timeoutMillis, true, proxy, resolverFactory, userAgent, false);
} }
public static RestHttpClient getImageLoaderHttpClient(final Context context) { public static RestHttpClient createHttpClient(final Context context, final SharedPreferencesWrapper prefs) {
if (context == null) return null; final int connectionTimeout = prefs.getInt(KEY_CONNECTION_TIMEOUT, 10);
final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final boolean ignoreSslError = prefs.getBoolean(KEY_IGNORE_SSL_ERROR, false);
final int timeoutMillis = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10000) * 1000; final boolean enableProxy = prefs.getBoolean(KEY_ENABLE_PROXY, false);
final Proxy proxy = Utils.getProxy(context);
final String userAgent = TwidereApplication.getInstance(context).getDefaultUserAgent(); final OkHttpClient client = new OkHttpClient();
final HostAddressResolverFactory resolverFactory = new TwidereHostResolverFactory( client.setConnectTimeout(connectionTimeout, TimeUnit.SECONDS);
TwidereApplication.getInstance(context)); if (ignoreSslError) {
return getHttpClient(context, timeoutMillis, true, proxy, resolverFactory, userAgent, false); client.setSslSocketFactory(SSLCertificateSocketFactory.getInsecure(0, null));
} else {
client.setSslSocketFactory(SSLCertificateSocketFactory.getDefault(0, null));
}
if (enableProxy) {
client.setProxy(getProxy(prefs));
}
final HostAddressResolver resolver = TwidereApplication.getInstance(context).getHostAddressResolver();
Internal.instance.setNetwork(client, new Network() {
@Override
public InetAddress[] resolveInetAddresses(String host) throws UnknownHostException {
try {
return resolver.resolve(host);
} catch (IOException e) {
if (e instanceof UnknownHostException) throw (UnknownHostException) e;
throw new UnknownHostException("Unable to resolve address " + e.getMessage());
}
}
});
return new OkHttpRestClient(client);
}
public static Proxy getProxy(final SharedPreferencesWrapper prefs) {
final String proxyHost = prefs.getString(KEY_PROXY_HOST, null);
final int proxyPort = ParseUtils.parseInt(prefs.getString(KEY_PROXY_PORT, "-1"));
if (!isEmpty(proxyHost) && proxyPort >= 0 && proxyPort < 65535) {
final SocketAddress addr = InetSocketAddress.createUnresolved(proxyHost, proxyPort);
return new Proxy(Proxy.Type.HTTP, addr);
}
return Proxy.NO_PROXY;
} }
} }

View File

@ -232,9 +232,6 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.SocketAddress;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.text.NumberFormat; import java.text.NumberFormat;
@ -2093,20 +2090,6 @@ public final class Utils implements Constants, TwitterConstants {
return VALUE_MEDIA_PREVIEW_STYLE_CODE_CROP; return VALUE_MEDIA_PREVIEW_STYLE_CODE_CROP;
} }
public static Proxy getProxy(final Context context) {
if (context == null) return null;
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final boolean enable_proxy = prefs.getBoolean(KEY_ENABLE_PROXY, false);
if (!enable_proxy) return Proxy.NO_PROXY;
final String proxyHost = prefs.getString(KEY_PROXY_HOST, null);
final int proxyPort = ParseUtils.parseInt(prefs.getString(KEY_PROXY_PORT, "-1"));
if (!isEmpty(proxyHost) && proxyPort >= 0 && proxyPort < 65535) {
final SocketAddress addr = InetSocketAddress.createUnresolved(proxyHost, proxyPort);
return new Proxy(Proxy.Type.HTTP, addr);
}
return Proxy.NO_PROXY;
}
public static String getQuoteStatus(final Context context, long statusId, final String screen_name, final String text) { public static String getQuoteStatus(final Context context, long statusId, final String screen_name, final String text) {
if (context == null) return null; if (context == null) return null;
String quoteFormat = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE).getString( String quoteFormat = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE).getString(
@ -2281,8 +2264,8 @@ public final class Utils implements Constants, TwitterConstants {
// Here I use old consumer key/secret because it's default // Here I use old consumer key/secret because it's default
// key for older // key for older
// versions // versions
final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_LEGACY);
final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_LEGACY);
final ConfigurationBuilder cb = new ConfigurationBuilder(); final ConfigurationBuilder cb = new ConfigurationBuilder();
if (!isEmpty(account.api_url_format)) { if (!isEmpty(account.api_url_format)) {
final String versionSuffix = account.no_version_suffix ? null : "/1.1/"; final String versionSuffix = account.no_version_suffix ? null : "/1.1/";
@ -2303,8 +2286,8 @@ public final class Utils implements Constants, TwitterConstants {
cb.setOAuthConsumerKey(prefConsumerKey); cb.setOAuthConsumerKey(prefConsumerKey);
cb.setOAuthConsumerSecret(prefConsumerSecret); cb.setOAuthConsumerSecret(prefConsumerSecret);
} else { } else {
cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_LEGACY);
cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_LEGACY);
} }
final Configuration conf = cb.build(); final Configuration conf = cb.build();
return new OAuthAuthorization(conf.getOAuthConsumerKey(), conf.getOAuthConsumerSecret(), return new OAuthAuthorization(conf.getOAuthConsumerKey(), conf.getOAuthConsumerSecret(),
@ -2341,8 +2324,8 @@ public final class Utils implements Constants, TwitterConstants {
// Here I use old consumer key/secret because it's default // Here I use old consumer key/secret because it's default
// key for older // key for older
// versions // versions
final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_LEGACY);
final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_LEGACY);
final ConfigurationBuilder cb = new ConfigurationBuilder(); final ConfigurationBuilder cb = new ConfigurationBuilder();
final String apiUrlFormat = c.getString(c.getColumnIndex(Accounts.API_URL_FORMAT)); final String apiUrlFormat = c.getString(c.getColumnIndex(Accounts.API_URL_FORMAT));
final String consumerKey = trim(c.getString(c.getColumnIndex(Accounts.CONSUMER_KEY))); final String consumerKey = trim(c.getString(c.getColumnIndex(Accounts.CONSUMER_KEY)));
@ -2366,8 +2349,8 @@ public final class Utils implements Constants, TwitterConstants {
cb.setOAuthConsumerKey(prefConsumerKey); cb.setOAuthConsumerKey(prefConsumerKey);
cb.setOAuthConsumerSecret(prefConsumerSecret); cb.setOAuthConsumerSecret(prefConsumerSecret);
} else { } else {
cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_LEGACY);
cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_LEGACY);
} }
final Configuration conf = cb.build(); final Configuration conf = cb.build();
final String token = c.getString(c.getColumnIndexOrThrow(Accounts.OAUTH_TOKEN)); final String token = c.getString(c.getColumnIndexOrThrow(Accounts.OAUTH_TOKEN));

View File

@ -201,8 +201,8 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); .getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
// Here I use old consumer key/secret because it's default key for // Here I use old consumer key/secret because it's default key for
// older versions // older versions
final String pref_consumer_key = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); final String pref_consumer_key = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_LEGACY);
final String pref_consumer_secret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); final String pref_consumer_secret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_LEGACY);
values.put(Accounts.CONSUMER_KEY, trim(pref_consumer_key)); values.put(Accounts.CONSUMER_KEY, trim(pref_consumer_key));
values.put(Accounts.CONSUMER_SECRET, trim(pref_consumer_secret)); values.put(Accounts.CONSUMER_SECRET, trim(pref_consumer_secret));
db.update(Accounts.TABLE_NAME, values, null, null); db.update(Accounts.TABLE_NAME, values, null, null);

View File

@ -44,6 +44,8 @@ import org.mariotaku.twidere.model.ParcelableAccount.ParcelableCredentials;
import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.util.MediaPreviewUtils; import org.mariotaku.twidere.util.MediaPreviewUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper; import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.TwitterAPIUtils;
import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.Utils;
import java.io.IOException; import java.io.IOException;
@ -54,13 +56,6 @@ import java.util.Locale;
import twitter4j.TwitterException; import twitter4j.TwitterException;
import static org.mariotaku.twidere.util.TwidereLinkify.PATTERN_TWITTER_PROFILE_IMAGES;
import static org.mariotaku.twidere.util.TwitterAPIUtils.getImageLoaderHttpClient;
import static org.mariotaku.twidere.util.TwitterAPIUtils.getRedirectedHttpResponse;
import static org.mariotaku.twidere.util.Utils.getNormalTwitterProfileImage;
import static org.mariotaku.twidere.util.Utils.getTwitterAuthorization;
import static org.mariotaku.twidere.util.Utils.getTwitterProfileImageOfSize;
public class TwidereImageDownloader extends BaseImageDownloader implements Constants { public class TwidereImageDownloader extends BaseImageDownloader implements Constants {
private final Context mContext; private final Context mContext;
@ -85,7 +80,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
} }
public void reloadConnectivitySettings() { public void reloadConnectivitySettings() {
mClient = getImageLoaderHttpClient(mContext); mClient = TwitterAPIUtils.getDefaultHttpClient(mContext);
mFastImageLoading = mPreferences.getBoolean(KEY_FAST_IMAGE_LOADING); mFastImageLoading = mPreferences.getBoolean(KEY_FAST_IMAGE_LOADING);
if (mUseThumbor && mPreferences.getBoolean(KEY_THUMBOR_ENABLED)) { if (mUseThumbor && mPreferences.getBoolean(KEY_THUMBOR_ENABLED)) {
final String address = mPreferences.getString(KEY_THUMBOR_ADDRESS, null); final String address = mPreferences.getString(KEY_THUMBOR_ADDRESS, null);
@ -112,7 +107,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
try { try {
final String mediaUrl = media != null ? media.media_url : uriString; final String mediaUrl = media != null ? media.media_url : uriString;
if (isTwitterProfileImage(uriString)) { if (isTwitterProfileImage(uriString)) {
final String replaced = getTwitterProfileImageOfSize(mediaUrl, mTwitterProfileImageSize); final String replaced = Utils.getTwitterProfileImageOfSize(mediaUrl, mTwitterProfileImageSize);
return getStreamFromNetworkInternal(replaced, extras); return getStreamFromNetworkInternal(replaced, extras);
} else } else
return getStreamFromNetworkInternal(mediaUrl, extras); return getStreamFromNetworkInternal(mediaUrl, extras);
@ -120,7 +115,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
final int statusCode = e.getStatusCode(); final int statusCode = e.getStatusCode();
if (statusCode != -1 && isTwitterProfileImage(uriString) && !uriString.contains("_normal.")) { if (statusCode != -1 && isTwitterProfileImage(uriString) && !uriString.contains("_normal.")) {
try { try {
return getStreamFromNetworkInternal(getNormalTwitterProfileImage(uriString), extras); return getStreamFromNetworkInternal(Utils.getNormalTwitterProfileImage(uriString), extras);
} catch (final TwitterException ignored) { } catch (final TwitterException ignored) {
} }
} }
@ -159,7 +154,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
if (isTwitterAuthRequired(uri) && extras instanceof AccountExtra) { if (isTwitterAuthRequired(uri) && extras instanceof AccountExtra) {
final AccountExtra accountExtra = (AccountExtra) extras; final AccountExtra accountExtra = (AccountExtra) extras;
account = ParcelableAccount.getCredentials(mContext, accountExtra.account_id); account = ParcelableAccount.getCredentials(mContext, accountExtra.account_id);
auth = getTwitterAuthorization(mContext, accountExtra.account_id); auth = Utils.getTwitterAuthorization(mContext, accountExtra.account_id);
} else { } else {
account = null; account = null;
auth = null; auth = null;
@ -172,7 +167,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
additionalHeaders.add(Pair.create("Accept", "image/webp, */*")); additionalHeaders.add(Pair.create("Accept", "image/webp, */*"));
} }
final RestResponse resp = getRedirectedHttpResponse(mClient, modifiedUri, uriString, auth, additionalHeaders); final RestResponse resp = TwitterAPIUtils.getRedirectedHttpResponse(mClient, modifiedUri, uriString, auth, additionalHeaders);
final TypedData body = resp.getBody(); final TypedData body = resp.getBody();
return new ContentLengthInputStream(body.stream(), (int) body.length()); return new ContentLengthInputStream(body.stream(), (int) body.length());
} }
@ -184,7 +179,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const
private boolean isTwitterProfileImage(final String uriString) { private boolean isTwitterProfileImage(final String uriString) {
if (TextUtils.isEmpty(uriString)) return false; if (TextUtils.isEmpty(uriString)) return false;
return PATTERN_TWITTER_PROFILE_IMAGES.matcher(uriString).matches(); return TwidereLinkify.PATTERN_TWITTER_PROFILE_IMAGES.matcher(uriString).matches();
} }
private boolean isTwitterUri(final Uri uri) { private boolean isTwitterUri(final Uri uri) {

View File

@ -23,6 +23,7 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log; import android.util.Log;
import android.util.LruCache;
import org.apache.http.conn.util.InetAddressUtils; import org.apache.http.conn.util.InetAddressUtils;
import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.Constants;
@ -46,14 +47,11 @@ import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import twitter4j.http.HostAddressResolver; import twitter4j.http.HostAddressResolver;
import static android.text.TextUtils.isEmpty;
public class TwidereHostAddressResolver implements Constants, HostAddressResolver { public class TwidereHostAddressResolver implements Constants, HostAddressResolver {
private static final String RESOLVER_LOGTAG = "Twidere.Host"; private static final String RESOLVER_LOGTAG = "Twidere.Host";
@ -62,22 +60,16 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve
private final SharedPreferences mHostMapping, mPreferences; private final SharedPreferences mHostMapping, mPreferences;
private final HostsFileParser mSystemHosts = new HostsFileParser(); private final HostsFileParser mSystemHosts = new HostsFileParser();
private final HostCache mHostCache = new HostCache(512); private final LruCache<String, InetAddress[]> mHostCache = new LruCache<>(512);
private final boolean mLocalMappingOnly;
private final String mDnsAddress; private final String mDnsAddress;
private Resolver mDns; private Resolver mDns;
public TwidereHostAddressResolver(final Context context) { public TwidereHostAddressResolver(final Context context) {
this(context, false);
}
public TwidereHostAddressResolver(final Context context, final boolean localOnly) {
mHostMapping = context.getSharedPreferences(HOST_MAPPING_PREFERENCES_NAME, Context.MODE_PRIVATE); mHostMapping = context.getSharedPreferences(HOST_MAPPING_PREFERENCES_NAME, Context.MODE_PRIVATE);
mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final String address = mPreferences.getString(KEY_DNS_SERVER, DEFAULT_DNS_SERVER_ADDRESS); final String address = mPreferences.getString(KEY_DNS_SERVER, DEFAULT_DNS_SERVER_ADDRESS);
mDnsAddress = isValidIpAddress(address) ? address : DEFAULT_DNS_SERVER_ADDRESS; mDnsAddress = isValidIpAddress(address) ? address : DEFAULT_DNS_SERVER_ADDRESS;
mLocalMappingOnly = localOnly;
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -91,15 +83,16 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve
return resolveInternal(host, host); return resolveInternal(host, host);
} }
@NonNull
private InetAddress[] resolveInternal(String originalHost, String host) throws IOException { private InetAddress[] resolveInternal(String originalHost, String host) throws IOException {
if (isValidIpAddress(host)) return fromAddressString(originalHost, host); if (isValidIpAddress(host)) return fromAddressString(originalHost, host);
// First, I'll try to load address cached. // First, I'll try to load address cached.
if (mHostCache.containsKey(host)) { final InetAddress[] cachedHostAddr = mHostCache.get(host);
final InetAddress[] hostAddr = mHostCache.get(host); if (cachedHostAddr != null) {
if (Utils.isDebugBuild()) { if (Utils.isDebugBuild()) {
Log.d(RESOLVER_LOGTAG, "Got cached " + Arrays.toString(hostAddr)); Log.d(RESOLVER_LOGTAG, "Got cached " + Arrays.toString(cachedHostAddr));
return cachedHostAddr;
} }
return hostAddr;
} }
// Then I'll try to load from custom host mapping. // Then I'll try to load from custom host mapping.
// Stupid way to find top domain, but really fast. // Stupid way to find top domain, but really fast.
@ -209,22 +202,7 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve
} }
private static boolean isValidIpAddress(final String address) { private static boolean isValidIpAddress(final String address) {
if (isEmpty(address)) return false;
return InetAddressUtils.isIPv4Address(address) || InetAddressUtils.isIPv6Address(address); return InetAddressUtils.isIPv4Address(address) || InetAddressUtils.isIPv6Address(address);
} }
private static class HostCache extends LinkedHashMap<String, InetAddress[]> {
private static final long serialVersionUID = -9216545511009449147L;
HostCache(final int initialCapacity) {
super(initialCapacity);
}
@Override
public InetAddress[] put(final String key, final InetAddress... value) {
if (value == null) return null;
return super.put(key, value);
}
}
} }